From 49d826f6674d9ce8dea47af920888028dd6e715c Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 25 Sep 2023 11:48:27 +0100 Subject: [PATCH 001/497] Ruby: Add a query for CSRF protection not enabled Specifically in Rails apps, we look for root ActionController classes without a call to `protect_from_forgery`. --- .../ruby/frameworks/ActionController.qll | 80 +++++++++++-------- .../cwe-352/CSRFProtectionNotEnabled.qhelp | 65 +++++++++++++++ .../cwe-352/CSRFProtectionNotEnabled.ql | 23 ++++++ .../examples/ProtectFromForgeryGood.rb | 4 + .../cwe-352/CSRFProtectionNotEnabled.expected | 1 + .../cwe-352/CSRFProtectionNotEnabled.qlref | 1 + .../alternative_root_controller.rb | 3 + 7 files changed, 144 insertions(+), 33 deletions(-) create mode 100644 ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp create mode 100644 ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql create mode 100644 ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb create mode 100644 ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected create mode 100644 ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref create mode 100644 ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index be1df5066e1..5500eca0607 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -21,6 +21,35 @@ private import codeql.ruby.dataflow.internal.DataFlowDispatch module ActionController { // TODO: move the rest of this file inside this module. import codeql.ruby.frameworks.actioncontroller.Filters + + /** + * An ActionController class which sits at the top of the class hierarchy. + * In other words, it does not subclass any other class in source code. + */ + class RootController extends ActionControllerClass { + RootController() { + not exists(ActionControllerClass parent | this != parent and this = parent.getADescendent()) + } + } + + /** + * A call to `protect_from_forgery`. + */ + class ProtectFromForgeryCall extends CsrfProtectionSetting::Range, DataFlow::CallNode { + ProtectFromForgeryCall() { + this = actionControllerInstance().getAMethodCall("protect_from_forgery") + } + + private string getWithValueText() { + result = this.getKeywordArgument("with").getConstantValue().getSymbol() + } + + // Calls without `with: :exception` can allow for bypassing CSRF protection + // in some scenarios. + override boolean getVerificationSetting() { + if this.getWithValueText() = "exception" then result = true else result = false + } + } } /** @@ -38,18 +67,10 @@ module ActionController { */ class ActionControllerClass extends DataFlow::ClassNode { ActionControllerClass() { - this = - [ - DataFlow::getConstant("ActionController").getConstant("Base"), - // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we - // treat it separately in case the `ApplicationController` definition is not in the database. - DataFlow::getConstant("ApplicationController"), - // ActionController::Metal technically doesn't contain all of the - // methods available in Base, such as those for rendering views. - // However we prefer to be over-sensitive in this case in order to find - // more results. - DataFlow::getConstant("ActionController").getConstant("Metal") - ].getADescendentModule() + this = DataFlow::getConstant("ApplicationController").getADescendentModule() + or + this = actionControllerBaseClass().getADescendentModule() and + not exists(DataFlow::ModuleNode m | m = actionControllerBaseClass().asModule() | this = m) } /** @@ -73,6 +94,20 @@ class ActionControllerClass extends DataFlow::ClassNode { } } +private DataFlow::ConstRef actionControllerBaseClass() { + result = + [ + // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we + // treat it separately in case the `ApplicationController` definition is not in the database. + DataFlow::getConstant("ActionController").getConstant("Base"), + // ActionController::Metal technically doesn't contain all of the + // methods available in Base, such as those for rendering views. + // However we prefer to be over-sensitive in this case in order to find + // more results. + DataFlow::getConstant("ActionController").getConstant("Metal") + ] +} + private API::Node actionControllerInstance() { result = any(ActionControllerClass cls).getSelf().track() } @@ -406,27 +441,6 @@ class ActionControllerSkipForgeryProtectionCall extends CsrfProtectionSetting::R override boolean getVerificationSetting() { result = false } } -/** - * A call to `protect_from_forgery`. - */ -private class ActionControllerProtectFromForgeryCall extends CsrfProtectionSetting::Range, - DataFlow::CallNode -{ - ActionControllerProtectFromForgeryCall() { - this = actionControllerInstance().getAMethodCall("protect_from_forgery") - } - - private string getWithValueText() { - result = this.getKeywordArgument("with").getConstantValue().getSymbol() - } - - // Calls without `with: :exception` can allow for bypassing CSRF protection - // in some scenarios. - override boolean getVerificationSetting() { - if this.getWithValueText() = "exception" then result = true else result = false - } -} - /** * A call to `send_file`, which sends the file at the given path to the client. */ diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp new file mode 100644 index 00000000000..9b8944b1d65 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.qhelp @@ -0,0 +1,65 @@ + + + + +

+ Cross-site request forgery (CSRF) is a type of vulnerability in which an + attacker is able to force a user to carry out an action that the user did + not intend. +

+ +

+ The attacker tricks an authenticated user into submitting a request to the + web application. Typically this request will result in a state change on + the server, such as changing the user's password. The request can be + initiated when the user visits a site controlled by the attacker. If the + web application relies only on cookies for authentication, or on other + credentials that are automatically included in the request, then this + request will appear as legitimate to the server. +

+ +

+ A common countermeasure for CSRF is to generate a unique token to be + included in the HTML sent from the server to a user. This token can be + used as a hidden field to be sent back with requests to the server, where + the server can then check that the token is valid and associated with the + relevant user session. +

+
+ + +

+ In the Rails web framework, CSRF protection is enabled by the adding a call to + the protect_from_forgery method inside an + ActionController class. Typically this is done in the + ApplicationController class, or an equivalent class from which + other controller classes are subclassed. + + The default behaviour of this method is to null the session when an invalid + CSRF token is provided. This may not be sufficient to avoid a CSRF + vulnerability - for example if parts of the session are memoized. Calling + protect_from_forgery with: :exception can help to avoid this + by raising an exception on an invalid CSRF token instead. +

+
+ + +

+ The following example shows a case where CSRF protection is enabled with + a secure request handling strategy of :exception. +

+ + + +
+ + +
  • Wikipedia: Cross-site request forgery
  • +
  • OWASP: Cross-site request forgery
  • +
  • Securing Rails Applications: Cross-Site Request Forgery (CSRF)
  • +
  • Veracode: When Rails' protect_from_forgery Fails.
  • +
    + +
    diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql new file mode 100644 index 00000000000..4210d798863 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -0,0 +1,23 @@ +/** + * @name CSRF protection not enabled + * @description Not enabling CSRF protection may make the application + * vulnerable to a Cross-Site Request Forgery (CSRF) attack. + * @kind problem + * @problem.severity warning + * @security-severity 8.8 + * @precision high + * @id rb/csrf-protection-not-enabled + * @tags security + * external/cwe/cwe-352 + */ + +import codeql.ruby.AST +import codeql.ruby.Concepts +import codeql.ruby.frameworks.ActionController + +from ActionController::RootController c +where + not exists(ActionController::ProtectFromForgeryCall call | + c.getSelf().flowsTo(call.getReceiver()) + ) +select c, "Potential CSRF vulnerability due to forgery protection not being enabled" diff --git a/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb b/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb new file mode 100644 index 00000000000..ecab2c8ea45 --- /dev/null +++ b/ruby/ql/src/queries/security/cwe-352/examples/ProtectFromForgeryGood.rb @@ -0,0 +1,4 @@ +class ApplicationController < ActionController::Base + protect_from_forgery with: :exception +end + \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected new file mode 100644 index 00000000000..7fe8b3490a9 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected @@ -0,0 +1 @@ +| railsapp/app/controllers/alternative_root_controller.rb:1:1:3:3 | AlternativeRootController | Potential CSRF vulnerability due to forgery protection not being enabled | diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref new file mode 100644 index 00000000000..8e9e894fe51 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.qlref @@ -0,0 +1 @@ +queries/security/cwe-352/CSRFProtectionNotEnabled.ql \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb new file mode 100644 index 00000000000..8cbf31529c1 --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/alternative_root_controller.rb @@ -0,0 +1,3 @@ +class AlternativeRootController < ActionController::Base + # BAD: no protect_from_forgery call +end \ No newline at end of file From 6d6f8ba512b4bdba57a09b6815aed8228a9425c4 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 25 Sep 2023 13:46:50 +0100 Subject: [PATCH 002/497] Ruby: Make CSRF query more sensitive Generate an alert for every controller class that doesn't have or inherity a `protect_from_forgery` setting. --- .../cwe-352/CSRFProtectionNotEnabled.ql | 20 +++++++++++++------ .../cwe-352/CSRFProtectionNotEnabled.expected | 3 ++- .../controllers/subscriptions_controller.rb | 3 +++ .../app/controllers/tags_controller.rb | 2 ++ 4 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb create mode 100644 ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql index 4210d798863..235798e66d4 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -15,9 +15,17 @@ import codeql.ruby.AST import codeql.ruby.Concepts import codeql.ruby.frameworks.ActionController -from ActionController::RootController c -where - not exists(ActionController::ProtectFromForgeryCall call | - c.getSelf().flowsTo(call.getReceiver()) - ) -select c, "Potential CSRF vulnerability due to forgery protection not being enabled" +/** + * Holds if a call to `protect_from_forgery` is made in the controller class `definedIn`, + * which is inherited by the controller class `child`. + */ +private predicate protectFromForgeryCall( + ActionControllerClass definedIn, ActionControllerClass child, + ActionController::ProtectFromForgeryCall call +) { + definedIn.getSelf().flowsTo(call.getReceiver()) and child = definedIn.getADescendent() +} + +from ActionControllerClass c +where not protectFromForgeryCall(_, c, _) +select c, "Potential CSRF vulnerability due to forgery protection not being enabled." diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected index 7fe8b3490a9..52e2b1aaa4b 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected @@ -1 +1,2 @@ -| railsapp/app/controllers/alternative_root_controller.rb:1:1:3:3 | AlternativeRootController | Potential CSRF vulnerability due to forgery protection not being enabled | +| railsapp/app/controllers/alternative_root_controller.rb:1:1:3:3 | AlternativeRootController | Potential CSRF vulnerability due to forgery protection not being enabled. | +| railsapp/app/controllers/tags_controller.rb:1:1:2:3 | TagsController | Potential CSRF vulnerability due to forgery protection not being enabled. | diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb new file mode 100644 index 00000000000..9e1cfcf9a1e --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/subscriptions_controller.rb @@ -0,0 +1,3 @@ +class SubscriptionsController < AlternativeRootController + protect_from_forgery with: :exception +end \ No newline at end of file diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb new file mode 100644 index 00000000000..4c3f586b9fe --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/app/controllers/tags_controller.rb @@ -0,0 +1,2 @@ +class TagsController < AlternativeRootController +end \ No newline at end of file From 581072721cac3d8e4e2ff42cbf0005af58b2f06d Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 25 Sep 2023 13:57:30 +0100 Subject: [PATCH 003/497] Ruby: Add change note --- .../change-notes/2023-09-25-csrf-protection-not-enabled.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md diff --git a/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md new file mode 100644 index 00000000000..e8e7ac54e38 --- /dev/null +++ b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new experimental query, `rb/csrf-protection-not-enabled`, to detect cases where Cross-Site Request Forgery protection is not enabled in Ruby on Rails controllers. From 3c69ab10f25d91107f78f5c6fa31c741fd1b70c8 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 29 Sep 2023 15:35:16 +0100 Subject: [PATCH 004/497] Ruby: Restrict rb/csrf-protection-not-enabled This query only applies to codebases using Ruby on Rails < 5.2, or where there is no call to `csrf_meta_tags` in the base ERb template. --- .../ql/lib/codeql/ruby/frameworks/Gemfile.qll | 243 ++++++++++++++++++ .../cwe-352/CSRFProtectionNotEnabled.ql | 20 +- 2 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll new file mode 100644 index 00000000000..526e8cea736 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll @@ -0,0 +1,243 @@ +private import codeql.ruby.AST + +/** + * Provides classes and predicates for Gemfiles, including version constraint logic. + */ +module Gemfile { + private File getGemfile() { result.getBaseName() = "Gemfile" } + + /** + * A call to `gem` inside a gemfile. This defines a dependency. For example: + * + * ```rb + * gem "actionpack", "~> 7.0.0" + * ``` + * + * This call defines a dependency on the `actionpack` gem, with version constraint `~> 7.0.0`. + * For detail on version constraints, see the `VersionConstraint` class. + */ + class Gem extends MethodCall { + Gem() { this.getMethodName() = "gem" and this.getFile() = getGemfile() } + + string getName() { result = this.getArgument(0).getConstantValue().getStringlikeValue() } + + /** + * Gets the `i`th version string for this gem. A single `gem` call may have multiple version constraints, for example: + * + * ```rb + * gem "json", "3.4.0", ">= 3.0" + * ``` + */ + string getVersionString(int i) { + result = this.getArgument(i + 1).getConstantValue().getStringlikeValue() + } + + /** + * Gets a version constraint defined by this call. + */ + VersionConstraint getAVersionConstraint() { result = this.getVersionString(_) } + } + + private newtype TComparator = + TEq() or + TNeq() or + TGt() or + TLt() or + TGeq() or + TLeq() or + TPGeq() + + /** + * A comparison operator in a version constraint. + */ + private class Comparator extends TComparator { + string toString() { result = this.toSourceString() } + + /** + * The representation of the comparator in source code. + * This is defined separately so that we can change the `toString` implementation without breaking `parseConstraint`. + */ + string toSourceString() { + this = TEq() and result = "=" + or + this = TNeq() and result = "!=" + or + this = TGt() and result = ">" + or + this = TLt() and result = "<" + or + this = TGeq() and result = ">=" + or + this = TLeq() and result = "<=" + or + this = TPGeq() and result = "~>" + } + } + + bindingset[s] + private predicate parseExactVersion(string s, string version) { + version = s.regexpCapture("\\s*(\\d+\\.\\d+\\.\\d+)\\s*", 1) + } + + bindingset[s] + private predicate parseConstraint(string s, Comparator c, string version) { + exists(string pattern | pattern = "(=|!=|>=?|<=?|~>)\\s+(.+)" | + c.toSourceString() = s.regexpCapture(pattern, 1) and version = s.regexpCapture(pattern, 2) + ) + } + + class VersionConstraint extends string { + Comparator comp; + string versionString; + + VersionConstraint() { + this = any(Gem g).getVersionString(_) and + ( + parseConstraint(this, comp, versionString) + or + parseExactVersion(this, versionString) and comp = TEq() + ) + } + + /** + * Gets the string defining the version number used in this constraint. + */ + string getVersionString() { result = versionString } + + /** + * Gets the `Version` used in this constraint. + */ + Version getVersion() { result = this.getVersionString() } + + /** + * Holds if `other` is a version which is strictly greater than the range described by this version constraint. + */ + bindingset[other] + predicate before(string other) { + comp = TEq() and this.getVersion().before(other) + or + comp = TLt() and + (this.getVersion().before(other) or this.getVersion().equal(other)) + or + comp = TLeq() and this.getVersion().before(other) + or + // ~> x.y.z <=> >= x.y.z && < x.(y+1).0 + // ~> x.y <=> >= x.y && < (x+1).0 + comp = TPGeq() and + exists(int thisMajor, int thisMinor, int otherMajor, int otherMinor | + thisMajor = this.getVersion().getMajor() and + thisMinor = this.getVersion().getMinor() and + exists(string maj, string mi | normalizeSemver(other, _, maj, mi, _) | + otherMajor = maj.toInt() and otherMinor = mi.toInt() + ) + | + exists(this.getVersion().getPatch()) and + ( + thisMajor < otherMajor + or + thisMajor = otherMajor and + thisMinor < otherMinor + ) + or + not exists(this.getVersion().getPatch()) and + thisMajor < otherMajor + ) + // if the comparator is > or >=, it has no upper bound and therefore isn't guaranteed to be before any other version. + } + } + + /** + * A version number in a version constraint. For example, in the following code + * + * ```rb + * gem "json", ">= 3.4.5" + * ``` + * + * The version is `3.4.5`. + */ + private class Version extends string { + string normalized; + + Version() { + this = any(Gem c).getAVersionConstraint().getVersionString() and + normalized = normalizeSemver(this) + } + + /** + * Holds if this version is strictly before the version defined by `other`. + */ + bindingset[other] + predicate before(string other) { normalized < normalizeSemver(other) } + + /** + * Holds if this versino is equal to the version defined by `other`. + */ + bindingset[other] + predicate equal(string other) { normalized = normalizeSemver(other) } + + /** + * Holds if this version is strictly after the version defined by `other`. + */ + bindingset[other] + predicate after(string other) { normalized > normalizeSemver(other) } + + /** + * Holds if this version defines a patch number. + */ + predicate hasPatch() { exists(getPatch(this)) } + + /** + * Gets the major number of this version. + */ + int getMajor() { result = getMajor(normalized).toInt() } + + /** + * Gets the minor number of this version, if it exists. + */ + int getMinor() { result = getMinor(normalized).toInt() } + + /** + * Gets the patch number of this version, if it exists. + */ + int getPatch() { result = getPatch(normalized).toInt() } + } + + /** + * Normalizes a SemVer string such that the lexicographical ordering + * of two normalized strings is consistent with the SemVer ordering. + * + * Pre-release information and build metadata is not supported. + */ + bindingset[orig] + private predicate normalizeSemver( + string orig, string normalized, string major, string minor, string patch + ) { + major = getMajor(orig) and + ( + minor = getMinor(orig) + or + not exists(getMinor(orig)) and minor = "0" + ) and + ( + patch = getPatch(orig) + or + not exists(getPatch(orig)) and patch = "0" + ) and + normalized = leftPad(major) + "." + leftPad(minor) + "." + leftPad(patch) + } + + bindingset[orig] + private string normalizeSemver(string orig) { normalizeSemver(orig, result, _, _, _) } + + bindingset[s] + private string getMajor(string s) { result = s.regexpCapture("(\\d+).*", 1) } + + bindingset[s] + private string getMinor(string s) { result = s.regexpCapture("(\\d+)\\.(\\d+).*", 2) } + + bindingset[s] + private string getPatch(string s) { result = s.regexpCapture("(\\d+)\\.(\\d+)\\.(\\d+).*", 3) } + + bindingset[str] + private string leftPad(string str) { result = ("000" + str).suffix(str.length()) } +} diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql index 235798e66d4..8bbb8d79116 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -14,6 +14,7 @@ import codeql.ruby.AST import codeql.ruby.Concepts import codeql.ruby.frameworks.ActionController +import codeql.ruby.frameworks.Gemfile /** * Holds if a call to `protect_from_forgery` is made in the controller class `definedIn`, @@ -26,6 +27,23 @@ private predicate protectFromForgeryCall( definedIn.getSelf().flowsTo(call.getReceiver()) and child = definedIn.getADescendent() } +/** + * Holds if the Gemfile for this application specifies a version of "rails" < 3.0.0. + * Rails versions from 3.0.0 onwards enable CSRF protection by default. + */ +private predicate railsPreVersion3() { + exists(Gemfile::Gem g | g.getName() = "rails" and g.getAVersionConstraint().before("5.2")) +} + from ActionControllerClass c -where not protectFromForgeryCall(_, c, _) +where + not protectFromForgeryCall(_, c, _) and + // Rails versions prior to 3.0.0 require CSRF protection to be explicitly enabled. + // For later versions, there must exist a call to `csrf_meta_tags` in every HTML response. + // We currently just check for a call to this method anywhere in the codebase. + ( + railsPreVersion3() + or + not any(MethodCall m).getMethodName() = "csrf_meta_tags" + ) select c, "Potential CSRF vulnerability due to forgery protection not being enabled." From f19a5a9837a87085be8b26680541fe6dddddd9ad Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 12:06:51 +0100 Subject: [PATCH 005/497] Ruby: Add tests for Gemfile modeling --- .../library-tests/frameworks/gemfile/Gemfile | 9 +++++++++ .../frameworks/gemfile/Gemfile.expected | 8 ++++++++ .../library-tests/frameworks/gemfile/Gemfile.ql | 17 +++++++++++++++++ .../frameworks/gemfile/not_gemfile.rb | 1 + 4 files changed, 35 insertions(+) create mode 100644 ruby/ql/test/library-tests/frameworks/gemfile/Gemfile create mode 100644 ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected create mode 100644 ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql create mode 100644 ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile new file mode 100644 index 00000000000..2e3f2313bfb --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile @@ -0,0 +1,9 @@ +source "https://rubygems.org" + +gem "rails", "7.0.0" +gem "json", "~> 2.6.0" +gem "jwt" + +gem "loofah", ">= 2" + +gem "invalid-version", "abc" diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected new file mode 100644 index 00000000000..9d87e77087e --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.expected @@ -0,0 +1,8 @@ +gemCalls +| Gemfile:3:1:3:20 | call to gem | rails | 7.0.0 | 7.0.0 | +| Gemfile:4:1:4:22 | call to gem | json | ~> 2.6.0 | 2.6.0 | +| Gemfile:7:1:7:20 | call to gem | loofah | >= 2 | 2 | +versionBefore +| 2 | 2.6.0 | +| 2 | 7.0.0 | +| 2.6.0 | 7.0.0 | diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql new file mode 100644 index 00000000000..487d224777b --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/Gemfile.ql @@ -0,0 +1,17 @@ +import codeql.ruby.frameworks.Gemfile + +query predicate gemCalls( + Gemfile::Gem gem, string name, Gemfile::VersionConstraint constraint, string version +) { + name = gem.getName() and + constraint = gem.getAVersionConstraint() and + version = constraint.getVersion() +} + +query predicate versionBefore(string before, string after) { + exists(Gemfile::VersionConstraint c1, Gemfile::VersionConstraint c2 | + c1.getVersion() = before and c2.getVersion() = after + | + c1.getVersion().before(after) + ) +} diff --git a/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb b/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb new file mode 100644 index 00000000000..a526277026c --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/gemfile/not_gemfile.rb @@ -0,0 +1 @@ +gem "this-gem-not-in-gemfile", "1.2" From 0597b2ed1b3b77bcb266a957d074bdcfce82e24b Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 12:13:59 +0100 Subject: [PATCH 006/497] Ruby: recognise csrf_meta_tag csrf_meta_tag is an alias for csrf_meta_tags, retained for backwards compatibility. --- .../ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql index 8bbb8d79116..cd7961d2f9a 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -44,6 +44,6 @@ where ( railsPreVersion3() or - not any(MethodCall m).getMethodName() = "csrf_meta_tags" + not any(MethodCall m).getMethodName() = ["csrf_meta_tags", "csrf_meta_tag"] ) select c, "Potential CSRF vulnerability due to forgery protection not being enabled." From 3499d169f9173223fa3be5f7e7227baa423e0473 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 12:20:23 +0100 Subject: [PATCH 007/497] Ruby: Add missing QLDoc --- ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll index 526e8cea736..c71a783387f 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll @@ -1,3 +1,7 @@ +/** + * Provides classes and predicates for Gemfiles, including version constraint logic. + */ + private import codeql.ruby.AST /** @@ -19,6 +23,9 @@ module Gemfile { class Gem extends MethodCall { Gem() { this.getMethodName() = "gem" and this.getFile() = getGemfile() } + /** + * Gets the name of the gem in this version constraint. + */ string getName() { result = this.getArgument(0).getConstantValue().getStringlikeValue() } /** @@ -86,6 +93,10 @@ module Gemfile { ) } + /** + * A version constraint in a `gem` call. This consists of a version number and an optional comparator, for example + * `>= 1.2.3`. + */ class VersionConstraint extends string { Comparator comp; string versionString; From 1fbf177b546a1bb73178be73757e2eb352566c08 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 12:21:34 +0100 Subject: [PATCH 008/497] Ruby: QLDoc fix --- ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll index c71a783387f..83ebc27100a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Gemfile.qll @@ -61,7 +61,7 @@ module Gemfile { string toString() { result = this.toSourceString() } /** - * The representation of the comparator in source code. + * Gets the representation of the comparator in source code. * This is defined separately so that we can change the `toString` implementation without breaking `parseConstraint`. */ string toSourceString() { From 32b775fdc36c2cf39daf3737fe5fadc74f3cf5eb Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 15:37:32 +0100 Subject: [PATCH 009/497] Ruby: reduce duplicate alerts for csrf query Only generate an alert on the top-most vulnerable Rails controller in the controller tree. --- .../queries/security/cwe-352/CSRFProtectionNotEnabled.ql | 6 ++++-- .../security/cwe-352/CSRFProtectionNotEnabled.expected | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql index cd7961d2f9a..f3631eb4556 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -18,7 +18,7 @@ import codeql.ruby.frameworks.Gemfile /** * Holds if a call to `protect_from_forgery` is made in the controller class `definedIn`, - * which is inherited by the controller class `child`. + * which is inherited by the controller class `child`. These classes may be the same. */ private predicate protectFromForgeryCall( ActionControllerClass definedIn, ActionControllerClass child, @@ -45,5 +45,7 @@ where railsPreVersion3() or not any(MethodCall m).getMethodName() = ["csrf_meta_tags", "csrf_meta_tag"] - ) + ) and + // Only generate alerts for the topmost controller in the tree. + not exists(ActionControllerClass parent | c = parent.getAnImmediateDescendent()) select c, "Potential CSRF vulnerability due to forgery protection not being enabled." diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected index 52e2b1aaa4b..50da7dc0766 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionNotEnabled.expected @@ -1,2 +1 @@ | railsapp/app/controllers/alternative_root_controller.rb:1:1:3:3 | AlternativeRootController | Potential CSRF vulnerability due to forgery protection not being enabled. | -| railsapp/app/controllers/tags_controller.rb:1:1:2:3 | TagsController | Potential CSRF vulnerability due to forgery protection not being enabled. | From 3ee425cc477d70382634dd6aedab98dd0dee3351 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 13 Oct 2023 11:52:39 +0100 Subject: [PATCH 010/497] Ruby: Identify ActionController::API `ActionController::API < ActionController::Base` is a base controller class, so we should recognise it as such. --- ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 5500eca0607..adeaf79fe17 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -100,11 +100,11 @@ private DataFlow::ConstRef actionControllerBaseClass() { // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we // treat it separately in case the `ApplicationController` definition is not in the database. DataFlow::getConstant("ActionController").getConstant("Base"), - // ActionController::Metal technically doesn't contain all of the + // ActionController::Metal and ActionController::API technically don't contain all of the // methods available in Base, such as those for rendering views. - // However we prefer to be over-sensitive in this case in order to find - // more results. - DataFlow::getConstant("ActionController").getConstant("Metal") + // However we prefer to be over-sensitive in this case in order to find more results. + DataFlow::getConstant("ActionController").getConstant("Metal"), + DataFlow::getConstant("ActionController").getConstant("API") ] } From 081c1201edd177cbfa7d049e99db823210fc8784 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 17 Oct 2023 12:36:28 +0100 Subject: [PATCH 011/497] Ruby: Make csrf query more specific CSRF protection only needs to be explicitly enabled on Rails applications < 5.2 _or_ those that don't include a `load_defaults` call with a version >= 5.2. --- .../cwe-352/CSRFProtectionNotEnabled.ql | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql index f3631eb4556..bef764a6104 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionNotEnabled.ql @@ -15,6 +15,7 @@ import codeql.ruby.AST import codeql.ruby.Concepts import codeql.ruby.frameworks.ActionController import codeql.ruby.frameworks.Gemfile +import codeql.ruby.DataFlow /** * Holds if a call to `protect_from_forgery` is made in the controller class `definedIn`, @@ -28,23 +29,39 @@ private predicate protectFromForgeryCall( } /** - * Holds if the Gemfile for this application specifies a version of "rails" < 3.0.0. - * Rails versions from 3.0.0 onwards enable CSRF protection by default. + * Holds if the Gemfile for this application specifies a version of "rails" or "actionpack" < 5.2. + * Rails versions prior to 5.2 do not enable CSRF protection by default. */ -private predicate railsPreVersion3() { - exists(Gemfile::Gem g | g.getName() = "rails" and g.getAVersionConstraint().before("5.2")) +private predicate railsPreVersion5_2() { + exists(Gemfile::Gem g | + g.getName() = ["rails", "actionpack"] and g.getAVersionConstraint().before("5.2") + ) +} + +private float getRailsConfigDefaultVersion() { + exists(DataFlow::CallNode config, DataFlow::CallNode loadDefaultsCall | + DataFlow::getConstant("Rails") + .getConstant("Application") + .getADescendentModule() + .getAnImmediateReference() + .flowsTo(config.getReceiver()) and + config.getMethodName() = "config" and + loadDefaultsCall.getReceiver() = config and + loadDefaultsCall.getMethodName() = "load_defaults" and + result = loadDefaultsCall.getArgument(0).getConstantValue().getFloat() + ) } from ActionControllerClass c where not protectFromForgeryCall(_, c, _) and - // Rails versions prior to 3.0.0 require CSRF protection to be explicitly enabled. - // For later versions, there must exist a call to `csrf_meta_tags` in every HTML response. - // We currently just check for a call to this method anywhere in the codebase. ( - railsPreVersion3() + // Rails versions prior to 5.2 require CSRF protection to be explicitly enabled. + railsPreVersion5_2() or - not any(MethodCall m).getMethodName() = ["csrf_meta_tags", "csrf_meta_tag"] + // For Rails >= 5.2, CSRF protection is enabled by default if there is a `load_defaults` call in the root application class + // which specifies a version >= 5.2. + not getRailsConfigDefaultVersion() >= 5.2 ) and // Only generate alerts for the topmost controller in the tree. not exists(ActionControllerClass parent | c = parent.getAnImmediateDescendent()) From 7b3f1a098204388cc7915f7ed35d13fbecbbf804 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 23 Feb 2024 11:14:52 +0000 Subject: [PATCH 012/497] Ruby: fix comment --- ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index adeaf79fe17..6fde1705018 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -67,6 +67,8 @@ module ActionController { */ class ActionControllerClass extends DataFlow::ClassNode { ActionControllerClass() { + // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we + // treat it separately in case the `ApplicationController` definition is not in the database. this = DataFlow::getConstant("ApplicationController").getADescendentModule() or this = actionControllerBaseClass().getADescendentModule() and @@ -97,8 +99,6 @@ class ActionControllerClass extends DataFlow::ClassNode { private DataFlow::ConstRef actionControllerBaseClass() { result = [ - // In Rails applications `ApplicationController` typically extends `ActionController::Base`, but we - // treat it separately in case the `ApplicationController` definition is not in the database. DataFlow::getConstant("ActionController").getConstant("Base"), // ActionController::Metal and ActionController::API technically don't contain all of the // methods available in Base, such as those for rendering views. From f5be4079896f13f3b370734ed41cf1a91ce76564 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 23 Feb 2024 11:26:53 +0000 Subject: [PATCH 013/497] Ruby: deprecate old ProtectFromForgeryCall class --- ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 6fde1705018..c8667b2b2f2 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -441,6 +441,11 @@ class ActionControllerSkipForgeryProtectionCall extends CsrfProtectionSetting::R override boolean getVerificationSetting() { result = false } } +/** + * DEPRECATED: Use `ActionController::ProtectFromForgeryCall` instead. + */ +deprecated class ActionControllerProtectFromForgeryCall = ActionController::ProtectFromForgeryCall; + /** * A call to `send_file`, which sends the file at the given path to the client. */ From dd092fd18f2778645896b5c2a557ccfbdd884601 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 26 Feb 2024 10:02:56 +0000 Subject: [PATCH 014/497] Ruby: Fix CSRF test --- .../security/cwe-352/CSRFProtectionDisabled.expected | 2 +- .../security/cwe-352/railsapp/config/application.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected index d80c52afc66..be0df7c9da7 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected +++ b/ruby/ql/test/query-tests/security/cwe-352/CSRFProtectionDisabled.expected @@ -1,5 +1,5 @@ | railsapp/app/controllers/application_controller.rb:5:3:5:22 | call to protect_from_forgery | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/app/controllers/users_controller.rb:4:3:4:47 | call to skip_before_action | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | -| railsapp/config/application.rb:15:5:15:53 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | +| railsapp/config/application.rb:16:5:16:53 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/config/environments/development.rb:5:3:5:51 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | | railsapp/config/environments/production.rb:5:3:5:51 | call to allow_forgery_protection= | Potential CSRF vulnerability due to forgery protection being disabled or weakened. | diff --git a/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb b/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb index 49ccf578c5e..02b349a1630 100644 --- a/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb +++ b/ruby/ql/test/query-tests/security/cwe-352/railsapp/config/application.rb @@ -9,7 +9,8 @@ Bundler.require(*Rails.groups) module Railsapp class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 6.0 + # This defaults version does NOT enable CSRF protection by default. + config.load_defaults 5.1 # BAD: Disabling forgery protection may open the application to CSRF attacks config.action_controller.allow_forgery_protection = false From 9ec17e6338c23a8189334c9082a6f9882f7c7027 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 26 Feb 2024 12:40:40 +0000 Subject: [PATCH 015/497] Shared: Pull out the shared parts of Java's type flow library into a shared module. --- shared/typeflow/codeql/typeflow/TypeFlow.qll | 118 +++++ .../codeql/typeflow/internal/TypeFlowImpl.qll | 445 ++++++++++++++++++ shared/typeflow/qlpack.yml | 7 + 3 files changed, 570 insertions(+) create mode 100644 shared/typeflow/codeql/typeflow/TypeFlow.qll create mode 100644 shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll create mode 100644 shared/typeflow/qlpack.yml diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll new file mode 100644 index 00000000000..5df8e53a914 --- /dev/null +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -0,0 +1,118 @@ +/** + * Provides predicates for giving improved type bounds on expressions. + * + * An inferred bound on the runtime type of an expression can be either exact + * or merely an upper bound. Bounds are only reported if they are likely to be + * better than the static bound, which can happen either if an inferred exact + * type has a subtype or if an inferred upper bound passed through at least one + * explicit or implicit cast that lost type information. + */ + +/** Provides the input specification. */ +signature module TypeFlowInput { + /** + * A node for which type information is available. For example, expressions + * and method declarations. + */ + class TypeFlowNode { + /** Gets a textual representation of this node. */ + string toString(); + + /** Gets the type of this node. */ + Type getType(); + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ); + } + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not + * necessarily functionally determined by `n2`. + */ + predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2); + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is + * functionally determined by `n2`. + */ + predicate step(TypeFlowNode n1, TypeFlowNode n2); + + /** + * Holds if `null` is the only value that flows to `n`. + */ + predicate isNull(TypeFlowNode n); + + /** A type. */ + class Type { + /** Gets a textual representation of this type. */ + string toString(); + + /** Gets a direct super type of this type. */ + Type getASupertype(); + } + + /** + * Gets the source declaration of this type, or `t` if `t` is already a + * source declaration. + */ + default Type getSourceDeclaration(Type t) { result = t } + + /** + * Gets the erased version of this type. The erasure of a erasure of a + * parameterized type is its generic counterpart, or `t` if `t` is already + * fully erased. + */ + default Type getErasure(Type t) { result = t } + + /** Gets a direct or indirect supertype of this type, including itself. */ + default Type getAnAncestor(Type sub) { + result = sub + or + exists(Type mid | result = mid.getASupertype() and sub = getAnAncestor(mid)) + } + + /** + * Holds if `t` is the most precise type of `n`, if any. + */ + predicate exactTypeBase(TypeFlowNode n, Type t); + + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This might include + * multiple bounds for a single node. + */ + predicate typeFlowBaseCand(TypeFlowNode n, Type t); + + /** + * Holds if `n` is a value that is guarded by a disjunction of a dynamic type + * check that checks if `n` is an instance of type `t_i` where `t` is one of + * those `t_i`. + */ + default predicate instanceofDisjunctionGuarded(TypeFlowNode n, Type t) { none() } + + /** + * Holds if `t` is a raw type or parameterised type with unrestricted type + * arguments. + * + * By default, no types are unbound. + */ + default predicate unbound(Type t) { none() } +} + +private import internal.TypeFlowImpl as Impl + +/** + * Provides an implementation of type-flow using input `I`. + */ +cached +module Make { + import Impl::TypeFlow +} diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll new file mode 100644 index 00000000000..121bc605dbc --- /dev/null +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -0,0 +1,445 @@ +private import codeql.typeflow.TypeFlow +private import codeql.util.Unit + +module TypeFlow { + private import I + + /** + * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily + * functionally determined by `n2`, and `n1` might take a non-null value. + */ + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep0(n1, n2) and not isNull(n1) } + + private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } + + private predicate sccEdge(TypeFlowNode n1, TypeFlowNode n2) { + anyStep(n1, n2) and anyStep+(n2, n1) + } + + private module Scc = QlBuiltins::EquivalenceRelation; + + private class TypeFlowScc = Scc::EquivalenceClass; + + /** Holds if `n` is part of an SCC of size 2 or more represented by `scc`. */ + private predicate sccRepr(TypeFlowNode n, TypeFlowScc scc) { scc = Scc::getEquivalenceClass(n) } + + private predicate sccJoinStep(TypeFlowNode n, TypeFlowScc scc) { + exists(TypeFlowNode mid | + joinStep(n, mid) and + sccRepr(mid, scc) and + not sccRepr(n, scc) + ) + } + + private signature class NodeSig; + + private signature module Edge { + class Node; + + predicate edge(TypeFlowNode n1, Node n2); + } + + private signature module RankedEdge { + predicate edgeRank(int r, TypeFlowNode n1, Node n2); + + int lastRank(Node n); + } + + private module RankEdge implements RankedEdge { + private import E + + /** + * Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. The used + * ordering is not necessarily total, so the ranking may have gaps. + */ + private predicate edgeRank1(int r, TypeFlowNode n1, Node n2) { + n1 = + rank[r](TypeFlowNode n, int startline, int startcolumn | + edge(n, n2) and + n.hasLocationInfo(_, startline, startcolumn, _, _) + | + n order by startline, startcolumn + ) + } + + /** + * Holds if `r2` is a ranking of the ranks from `edgeRank1`. This removes the + * gaps from the ranking. + */ + private predicate edgeRank2(int r2, int r1, Node n) { + r1 = rank[r2](int r | edgeRank1(r, _, n) | r) + } + + /** Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. */ + predicate edgeRank(int r, TypeFlowNode n1, Node n2) { + exists(int r1 | + edgeRank1(r1, n1, n2) and + edgeRank2(r, r1, n2) + ) + } + + int lastRank(Node n) { result = max(int r | edgeRank(r, _, n)) } + } + + private signature module TypePropagation { + class Typ; + + predicate candType(TypeFlowNode n, Typ t); + + bindingset[t] + predicate supportsType(TypeFlowNode n, Typ t); + } + + /** Implements recursion through `forall` by way of edge ranking. */ + private module ForAll E, TypePropagation T> { + /** + * Holds if `t` is a bound that holds on one of the incoming edges to `n` and + * thus is a candidate bound for `n`. + */ + pragma[nomagic] + private predicate candJoinType(Node n, T::Typ t) { + exists(TypeFlowNode mid | + T::candType(mid, t) and + E::edgeRank(_, mid, n) + ) + } + + /** + * Holds if `t` is a candidate bound for `n` that is also valid for data coming + * through the edges into `n` ranked from `1` to `r`. + */ + private predicate flowJoin(int r, Node n, T::Typ t) { + ( + r = 1 and candJoinType(n, t) + or + flowJoin(r - 1, n, t) and E::edgeRank(r, _, n) + ) and + forall(TypeFlowNode mid | E::edgeRank(r, mid, n) | T::supportsType(mid, t)) + } + + /** + * Holds if `t` is a candidate bound for `n` that is also valid for data + * coming through all the incoming edges, and therefore is a valid bound for + * `n`. + */ + predicate flowJoin(Node n, T::Typ t) { flowJoin(E::lastRank(n), n, t) } + } + + private module JoinStep implements Edge { + class Node = TypeFlowNode; + + predicate edge = joinStep/2; + } + + private module SccJoinStep implements Edge { + class Node = TypeFlowScc; + + predicate edge = sccJoinStep/2; + } + + private module RankedJoinStep = RankEdge; + + private module RankedSccJoinStep = RankEdge; + + private module ExactTypePropagation implements TypePropagation { + class Typ = Type; + + predicate candType = exactType/2; + + predicate supportsType = exactType/2; + } + + /** + * Holds if the runtime type of `n` is exactly `t` and if this bound is a + * non-trivial lower bound, that is, `t` has a subtype. + */ + private predicate exactType(TypeFlowNode n, Type t) { + exactTypeBase(n, t) + or + exists(TypeFlowNode mid | exactType(mid, t) and step(mid, n)) + or + // The following is an optimized version of + // `forex(TypeFlowNode mid | joinStep(mid, n) | exactType(mid, t))` + ForAll::flowJoin(n, t) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + // Optimized version of + // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | exactType(mid, t))` + ForAll::flowJoin(scc, t) + ) + } + + /** + * Gets the source declaration of a direct supertype of this type, excluding itself. + */ + private Type getASourceSupertype(Type t) { + result = getSourceDeclaration(t.getASupertype()) and + result != t + } + + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This only includes + * the best such bound for each node. + */ + private predicate typeFlowBase(TypeFlowNode n, Type t) { + exists(Type te | + typeFlowBaseCand(n, t) and + te = getErasure(t) and + not exists(Type better | + typeFlowBaseCand(n, better) and + better != t and + not t.getASupertype+() = better + | + better.getASupertype+() = t or + getASourceSupertype+(getErasure(better)) = te + ) + ) + } + + private module TypeFlowPropagation implements TypePropagation { + class Typ = Type; + + predicate candType = typeFlow/2; + + bindingset[t] + predicate supportsType(TypeFlowNode mid, Type t) { + exists(Type midtyp | exactType(mid, midtyp) or typeFlow(mid, midtyp) | + getAnAncestor(pragma[only_bind_out](midtyp)) = t + ) + } + } + + /** + * Holds if the runtime type of `n` is bounded by `t` and if this bound is + * likely to be better than the static type of `n`. + */ + private predicate typeFlow(TypeFlowNode n, Type t) { + typeFlowBase(n, t) + or + exists(TypeFlowNode mid | typeFlow(mid, t) and step(mid, n)) + or + ForAll::flowJoin(n, t) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + ForAll::flowJoin(scc, t) + ) + } + + pragma[nomagic] + private predicate erasedTypeBound(Type t) { + exists(Type t0 | typeFlow(_, t0) and t = getErasure(t0)) + } + + pragma[nomagic] + private predicate typeBound(Type t) { typeFlow(_, t) } + + /** + * Gets a direct or indirect supertype of this type. + * This does not include itself, unless this type is part of a cycle + * in the type hierarchy. + */ + Type getAStrictAncestor(Type sub) { result = getAnAncestor(sub.getASupertype()) } + + /** + * Holds if we have a bound for `n` that is better than `t`. + */ + pragma[nomagic] + private predicate irrelevantBound(TypeFlowNode n, Type t) { + exists(Type bound | + typeFlow(n, bound) and + t = getAStrictAncestor(bound) and + typeBound(t) and + typeFlow(n, pragma[only_bind_into](t)) and + not getAnAncestor(t) = bound + or + n.getType() = pragma[only_bind_into](bound) and + typeFlow(n, t) and + t = getAnAncestor(bound) + ) + } + + /** + * Holds if we have a bound for `n` that is better than `t`, taking only erased + * types into account. + */ + pragma[nomagic] + private predicate irrelevantErasedBound(TypeFlowNode n, Type t) { + exists(Type bound | + typeFlow(n, bound) + or + n.getType() = bound and typeFlow(n, _) + | + t = getASourceSupertype+(getErasure(bound)) and + erasedTypeBound(t) + ) + } + + /** + * Holds if the runtime type of `n` is bounded by `t`, if this bound is likely + * to be better than the static type of `n`, and if this the best such bound. + */ + private predicate bestTypeFlow(TypeFlowNode n, Type t) { + typeFlow(n, t) and + not irrelevantErasedBound(n, getErasure(t)) and + not irrelevantBound(n, t) + } + + predicate bestTypeFlow(TypeFlowNode n, Type t, boolean exact) { + exactType(n, t) and exact = true + or + not exactType(n, _) and bestTypeFlow(n, t) and exact = false + } + + private predicate bestTypeFlowOrTypeFlowBase(TypeFlowNode n, Type t, boolean exact) { + bestTypeFlow(n, t, exact) + or + typeFlowBase(n, t) and + exact = false and + not bestTypeFlow(n, _, _) + } + + /** + * Holds if `n` has type `t` and this information is not propagated as a + * universal bound to a subsequent node, such that `t` might form the basis for + * a union type bound for that node. + */ + private predicate unionTypeFlowBaseCand(TypeFlowNode n, Type t, boolean exact) { + exists(TypeFlowNode next | + joinStep(n, next) and + bestTypeFlowOrTypeFlowBase(n, t, exact) and + not bestTypeFlowOrTypeFlowBase(next, t, exact) and + not exactType(next, _) + ) + } + + private module HasUnionTypePropagation implements TypePropagation { + class Typ = Unit; + + predicate candType(TypeFlowNode mid, Unit unit) { + exists(unit) and + (unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid)) + } + + predicate supportsType = candType/2; + } + + /** + * Holds if all incoming type flow can be traced back to a + * `unionTypeFlowBaseCand`, such that we can compute a union type bound for `n`. + * Disregards nodes for which we have an exact bound. + */ + private predicate hasUnionTypeFlow(TypeFlowNode n) { + not exactType(n, _) and + ( + // Optimized version of + // `forex(TypeFlowNode mid | joinStep(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` + ForAll::flowJoin(n, _) + or + exists(TypeFlowScc scc | + sccRepr(n, scc) and + // Optimized version of + // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` + ForAll::flowJoin(scc, _) + ) + or + exists(TypeFlowNode mid | step(mid, n) and hasUnionTypeFlow(mid)) + or + instanceofDisjunctionGuarded(n, _) + ) + } + + pragma[nomagic] + private Type getTypeBound(TypeFlowNode n) { + bestTypeFlow(n, result) + or + not bestTypeFlow(n, _) and result = n.getType() + } + + pragma[nomagic] + private predicate unionTypeFlow0(TypeFlowNode n, Type t, boolean exact) { + hasUnionTypeFlow(n) and + ( + exists(TypeFlowNode mid | anyStep(mid, n) | + unionTypeFlowBaseCand(mid, t, exact) or unionTypeFlow(mid, t, exact) + ) + or + instanceofDisjunctionGuarded(n, t) and exact = false + ) + } + + /** + * Holds if there is a common (reflexive, transitive) subtype of the erased + * types `t1` and `t2`. + */ + private predicate erasedHaveIntersection(Type t1, Type t2) { + exists(Type commonSub | commonSub = getSourceDeclaration(commonSub) | + getASourceSupertype*(commonSub) = t1 and + getASourceSupertype*(commonSub) = t2 + ) and + t1 = getErasure(_) and + t2 = getErasure(_) + } + + /** Holds if we have a union type bound for `n` and `t` is one of its parts. */ + private predicate unionTypeFlow(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow0(n, t, exact) and + // filter impossible union parts: + exists(Type tErased, Type boundErased | + pragma[only_bind_into](tErased) = getErasure(t) and + pragma[only_bind_into](boundErased) = getErasure(getTypeBound(n)) + | + if exact = true + then getASourceSupertype*(tErased) = boundErased + else erasedHaveIntersection(tErased, boundErased) + ) + } + + /** + * Holds if the inferred union type bound for `n` contains the best universal + * bound and thus is irrelevant. + */ + private predicate irrelevantUnionType(TypeFlowNode n) { + exists(Type t, Type nt, Type te, Type nte | + unionTypeFlow(n, t, false) and + nt = getTypeBound(n) and + te = getErasure(t) and + nte = getErasure(nt) + | + nt.getASupertype*() = t + or + getASourceSupertype+(nte) = te + or + nte = te and unbound(t) + ) + } + + /** + * Holds if `t` is an irrelevant part of the union type bound for `n` due to + * being contained in another part of the union type bound. + */ + private predicate irrelevantUnionTypePart(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow(n, t, exact) and + not irrelevantUnionType(n) and + exists(Type weaker | + unionTypeFlow(n, weaker, false) and + t.getASupertype*() = weaker + | + exact = true or not weaker.getASupertype*() = t + ) + } + + /** + * Holds if the runtime type of `n` is bounded by a union type and if this + * bound is likely to be better than the static type of `n`. The union type is + * made up of the types `t` related to `n` by this predicate, and the flag + * `exact` indicates whether `t` is an exact bound or merely an upper bound. + */ + predicate bestUnionType(TypeFlowNode n, Type t, boolean exact) { + unionTypeFlow(n, t, exact) and + not irrelevantUnionType(n) and + not irrelevantUnionTypePart(n, t, exact) + } +} diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml new file mode 100644 index 00000000000..6bc23bcd4fc --- /dev/null +++ b/shared/typeflow/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/typeflow +version: 0.0.1-dev +groups: shared +library: true +dependencies: + codeql/util: ${workspace} +warnOnImplicitThis: true \ No newline at end of file From 1d4c889ab87d4a1094b1c912e4e865d6805e089d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 26 Feb 2024 12:40:56 +0000 Subject: [PATCH 016/497] Java: Use the shared type-flow library. --- java/ql/lib/qlpack.yml | 1 + .../semmle/code/java/dataflow/TypeFlow.qll | 1003 +++++------------ 2 files changed, 307 insertions(+), 697 deletions(-) diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..82701ce6066 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -13,6 +13,7 @@ dependencies: codeql/threat-models: ${workspace} codeql/tutorial: ${workspace} codeql/typetracking: ${workspace} + codeql/typeflow: ${workspace} codeql/util: ${workspace} dataExtensions: - ext/*.model.yml diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index ea0df55d60f..9a29809f15c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -8,747 +8,356 @@ * explicit or implicit cast that lost type information. */ -import java +import java as J private import semmle.code.java.dispatch.VirtualDispatch private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.controlflow.Guards +private import codeql.typeflow.TypeFlow -private newtype TTypeFlowNode = - TField(Field f) { not f.getType() instanceof PrimitiveType } or - TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or - TExpr(Expr e) or - TMethod(Method m) { not m.getReturnType() instanceof PrimitiveType } +private module Input implements TypeFlowInput { + private newtype TTypeFlowNode = + TField(Field f) { not f.getType() instanceof PrimitiveType } or + TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or + TExpr(Expr e) or + TMethod(Method m) { not m.getReturnType() instanceof PrimitiveType } -/** - * A `Field`, `BaseSsaVariable`, `Expr`, or `Method`. - */ -private class TypeFlowNode extends TTypeFlowNode { - string toString() { - result = this.asField().toString() or - result = this.asSsa().toString() or - result = this.asExpr().toString() or - result = this.asMethod().toString() - } - - Location getLocation() { - result = this.asField().getLocation() or - result = this.asSsa().getLocation() or - result = this.asExpr().getLocation() or - result = this.asMethod().getLocation() - } - - Field asField() { this = TField(result) } - - BaseSsaVariable asSsa() { this = TSsa(result) } - - Expr asExpr() { this = TExpr(result) } - - Method asMethod() { this = TMethod(result) } - - RefType getType() { - result = this.asField().getType() or - result = this.asSsa().getSourceVariable().getType() or - result = boxIfNeeded(this.asExpr().getType()) or - result = this.asMethod().getReturnType() - } -} - -/** Gets `t` if it is a `RefType` or the boxed type if `t` is a primitive type. */ -private RefType boxIfNeeded(Type t) { - t.(PrimitiveType).getBoxedType() = result or - result = t -} - -/** - * Holds if `arg` is an argument for the parameter `p` in a private callable. - */ -private predicate privateParamArg(Parameter p, Argument arg) { - p.getAnArgument() = arg and - p.getCallable().isPrivate() -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not - * necessarily functionally determined by `n2`. - */ -private predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2) { - n2.asExpr().(ChooseExpr).getAResultExpr() = n1.asExpr() - or - exists(Field f, Expr e | - f = n2.asField() and - f.getAnAssignedValue() = e and - e = n1.asExpr() and - not e.(FieldAccess).getField() = f - ) - or - n2.asSsa().(BaseSsaPhiNode).getAnUltimateLocalDefinition() = n1.asSsa() - or - exists(ReturnStmt ret | - n2.asMethod() = ret.getEnclosingCallable() and ret.getResult() = n1.asExpr() - ) - or - viableImpl_v1(n2.asExpr()) = n1.asMethod() - or - exists(Argument arg, Parameter p | - privateParamArg(p, arg) and - n1.asExpr() = arg and - n2.asSsa().(BaseSsaImplicitInit).isParameterDefinition(p) and - // skip trivial recursion - not arg = n2.asSsa().getAUse() - ) -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, and `n1` is - * functionally determined by `n2`. - */ -private predicate step(TypeFlowNode n1, TypeFlowNode n2) { - n2.asExpr() = n1.asField().getAnAccess() - or - n2.asExpr() = n1.asSsa().getAUse() - or - n2.asExpr().(CastingExpr).getExpr() = n1.asExpr() and - not n2.asExpr().getType() instanceof PrimitiveType - or - n2.asExpr().(AssignExpr).getSource() = n1.asExpr() and - not n2.asExpr().getType() instanceof PrimitiveType - or - n2.asSsa().(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() - or - n2.asSsa().(BaseSsaImplicitInit).captures(n1.asSsa()) -} - -/** - * Holds if `null` is the only value that flows to `n`. - */ -private predicate isNull(TypeFlowNode n) { - n.asExpr() instanceof NullLiteral - or - exists(LocalVariableDeclExpr decl | - n.asSsa().(BaseSsaUpdate).getDefiningExpr() = decl and - not decl.hasImplicitInit() and - not exists(decl.getInit()) - ) - or - exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) - or - forex(TypeFlowNode mid | joinStep0(mid, n) | isNull(mid)) and - // Fields that are never assigned a non-null value are probably set by - // reflection and are thus not always null. - not exists(n.asField()) -} - -/** - * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily - * functionally determined by `n2`, and `n1` might take a non-null value. - */ -private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { - joinStep0(n1, n2) and not isNull(n1) -} - -private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } - -private predicate sccEdge(TypeFlowNode n1, TypeFlowNode n2) { anyStep(n1, n2) and anyStep+(n2, n1) } - -private module Scc = QlBuiltins::EquivalenceRelation; - -private class TypeFlowScc = Scc::EquivalenceClass; - -/** Holds if `n` is part of an SCC of size 2 or more represented by `scc`. */ -private predicate sccRepr(TypeFlowNode n, TypeFlowScc scc) { scc = Scc::getEquivalenceClass(n) } - -private predicate sccJoinStep(TypeFlowNode n, TypeFlowScc scc) { - exists(TypeFlowNode mid | - joinStep(n, mid) and - sccRepr(mid, scc) and - not sccRepr(n, scc) - ) -} - -private signature class NodeSig; - -private signature module Edge { - class Node; - - predicate edge(TypeFlowNode n1, Node n2); -} - -private signature module RankedEdge { - predicate edgeRank(int r, TypeFlowNode n1, Node n2); - - int lastRank(Node n); -} - -private module RankEdge implements RankedEdge { - private import E - - /** - * Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. The used - * ordering is not necessarily total, so the ranking may have gaps. - */ - private predicate edgeRank1(int r, TypeFlowNode n1, Node n2) { - n1 = - rank[r](TypeFlowNode n | - edge(n, n2) - | - n order by n.getLocation().getStartLine(), n.getLocation().getStartColumn() - ) + /** Gets `t` if it is a `RefType` or the boxed type if `t` is a primitive type. */ + private RefType boxIfNeeded(J::Type t) { + t.(J::PrimitiveType).getBoxedType() = result or + result = t } /** - * Holds if `r2` is a ranking of the ranks from `edgeRank1`. This removes the - * gaps from the ranking. + * A `Field`, `BaseSsaVariable`, `Expr`, or `Method`. */ - private predicate edgeRank2(int r2, int r1, Node n) { - r1 = rank[r2](int r | edgeRank1(r, _, n) | r) + class TypeFlowNode extends TTypeFlowNode { + string toString() { + result = this.asField().toString() or + result = this.asSsa().toString() or + result = this.asExpr().toString() or + result = this.asMethod().toString() + } + + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + Location getLocation() { + result = this.asField().getLocation() or + result = this.asSsa().getLocation() or + result = this.asExpr().getLocation() or + result = this.asMethod().getLocation() + } + + Field asField() { this = TField(result) } + + BaseSsaVariable asSsa() { this = TSsa(result) } + + Expr asExpr() { this = TExpr(result) } + + Method asMethod() { this = TMethod(result) } + + RefType getType() { + result = this.asField().getType() or + result = this.asSsa().getSourceVariable().getType() or + result = boxIfNeeded(this.asExpr().getType()) or + result = this.asMethod().getReturnType() + } } - /** Holds if `r` is a ranking of the incoming edges `(n1,n2)` to `n2`. */ - predicate edgeRank(int r, TypeFlowNode n1, Node n2) { - exists(int r1 | - edgeRank1(r1, n1, n2) and - edgeRank2(r, r1, n2) + class Type = J::RefType; + + /** + * Holds if `arg` is an argument for the parameter `p` in a private callable. + */ + private predicate privateParamArg(Parameter p, Argument arg) { + p.getAnArgument() = arg and + p.getCallable().isPrivate() + } + + /** + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not + * necessarily functionally determined by `n2`. + */ + predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2) { + n2.asExpr().(ChooseExpr).getAResultExpr() = n1.asExpr() + or + exists(Field f, Expr e | + f = n2.asField() and + f.getAnAssignedValue() = e and + e = n1.asExpr() and + not e.(FieldAccess).getField() = f + ) + or + n2.asSsa().(BaseSsaPhiNode).getAnUltimateLocalDefinition() = n1.asSsa() + or + exists(ReturnStmt ret | + n2.asMethod() = ret.getEnclosingCallable() and ret.getResult() = n1.asExpr() + ) + or + viableImpl_v1(n2.asExpr()) = n1.asMethod() + or + exists(Argument arg, Parameter p | + privateParamArg(p, arg) and + n1.asExpr() = arg and + n2.asSsa().(BaseSsaImplicitInit).isParameterDefinition(p) and + // skip trivial recursion + not arg = n2.asSsa().getAUse() ) } - int lastRank(Node n) { result = max(int r | edgeRank(r, _, n)) } -} - -private signature module TypePropagation { - class Typ; - - predicate candType(TypeFlowNode n, Typ t); - - bindingset[t] - predicate supportsType(TypeFlowNode n, Typ t); -} - -/** Implements recursion through `forall` by way of edge ranking. */ -private module ForAll E, TypePropagation T> { /** - * Holds if `t` is a bound that holds on one of the incoming edges to `n` and - * thus is a candidate bound for `n`. + * Holds if data can flow from `n1` to `n2` in one step, and `n1` is + * functionally determined by `n2`. + */ + predicate step(TypeFlowNode n1, TypeFlowNode n2) { + n2.asExpr() = n1.asField().getAnAccess() + or + n2.asExpr() = n1.asSsa().getAUse() + or + n2.asExpr().(CastingExpr).getExpr() = n1.asExpr() and + not n2.asExpr().getType() instanceof PrimitiveType + or + n2.asExpr().(AssignExpr).getSource() = n1.asExpr() and + not n2.asExpr().getType() instanceof PrimitiveType + or + n2.asSsa().(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() + or + n2.asSsa().(BaseSsaImplicitInit).captures(n1.asSsa()) + } + + /** + * Holds if `null` is the only value that flows to `n`. + */ + predicate isNull(TypeFlowNode n) { + n.asExpr() instanceof NullLiteral + or + exists(LocalVariableDeclExpr decl | + n.asSsa().(BaseSsaUpdate).getDefiningExpr() = decl and + not decl.hasImplicitInit() and + not exists(decl.getInit()) + ) + or + exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) + or + forex(TypeFlowNode mid | joinStep0(mid, n) | isNull(mid)) and + // Fields that are never assigned a non-null value are probably set by + // reflection and are thus not always null. + not exists(n.asField()) + } + + predicate exactTypeBase(TypeFlowNode n, RefType t) { + exists(J::ClassInstanceExpr e | + n.asExpr() = e and + e.getType() = t and + not e instanceof FunctionalExpr and + exists(SrcRefType sub | sub.getASourceSupertype() = t.getSourceDeclaration()) + ) + } + + /** + * Holds if `n` occurs in a position where type information might be discarded; + * `t1` is the type of `n`, `t1e` is the erasure of `t1`, `t2` is the type of + * the implicit or explicit cast, and `t2e` is the erasure of `t2`. */ pragma[nomagic] - private predicate candJoinType(Node n, T::Typ t) { - exists(TypeFlowNode mid | - T::candType(mid, t) and - E::edgeRank(_, mid, n) + private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { + exists(TypeFlowNode next | step(n, next) or Make::joinStep(n, next) | + n.getType() = t1 and + next.getType() = t2 and + t1.getErasure() = t1e and + t2.getErasure() = t2e and + t1 != t2 ) } - /** - * Holds if `t` is a candidate bound for `n` that is also valid for data coming - * through the edges into `n` ranked from `1` to `r`. - */ - private predicate flowJoin(int r, Node n, T::Typ t) { - ( - r = 1 and candJoinType(n, t) + /** Holds if `n` occurs in a position where type information is discarded. */ + private predicate upcast(TypeFlowNode n, RefType t1) { + exists(RefType t1e, RefType t2, RefType t2e | upcastCand(n, t1, t1e, t2, t2e) | + t1e.getASourceSupertype+() = t2e or - flowJoin(r - 1, n, t) and E::edgeRank(r, _, n) - ) and - forall(TypeFlowNode mid | E::edgeRank(r, mid, n) | T::supportsType(mid, t)) + t1e = t2e and + unbound(t2) and + not unbound(t1) + ) + } + + /** Gets the element type of an array or subtype of `Iterable`. */ + private J::Type elementType(RefType t) { + result = t.(Array).getComponentType() + or + exists(ParameterizedType it | + it.getSourceDeclaration().hasQualifiedName("java.lang", "Iterable") and + result = it.getATypeArgument() and + t.extendsOrImplements*(it) + ) + } + + private predicate upcastEnhancedForStmtAux(BaseSsaUpdate v, RefType t, RefType t1, RefType t2) { + exists(EnhancedForStmt for | + for.getVariable() = v.getDefiningExpr() and + v.getSourceVariable().getType().getErasure() = t2 and + t = boxIfNeeded(elementType(for.getExpr().getType())) and + t.getErasure() = t1 + ) } /** - * Holds if `t` is a candidate bound for `n` that is also valid for data - * coming through all the incoming edges, and therefore is a valid bound for - * `n`. + * Holds if `v` is the iteration variable of an enhanced for statement, `t` is + * the type of the elements being iterated over, and this type is more precise + * than the type of `v`. */ - predicate flowJoin(Node n, T::Typ t) { flowJoin(E::lastRank(n), n, t) } -} + private predicate upcastEnhancedForStmt(BaseSsaUpdate v, RefType t) { + exists(RefType t1, RefType t2 | + upcastEnhancedForStmtAux(v, t, t1, t2) and + t1.getASourceSupertype+() = t2 + ) + } -private module JoinStep implements Edge { - class Node = TypeFlowNode; + private predicate downcastSuccessorAux( + CastingExpr cast, BaseSsaVariable v, RefType t, RefType t1, RefType t2 + ) { + cast.getExpr() = v.getAUse() and + t = cast.getType() and + t1 = t.getErasure() and + t2 = v.getSourceVariable().getType().getErasure() + } - predicate edge = joinStep/2; -} + /** + * Holds if `va` is an access to a value that has previously been downcast to `t`. + */ + private predicate downcastSuccessor(VarAccess va, RefType t) { + exists(CastingExpr cast, BaseSsaVariable v, RefType t1, RefType t2 | + downcastSuccessorAux(pragma[only_bind_into](cast), v, t, t1, t2) and + t1.getASourceSupertype+() = t2 and + va = v.getAUse() and + dominates(cast, va) and + dominates(cast.(ControlFlowNode).getANormalSuccessor(), va) + ) + } -private module SccJoinStep implements Edge { - class Node = TypeFlowScc; + /** + * Holds if `va` is an access to a value that is guarded by `instanceof t` or `case e t`. + */ + private predicate typeTestGuarded(VarAccess va, RefType t) { + exists(Guard typeTest, BaseSsaVariable v | + typeTest.appliesTypeTest(v.getAUse(), t, _) and + va = v.getAUse() and + guardControls_v1(typeTest, va.getBasicBlock(), true) + ) + } - predicate edge = sccJoinStep/2; -} + /** + * Holds if `aa` is an access to a value that is guarded by `instanceof t` or `case e t`. + */ + private predicate arrayTypeTestGuarded(ArrayAccess aa, RefType t) { + exists(Guard typeTest, BaseSsaVariable v1, BaseSsaVariable v2, ArrayAccess aa1 | + typeTest.appliesTypeTest(aa1, t, _) and + aa1.getArray() = v1.getAUse() and + aa1.getIndexExpr() = v2.getAUse() and + aa.getArray() = v1.getAUse() and + aa.getIndexExpr() = v2.getAUse() and + guardControls_v1(typeTest, aa.getBasicBlock(), true) + ) + } -private module RankedJoinStep = RankEdge; - -private module RankedSccJoinStep = RankEdge; - -private predicate exactTypeBase(TypeFlowNode n, RefType t) { - exists(ClassInstanceExpr e | - n.asExpr() = e and - e.getType() = t and - not e instanceof FunctionalExpr and - exists(SrcRefType sub | sub.getASourceSupertype() = t.getSourceDeclaration()) - ) -} - -private module ExactTypePropagation implements TypePropagation { - class Typ = RefType; - - predicate candType = exactType/2; - - predicate supportsType = exactType/2; -} - -/** - * Holds if the runtime type of `n` is exactly `t` and if this bound is a - * non-trivial lower bound, that is, `t` has a subtype. - */ -private predicate exactType(TypeFlowNode n, RefType t) { - exactTypeBase(n, t) - or - exists(TypeFlowNode mid | exactType(mid, t) and step(mid, n)) - or - // The following is an optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | exactType(mid, t))` - ForAll::flowJoin(n, t) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - // Optimized version of - // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | exactType(mid, t))` - ForAll::flowJoin(scc, t) - ) -} - -/** - * Holds if `n` occurs in a position where type information might be discarded; - * `t1` is the type of `n`, `t1e` is the erasure of `t1`, `t2` is the type of - * the implicit or explicit cast, and `t2e` is the erasure of `t2`. - */ -pragma[nomagic] -private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { - exists(TypeFlowNode next | step(n, next) or joinStep(n, next) | - n.getType() = t1 and - next.getType() = t2 and - t1.getErasure() = t1e and - t2.getErasure() = t2e and - t1 != t2 - ) -} - -private predicate unconstrained(BoundedType t) { - t.(Wildcard).isUnconstrained() - or - t.getUpperBoundType() instanceof TypeObject and - not t.(Wildcard).hasLowerBound() - or - unconstrained(t.getUpperBoundType()) - or - unconstrained(t.(Wildcard).getLowerBoundType()) -} - -/** Holds if `t` is a raw type or parameterised type with unrestricted type arguments. */ -private predicate unbound(RefType t) { - t instanceof RawType - or - exists(ParameterizedType pt | pt = t | - forex(RefType arg | arg = pt.getATypeArgument() | unconstrained(arg)) - ) -} - -/** Holds if `n` occurs in a position where type information is discarded. */ -private predicate upcast(TypeFlowNode n, RefType t1) { - exists(RefType t1e, RefType t2, RefType t2e | upcastCand(n, t1, t1e, t2, t2e) | - t1e.getASourceSupertype+() = t2e + /** + * Holds if `t` is the type of the `this` value corresponding to the the + * `SuperAccess`. As the `SuperAccess` expression has the type of the supertype, + * the type `t` is a stronger type bound. + */ + private predicate superAccess(SuperAccess sup, RefType t) { + sup.isEnclosingInstanceAccess(t) or - t1e = t2e and - unbound(t2) and - not unbound(t1) - ) -} + sup.isOwnInstanceAccess() and + t = sup.getEnclosingCallable().getDeclaringType() + } -/** Gets the element type of an array or subtype of `Iterable`. */ -private Type elementType(RefType t) { - result = t.(Array).getComponentType() - or - exists(ParameterizedType it | - it.getSourceDeclaration().hasQualifiedName("java.lang", "Iterable") and - result = it.getATypeArgument() and - t.extendsOrImplements*(it) - ) -} - -private predicate upcastEnhancedForStmtAux(BaseSsaUpdate v, RefType t, RefType t1, RefType t2) { - exists(EnhancedForStmt for | - for.getVariable() = v.getDefiningExpr() and - v.getSourceVariable().getType().getErasure() = t2 and - t = boxIfNeeded(elementType(for.getExpr().getType())) and - t.getErasure() = t1 - ) -} - -/** - * Holds if `v` is the iteration variable of an enhanced for statement, `t` is - * the type of the elements being iterated over, and this type is more precise - * than the type of `v`. - */ -private predicate upcastEnhancedForStmt(BaseSsaUpdate v, RefType t) { - exists(RefType t1, RefType t2 | - upcastEnhancedForStmtAux(v, t, t1, t2) and - t1.getASourceSupertype+() = t2 - ) -} - -private predicate downcastSuccessorAux( - CastingExpr cast, BaseSsaVariable v, RefType t, RefType t1, RefType t2 -) { - cast.getExpr() = v.getAUse() and - t = cast.getType() and - t1 = t.getErasure() and - t2 = v.getSourceVariable().getType().getErasure() -} - -/** - * Holds if `va` is an access to a value that has previously been downcast to `t`. - */ -private predicate downcastSuccessor(VarAccess va, RefType t) { - exists(CastingExpr cast, BaseSsaVariable v, RefType t1, RefType t2 | - downcastSuccessorAux(pragma[only_bind_into](cast), v, t, t1, t2) and - t1.getASourceSupertype+() = t2 and - va = v.getAUse() and - dominates(cast, va) and - dominates(cast.(ControlFlowNode).getANormalSuccessor(), va) - ) -} - -/** - * Holds if `va` is an access to a value that is guarded by `instanceof t` or `case e t`. - */ -private predicate typeTestGuarded(VarAccess va, RefType t) { - exists(Guard typeTest, BaseSsaVariable v | - typeTest.appliesTypeTest(v.getAUse(), t, _) and - va = v.getAUse() and - guardControls_v1(typeTest, va.getBasicBlock(), true) - ) -} - -/** - * Holds if `aa` is an access to a value that is guarded by `instanceof t` or `case e t`. - */ -predicate arrayTypeTestGuarded(ArrayAccess aa, RefType t) { - exists(Guard typeTest, BaseSsaVariable v1, BaseSsaVariable v2, ArrayAccess aa1 | - typeTest.appliesTypeTest(aa1, t, _) and - aa1.getArray() = v1.getAUse() and - aa1.getIndexExpr() = v2.getAUse() and - aa.getArray() = v1.getAUse() and - aa.getIndexExpr() = v2.getAUse() and - guardControls_v1(typeTest, aa.getBasicBlock(), true) - ) -} - -/** - * Holds if `t` is the type of the `this` value corresponding to the the - * `SuperAccess`. As the `SuperAccess` expression has the type of the supertype, - * the type `t` is a stronger type bound. - */ -private predicate superAccess(SuperAccess sup, RefType t) { - sup.isEnclosingInstanceAccess(t) - or - sup.isOwnInstanceAccess() and - t = sup.getEnclosingCallable().getDeclaringType() -} - -/** - * Holds if `n` has type `t` and this information is discarded, such that `t` - * might be a better type bound for nodes where `n` flows to. This might include - * multiple bounds for a single node. - */ -private predicate typeFlowBaseCand(TypeFlowNode n, RefType t) { - exists(RefType srctype | - upcast(n, srctype) or - upcastEnhancedForStmt(n.asSsa(), srctype) or - downcastSuccessor(n.asExpr(), srctype) or - typeTestGuarded(n.asExpr(), srctype) or - arrayTypeTestGuarded(n.asExpr(), srctype) or - n.asExpr().(FunctionalExpr).getConstructedType() = srctype or - superAccess(n.asExpr(), srctype) - | - t = srctype.(BoundedType).getAnUltimateUpperBoundType() - or - t = srctype and not srctype instanceof BoundedType - ) -} - -/** - * Holds if `n` has type `t` and this information is discarded, such that `t` - * might be a better type bound for nodes where `n` flows to. This only includes - * the best such bound for each node. - */ -private predicate typeFlowBase(TypeFlowNode n, RefType t) { - exists(RefType te | - typeFlowBaseCand(n, t) and - te = t.getErasure() and - not exists(RefType better | - typeFlowBaseCand(n, better) and - better != t and - not t.getASupertype+() = better + /** + * Holds if `n` has type `t` and this information is discarded, such that `t` + * might be a better type bound for nodes where `n` flows to. This might include + * multiple bounds for a single node. + */ + predicate typeFlowBaseCand(TypeFlowNode n, RefType t) { + exists(RefType srctype | + upcast(n, srctype) or + upcastEnhancedForStmt(n.asSsa(), srctype) or + downcastSuccessor(n.asExpr(), srctype) or + typeTestGuarded(n.asExpr(), srctype) or + arrayTypeTestGuarded(n.asExpr(), srctype) or + n.asExpr().(FunctionalExpr).getConstructedType() = srctype or + superAccess(n.asExpr(), srctype) | - better.getASupertype+() = t or - better.getErasure().(RefType).getASourceSupertype+() = te - ) - ) -} - -private module TypeFlowPropagation implements TypePropagation { - class Typ = RefType; - - predicate candType = typeFlow/2; - - bindingset[t] - predicate supportsType(TypeFlowNode mid, RefType t) { - exists(RefType midtyp | exactType(mid, midtyp) or typeFlow(mid, midtyp) | - pragma[only_bind_out](midtyp).getAnAncestor() = t + t = srctype.(BoundedType).getAnUltimateUpperBoundType() + or + t = srctype and not srctype instanceof BoundedType ) } -} -/** - * Holds if the runtime type of `n` is bounded by `t` and if this bound is - * likely to be better than the static type of `n`. - */ -private predicate typeFlow(TypeFlowNode n, RefType t) { - typeFlowBase(n, t) - or - exists(TypeFlowNode mid | typeFlow(mid, t) and step(mid, n)) - or - ForAll::flowJoin(n, t) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - ForAll::flowJoin(scc, t) - ) -} - -pragma[nomagic] -private predicate erasedTypeBound(RefType t) { - exists(RefType t0 | typeFlow(_, t0) and t = t0.getErasure()) -} - -pragma[nomagic] -private predicate typeBound(RefType t) { typeFlow(_, t) } - -/** - * Holds if we have a bound for `n` that is better than `t`, taking only erased - * types into account. - */ -pragma[nomagic] -private predicate irrelevantErasedBound(TypeFlowNode n, RefType t) { - exists(RefType bound | - typeFlow(n, bound) - or - n.getType() = bound and typeFlow(n, _) - | - t = bound.getErasure().(RefType).getASourceSupertype+() and - erasedTypeBound(t) - ) -} - -/** - * Holds if we have a bound for `n` that is better than `t`. - */ -pragma[nomagic] -private predicate irrelevantBound(TypeFlowNode n, RefType t) { - exists(RefType bound | - typeFlow(n, bound) and - t = bound.getAStrictAncestor() and - typeBound(t) and - typeFlow(n, pragma[only_bind_into](t)) and - not t.getAnAncestor() = bound - or - n.getType() = pragma[only_bind_into](bound) and - typeFlow(n, t) and - t = bound.getAnAncestor() - ) -} - -/** - * Holds if the runtime type of `n` is bounded by `t`, if this bound is likely - * to be better than the static type of `n`, and if this the best such bound. - */ -private predicate bestTypeFlow(TypeFlowNode n, RefType t) { - typeFlow(n, t) and - not irrelevantErasedBound(n, t.getErasure()) and - not irrelevantBound(n, t) -} - -private predicate bestTypeFlow(TypeFlowNode n, RefType t, boolean exact) { - exactType(n, t) and exact = true - or - not exactType(n, _) and bestTypeFlow(n, t) and exact = false -} - -private predicate bestTypeFlowOrTypeFlowBase(TypeFlowNode n, RefType t, boolean exact) { - bestTypeFlow(n, t, exact) - or - typeFlowBase(n, t) and - exact = false and - not bestTypeFlow(n, _, _) -} - -/** - * Holds if `n` has type `t` and this information is not propagated as a - * universal bound to a subsequent node, such that `t` might form the basis for - * a union type bound for that node. - */ -private predicate unionTypeFlowBaseCand(TypeFlowNode n, RefType t, boolean exact) { - exists(TypeFlowNode next | - joinStep(n, next) and - bestTypeFlowOrTypeFlowBase(n, t, exact) and - not bestTypeFlowOrTypeFlowBase(next, t, exact) and - not exactType(next, _) - ) -} - -/** - * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple - * predecessors. - */ -private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, BaseSsaVariable v) { - ioe.getExpr() = v.getAUse() and - strictcount(bb.getABBPredecessor()) > 1 and - exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) -} - -/** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ -private predicate instanceofDisjunction(BasicBlock bb, BaseSsaVariable v) { - strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = - strictcount(bb.getABBPredecessor()) -} - -/** - * Holds if `n` is a value that is guarded by a disjunction of - * `instanceof t_i` where `t` is one of those `t_i`. - */ -private predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { - exists(BasicBlock bb, InstanceOfExpr ioe, BaseSsaVariable v, VarAccess va | - instanceofDisjunction(bb, v) and - bb.bbDominates(va.getBasicBlock()) and - va = v.getAUse() and - instanceofDisjunct(ioe, bb, v) and - t = ioe.getSyntacticCheckedType() and - n.asExpr() = va - ) -} - -private module HasUnionTypePropagation implements TypePropagation { - class Typ = Unit; - - predicate candType(TypeFlowNode mid, Unit unit) { - exists(unit) and - (unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid)) + /** + * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple + * predecessors. + */ + private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, BaseSsaVariable v) { + ioe.getExpr() = v.getAUse() and + strictcount(bb.getABBPredecessor()) > 1 and + exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) } - predicate supportsType = candType/2; -} + /** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ + private predicate instanceofDisjunction(BasicBlock bb, BaseSsaVariable v) { + strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = + strictcount(bb.getABBPredecessor()) + } -/** - * Holds if all incoming type flow can be traced back to a - * `unionTypeFlowBaseCand`, such that we can compute a union type bound for `n`. - * Disregards nodes for which we have an exact bound. - */ -private predicate hasUnionTypeFlow(TypeFlowNode n) { - not exactType(n, _) and - ( - // Optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` - ForAll::flowJoin(n, _) - or - exists(TypeFlowScc scc | - sccRepr(n, scc) and - // Optimized version of - // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` - ForAll::flowJoin(scc, _) + /** + * Holds if `n` is a value that is guarded by a disjunction of + * `instanceof t_i` where `t` is one of those `t_i`. + */ + predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { + exists(BasicBlock bb, InstanceOfExpr ioe, BaseSsaVariable v, VarAccess va | + instanceofDisjunction(bb, v) and + bb.bbDominates(va.getBasicBlock()) and + va = v.getAUse() and + instanceofDisjunct(ioe, bb, v) and + t = ioe.getSyntacticCheckedType() and + n.asExpr() = va ) - or - exists(TypeFlowNode mid | step(mid, n) and hasUnionTypeFlow(mid)) - or - instanceofDisjunctionGuarded(n, _) - ) -} + } -pragma[nomagic] -private RefType getTypeBound(TypeFlowNode n) { - bestTypeFlow(n, result) - or - not bestTypeFlow(n, _) and result = n.getType() -} + private predicate unconstrained(BoundedType t) { + t.(Wildcard).isUnconstrained() + or + t.getUpperBoundType() instanceof TypeObject and + not t.(Wildcard).hasLowerBound() + or + unconstrained(t.getUpperBoundType()) + or + unconstrained(t.(Wildcard).getLowerBoundType()) + } -pragma[nomagic] -private predicate unionTypeFlow0(TypeFlowNode n, RefType t, boolean exact) { - hasUnionTypeFlow(n) and - ( - exists(TypeFlowNode mid | anyStep(mid, n) | - unionTypeFlowBaseCand(mid, t, exact) or unionTypeFlow(mid, t, exact) + /** Holds if `t` is a raw type or parameterised type with unrestricted type arguments. */ + predicate unbound(RefType t) { + t instanceof RawType + or + exists(ParameterizedType pt | pt = t | + forex(RefType arg | arg = pt.getATypeArgument() | unconstrained(arg)) ) - or - instanceofDisjunctionGuarded(n, t) and exact = false - ) -} + } -/** Holds if we have a union type bound for `n` and `t` is one of its parts. */ -private predicate unionTypeFlow(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow0(n, t, exact) and - // filter impossible union parts: - exists(RefType tErased, RefType boundErased | - pragma[only_bind_into](tErased) = t.getErasure() and - pragma[only_bind_into](boundErased) = getTypeBound(n).getErasure() - | - if exact = true - then tErased.getASourceSupertype*() = boundErased - else erasedHaveIntersection(tErased, boundErased) - ) -} + Type getErasure(Type t) { result = t.getErasure() } -/** - * Holds if the inferred union type bound for `n` contains the best universal - * bound and thus is irrelevant. - */ -private predicate irrelevantUnionType(TypeFlowNode n) { - exists(RefType t, RefType nt, RefType te, RefType nte | - unionTypeFlow(n, t, false) and - nt = getTypeBound(n) and - te = t.getErasure() and - nte = nt.getErasure() - | - nt.getASupertype*() = t - or - nte.getASourceSupertype+() = te - or - nte = te and unbound(t) - ) -} + Type getAnAncestor(Type sub) { result = sub.getAnAncestor() } -/** - * Holds if `t` is an irrelevant part of the union type bound for `n` due to - * being contained in another part of the union type bound. - */ -private predicate irrelevantUnionTypePart(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow(n, t, exact) and - not irrelevantUnionType(n) and - exists(RefType weaker | - unionTypeFlow(n, weaker, false) and - t.getASupertype*() = weaker - | - exact = true or not weaker.getASupertype*() = t - ) -} - -/** - * Holds if the runtime type of `n` is bounded by a union type and if this - * bound is likely to be better than the static type of `n`. The union type is - * made up of the types `t` related to `n` by this predicate, and the flag - * `exact` indicates whether `t` is an exact bound or merely an upper bound. - */ -private predicate bestUnionType(TypeFlowNode n, RefType t, boolean exact) { - unionTypeFlow(n, t, exact) and - not irrelevantUnionType(n) and - not irrelevantUnionTypePart(n, t, exact) + RefType getSourceDeclaration(Type t) { result = t.getSourceDeclaration() } } cached private module TypeFlowBounds { + private module TypeFlow = Make; + /** * Holds if the runtime type of `f` is bounded by `t` and if this bound is * likely to be better than the static type of `f`. The flag `exact` indicates @@ -756,9 +365,9 @@ private module TypeFlowBounds { */ cached predicate fieldTypeFlow(Field f, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asField() = f and - bestTypeFlow(n, t, exact) + TypeFlow::bestTypeFlow(n, t, exact) ) } @@ -769,9 +378,9 @@ private module TypeFlowBounds { */ cached predicate exprTypeFlow(Expr e, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asExpr() = e and - bestTypeFlow(n, t, exact) + TypeFlow::bestTypeFlow(n, t, exact) ) } @@ -783,9 +392,9 @@ private module TypeFlowBounds { */ cached predicate exprUnionTypeFlow(Expr e, RefType t, boolean exact) { - exists(TypeFlowNode n | + exists(Input::TypeFlowNode n | n.asExpr() = e and - bestUnionType(n, t, exact) + TypeFlow::bestUnionType(n, t, exact) ) } } From 690fdc076d2e65b9e238589dbc15f05ad57be3cf Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 26 Feb 2024 16:21:35 +0000 Subject: [PATCH 017/497] Shared: Add change note. --- shared/typeflow/change-notes/2024-02-26-initial-version.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 shared/typeflow/change-notes/2024-02-26-initial-version.md diff --git a/shared/typeflow/change-notes/2024-02-26-initial-version.md b/shared/typeflow/change-notes/2024-02-26-initial-version.md new file mode 100644 index 00000000000..6b3dc344938 --- /dev/null +++ b/shared/typeflow/change-notes/2024-02-26-initial-version.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Initial release. Adds a library to implement type-flow analysis. From 2fd57f6ee771e760d54749e649ceea8f3a8716af Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 28 Feb 2024 16:24:21 +0000 Subject: [PATCH 018/497] Shared: Remove cached annotation. --- shared/typeflow/codeql/typeflow/TypeFlow.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index 5df8e53a914..bdf90dab7cf 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -112,7 +112,6 @@ private import internal.TypeFlowImpl as Impl /** * Provides an implementation of type-flow using input `I`. */ -cached module Make { import Impl::TypeFlow } From 2b2ea597ce384aa1488de9c98ec7bb229ee0aa2c Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Mon, 4 Mar 2024 16:42:38 +0000 Subject: [PATCH 019/497] Fix formatting on changenotes --- ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md | 2 +- ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md index 56d2dcf5c73..6f3a90768ba 100644 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md index f08bd54efa2..350e049b5bf 100644 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file From a67218a0277be5516730cf3bdb0fb1932c14b2c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 Mar 2024 17:42:08 +0000 Subject: [PATCH 020/497] Release preparation for version 2.16.4 --- cpp/ql/lib/CHANGELOG.md | 6 ++++++ .../0.12.7.md} | 9 +++++---- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-29-non-constant-format-path-query.md | 4 ---- .../0.9.6.md} | 8 +++++--- 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.10.md | 3 +++ .../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.10.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 14 ++++++++++++++ .../change-notes/2024-02-21-getonly-properties.md | 4 ---- .../ql/lib/change-notes/2024-02-22-no-db-stats.md | 4 ---- .../change-notes/2024-02-23-compiler-generated.md | 4 ---- .../2024-02-26-variable-capture-flow.md | 4 ---- .../2024-02-28-experimental-attribute.md | 4 ---- .../2024-02-28-refreadonly-parameter.md | 4 ---- csharp/ql/lib/change-notes/released/0.8.10.md | 13 +++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../0.8.10.md} | 9 +++++---- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.9.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 11 +++++++++++ .../lib/change-notes/2024-02-14-range-map-read.md | 4 ---- .../0.7.10.md} | 11 ++++++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.10.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../automodel/src/change-notes/released/0.0.17.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 11 +++++++++++ .../change-notes/2024-02-23-widget-flowsteps.md | 4 ---- java/ql/lib/change-notes/2024-02-27-error-types.md | 4 ---- .../lib/change-notes/2024-02-27-mvnw-versions.md | 4 ---- java/ql/lib/change-notes/released/0.8.10.md | 10 ++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 ++++++++++ .../2024-02-12-android-insecure-keys.md | 4 ---- .../0.8.10.md} | 11 ++++++++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.10.md | 3 +++ 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/0.8.10.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/0.7.10.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 +++++++ .../2024-02-28-iterable-unpacking-module-scope.md | 4 ---- .../0.11.10.md} | 8 +++++--- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../0.9.10.md} | 7 ++++--- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 9 +++++++++ ...2024-02-15-activerecord_connection_sql_sinks.md | 4 ---- .../2024-02-20-activerecord-sql-sink-arguments.md | 4 ---- .../lib/change-notes/2024-02-26-arel-sqlliteral.md | 4 ---- .../lib/change-notes/2024-02-29-i18n-translate.md | 4 ---- ruby/ql/lib/change-notes/released/0.8.10.md | 8 ++++++++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-13-rails-more-request-sources.md | 4 ---- .../0.8.10.md} | 10 ++++++---- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.10.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.2.1.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.10.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/0.0.9.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.10.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.10.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../threat-models/change-notes/released/0.0.9.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/0.2.10.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/0.2.10.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.10.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.10.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.10.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++++ .../0.3.10.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/0.3.10.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 394 insertions(+), 168 deletions(-) rename cpp/ql/lib/change-notes/{2024-02-26-ir-named-destructors.md => released/0.12.7.md} (54%) delete mode 100644 cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md rename cpp/ql/src/change-notes/{2024-02-16-modelled-functions-block-flow.md => released/0.9.6.md} (77%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.10.md rename csharp/ql/src/change-notes/{2024-02-06-threat-models.md => released/0.8.10.md} (88%) create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.9.md delete mode 100644 go/ql/lib/change-notes/2024-02-14-range-map-read.md rename go/ql/lib/change-notes/{2024-03-04-autobuilder-changes.md => released/0.7.10.md} (68%) create mode 100644 go/ql/src/change-notes/released/0.7.10.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.17.md delete mode 100644 java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-error-types.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-mvnw-versions.md create mode 100644 java/ql/lib/change-notes/released/0.8.10.md delete mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md rename java/ql/src/change-notes/{2024-03-04-sensitive-log-remove-null-from-sources.md => released/0.8.10.md} (54%) create mode 100644 javascript/ql/lib/change-notes/released/0.8.10.md create mode 100644 javascript/ql/src/change-notes/released/0.8.10.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.10.md delete mode 100644 python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md rename python/ql/lib/change-notes/{2024-03-01-dict-update-content.md => released/0.11.10.md} (52%) rename python/ql/src/change-notes/{2024-03-04-nosql-injection.md => released/0.9.10.md} (81%) delete mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.10.md delete mode 100644 ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md rename ruby/ql/src/change-notes/{2024-03-01-method-code-injection-sinks.md => released/0.8.10.md} (51%) create mode 100644 shared/controlflow/change-notes/released/0.1.10.md create mode 100644 shared/dataflow/change-notes/released/0.2.1.md create mode 100644 shared/mad/change-notes/released/0.2.10.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.9.md create mode 100644 shared/regex/change-notes/released/0.2.10.md create mode 100644 shared/ssa/change-notes/released/0.2.10.md create mode 100644 shared/threat-models/change-notes/released/0.0.9.md create mode 100644 shared/tutorial/change-notes/released/0.2.10.md create mode 100644 shared/typetracking/change-notes/released/0.2.10.md create mode 100644 shared/typos/change-notes/released/0.2.10.md create mode 100644 shared/util/change-notes/released/0.2.10.md create mode 100644 shared/yaml/change-notes/released/0.2.10.md rename swift/ql/lib/change-notes/{2024-02-22-extension-patch.md => released/0.3.10.md} (83%) create mode 100644 swift/ql/src/change-notes/released/0.3.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b3091ec37d8..e1c0dfbecd9 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. + ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md b/cpp/ql/lib/change-notes/released/0.12.7.md similarity index 54% rename from cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md rename to cpp/ql/lib/change-notes/released/0.12.7.md index 4e35decaf8e..856a8b665c7 100644 --- a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md +++ b/cpp/ql/lib/change-notes/released/0.12.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Added destructors for named objects to the intermediate representation. \ No newline at end of file +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 170a312c104..20419e9c610 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.6 +lastReleaseVersion: 0.12.7 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8e201fff594..3bb9229bf94 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7-dev +version: 0.12.7 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index ffcd73ff5d7..f6acd424bb0 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. + ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md deleted file mode 100644 index 2e5933a61e8..00000000000 --- a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md b/cpp/ql/src/change-notes/released/0.9.6.md similarity index 77% rename from cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md rename to cpp/ql/src/change-notes/released/0.9.6.md index d6ef3c3e056..0c85f3f9f0f 100644 --- a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md +++ b/cpp/ql/src/change-notes/released/0.9.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 460240feaff..19139c132b2 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.5 +lastReleaseVersion: 0.9.6 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 31bd20166b2..4052647bb97 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6-dev +version: 0.9.6 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7e643b0fac3..ee993bed0c9 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 8654bbfd031..1f421754fc8 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 95fd64c5270..16cc14259e1 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md deleted file mode 100644 index 6bb8e99c71e..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md deleted file mode 100644 index d6ffbd523ac..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md deleted file mode 100644 index 9b1739b9b6d..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md deleted file mode 100644 index 66ab65083dc..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md deleted file mode 100644 index 8749c790954..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md deleted file mode 100644 index 586b5341d29..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..f591ddc5b21 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,13 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d75ea3c6320..93c5c1120a2 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10-dev +version: 0.8.10 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 9fe1609363f..46c939e5cee 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/2024-02-06-threat-models.md b/csharp/ql/src/change-notes/released/0.8.10.md similarity index 88% rename from csharp/ql/src/change-notes/2024-02-06-threat-models.md rename to csharp/ql/src/change-notes/released/0.8.10.md index 69ac4e4dc17..702161c3d28 100644 --- a/csharp/ql/src/change-notes/2024-02-06-threat-models.md +++ b/csharp/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 9ee23cc7307..46384094b19 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10-dev +version: 0.8.10 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +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 58fdc6b45de..ecdd64fbab8 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index b574796b995..d5a2fbee5f1 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: 0.0.9-dev +version: 0.0.9 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 65a2376217b..fee5fd37a26 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.10 + +### Major Analysis Improvements + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. + ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md deleted file mode 100644 index ea45737a72e..00000000000 --- a/go/ql/lib/change-notes/2024-02-14-range-map-read.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md b/go/ql/lib/change-notes/released/0.7.10.md similarity index 68% rename from go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md rename to go/ql/lib/change-notes/released/0.7.10.md index 0442a571029..55954f8a394 100644 --- a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md +++ b/go/ql/lib/change-notes/released/0.7.10.md @@ -1,5 +1,10 @@ ---- -category: majorAnalysis ---- +## 0.7.10 + +### Major Analysis Improvements + * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index f21e478efa6..8cc190fa880 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10-dev +version: 0.7.10 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index d95165a3a34..24e38b9890e 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 ### New Queries diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d91cab59612..4ded3a52f63 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10-dev +version: 0.7.10 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4a3c54adb38..c3282c773a9 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.17 + +No user-facing changes. + ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md new file mode 100644 index 00000000000..62cc89030a6 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.17.md @@ -0,0 +1,3 @@ +## 0.0.17 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index a49f7be4cff..cbc3d3cd493 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.16 +lastReleaseVersion: 0.0.17 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 898239be098..59fab0cdcc5 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17-dev +version: 0.0.17 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index d369cbdc931..2a02ccee6ab 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. + ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md deleted file mode 100644 index eb560fba07d..00000000000 --- a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md deleted file mode 100644 index cdc6d7620aa..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-error-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md deleted file mode 100644 index a0227088ae9..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..b45f14bf347 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..428eedc75e3 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10-dev +version: 0.8.10 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 5d835351453..c61275f5ed8 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + ## 0.8.9 ### New Queries diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md deleted file mode 100644 index 1de07727796..00000000000 --- a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md b/java/ql/src/change-notes/released/0.8.10.md similarity index 54% rename from java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md rename to java/ql/src/change-notes/released/0.8.10.md index 0bb4f18f2bd..c5d18ae3379 100644 --- a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md +++ b/java/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 8f4de528e21..ebbdbeee3b2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10-dev +version: 0.8.10 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 5b97ebbb22b..d5edcc00513 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ef3ca7521ac..da16493a21c 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10-dev +version: 0.8.10 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 85516e3625d..b9627cac5ee 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index b6181aa30e9..d224952c564 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10-dev +version: 0.8.10 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 3c06dd69b0f..1c4455b66c4 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 49b7a6bda4c..54d978d5efe 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10-dev +version: 0.7.10 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index e6f318c51ea..f095607ca1b 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.11.10 + +### Minor Analysis Improvements + +* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. + ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md deleted file mode 100644 index 3c47c6ba866..00000000000 --- a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md b/python/ql/lib/change-notes/released/0.11.10.md similarity index 52% rename from python/ql/lib/change-notes/2024-03-01-dict-update-content.md rename to python/ql/lib/change-notes/released/0.11.10.md index dfb8d247fff..ed873724e4f 100644 --- a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md +++ b/python/ql/lib/change-notes/released/0.11.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.11.10 + +### Minor Analysis Improvements + * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index b064d1778a1..ddddcbe9193 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.9 +lastReleaseVersion: 0.11.10 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e9f66e205f2..59a8b4c96d1 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10-dev +version: 0.11.10 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 50762bcbf34..d4245aba7a6 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.9.10 + +### New Queries + +* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/change-notes/2024-03-04-nosql-injection.md b/python/ql/src/change-notes/released/0.9.10.md similarity index 81% rename from python/ql/src/change-notes/2024-03-04-nosql-injection.md rename to python/ql/src/change-notes/released/0.9.10.md index 6e98540c757..4cbb221b789 100644 --- a/python/ql/src/change-notes/2024-03-04-nosql-injection.md +++ b/python/ql/src/change-notes/released/0.9.10.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 0.9.10 + +### New Queries + * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index aabed7c396b..d086ed69541 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.9 +lastReleaseVersion: 0.9.10 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index aa18f2d8707..c920f667836 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10-dev +version: 0.9.10 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a623a151e89..c61a12e0f4a 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md deleted file mode 100644 index c2276f284a8..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md deleted file mode 100644 index 1486c7a472d..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md deleted file mode 100644 index 6f3a90768ba..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md deleted file mode 100644 index 350e049b5bf..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..666e28f840e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,8 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7d409b83adb..de5b41999fe 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10-dev +version: 0.8.10 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 4149c728eff..f875b6d16ad 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md deleted file mode 100644 index 84ea696dfef..00000000000 --- a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md b/ruby/ql/src/change-notes/released/0.8.10.md similarity index 51% rename from ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md rename to ruby/ql/src/change-notes/released/0.8.10.md index 43e40d3fd53..985cdf8d22e 100644 --- a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md +++ b/ruby/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 8af7f9fd797..5e379268234 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10-dev +version: 0.8.10 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index dbfa6ef4512..75f2ca53f98 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1425c0edf7f..30f5ca88be0 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.10 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 9d35a678276..1d43802be42 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10-dev +version: 0.1.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 67a5bf589f4..ef80788bded 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.1 + +No user-facing changes. + ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..3dbfc85fe11 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.1.md @@ -0,0 +1,3 @@ +## 0.2.1 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 5274e27ed52..df29a726bcc 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.0 +lastReleaseVersion: 0.2.1 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 1e7becf71c4..ee422e02ea9 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1-dev +version: 0.2.1 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4d09057118c..4730366775e 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/mad/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 22c8f271ccc..6d7269ef3da 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5b8dbcfab22..9943dcb7972 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 836fe51ee34..01db5d5734d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9-dev +version: 0.0.9 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index cd5f91f71ec..c05869c153d 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/regex/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index ea3f7f9b238..0d4f485312f 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 01acfae0148..a9161ff578b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 19304ad107f..2ad254711a5 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d0ed9a913b2..60cbbc56fcb 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9-dev +version: 0.0.9 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1db3a01af0b..560ad058d5b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b595ae9ee70..69116705c1b 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: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index afc857bc6bc..350f9ecbeae 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index b55927f59bb..fbbdcf5162a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 66c5871d982..54b1eaa4d58 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typos/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 644bfe11bff..4d59d9b3c34 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 63832e927fa..1ca1f71bcbc 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/util/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ca1a866a53d..28ed738a93d 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e5495abcd50..9fd5ebc26ab 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index de5b47e120a..9643ffcec66 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index e88cd0259cc..8f14bfcedc9 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.3.10 + +### Bug Fixes + +* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md b/swift/ql/lib/change-notes/released/0.3.10.md similarity index 83% rename from swift/ql/lib/change-notes/2024-02-22-extension-patch.md rename to swift/ql/lib/change-notes/released/0.3.10.md index 7bd78f3b785..9d6286ff58a 100644 --- a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md +++ b/swift/ql/lib/change-notes/released/0.3.10.md @@ -1,4 +1,5 @@ ---- -category: fix ---- +## 0.3.10 + +### Bug Fixes + * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index a37a4cb3d58..70ec4798ea8 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10-dev +version: 0.3.10 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 96615d06972..bda9834c9bc 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.10 + +No user-facing changes. + ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md new file mode 100644 index 00000000000..925a48fc52e --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.10.md @@ -0,0 +1,3 @@ +## 0.3.10 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e3ead42c98b..ba66b065529 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10-dev +version: 0.3.10 groups: - swift - queries From 87f3b43576864cc32cd9b677bf62273c506388f1 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 5 Mar 2024 08:28:16 +0000 Subject: [PATCH 021/497] Ruby: remove deprecated private class --- ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index c8667b2b2f2..6fde1705018 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -441,11 +441,6 @@ class ActionControllerSkipForgeryProtectionCall extends CsrfProtectionSetting::R override boolean getVerificationSetting() { result = false } } -/** - * DEPRECATED: Use `ActionController::ProtectFromForgeryCall` instead. - */ -deprecated class ActionControllerProtectFromForgeryCall = ActionController::ProtectFromForgeryCall; - /** * A call to `send_file`, which sends the file at the given path to the client. */ From 2aa093c95cde5faed2aef27e119f8266e660863b Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 11:25:02 +0000 Subject: [PATCH 022/497] Go: Move `getImportPath` to shared `util` package --- .../cli/go-autobuilder/go-autobuilder.go | 60 +------------------ go/extractor/util/util.go | 59 ++++++++++++++++++ .../util_test.go} | 2 +- 3 files changed, 61 insertions(+), 60 deletions(-) rename go/extractor/{cli/go-autobuilder/go-autobuilder_test.go => util/util_test.go} (98%) diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder.go b/go/extractor/cli/go-autobuilder/go-autobuilder.go index 91291c77144..b2e2a78666f 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder.go +++ b/go/extractor/cli/go-autobuilder/go-autobuilder.go @@ -3,7 +3,6 @@ package main import ( "fmt" "log" - "net/url" "os" "os/exec" "path/filepath" @@ -56,63 +55,6 @@ Build behavior: fmt.Fprintf(os.Stderr, "Usage:\n\n %s\n", os.Args[0]) } -// Returns the import path of the package being built, or "" if it cannot be determined. -func getImportPath() (importpath string) { - importpath = os.Getenv("LGTM_INDEX_IMPORT_PATH") - if importpath == "" { - repourl := os.Getenv("SEMMLE_REPO_URL") - if repourl == "" { - githubrepo := os.Getenv("GITHUB_REPOSITORY") - if githubrepo == "" { - log.Printf("Unable to determine import path, as neither LGTM_INDEX_IMPORT_PATH nor GITHUB_REPOSITORY is set\n") - return "" - } else { - importpath = "github.com/" + githubrepo - } - } else { - importpath = getImportPathFromRepoURL(repourl) - if importpath == "" { - log.Printf("Failed to determine import path from SEMMLE_REPO_URL '%s'\n", repourl) - return - } - } - } - log.Printf("Import path is '%s'\n", importpath) - return -} - -// Returns the import path of the package being built from `repourl`, or "" if it cannot be -// determined. -func getImportPathFromRepoURL(repourl string) string { - // check for scp-like URL as in "git@github.com:github/codeql-go.git" - shorturl := regexp.MustCompile(`^([^@]+@)?([^:]+):([^/].*?)(\.git)?$`) - m := shorturl.FindStringSubmatch(repourl) - if m != nil { - return m[2] + "/" + m[3] - } - - // otherwise parse as proper URL - u, err := url.Parse(repourl) - if err != nil { - log.Fatalf("Malformed repository URL '%s'\n", repourl) - } - - if u.Scheme == "file" { - // we can't determine import paths from file paths - return "" - } - - if u.Hostname() == "" || u.Path == "" { - return "" - } - - host := u.Hostname() - path := u.Path - // strip off leading slashes and trailing `.git` if present - path = regexp.MustCompile(`^/+|\.git$`).ReplaceAllString(path, "") - return host + "/" + path -} - func restoreRepoLayout(fromDir string, dirEntries []string, scratchDirName string, toDir string) { for _, dirEntry := range dirEntries { if dirEntry != scratchDirName { @@ -568,7 +510,7 @@ func installDependenciesAndBuild() { if len(workspaces) == 1 { workspace := workspaces[0] - importpath := getImportPath() + importpath := util.GetImportPath() needGopath := getNeedGopath(workspace, importpath) inLGTM := os.Getenv("LGTM_SRC") != "" || os.Getenv("LGTM_INDEX_NEED_GOPATH") != "" diff --git a/go/extractor/util/util.go b/go/extractor/util/util.go index b5b28089e78..2ae6a2b0cd2 100644 --- a/go/extractor/util/util.go +++ b/go/extractor/util/util.go @@ -6,9 +6,11 @@ import ( "io" "io/fs" "log" + "net/url" "os" "os/exec" "path/filepath" + "regexp" "runtime" "slices" "strings" @@ -350,3 +352,60 @@ func GetParentDirs(paths []string) []string { } return dirs } + +// Returns the import path of the package being built, or "" if it cannot be determined. +func GetImportPath() (importpath string) { + importpath = os.Getenv("LGTM_INDEX_IMPORT_PATH") + if importpath == "" { + repourl := os.Getenv("SEMMLE_REPO_URL") + if repourl == "" { + githubrepo := os.Getenv("GITHUB_REPOSITORY") + if githubrepo == "" { + log.Printf("Unable to determine import path, as neither LGTM_INDEX_IMPORT_PATH nor GITHUB_REPOSITORY is set\n") + return "" + } else { + importpath = "github.com/" + githubrepo + } + } else { + importpath = getImportPathFromRepoURL(repourl) + if importpath == "" { + log.Printf("Failed to determine import path from SEMMLE_REPO_URL '%s'\n", repourl) + return + } + } + } + log.Printf("Import path is '%s'\n", importpath) + return +} + +// Returns the import path of the package being built from `repourl`, or "" if it cannot be +// determined. +func getImportPathFromRepoURL(repourl string) string { + // check for scp-like URL as in "git@github.com:github/codeql-go.git" + shorturl := regexp.MustCompile(`^([^@]+@)?([^:]+):([^/].*?)(\.git)?$`) + m := shorturl.FindStringSubmatch(repourl) + if m != nil { + return m[2] + "/" + m[3] + } + + // otherwise parse as proper URL + u, err := url.Parse(repourl) + if err != nil { + log.Fatalf("Malformed repository URL '%s'\n", repourl) + } + + if u.Scheme == "file" { + // we can't determine import paths from file paths + return "" + } + + if u.Hostname() == "" || u.Path == "" { + return "" + } + + host := u.Hostname() + path := u.Path + // strip off leading slashes and trailing `.git` if present + path = regexp.MustCompile(`^/+|\.git$`).ReplaceAllString(path, "") + return host + "/" + path +} diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder_test.go b/go/extractor/util/util_test.go similarity index 98% rename from go/extractor/cli/go-autobuilder/go-autobuilder_test.go rename to go/extractor/util/util_test.go index f4e8405fe36..45d32bda3e1 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder_test.go +++ b/go/extractor/util/util_test.go @@ -1,4 +1,4 @@ -package main +package util import "testing" From 367ecf75d5889bb20da8e8a2123804d6cb76d79b Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 11:37:51 +0000 Subject: [PATCH 023/497] Go: Use import path for auto-generated Go module names --- go/extractor/toolchain/toolchain.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 38abfd43874..104894c5975 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -5,8 +5,10 @@ import ( "log" "os" "os/exec" + "path/filepath" "strings" + "github.com/github/codeql-go/extractor/util" "golang.org/x/mod/semver" ) @@ -81,7 +83,20 @@ func TidyModule(path string) *exec.Cmd { // Run `go mod init` in the directory given by `path`. func InitModule(path string) *exec.Cmd { - modInit := exec.Command("go", "mod", "init", "codeql/auto-project") + moduleName := "codeql/auto-project" + + if importpath := util.GetImportPath(); importpath != "" { + // This should be something like `github.com/user/repo` + moduleName = importpath + + // If we are not initialising the new module in the root directory of the workspace, + // append the relative path to the module name. + if relPath, err := filepath.Rel(".", path); err != nil && relPath != "." { + moduleName = moduleName + "/" + relPath + } + } + + modInit := exec.Command("go", "mod", "init", moduleName) modInit.Dir = path return modInit } From b1e0bc03ab34a271563ac8a5ba66577b0f59b954 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 11:55:10 +0000 Subject: [PATCH 024/497] Go: Fix check for whether it is safe to initialise a `go.mod` file in a given directory --- go/extractor/project/project.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index 187389ecd55..9315a33f04c 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -439,8 +439,9 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul for _, component := range components { path = filepath.Join(path, component) - // Try to initialize a `go.mod` file automatically for the stray source files. - if !slices.Contains(goModDirs, path) { + // Try to initialize a `go.mod` file automatically for the stray source files if + // doing so would not place it in a parent directory of an existing `go.mod` file. + if !startsWithAnyOf(path, goModDirs) { goWorkspaces = append(goWorkspaces, GoWorkspace{ BaseDir: path, DepMode: GoGetNoModules, @@ -477,6 +478,16 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul return } +// Determines whether `str` starts with any of `prefixes`. +func startsWithAnyOf(str string, prefixes []string) bool { + for _, prefix := range prefixes { + if strings.HasPrefix(str, prefix) { + return true + } + } + return false +} + // Finds Go workspaces in the current working directory. func GetWorkspaceInfo(emitDiagnostics bool) []GoWorkspace { bazelPaths := slices.Concat( From ac394dc80ce6e3488285fd5abc01f2c5543ba0fb Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 13:46:33 +0000 Subject: [PATCH 025/497] Go: Better check for path prefixes --- go/extractor/project/project.go | 2 +- go/extractor/project/project_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 go/extractor/project/project_test.go diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index 9315a33f04c..22c0f856c79 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -481,7 +481,7 @@ func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModul // Determines whether `str` starts with any of `prefixes`. func startsWithAnyOf(str string, prefixes []string) bool { for _, prefix := range prefixes { - if strings.HasPrefix(str, prefix) { + if relPath, err := filepath.Rel(str, prefix); err == nil && !strings.HasPrefix(relPath, "..") { return true } } diff --git a/go/extractor/project/project_test.go b/go/extractor/project/project_test.go new file mode 100644 index 00000000000..f2de420773f --- /dev/null +++ b/go/extractor/project/project_test.go @@ -0,0 +1,27 @@ +package project + +import ( + "path/filepath" + "testing" +) + +func testStartsWithAnyOf(t *testing.T, path string, prefix string, expectation bool) { + result := startsWithAnyOf(path, []string{prefix}) + if result != expectation { + t.Errorf("Expected startsWithAnyOf(%s, %s) to be %t, but it is %t.", path, prefix, expectation, result) + } +} + +func TestStartsWithAnyOf(t *testing.T) { + testStartsWithAnyOf(t, ".", ".", true) + testStartsWithAnyOf(t, ".", "dir", true) + testStartsWithAnyOf(t, ".", filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, "dir", "dir", true) + testStartsWithAnyOf(t, "foo", filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "bar"), true) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "bar", "baz"), true) + + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), "foo", false) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), "bar", false) + testStartsWithAnyOf(t, filepath.Join("foo", "bar"), filepath.Join("foo", "baz"), false) +} From a8d240dd7278a4d0e73b92daff10bfd1e7d17d98 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 14:08:16 +0000 Subject: [PATCH 026/497] Go: Add integration test for mixed layout project --- .../go/mixed-layout/diagnostics.expected | 28 +++++++++++++++++++ .../force_sequential_test_execution | 2 ++ .../go/mixed-layout/src/module/go.mod | 5 ++++ .../go/mixed-layout/src/module/go.sum | 7 +++++ .../go/mixed-layout/src/module/test.go | 13 +++++++++ .../go/mixed-layout/src/stray-files/test.go | 13 +++++++++ .../go/mixed-layout/src/workspace/go.work | 3 ++ .../mixed-layout/src/workspace/subdir/go.mod | 5 ++++ .../mixed-layout/src/workspace/subdir/go.sum | 7 +++++ .../mixed-layout/src/workspace/subdir/test.go | 13 +++++++++ .../go/mixed-layout/test.expected | 8 ++++++ .../all-platforms/go/mixed-layout/test.py | 18 ++++++++++++ .../all-platforms/go/mixed-layout/test.ql | 8 ++++++ 13 files changed, 130 insertions(+) create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/test.py create mode 100644 go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected new file mode 100644 index 00000000000..bbbdd515d68 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "1 `go.work` file was found:\n\n`workspace/go.work`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/go-work-found", + "name": "`go.work` file found" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Go files were found outside of the Go modules corresponding to these `go.mod` files.\n\n`workspace/subdir/go.mod`, `module/go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/go-files-outside-go-modules", + "name": "Go files were found outside Go modules" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution b/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution new file mode 100644 index 00000000000..47ca9929099 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/force_sequential_test_execution @@ -0,0 +1,2 @@ +# go get has been observed to sometimes fail when multiple tests try to simultaneously fetch the same package. +goget diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod new file mode 100644 index 00000000000..0b8f33b9069 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.mod @@ -0,0 +1,5 @@ +go 1.14 + +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module module diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/module/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/stray-files/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work new file mode 100644 index 00000000000..e7e866fbe27 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/go.work @@ -0,0 +1,3 @@ +go 1.22.0 + +use ./subdir diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod new file mode 100644 index 00000000000..40a3b330c38 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.mod @@ -0,0 +1,5 @@ +go 1.22.0 + +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module subdir diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go new file mode 100644 index 00000000000..afc86ac3a12 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/src/workspace/subdir/test.go @@ -0,0 +1,13 @@ +package subdir + +import ( + "fmt" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + fmt.Print(header.String()) +} diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected new file mode 100644 index 00000000000..ddd1888562f --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.expected @@ -0,0 +1,8 @@ +extractedFiles +| src/module/go.mod:0:0:0:0 | src/module/go.mod | +| src/module/test.go:0:0:0:0 | src/module/test.go | +| src/stray-files/go.mod:0:0:0:0 | src/stray-files/go.mod | +| src/stray-files/test.go:0:0:0:0 | src/stray-files/test.go | +| src/workspace/subdir/go.mod:0:0:0:0 | src/workspace/subdir/go.mod | +| src/workspace/subdir/test.go:0:0:0:0 | src/workspace/subdir/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql new file mode 100644 index 00000000000..459a4301560 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/mixed-layout/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev From 40ff75db07a66f4663ba00b7d76ea8d7ff870aa6 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 5 Mar 2024 14:56:51 +0000 Subject: [PATCH 027/497] Go: Update list of expected files for `single-go-mod-and-go-files-not-under-it` test --- .../go/single-go-mod-and-go-files-not-under-it/test.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected index 957d2f845a4..66ba3ef588f 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected @@ -1,6 +1,4 @@ extractedFiles -| src/go.mod:0:0:0:0 | src/go.mod | -| src/main.go:0:0:0:0 | src/main.go | | src/subdir/go.mod:0:0:0:0 | src/subdir/go.mod | | src/subdir/subsubdir/add.go:0:0:0:0 | src/subdir/subsubdir/add.go | | src/subdir/test.go:0:0:0:0 | src/subdir/test.go | From 967963a6534b1fcdda3d4f5b6960c29346516303 Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Tue, 5 Mar 2024 08:53:33 -0800 Subject: [PATCH 028/497] Revert "Release preparation for version 2.16.4" --- cpp/ql/lib/CHANGELOG.md | 6 ------ ....12.7.md => 2024-02-26-ir-named-destructors.md} | 9 ++++----- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 ------- ...=> 2024-02-16-modelled-functions-block-flow.md} | 8 +++----- .../2024-02-29-non-constant-format-path-query.md | 4 ++++ 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.10.md | 3 --- .../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.10.md | 3 --- .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 14 -------------- .../change-notes/2024-02-21-getonly-properties.md | 4 ++++ .../ql/lib/change-notes/2024-02-22-no-db-stats.md | 4 ++++ .../change-notes/2024-02-23-compiler-generated.md | 4 ++++ .../2024-02-26-variable-capture-flow.md | 4 ++++ .../2024-02-28-experimental-attribute.md | 4 ++++ .../2024-02-28-refreadonly-parameter.md | 4 ++++ csharp/ql/lib/change-notes/released/0.8.10.md | 13 ------------- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ------ .../0.8.10.md => 2024-02-06-threat-models.md} | 9 ++++----- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.9.md | 3 --- go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 11 ----------- .../lib/change-notes/2024-02-14-range-map-read.md | 4 ++++ ...0.7.10.md => 2024-03-04-autobuilder-changes.md} | 11 +++-------- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ---- go/ql/src/change-notes/released/0.7.10.md | 3 --- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ---- .../automodel/src/change-notes/released/0.0.17.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 11 ----------- .../change-notes/2024-02-23-widget-flowsteps.md | 4 ++++ java/ql/lib/change-notes/2024-02-27-error-types.md | 4 ++++ .../lib/change-notes/2024-02-27-mvnw-versions.md | 4 ++++ java/ql/lib/change-notes/released/0.8.10.md | 10 ---------- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 ---------- .../2024-02-12-android-insecure-keys.md | 4 ++++ ...3-04-sensitive-log-remove-null-from-sources.md} | 11 +++-------- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ---- javascript/ql/lib/change-notes/released/0.8.10.md | 3 --- 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/0.8.10.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/0.7.10.md | 3 --- misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 ------- .../2024-02-28-iterable-unpacking-module-scope.md | 4 ++++ ....11.10.md => 2024-03-01-dict-update-content.md} | 8 +++----- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ------ .../0.9.10.md => 2024-03-04-nosql-injection.md} | 7 +++---- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 9 --------- ...2024-02-15-activerecord_connection_sql_sinks.md | 4 ++++ .../2024-02-20-activerecord-sql-sink-arguments.md | 4 ++++ .../lib/change-notes/2024-02-26-arel-sqlliteral.md | 4 ++++ .../lib/change-notes/2024-02-29-i18n-translate.md | 4 ++++ ruby/ql/lib/change-notes/released/0.8.10.md | 8 -------- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 7 ------- .../2024-02-13-rails-more-request-sources.md | 4 ++++ ...d => 2024-03-01-method-code-injection-sinks.md} | 10 ++++------ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ---- shared/controlflow/change-notes/released/0.1.10.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ---- shared/dataflow/change-notes/released/0.2.1.md | 3 --- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/0.2.10.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- .../rangeanalysis/change-notes/released/0.0.9.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/0.2.10.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/0.2.10.md | 3 --- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ---- .../threat-models/change-notes/released/0.0.9.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/0.2.10.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- .../typetracking/change-notes/released/0.2.10.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/0.2.10.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/0.2.10.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/0.2.10.md | 3 --- shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ------ .../0.3.10.md => 2024-02-22-extension-patch.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/0.3.10.md | 3 --- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 168 insertions(+), 394 deletions(-) rename cpp/ql/lib/change-notes/{released/0.12.7.md => 2024-02-26-ir-named-destructors.md} (54%) rename cpp/ql/src/change-notes/{released/0.9.6.md => 2024-02-16-modelled-functions-block-flow.md} (77%) create mode 100644 cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md create mode 100644 csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md create mode 100644 csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md create mode 100644 csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md create mode 100644 csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md create mode 100644 csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md create mode 100644 csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md delete mode 100644 csharp/ql/lib/change-notes/released/0.8.10.md rename csharp/ql/src/change-notes/{released/0.8.10.md => 2024-02-06-threat-models.md} (88%) delete mode 100644 go/ql/consistency-queries/change-notes/released/0.0.9.md create mode 100644 go/ql/lib/change-notes/2024-02-14-range-map-read.md rename go/ql/lib/change-notes/{released/0.7.10.md => 2024-03-04-autobuilder-changes.md} (68%) delete mode 100644 go/ql/src/change-notes/released/0.7.10.md delete mode 100644 java/ql/automodel/src/change-notes/released/0.0.17.md create mode 100644 java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md create mode 100644 java/ql/lib/change-notes/2024-02-27-error-types.md create mode 100644 java/ql/lib/change-notes/2024-02-27-mvnw-versions.md delete mode 100644 java/ql/lib/change-notes/released/0.8.10.md create mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md rename java/ql/src/change-notes/{released/0.8.10.md => 2024-03-04-sensitive-log-remove-null-from-sources.md} (54%) delete mode 100644 javascript/ql/lib/change-notes/released/0.8.10.md delete mode 100644 javascript/ql/src/change-notes/released/0.8.10.md delete mode 100644 misc/suite-helpers/change-notes/released/0.7.10.md create mode 100644 python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md rename python/ql/lib/change-notes/{released/0.11.10.md => 2024-03-01-dict-update-content.md} (52%) rename python/ql/src/change-notes/{released/0.9.10.md => 2024-03-04-nosql-injection.md} (81%) create mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md create mode 100644 ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md create mode 100644 ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md create mode 100644 ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md delete mode 100644 ruby/ql/lib/change-notes/released/0.8.10.md create mode 100644 ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md rename ruby/ql/src/change-notes/{released/0.8.10.md => 2024-03-01-method-code-injection-sinks.md} (51%) delete mode 100644 shared/controlflow/change-notes/released/0.1.10.md delete mode 100644 shared/dataflow/change-notes/released/0.2.1.md delete mode 100644 shared/mad/change-notes/released/0.2.10.md delete mode 100644 shared/rangeanalysis/change-notes/released/0.0.9.md delete mode 100644 shared/regex/change-notes/released/0.2.10.md delete mode 100644 shared/ssa/change-notes/released/0.2.10.md delete mode 100644 shared/threat-models/change-notes/released/0.0.9.md delete mode 100644 shared/tutorial/change-notes/released/0.2.10.md delete mode 100644 shared/typetracking/change-notes/released/0.2.10.md delete mode 100644 shared/typos/change-notes/released/0.2.10.md delete mode 100644 shared/util/change-notes/released/0.2.10.md delete mode 100644 shared/yaml/change-notes/released/0.2.10.md rename swift/ql/lib/change-notes/{released/0.3.10.md => 2024-02-22-extension-patch.md} (83%) delete mode 100644 swift/ql/src/change-notes/released/0.3.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index e1c0dfbecd9..b3091ec37d8 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.12.7 - -### Minor Analysis Improvements - -* Added destructors for named objects to the intermediate representation. - ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/released/0.12.7.md b/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md similarity index 54% rename from cpp/ql/lib/change-notes/released/0.12.7.md rename to cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md index 856a8b665c7..4e35decaf8e 100644 --- a/cpp/ql/lib/change-notes/released/0.12.7.md +++ b/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md @@ -1,5 +1,4 @@ -## 0.12.7 - -### Minor Analysis Improvements - -* Added destructors for named objects to the intermediate representation. +--- +category: minorAnalysis +--- +* Added destructors for named objects to the intermediate representation. \ No newline at end of file diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 20419e9c610..170a312c104 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.7 +lastReleaseVersion: 0.12.6 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 3bb9229bf94..8e201fff594 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7 +version: 0.12.7-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index f6acd424bb0..ffcd73ff5d7 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.9.6 - -### Minor Analysis Improvements - -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. -* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. - ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/released/0.9.6.md b/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md similarity index 77% rename from cpp/ql/src/change-notes/released/0.9.6.md rename to cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md index 0c85f3f9f0f..d6ef3c3e056 100644 --- a/cpp/ql/src/change-notes/released/0.9.6.md +++ b/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md @@ -1,6 +1,4 @@ -## 0.9.6 - -### Minor Analysis Improvements - -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +--- +category: minorAnalysis +--- * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md new file mode 100644 index 00000000000..2e5933a61e8 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 19139c132b2..460240feaff 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.6 +lastReleaseVersion: 0.9.5 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 4052647bb97..31bd20166b2 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6 +version: 0.9.6-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 82eacfc84f7..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.10 - -No user-facing changes. - ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md deleted file mode 100644 index 8e8007d8475..00000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.10 - -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 31c7fe07020..678da6bc37e 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.10 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index ee993bed0c9..7e643b0fac3 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.10 +version: 1.7.10-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 82eacfc84f7..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.10 - -No user-facing changes. - ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md deleted file mode 100644 index 8e8007d8475..00000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.10 - -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 31c7fe07020..678da6bc37e 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.10 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1f421754fc8..8654bbfd031 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.10 +version: 1.7.10-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 16cc14259e1..95fd64c5270 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,17 +1,3 @@ -## 0.8.10 - -### Major Analysis Improvements - -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. - -### Minor Analysis Improvements - -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. -* C# 12: Add extractor and QL library support for `ref readonly` parameters. -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md new file mode 100644 index 00000000000..6bb8e99c71e --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md new file mode 100644 index 00000000000..d6ffbd523ac --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md new file mode 100644 index 00000000000..9b1739b9b6d --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md new file mode 100644 index 00000000000..66ab65083dc --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md new file mode 100644 index 00000000000..8749c790954 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md new file mode 100644 index 00000000000..586b5341d29 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index f591ddc5b21..00000000000 --- a/csharp/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,13 +0,0 @@ -## 0.8.10 - -### Major Analysis Improvements - -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. - -### Minor Analysis Improvements - -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. -* C# 12: Add extractor and QL library support for `ref readonly` parameters. -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 93c5c1120a2..d75ea3c6320 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10 +version: 0.8.10-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 46c939e5cee..9fe1609363f 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/0.8.10.md b/csharp/ql/src/change-notes/2024-02-06-threat-models.md similarity index 88% rename from csharp/ql/src/change-notes/released/0.8.10.md rename to csharp/ql/src/change-notes/2024-02-06-threat-models.md index 702161c3d28..69ac4e4dc17 100644 --- a/csharp/ql/src/change-notes/released/0.8.10.md +++ b/csharp/ql/src/change-notes/2024-02-06-threat-models.md @@ -1,5 +1,4 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. +--- +category: minorAnalysis +--- +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 46384094b19..9ee23cc7307 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10 +version: 0.8.10-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index a59e560c415..fba2a870356 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/go/ql/consistency-queries/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -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 ecdd64fbab8..58fdc6b45de 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index d5a2fbee5f1..b574796b995 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: 0.0.9 +version: 0.0.9-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index fee5fd37a26..65a2376217b 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.7.10 - -### Major Analysis Improvements - -* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. -* Go 1.22 has been included in the range of supported Go versions. - -### Bug Fixes - -* Fixed dataflow out of a `map` using a `range` statement. - ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md new file mode 100644 index 00000000000..ea45737a72e --- /dev/null +++ b/go/ql/lib/change-notes/2024-02-14-range-map-read.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/released/0.7.10.md b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md similarity index 68% rename from go/ql/lib/change-notes/released/0.7.10.md rename to go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md index 55954f8a394..0442a571029 100644 --- a/go/ql/lib/change-notes/released/0.7.10.md +++ b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md @@ -1,10 +1,5 @@ -## 0.7.10 - -### Major Analysis Improvements - +--- +category: majorAnalysis +--- * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. - -### Bug Fixes - -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 8cc190fa880..f21e478efa6 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10 +version: 0.7.10-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 24e38b9890e..d95165a3a34 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.10 - -No user-facing changes. - ## 0.7.9 ### New Queries diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md deleted file mode 100644 index 989c5b8f682..00000000000 --- a/go/ql/src/change-notes/released/0.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.10 - -No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4ded3a52f63..d91cab59612 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10 +version: 0.7.10-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index c3282c773a9..4a3c54adb38 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.17 - -No user-facing changes. - ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md deleted file mode 100644 index 62cc89030a6..00000000000 --- a/java/ql/automodel/src/change-notes/released/0.0.17.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.17 - -No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index cbc3d3cd493..a49f7be4cff 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.17 +lastReleaseVersion: 0.0.16 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 59fab0cdcc5..898239be098 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17 +version: 0.0.17-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2a02ccee6ab..d369cbdc931 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. - -### Bug Fixes - -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. - ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md new file mode 100644 index 00000000000..eb560fba07d --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md new file mode 100644 index 00000000000..cdc6d7620aa --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-27-error-types.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md new file mode 100644 index 00000000000..a0227088ae9 --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index b45f14bf347..00000000000 --- a/java/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,10 +0,0 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. - -### Bug Fixes - -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 428eedc75e3..15b4982d41e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10 +version: 0.8.10-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index c61275f5ed8..5d835351453 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.8.10 - -### New Queries - -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. - -### Minor Analysis Improvements - -* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. - ## 0.8.9 ### New Queries diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md new file mode 100644 index 00000000000..1de07727796 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.10.md b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md similarity index 54% rename from java/ql/src/change-notes/released/0.8.10.md rename to java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md index c5d18ae3379..0bb4f18f2bd 100644 --- a/java/ql/src/change-notes/released/0.8.10.md +++ b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md @@ -1,9 +1,4 @@ -## 0.8.10 - -### New Queries - -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ebbdbeee3b2..8f4de528e21 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10 +version: 0.8.10-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index d5edcc00513..5b97ebbb22b 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.10 - -No user-facing changes. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index 777bbd2fded..00000000000 --- a/javascript/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.10 - -No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index da16493a21c..ef3ca7521ac 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10 +version: 0.8.10-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index b9627cac5ee..85516e3625d 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.10 - -No user-facing changes. - ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md deleted file mode 100644 index 777bbd2fded..00000000000 --- a/javascript/ql/src/change-notes/released/0.8.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.10 - -No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index d224952c564..b6181aa30e9 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10 +version: 0.8.10-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1c4455b66c4..3c06dd69b0f 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.10 - -No user-facing changes. - ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md deleted file mode 100644 index 989c5b8f682..00000000000 --- a/misc/suite-helpers/change-notes/released/0.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.10 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 54d978d5efe..49b7a6bda4c 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10 +version: 0.7.10-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index f095607ca1b..e6f318c51ea 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.11.10 - -### Minor Analysis Improvements - -* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. - ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md new file mode 100644 index 00000000000..3c47c6ba866 --- /dev/null +++ b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/released/0.11.10.md b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md similarity index 52% rename from python/ql/lib/change-notes/released/0.11.10.md rename to python/ql/lib/change-notes/2024-03-01-dict-update-content.md index ed873724e4f..dfb8d247fff 100644 --- a/python/ql/lib/change-notes/released/0.11.10.md +++ b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md @@ -1,6 +1,4 @@ -## 0.11.10 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index ddddcbe9193..b064d1778a1 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.10 +lastReleaseVersion: 0.11.9 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 59a8b4c96d1..e9f66e205f2 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10 +version: 0.11.10-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index d4245aba7a6..50762bcbf34 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.9.10 - -### New Queries - -* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. - ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.10.md b/python/ql/src/change-notes/2024-03-04-nosql-injection.md similarity index 81% rename from python/ql/src/change-notes/released/0.9.10.md rename to python/ql/src/change-notes/2024-03-04-nosql-injection.md index 4cbb221b789..6e98540c757 100644 --- a/python/ql/src/change-notes/released/0.9.10.md +++ b/python/ql/src/change-notes/2024-03-04-nosql-injection.md @@ -1,5 +1,4 @@ -## 0.9.10 - -### New Queries - +--- +category: newQuery +--- * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index d086ed69541..aabed7c396b 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.10 +lastReleaseVersion: 0.9.9 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index c920f667836..aa18f2d8707 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10 +version: 0.9.10-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index c61a12e0f4a..a623a151e89 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,12 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md new file mode 100644 index 00000000000..c2276f284a8 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md new file mode 100644 index 00000000000..1486c7a472d --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md new file mode 100644 index 00000000000..6f3a90768ba --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md new file mode 100644 index 00000000000..350e049b5bf --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index 666e28f840e..00000000000 --- a/ruby/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,8 +0,0 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index de5b41999fe..7d409b83adb 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10 +version: 0.8.10-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index f875b6d16ad..4149c728eff 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. -* Added additional request sources for Ruby on Rails. - ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md new file mode 100644 index 00000000000..84ea696dfef --- /dev/null +++ b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/released/0.8.10.md b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md similarity index 51% rename from ruby/ql/src/change-notes/released/0.8.10.md rename to ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md index 985cdf8d22e..43e40d3fd53 100644 --- a/ruby/ql/src/change-notes/released/0.8.10.md +++ b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md @@ -1,6 +1,4 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. -* Added additional request sources for Ruby on Rails. +--- +category: minorAnalysis +--- +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 5e379268234..8af7f9fd797 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10 +version: 0.8.10-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 75f2ca53f98..dbfa6ef4512 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.1.10 - -No user-facing changes. - ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md deleted file mode 100644 index 47358eeee93..00000000000 --- a/shared/controlflow/change-notes/released/0.1.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.1.10 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 30f5ca88be0..1425c0edf7f 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.10 +lastReleaseVersion: 0.1.9 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 1d43802be42..9d35a678276 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10 +version: 0.1.10-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index ef80788bded..67a5bf589f4 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.1 - -No user-facing changes. - ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md deleted file mode 100644 index 3dbfc85fe11..00000000000 --- a/shared/dataflow/change-notes/released/0.2.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.1 - -No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index df29a726bcc..5274e27ed52 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.1 +lastReleaseVersion: 0.2.0 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ee422e02ea9..1e7becf71c4 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1 +version: 0.2.1-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4730366775e..4d09057118c 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/mad/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 6d7269ef3da..22c8f271ccc 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 9943dcb7972..5b8dbcfab22 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/shared/rangeanalysis/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index ecdd64fbab8..58fdc6b45de 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 01db5d5734d..836fe51ee34 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9 +version: 0.0.9-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index c05869c153d..cd5f91f71ec 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/regex/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 0d4f485312f..ea3f7f9b238 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index a9161ff578b..01acfae0148 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/ssa/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 2ad254711a5..19304ad107f 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index a59e560c415..fba2a870356 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/shared/threat-models/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index ecdd64fbab8..58fdc6b45de 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 60cbbc56fcb..d0ed9a913b2 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9 +version: 0.0.9-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 560ad058d5b..1db3a01af0b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/tutorial/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 69116705c1b..b595ae9ee70 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: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 350f9ecbeae..afc857bc6bc 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/typetracking/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index fbbdcf5162a..b55927f59bb 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 54b1eaa4d58..66c5871d982 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/typos/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4d59d9b3c34..644bfe11bff 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 1ca1f71bcbc..63832e927fa 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/util/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 28ed738a93d..ca1a866a53d 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 9fd5ebc26ab..e5495abcd50 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/yaml/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 9643ffcec66..de5b47e120a 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 8f14bfcedc9..e88cd0259cc 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.3.10 - -### Bug Fixes - -* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. - ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.10.md b/swift/ql/lib/change-notes/2024-02-22-extension-patch.md similarity index 83% rename from swift/ql/lib/change-notes/released/0.3.10.md rename to swift/ql/lib/change-notes/2024-02-22-extension-patch.md index 9d6286ff58a..7bd78f3b785 100644 --- a/swift/ql/lib/change-notes/released/0.3.10.md +++ b/swift/ql/lib/change-notes/2024-02-22-extension-patch.md @@ -1,5 +1,4 @@ -## 0.3.10 - -### Bug Fixes - +--- +category: fix +--- * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 76ca0ac8ba7..3fa5180bcb4 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.9 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 70ec4798ea8..a37a4cb3d58 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10 +version: 0.3.10-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index bda9834c9bc..96615d06972 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.3.10 - -No user-facing changes. - ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md deleted file mode 100644 index 925a48fc52e..00000000000 --- a/swift/ql/src/change-notes/released/0.3.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.3.10 - -No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 76ca0ac8ba7..3fa5180bcb4 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.9 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index ba66b065529..e3ead42c98b 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10 +version: 0.3.10-dev groups: - swift - queries From 661e68dab5ee8d71edcec82139314a481dd983d5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 5 Mar 2024 18:13:58 +0000 Subject: [PATCH 029/497] Release preparation for version 2.16.4 --- cpp/ql/lib/CHANGELOG.md | 6 ++++++ .../0.12.7.md} | 9 +++++---- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-29-non-constant-format-path-query.md | 4 ---- .../0.9.6.md} | 8 +++++--- 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.10.md | 3 +++ .../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.10.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 14 ++++++++++++++ .../change-notes/2024-02-21-getonly-properties.md | 4 ---- .../ql/lib/change-notes/2024-02-22-no-db-stats.md | 4 ---- .../change-notes/2024-02-23-compiler-generated.md | 4 ---- .../2024-02-26-variable-capture-flow.md | 4 ---- .../2024-02-28-experimental-attribute.md | 4 ---- .../2024-02-28-refreadonly-parameter.md | 4 ---- csharp/ql/lib/change-notes/released/0.8.10.md | 13 +++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../0.8.10.md} | 9 +++++---- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.9.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 11 +++++++++++ .../lib/change-notes/2024-02-14-range-map-read.md | 4 ---- .../0.7.10.md} | 11 ++++++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.10.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../automodel/src/change-notes/released/0.0.17.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 11 +++++++++++ .../change-notes/2024-02-23-widget-flowsteps.md | 4 ---- java/ql/lib/change-notes/2024-02-27-error-types.md | 4 ---- .../lib/change-notes/2024-02-27-mvnw-versions.md | 4 ---- java/ql/lib/change-notes/released/0.8.10.md | 10 ++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 ++++++++++ .../2024-02-12-android-insecure-keys.md | 4 ---- .../0.8.10.md} | 11 ++++++++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.10.md | 3 +++ 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/0.8.10.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/0.7.10.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 +++++++ .../2024-02-28-iterable-unpacking-module-scope.md | 4 ---- .../0.11.10.md} | 8 +++++--- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../0.9.10.md} | 7 ++++--- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 9 +++++++++ ...2024-02-15-activerecord_connection_sql_sinks.md | 4 ---- .../2024-02-20-activerecord-sql-sink-arguments.md | 4 ---- .../lib/change-notes/2024-02-26-arel-sqlliteral.md | 4 ---- .../lib/change-notes/2024-02-29-i18n-translate.md | 4 ---- ruby/ql/lib/change-notes/released/0.8.10.md | 8 ++++++++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-13-rails-more-request-sources.md | 4 ---- .../0.8.10.md} | 10 ++++++---- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.10.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.2.1.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.10.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/0.0.9.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.10.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.10.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../threat-models/change-notes/released/0.0.9.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/0.2.10.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/0.2.10.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.10.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.10.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.10.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++++ .../0.3.10.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/0.3.10.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 394 insertions(+), 168 deletions(-) rename cpp/ql/lib/change-notes/{2024-02-26-ir-named-destructors.md => released/0.12.7.md} (54%) delete mode 100644 cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md rename cpp/ql/src/change-notes/{2024-02-16-modelled-functions-block-flow.md => released/0.9.6.md} (77%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.10.md rename csharp/ql/src/change-notes/{2024-02-06-threat-models.md => released/0.8.10.md} (88%) create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.9.md delete mode 100644 go/ql/lib/change-notes/2024-02-14-range-map-read.md rename go/ql/lib/change-notes/{2024-03-04-autobuilder-changes.md => released/0.7.10.md} (68%) create mode 100644 go/ql/src/change-notes/released/0.7.10.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.17.md delete mode 100644 java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-error-types.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-mvnw-versions.md create mode 100644 java/ql/lib/change-notes/released/0.8.10.md delete mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md rename java/ql/src/change-notes/{2024-03-04-sensitive-log-remove-null-from-sources.md => released/0.8.10.md} (54%) create mode 100644 javascript/ql/lib/change-notes/released/0.8.10.md create mode 100644 javascript/ql/src/change-notes/released/0.8.10.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.10.md delete mode 100644 python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md rename python/ql/lib/change-notes/{2024-03-01-dict-update-content.md => released/0.11.10.md} (52%) rename python/ql/src/change-notes/{2024-03-04-nosql-injection.md => released/0.9.10.md} (81%) delete mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.10.md delete mode 100644 ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md rename ruby/ql/src/change-notes/{2024-03-01-method-code-injection-sinks.md => released/0.8.10.md} (51%) create mode 100644 shared/controlflow/change-notes/released/0.1.10.md create mode 100644 shared/dataflow/change-notes/released/0.2.1.md create mode 100644 shared/mad/change-notes/released/0.2.10.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.9.md create mode 100644 shared/regex/change-notes/released/0.2.10.md create mode 100644 shared/ssa/change-notes/released/0.2.10.md create mode 100644 shared/threat-models/change-notes/released/0.0.9.md create mode 100644 shared/tutorial/change-notes/released/0.2.10.md create mode 100644 shared/typetracking/change-notes/released/0.2.10.md create mode 100644 shared/typos/change-notes/released/0.2.10.md create mode 100644 shared/util/change-notes/released/0.2.10.md create mode 100644 shared/yaml/change-notes/released/0.2.10.md rename swift/ql/lib/change-notes/{2024-02-22-extension-patch.md => released/0.3.10.md} (83%) create mode 100644 swift/ql/src/change-notes/released/0.3.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b3091ec37d8..e1c0dfbecd9 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. + ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md b/cpp/ql/lib/change-notes/released/0.12.7.md similarity index 54% rename from cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md rename to cpp/ql/lib/change-notes/released/0.12.7.md index 4e35decaf8e..856a8b665c7 100644 --- a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md +++ b/cpp/ql/lib/change-notes/released/0.12.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Added destructors for named objects to the intermediate representation. \ No newline at end of file +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 170a312c104..20419e9c610 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.6 +lastReleaseVersion: 0.12.7 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8e201fff594..3bb9229bf94 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7-dev +version: 0.12.7 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index ffcd73ff5d7..f6acd424bb0 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. + ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md deleted file mode 100644 index 2e5933a61e8..00000000000 --- a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md b/cpp/ql/src/change-notes/released/0.9.6.md similarity index 77% rename from cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md rename to cpp/ql/src/change-notes/released/0.9.6.md index d6ef3c3e056..0c85f3f9f0f 100644 --- a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md +++ b/cpp/ql/src/change-notes/released/0.9.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 460240feaff..19139c132b2 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.5 +lastReleaseVersion: 0.9.6 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 31bd20166b2..4052647bb97 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6-dev +version: 0.9.6 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7e643b0fac3..ee993bed0c9 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 8654bbfd031..1f421754fc8 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 95fd64c5270..16cc14259e1 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md deleted file mode 100644 index 6bb8e99c71e..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md deleted file mode 100644 index d6ffbd523ac..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md deleted file mode 100644 index 9b1739b9b6d..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md deleted file mode 100644 index 66ab65083dc..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md deleted file mode 100644 index 8749c790954..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md deleted file mode 100644 index 586b5341d29..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..f591ddc5b21 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,13 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d75ea3c6320..93c5c1120a2 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10-dev +version: 0.8.10 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 9fe1609363f..46c939e5cee 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/2024-02-06-threat-models.md b/csharp/ql/src/change-notes/released/0.8.10.md similarity index 88% rename from csharp/ql/src/change-notes/2024-02-06-threat-models.md rename to csharp/ql/src/change-notes/released/0.8.10.md index 69ac4e4dc17..702161c3d28 100644 --- a/csharp/ql/src/change-notes/2024-02-06-threat-models.md +++ b/csharp/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 9ee23cc7307..46384094b19 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10-dev +version: 0.8.10 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +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 58fdc6b45de..ecdd64fbab8 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index b574796b995..d5a2fbee5f1 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: 0.0.9-dev +version: 0.0.9 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 65a2376217b..fee5fd37a26 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.10 + +### Major Analysis Improvements + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. + ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md deleted file mode 100644 index ea45737a72e..00000000000 --- a/go/ql/lib/change-notes/2024-02-14-range-map-read.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md b/go/ql/lib/change-notes/released/0.7.10.md similarity index 68% rename from go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md rename to go/ql/lib/change-notes/released/0.7.10.md index 0442a571029..55954f8a394 100644 --- a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md +++ b/go/ql/lib/change-notes/released/0.7.10.md @@ -1,5 +1,10 @@ ---- -category: majorAnalysis ---- +## 0.7.10 + +### Major Analysis Improvements + * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index f21e478efa6..8cc190fa880 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10-dev +version: 0.7.10 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index d95165a3a34..24e38b9890e 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 ### New Queries diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d91cab59612..4ded3a52f63 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10-dev +version: 0.7.10 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4a3c54adb38..c3282c773a9 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.17 + +No user-facing changes. + ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md new file mode 100644 index 00000000000..62cc89030a6 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.17.md @@ -0,0 +1,3 @@ +## 0.0.17 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index a49f7be4cff..cbc3d3cd493 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.16 +lastReleaseVersion: 0.0.17 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 898239be098..59fab0cdcc5 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17-dev +version: 0.0.17 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index d369cbdc931..2a02ccee6ab 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. + ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md deleted file mode 100644 index eb560fba07d..00000000000 --- a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md deleted file mode 100644 index cdc6d7620aa..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-error-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md deleted file mode 100644 index a0227088ae9..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..b45f14bf347 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..428eedc75e3 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10-dev +version: 0.8.10 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 5d835351453..c61275f5ed8 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + ## 0.8.9 ### New Queries diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md deleted file mode 100644 index 1de07727796..00000000000 --- a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md b/java/ql/src/change-notes/released/0.8.10.md similarity index 54% rename from java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md rename to java/ql/src/change-notes/released/0.8.10.md index 0bb4f18f2bd..c5d18ae3379 100644 --- a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md +++ b/java/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 8f4de528e21..ebbdbeee3b2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10-dev +version: 0.8.10 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 5b97ebbb22b..d5edcc00513 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ef3ca7521ac..da16493a21c 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10-dev +version: 0.8.10 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 85516e3625d..b9627cac5ee 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index b6181aa30e9..d224952c564 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10-dev +version: 0.8.10 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 3c06dd69b0f..1c4455b66c4 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 49b7a6bda4c..54d978d5efe 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10-dev +version: 0.7.10 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index e6f318c51ea..f095607ca1b 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.11.10 + +### Minor Analysis Improvements + +* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. + ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md deleted file mode 100644 index 3c47c6ba866..00000000000 --- a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md b/python/ql/lib/change-notes/released/0.11.10.md similarity index 52% rename from python/ql/lib/change-notes/2024-03-01-dict-update-content.md rename to python/ql/lib/change-notes/released/0.11.10.md index dfb8d247fff..ed873724e4f 100644 --- a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md +++ b/python/ql/lib/change-notes/released/0.11.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.11.10 + +### Minor Analysis Improvements + * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index b064d1778a1..ddddcbe9193 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.9 +lastReleaseVersion: 0.11.10 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e9f66e205f2..59a8b4c96d1 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10-dev +version: 0.11.10 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 50762bcbf34..d4245aba7a6 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.9.10 + +### New Queries + +* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/change-notes/2024-03-04-nosql-injection.md b/python/ql/src/change-notes/released/0.9.10.md similarity index 81% rename from python/ql/src/change-notes/2024-03-04-nosql-injection.md rename to python/ql/src/change-notes/released/0.9.10.md index 6e98540c757..4cbb221b789 100644 --- a/python/ql/src/change-notes/2024-03-04-nosql-injection.md +++ b/python/ql/src/change-notes/released/0.9.10.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 0.9.10 + +### New Queries + * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index aabed7c396b..d086ed69541 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.9 +lastReleaseVersion: 0.9.10 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index aa18f2d8707..c920f667836 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10-dev +version: 0.9.10 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a623a151e89..c61a12e0f4a 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md deleted file mode 100644 index c2276f284a8..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md deleted file mode 100644 index 1486c7a472d..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md deleted file mode 100644 index 6f3a90768ba..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md deleted file mode 100644 index 350e049b5bf..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..666e28f840e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,8 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7d409b83adb..de5b41999fe 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10-dev +version: 0.8.10 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 4149c728eff..f875b6d16ad 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md deleted file mode 100644 index 84ea696dfef..00000000000 --- a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md b/ruby/ql/src/change-notes/released/0.8.10.md similarity index 51% rename from ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md rename to ruby/ql/src/change-notes/released/0.8.10.md index 43e40d3fd53..985cdf8d22e 100644 --- a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md +++ b/ruby/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 8af7f9fd797..5e379268234 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10-dev +version: 0.8.10 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index dbfa6ef4512..75f2ca53f98 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1425c0edf7f..30f5ca88be0 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.10 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 9d35a678276..1d43802be42 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10-dev +version: 0.1.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 67a5bf589f4..ef80788bded 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.1 + +No user-facing changes. + ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..3dbfc85fe11 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.1.md @@ -0,0 +1,3 @@ +## 0.2.1 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 5274e27ed52..df29a726bcc 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.0 +lastReleaseVersion: 0.2.1 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 1e7becf71c4..ee422e02ea9 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1-dev +version: 0.2.1 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4d09057118c..4730366775e 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/mad/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 22c8f271ccc..6d7269ef3da 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5b8dbcfab22..9943dcb7972 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 836fe51ee34..01db5d5734d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9-dev +version: 0.0.9 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index cd5f91f71ec..c05869c153d 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/regex/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index ea3f7f9b238..0d4f485312f 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 01acfae0148..a9161ff578b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 19304ad107f..2ad254711a5 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d0ed9a913b2..60cbbc56fcb 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9-dev +version: 0.0.9 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1db3a01af0b..560ad058d5b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b595ae9ee70..69116705c1b 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: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index afc857bc6bc..350f9ecbeae 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index b55927f59bb..fbbdcf5162a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 66c5871d982..54b1eaa4d58 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typos/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 644bfe11bff..4d59d9b3c34 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 63832e927fa..1ca1f71bcbc 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/util/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ca1a866a53d..28ed738a93d 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e5495abcd50..9fd5ebc26ab 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index de5b47e120a..9643ffcec66 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index e88cd0259cc..8f14bfcedc9 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.3.10 + +### Bug Fixes + +* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md b/swift/ql/lib/change-notes/released/0.3.10.md similarity index 83% rename from swift/ql/lib/change-notes/2024-02-22-extension-patch.md rename to swift/ql/lib/change-notes/released/0.3.10.md index 7bd78f3b785..9d6286ff58a 100644 --- a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md +++ b/swift/ql/lib/change-notes/released/0.3.10.md @@ -1,4 +1,5 @@ ---- -category: fix ---- +## 0.3.10 + +### Bug Fixes + * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index a37a4cb3d58..70ec4798ea8 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10-dev +version: 0.3.10 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 96615d06972..bda9834c9bc 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.10 + +No user-facing changes. + ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md new file mode 100644 index 00000000000..925a48fc52e --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.10.md @@ -0,0 +1,3 @@ +## 0.3.10 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e3ead42c98b..ba66b065529 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10-dev +version: 0.3.10 groups: - swift - queries From ce31f8641a4c4f83c8665bdf48de524862aa15c7 Mon Sep 17 00:00:00 2001 From: Angela P Wen Date: Wed, 6 Mar 2024 12:07:33 -0800 Subject: [PATCH 030/497] Revert "Release preparation for version 2.16.4" --- cpp/ql/lib/CHANGELOG.md | 6 ------ ....12.7.md => 2024-02-26-ir-named-destructors.md} | 9 ++++----- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 ------- ...=> 2024-02-16-modelled-functions-block-flow.md} | 8 +++----- .../2024-02-29-non-constant-format-path-query.md | 4 ++++ 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.10.md | 3 --- .../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.10.md | 3 --- .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 14 -------------- .../change-notes/2024-02-21-getonly-properties.md | 4 ++++ .../ql/lib/change-notes/2024-02-22-no-db-stats.md | 4 ++++ .../change-notes/2024-02-23-compiler-generated.md | 4 ++++ .../2024-02-26-variable-capture-flow.md | 4 ++++ .../2024-02-28-experimental-attribute.md | 4 ++++ .../2024-02-28-refreadonly-parameter.md | 4 ++++ csharp/ql/lib/change-notes/released/0.8.10.md | 13 ------------- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ------ .../0.8.10.md => 2024-02-06-threat-models.md} | 9 ++++----- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.9.md | 3 --- go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 11 ----------- .../lib/change-notes/2024-02-14-range-map-read.md | 4 ++++ ...0.7.10.md => 2024-03-04-autobuilder-changes.md} | 11 +++-------- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ---- go/ql/src/change-notes/released/0.7.10.md | 3 --- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ---- .../automodel/src/change-notes/released/0.0.17.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 11 ----------- .../change-notes/2024-02-23-widget-flowsteps.md | 4 ++++ java/ql/lib/change-notes/2024-02-27-error-types.md | 4 ++++ .../lib/change-notes/2024-02-27-mvnw-versions.md | 4 ++++ java/ql/lib/change-notes/released/0.8.10.md | 10 ---------- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 ---------- .../2024-02-12-android-insecure-keys.md | 4 ++++ ...3-04-sensitive-log-remove-null-from-sources.md} | 11 +++-------- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ---- javascript/ql/lib/change-notes/released/0.8.10.md | 3 --- 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/0.8.10.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/0.7.10.md | 3 --- misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 ------- .../2024-02-28-iterable-unpacking-module-scope.md | 4 ++++ ....11.10.md => 2024-03-01-dict-update-content.md} | 8 +++----- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ------ .../0.9.10.md => 2024-03-04-nosql-injection.md} | 7 +++---- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 9 --------- ...2024-02-15-activerecord_connection_sql_sinks.md | 4 ++++ .../2024-02-20-activerecord-sql-sink-arguments.md | 4 ++++ .../lib/change-notes/2024-02-26-arel-sqlliteral.md | 4 ++++ .../lib/change-notes/2024-02-29-i18n-translate.md | 4 ++++ ruby/ql/lib/change-notes/released/0.8.10.md | 8 -------- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 7 ------- .../2024-02-13-rails-more-request-sources.md | 4 ++++ ...d => 2024-03-01-method-code-injection-sinks.md} | 10 ++++------ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ---- shared/controlflow/change-notes/released/0.1.10.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ---- shared/dataflow/change-notes/released/0.2.1.md | 3 --- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/0.2.10.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- .../rangeanalysis/change-notes/released/0.0.9.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/0.2.10.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/0.2.10.md | 3 --- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ---- .../threat-models/change-notes/released/0.0.9.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/0.2.10.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- .../typetracking/change-notes/released/0.2.10.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/0.2.10.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/0.2.10.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/0.2.10.md | 3 --- shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ------ .../0.3.10.md => 2024-02-22-extension-patch.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/0.3.10.md | 3 --- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 168 insertions(+), 394 deletions(-) rename cpp/ql/lib/change-notes/{released/0.12.7.md => 2024-02-26-ir-named-destructors.md} (54%) rename cpp/ql/src/change-notes/{released/0.9.6.md => 2024-02-16-modelled-functions-block-flow.md} (77%) create mode 100644 cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md create mode 100644 csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md create mode 100644 csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md create mode 100644 csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md create mode 100644 csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md create mode 100644 csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md create mode 100644 csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md delete mode 100644 csharp/ql/lib/change-notes/released/0.8.10.md rename csharp/ql/src/change-notes/{released/0.8.10.md => 2024-02-06-threat-models.md} (88%) delete mode 100644 go/ql/consistency-queries/change-notes/released/0.0.9.md create mode 100644 go/ql/lib/change-notes/2024-02-14-range-map-read.md rename go/ql/lib/change-notes/{released/0.7.10.md => 2024-03-04-autobuilder-changes.md} (68%) delete mode 100644 go/ql/src/change-notes/released/0.7.10.md delete mode 100644 java/ql/automodel/src/change-notes/released/0.0.17.md create mode 100644 java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md create mode 100644 java/ql/lib/change-notes/2024-02-27-error-types.md create mode 100644 java/ql/lib/change-notes/2024-02-27-mvnw-versions.md delete mode 100644 java/ql/lib/change-notes/released/0.8.10.md create mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md rename java/ql/src/change-notes/{released/0.8.10.md => 2024-03-04-sensitive-log-remove-null-from-sources.md} (54%) delete mode 100644 javascript/ql/lib/change-notes/released/0.8.10.md delete mode 100644 javascript/ql/src/change-notes/released/0.8.10.md delete mode 100644 misc/suite-helpers/change-notes/released/0.7.10.md create mode 100644 python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md rename python/ql/lib/change-notes/{released/0.11.10.md => 2024-03-01-dict-update-content.md} (52%) rename python/ql/src/change-notes/{released/0.9.10.md => 2024-03-04-nosql-injection.md} (81%) create mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md create mode 100644 ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md create mode 100644 ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md create mode 100644 ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md delete mode 100644 ruby/ql/lib/change-notes/released/0.8.10.md create mode 100644 ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md rename ruby/ql/src/change-notes/{released/0.8.10.md => 2024-03-01-method-code-injection-sinks.md} (51%) delete mode 100644 shared/controlflow/change-notes/released/0.1.10.md delete mode 100644 shared/dataflow/change-notes/released/0.2.1.md delete mode 100644 shared/mad/change-notes/released/0.2.10.md delete mode 100644 shared/rangeanalysis/change-notes/released/0.0.9.md delete mode 100644 shared/regex/change-notes/released/0.2.10.md delete mode 100644 shared/ssa/change-notes/released/0.2.10.md delete mode 100644 shared/threat-models/change-notes/released/0.0.9.md delete mode 100644 shared/tutorial/change-notes/released/0.2.10.md delete mode 100644 shared/typetracking/change-notes/released/0.2.10.md delete mode 100644 shared/typos/change-notes/released/0.2.10.md delete mode 100644 shared/util/change-notes/released/0.2.10.md delete mode 100644 shared/yaml/change-notes/released/0.2.10.md rename swift/ql/lib/change-notes/{released/0.3.10.md => 2024-02-22-extension-patch.md} (83%) delete mode 100644 swift/ql/src/change-notes/released/0.3.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index e1c0dfbecd9..b3091ec37d8 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.12.7 - -### Minor Analysis Improvements - -* Added destructors for named objects to the intermediate representation. - ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/released/0.12.7.md b/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md similarity index 54% rename from cpp/ql/lib/change-notes/released/0.12.7.md rename to cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md index 856a8b665c7..4e35decaf8e 100644 --- a/cpp/ql/lib/change-notes/released/0.12.7.md +++ b/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md @@ -1,5 +1,4 @@ -## 0.12.7 - -### Minor Analysis Improvements - -* Added destructors for named objects to the intermediate representation. +--- +category: minorAnalysis +--- +* Added destructors for named objects to the intermediate representation. \ No newline at end of file diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 20419e9c610..170a312c104 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.7 +lastReleaseVersion: 0.12.6 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 3bb9229bf94..8e201fff594 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7 +version: 0.12.7-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index f6acd424bb0..ffcd73ff5d7 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.9.6 - -### Minor Analysis Improvements - -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. -* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. - ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/released/0.9.6.md b/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md similarity index 77% rename from cpp/ql/src/change-notes/released/0.9.6.md rename to cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md index 0c85f3f9f0f..d6ef3c3e056 100644 --- a/cpp/ql/src/change-notes/released/0.9.6.md +++ b/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md @@ -1,6 +1,4 @@ -## 0.9.6 - -### Minor Analysis Improvements - -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +--- +category: minorAnalysis +--- * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md new file mode 100644 index 00000000000..2e5933a61e8 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 19139c132b2..460240feaff 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.6 +lastReleaseVersion: 0.9.5 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 4052647bb97..31bd20166b2 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6 +version: 0.9.6-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 82eacfc84f7..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.10 - -No user-facing changes. - ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md deleted file mode 100644 index 8e8007d8475..00000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.10 - -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 31c7fe07020..678da6bc37e 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.10 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index ee993bed0c9..7e643b0fac3 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.10 +version: 1.7.10-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 82eacfc84f7..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.10 - -No user-facing changes. - ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md deleted file mode 100644 index 8e8007d8475..00000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.10 - -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 31c7fe07020..678da6bc37e 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.10 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1f421754fc8..8654bbfd031 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.10 +version: 1.7.10-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 16cc14259e1..95fd64c5270 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,17 +1,3 @@ -## 0.8.10 - -### Major Analysis Improvements - -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. - -### Minor Analysis Improvements - -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. -* C# 12: Add extractor and QL library support for `ref readonly` parameters. -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md new file mode 100644 index 00000000000..6bb8e99c71e --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md new file mode 100644 index 00000000000..d6ffbd523ac --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md new file mode 100644 index 00000000000..9b1739b9b6d --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md new file mode 100644 index 00000000000..66ab65083dc --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md new file mode 100644 index 00000000000..8749c790954 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md new file mode 100644 index 00000000000..586b5341d29 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index f591ddc5b21..00000000000 --- a/csharp/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,13 +0,0 @@ -## 0.8.10 - -### Major Analysis Improvements - -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. - -### Minor Analysis Improvements - -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. -* C# 12: Add extractor and QL library support for `ref readonly` parameters. -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 93c5c1120a2..d75ea3c6320 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10 +version: 0.8.10-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 46c939e5cee..9fe1609363f 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/0.8.10.md b/csharp/ql/src/change-notes/2024-02-06-threat-models.md similarity index 88% rename from csharp/ql/src/change-notes/released/0.8.10.md rename to csharp/ql/src/change-notes/2024-02-06-threat-models.md index 702161c3d28..69ac4e4dc17 100644 --- a/csharp/ql/src/change-notes/released/0.8.10.md +++ b/csharp/ql/src/change-notes/2024-02-06-threat-models.md @@ -1,5 +1,4 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. +--- +category: minorAnalysis +--- +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 46384094b19..9ee23cc7307 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10 +version: 0.8.10-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index a59e560c415..fba2a870356 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/go/ql/consistency-queries/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -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 ecdd64fbab8..58fdc6b45de 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index d5a2fbee5f1..b574796b995 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: 0.0.9 +version: 0.0.9-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index fee5fd37a26..65a2376217b 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.7.10 - -### Major Analysis Improvements - -* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. -* Go 1.22 has been included in the range of supported Go versions. - -### Bug Fixes - -* Fixed dataflow out of a `map` using a `range` statement. - ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md new file mode 100644 index 00000000000..ea45737a72e --- /dev/null +++ b/go/ql/lib/change-notes/2024-02-14-range-map-read.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/released/0.7.10.md b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md similarity index 68% rename from go/ql/lib/change-notes/released/0.7.10.md rename to go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md index 55954f8a394..0442a571029 100644 --- a/go/ql/lib/change-notes/released/0.7.10.md +++ b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md @@ -1,10 +1,5 @@ -## 0.7.10 - -### Major Analysis Improvements - +--- +category: majorAnalysis +--- * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. - -### Bug Fixes - -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 8cc190fa880..f21e478efa6 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10 +version: 0.7.10-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 24e38b9890e..d95165a3a34 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.10 - -No user-facing changes. - ## 0.7.9 ### New Queries diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md deleted file mode 100644 index 989c5b8f682..00000000000 --- a/go/ql/src/change-notes/released/0.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.10 - -No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4ded3a52f63..d91cab59612 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10 +version: 0.7.10-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index c3282c773a9..4a3c54adb38 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.17 - -No user-facing changes. - ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md deleted file mode 100644 index 62cc89030a6..00000000000 --- a/java/ql/automodel/src/change-notes/released/0.0.17.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.17 - -No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index cbc3d3cd493..a49f7be4cff 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.17 +lastReleaseVersion: 0.0.16 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 59fab0cdcc5..898239be098 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17 +version: 0.0.17-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2a02ccee6ab..d369cbdc931 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. - -### Bug Fixes - -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. - ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md new file mode 100644 index 00000000000..eb560fba07d --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md new file mode 100644 index 00000000000..cdc6d7620aa --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-27-error-types.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md new file mode 100644 index 00000000000..a0227088ae9 --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index b45f14bf347..00000000000 --- a/java/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,10 +0,0 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. - -### Bug Fixes - -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 428eedc75e3..15b4982d41e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10 +version: 0.8.10-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index c61275f5ed8..5d835351453 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.8.10 - -### New Queries - -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. - -### Minor Analysis Improvements - -* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. - ## 0.8.9 ### New Queries diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md new file mode 100644 index 00000000000..1de07727796 --- /dev/null +++ b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.10.md b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md similarity index 54% rename from java/ql/src/change-notes/released/0.8.10.md rename to java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md index c5d18ae3379..0bb4f18f2bd 100644 --- a/java/ql/src/change-notes/released/0.8.10.md +++ b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md @@ -1,9 +1,4 @@ -## 0.8.10 - -### New Queries - -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ebbdbeee3b2..8f4de528e21 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10 +version: 0.8.10-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index d5edcc00513..5b97ebbb22b 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.10 - -No user-facing changes. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index 777bbd2fded..00000000000 --- a/javascript/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.10 - -No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index da16493a21c..ef3ca7521ac 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10 +version: 0.8.10-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index b9627cac5ee..85516e3625d 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.10 - -No user-facing changes. - ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md deleted file mode 100644 index 777bbd2fded..00000000000 --- a/javascript/ql/src/change-notes/released/0.8.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.10 - -No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index d224952c564..b6181aa30e9 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10 +version: 0.8.10-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1c4455b66c4..3c06dd69b0f 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.10 - -No user-facing changes. - ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md deleted file mode 100644 index 989c5b8f682..00000000000 --- a/misc/suite-helpers/change-notes/released/0.7.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.10 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 67518567297..576395f3405 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.9 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 54d978d5efe..49b7a6bda4c 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10 +version: 0.7.10-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index f095607ca1b..e6f318c51ea 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.11.10 - -### Minor Analysis Improvements - -* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. - ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md new file mode 100644 index 00000000000..3c47c6ba866 --- /dev/null +++ b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/released/0.11.10.md b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md similarity index 52% rename from python/ql/lib/change-notes/released/0.11.10.md rename to python/ql/lib/change-notes/2024-03-01-dict-update-content.md index ed873724e4f..dfb8d247fff 100644 --- a/python/ql/lib/change-notes/released/0.11.10.md +++ b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md @@ -1,6 +1,4 @@ -## 0.11.10 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index ddddcbe9193..b064d1778a1 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.10 +lastReleaseVersion: 0.11.9 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 59a8b4c96d1..e9f66e205f2 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10 +version: 0.11.10-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index d4245aba7a6..50762bcbf34 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.9.10 - -### New Queries - -* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. - ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.10.md b/python/ql/src/change-notes/2024-03-04-nosql-injection.md similarity index 81% rename from python/ql/src/change-notes/released/0.9.10.md rename to python/ql/src/change-notes/2024-03-04-nosql-injection.md index 4cbb221b789..6e98540c757 100644 --- a/python/ql/src/change-notes/released/0.9.10.md +++ b/python/ql/src/change-notes/2024-03-04-nosql-injection.md @@ -1,5 +1,4 @@ -## 0.9.10 - -### New Queries - +--- +category: newQuery +--- * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index d086ed69541..aabed7c396b 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.10 +lastReleaseVersion: 0.9.9 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index c920f667836..aa18f2d8707 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10 +version: 0.9.10-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index c61a12e0f4a..a623a151e89 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,12 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. - ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md new file mode 100644 index 00000000000..c2276f284a8 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md new file mode 100644 index 00000000000..1486c7a472d --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md new file mode 100644 index 00000000000..6f3a90768ba --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md new file mode 100644 index 00000000000..350e049b5bf --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md deleted file mode 100644 index 666e28f840e..00000000000 --- a/ruby/ql/lib/change-notes/released/0.8.10.md +++ /dev/null @@ -1,8 +0,0 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index de5b41999fe..7d409b83adb 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10 +version: 0.8.10-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index f875b6d16ad..4149c728eff 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. -* Added additional request sources for Ruby on Rails. - ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md new file mode 100644 index 00000000000..84ea696dfef --- /dev/null +++ b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/released/0.8.10.md b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md similarity index 51% rename from ruby/ql/src/change-notes/released/0.8.10.md rename to ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md index 985cdf8d22e..43e40d3fd53 100644 --- a/ruby/ql/src/change-notes/released/0.8.10.md +++ b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md @@ -1,6 +1,4 @@ -## 0.8.10 - -### Minor Analysis Improvements - -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. -* Added additional request sources for Ruby on Rails. +--- +category: minorAnalysis +--- +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 0521f0f75fa..5290c29b7fe 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.9 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 5e379268234..8af7f9fd797 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10 +version: 0.8.10-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 75f2ca53f98..dbfa6ef4512 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.1.10 - -No user-facing changes. - ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md deleted file mode 100644 index 47358eeee93..00000000000 --- a/shared/controlflow/change-notes/released/0.1.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.1.10 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 30f5ca88be0..1425c0edf7f 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.10 +lastReleaseVersion: 0.1.9 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 1d43802be42..9d35a678276 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10 +version: 0.1.10-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index ef80788bded..67a5bf589f4 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.1 - -No user-facing changes. - ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md deleted file mode 100644 index 3dbfc85fe11..00000000000 --- a/shared/dataflow/change-notes/released/0.2.1.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.1 - -No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index df29a726bcc..5274e27ed52 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.1 +lastReleaseVersion: 0.2.0 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ee422e02ea9..1e7becf71c4 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1 +version: 0.2.1-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4730366775e..4d09057118c 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/mad/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 6d7269ef3da..22c8f271ccc 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 9943dcb7972..5b8dbcfab22 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/shared/rangeanalysis/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index ecdd64fbab8..58fdc6b45de 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 01db5d5734d..836fe51ee34 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9 +version: 0.0.9-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index c05869c153d..cd5f91f71ec 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/regex/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 0d4f485312f..ea3f7f9b238 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index a9161ff578b..01acfae0148 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/ssa/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 2ad254711a5..19304ad107f 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index a59e560c415..fba2a870356 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.9 - -No user-facing changes. - ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md deleted file mode 100644 index c9e17c6d6cf..00000000000 --- a/shared/threat-models/change-notes/released/0.0.9.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.9 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index ecdd64fbab8..58fdc6b45de 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.8 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 60cbbc56fcb..d0ed9a913b2 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9 +version: 0.0.9-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 560ad058d5b..1db3a01af0b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/tutorial/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 69116705c1b..b595ae9ee70 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: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 350f9ecbeae..afc857bc6bc 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/typetracking/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index fbbdcf5162a..b55927f59bb 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 54b1eaa4d58..66c5871d982 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/typos/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4d59d9b3c34..644bfe11bff 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 1ca1f71bcbc..63832e927fa 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/util/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 28ed738a93d..ca1a866a53d 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 9fd5ebc26ab..e5495abcd50 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.10 - -No user-facing changes. - ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md deleted file mode 100644 index 81c9722b19f..00000000000 --- a/shared/yaml/change-notes/released/0.2.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.10 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index a71167814cb..d021cf0a6be 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.9 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 9643ffcec66..de5b47e120a 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10 +version: 0.2.10-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 8f14bfcedc9..e88cd0259cc 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.3.10 - -### Bug Fixes - -* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. - ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.10.md b/swift/ql/lib/change-notes/2024-02-22-extension-patch.md similarity index 83% rename from swift/ql/lib/change-notes/released/0.3.10.md rename to swift/ql/lib/change-notes/2024-02-22-extension-patch.md index 9d6286ff58a..7bd78f3b785 100644 --- a/swift/ql/lib/change-notes/released/0.3.10.md +++ b/swift/ql/lib/change-notes/2024-02-22-extension-patch.md @@ -1,5 +1,4 @@ -## 0.3.10 - -### Bug Fixes - +--- +category: fix +--- * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 76ca0ac8ba7..3fa5180bcb4 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.9 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 70ec4798ea8..a37a4cb3d58 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10 +version: 0.3.10-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index bda9834c9bc..96615d06972 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.3.10 - -No user-facing changes. - ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md deleted file mode 100644 index 925a48fc52e..00000000000 --- a/swift/ql/src/change-notes/released/0.3.10.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.3.10 - -No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 76ca0ac8ba7..3fa5180bcb4 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.9 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index ba66b065529..e3ead42c98b 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10 +version: 0.3.10-dev groups: - swift - queries From 2f058ffb4d0bc7486717a95744c240b9eef87fe6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 6 Mar 2024 20:56:51 +0000 Subject: [PATCH 031/497] Release preparation for version 2.16.4 --- cpp/ql/lib/CHANGELOG.md | 6 ++++++ .../0.12.7.md} | 9 +++++---- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-29-non-constant-format-path-query.md | 4 ---- .../0.9.6.md} | 8 +++++--- 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.10.md | 3 +++ .../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.10.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 14 ++++++++++++++ .../change-notes/2024-02-21-getonly-properties.md | 4 ---- .../ql/lib/change-notes/2024-02-22-no-db-stats.md | 4 ---- .../change-notes/2024-02-23-compiler-generated.md | 4 ---- .../2024-02-26-variable-capture-flow.md | 4 ---- .../2024-02-28-experimental-attribute.md | 4 ---- .../2024-02-28-refreadonly-parameter.md | 4 ---- csharp/ql/lib/change-notes/released/0.8.10.md | 13 +++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../0.8.10.md} | 9 +++++---- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.9.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 11 +++++++++++ .../lib/change-notes/2024-02-14-range-map-read.md | 4 ---- .../0.7.10.md} | 11 ++++++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.10.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../automodel/src/change-notes/released/0.0.17.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 11 +++++++++++ .../change-notes/2024-02-23-widget-flowsteps.md | 4 ---- java/ql/lib/change-notes/2024-02-27-error-types.md | 4 ---- .../lib/change-notes/2024-02-27-mvnw-versions.md | 4 ---- java/ql/lib/change-notes/released/0.8.10.md | 10 ++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 ++++++++++ .../2024-02-12-android-insecure-keys.md | 4 ---- .../0.8.10.md} | 11 ++++++++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.10.md | 3 +++ 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/0.8.10.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/0.7.10.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 +++++++ .../2024-02-28-iterable-unpacking-module-scope.md | 4 ---- .../0.11.10.md} | 8 +++++--- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++++ .../0.9.10.md} | 7 ++++--- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 9 +++++++++ ...2024-02-15-activerecord_connection_sql_sinks.md | 4 ---- .../2024-02-20-activerecord-sql-sink-arguments.md | 4 ---- .../lib/change-notes/2024-02-26-arel-sqlliteral.md | 4 ---- .../lib/change-notes/2024-02-29-i18n-translate.md | 4 ---- ruby/ql/lib/change-notes/released/0.8.10.md | 8 ++++++++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 7 +++++++ .../2024-02-13-rails-more-request-sources.md | 4 ---- .../0.8.10.md} | 10 ++++++---- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.10.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.2.1.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.10.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../rangeanalysis/change-notes/released/0.0.9.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.10.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.10.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../threat-models/change-notes/released/0.0.9.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/0.2.10.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../typetracking/change-notes/released/0.2.10.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.10.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.10.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.10.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++++ .../0.3.10.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/0.3.10.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 150 files changed, 394 insertions(+), 168 deletions(-) rename cpp/ql/lib/change-notes/{2024-02-26-ir-named-destructors.md => released/0.12.7.md} (54%) delete mode 100644 cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md rename cpp/ql/src/change-notes/{2024-02-16-modelled-functions-block-flow.md => released/0.9.6.md} (77%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md delete mode 100644 csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.10.md rename csharp/ql/src/change-notes/{2024-02-06-threat-models.md => released/0.8.10.md} (88%) create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.9.md delete mode 100644 go/ql/lib/change-notes/2024-02-14-range-map-read.md rename go/ql/lib/change-notes/{2024-03-04-autobuilder-changes.md => released/0.7.10.md} (68%) create mode 100644 go/ql/src/change-notes/released/0.7.10.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.17.md delete mode 100644 java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-error-types.md delete mode 100644 java/ql/lib/change-notes/2024-02-27-mvnw-versions.md create mode 100644 java/ql/lib/change-notes/released/0.8.10.md delete mode 100644 java/ql/src/change-notes/2024-02-12-android-insecure-keys.md rename java/ql/src/change-notes/{2024-03-04-sensitive-log-remove-null-from-sources.md => released/0.8.10.md} (54%) create mode 100644 javascript/ql/lib/change-notes/released/0.8.10.md create mode 100644 javascript/ql/src/change-notes/released/0.8.10.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.10.md delete mode 100644 python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md rename python/ql/lib/change-notes/{2024-03-01-dict-update-content.md => released/0.11.10.md} (52%) rename python/ql/src/change-notes/{2024-03-04-nosql-injection.md => released/0.9.10.md} (81%) delete mode 100644 ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.10.md delete mode 100644 ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md rename ruby/ql/src/change-notes/{2024-03-01-method-code-injection-sinks.md => released/0.8.10.md} (51%) create mode 100644 shared/controlflow/change-notes/released/0.1.10.md create mode 100644 shared/dataflow/change-notes/released/0.2.1.md create mode 100644 shared/mad/change-notes/released/0.2.10.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.9.md create mode 100644 shared/regex/change-notes/released/0.2.10.md create mode 100644 shared/ssa/change-notes/released/0.2.10.md create mode 100644 shared/threat-models/change-notes/released/0.0.9.md create mode 100644 shared/tutorial/change-notes/released/0.2.10.md create mode 100644 shared/typetracking/change-notes/released/0.2.10.md create mode 100644 shared/typos/change-notes/released/0.2.10.md create mode 100644 shared/util/change-notes/released/0.2.10.md create mode 100644 shared/yaml/change-notes/released/0.2.10.md rename swift/ql/lib/change-notes/{2024-02-22-extension-patch.md => released/0.3.10.md} (83%) create mode 100644 swift/ql/src/change-notes/released/0.3.10.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b3091ec37d8..e1c0dfbecd9 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. + ## 0.12.6 ### New Features diff --git a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md b/cpp/ql/lib/change-notes/released/0.12.7.md similarity index 54% rename from cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md rename to cpp/ql/lib/change-notes/released/0.12.7.md index 4e35decaf8e..856a8b665c7 100644 --- a/cpp/ql/lib/change-notes/2024-02-26-ir-named-destructors.md +++ b/cpp/ql/lib/change-notes/released/0.12.7.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Added destructors for named objects to the intermediate representation. \ No newline at end of file +## 0.12.7 + +### Minor Analysis Improvements + +* Added destructors for named objects to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 170a312c104..20419e9c610 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.6 +lastReleaseVersion: 0.12.7 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8e201fff594..3bb9229bf94 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7-dev +version: 0.12.7 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index ffcd73ff5d7..f6acd424bb0 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. + ## 0.9.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md deleted file mode 100644 index 2e5933a61e8..00000000000 --- a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md b/cpp/ql/src/change-notes/released/0.9.6.md similarity index 77% rename from cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md rename to cpp/ql/src/change-notes/released/0.9.6.md index d6ef3c3e056..0c85f3f9f0f 100644 --- a/cpp/ql/src/change-notes/2024-02-16-modelled-functions-block-flow.md +++ b/cpp/ql/src/change-notes/released/0.9.6.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.9.6 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. * The new C/C++ dataflow and taint-tracking libraries (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via `DataFlowFunction` and `TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new `isPartialWrite` predicate. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 460240feaff..19139c132b2 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.5 +lastReleaseVersion: 0.9.6 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 31bd20166b2..4052647bb97 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6-dev +version: 0.9.6 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7e643b0fac3..ee993bed0c9 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 190b83b0f25..82eacfc84f7 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.10 + +No user-facing changes. + ## 1.7.9 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md new file mode 100644 index 00000000000..8e8007d8475 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.10.md @@ -0,0 +1,3 @@ +## 1.7.10 + +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 678da6bc37e..31c7fe07020 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.9 +lastReleaseVersion: 1.7.10 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 8654bbfd031..1f421754fc8 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.10-dev +version: 1.7.10 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 95fd64c5270..16cc14259e1 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md b/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md deleted file mode 100644 index 6bb8e99c71e..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-21-getonly-properties.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md b/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md deleted file mode 100644 index d6ffbd523ac..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-22-no-db-stats.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. diff --git a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md b/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md deleted file mode 100644 index 9b1739b9b6d..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-23-compiler-generated.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. diff --git a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md b/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md deleted file mode 100644 index 66ab65083dc..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-26-variable-capture-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md b/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md deleted file mode 100644 index 8749c790954..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-experimental-attribute.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md deleted file mode 100644 index 586b5341d29..00000000000 --- a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/released/0.8.10.md b/csharp/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..f591ddc5b21 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,13 @@ +## 0.8.10 + +### Major Analysis Improvements + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +### Minor Analysis Improvements + +* C# 12: Add QL library support (`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for `ref readonly` parameters. +* C#: The table `expr_compiler_generated` has been deleted and its content has been added to `compiler_generated`. +* Data flow via get only properties like `public object Obj { get; }` is now captured by the data flow library. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d75ea3c6320..93c5c1120a2 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10-dev +version: 0.8.10 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 9fe1609363f..46c939e5cee 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/2024-02-06-threat-models.md b/csharp/ql/src/change-notes/released/0.8.10.md similarity index 88% rename from csharp/ql/src/change-notes/2024-02-06-threat-models.md rename to csharp/ql/src/change-notes/released/0.8.10.md index 69ac4e4dc17..702161c3d28 100644 --- a/csharp/ql/src/change-notes/2024-02-06-threat-models.md +++ b/csharp/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- -* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 9ee23cc7307..46384094b19 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10-dev +version: 0.8.10 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.9.md b/go/ql/consistency-queries/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +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 58fdc6b45de..ecdd64fbab8 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index b574796b995..d5a2fbee5f1 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: 0.0.9-dev +version: 0.0.9 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 65a2376217b..fee5fd37a26 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.10 + +### Major Analysis Improvements + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. + ## 0.7.9 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-02-14-range-map-read.md b/go/ql/lib/change-notes/2024-02-14-range-map-read.md deleted file mode 100644 index ea45737a72e..00000000000 --- a/go/ql/lib/change-notes/2024-02-14-range-map-read.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md b/go/ql/lib/change-notes/released/0.7.10.md similarity index 68% rename from go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md rename to go/ql/lib/change-notes/released/0.7.10.md index 0442a571029..55954f8a394 100644 --- a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md +++ b/go/ql/lib/change-notes/released/0.7.10.md @@ -1,5 +1,10 @@ ---- -category: majorAnalysis ---- +## 0.7.10 + +### Major Analysis Improvements + * We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. * Go 1.22 has been included in the range of supported Go versions. + +### Bug Fixes + +* Fixed dataflow out of a `map` using a `range` statement. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index f21e478efa6..8cc190fa880 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10-dev +version: 0.7.10 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index d95165a3a34..24e38b9890e 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 ### New Queries diff --git a/go/ql/src/change-notes/released/0.7.10.md b/go/ql/src/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d91cab59612..4ded3a52f63 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10-dev +version: 0.7.10 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 4a3c54adb38..c3282c773a9 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.17 + +No user-facing changes. + ## 0.0.16 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.17.md b/java/ql/automodel/src/change-notes/released/0.0.17.md new file mode 100644 index 00000000000..62cc89030a6 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.17.md @@ -0,0 +1,3 @@ +## 0.0.17 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index a49f7be4cff..cbc3d3cd493 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.16 +lastReleaseVersion: 0.0.17 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 898239be098..59fab0cdcc5 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17-dev +version: 0.0.17 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index d369cbdc931..2a02ccee6ab 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. + ## 0.8.9 ### Deprecated APIs diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md deleted file mode 100644 index eb560fba07d..00000000000 --- a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md deleted file mode 100644 index cdc6d7620aa..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-error-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md b/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md deleted file mode 100644 index a0227088ae9..00000000000 --- a/java/ql/lib/change-notes/2024-02-27-mvnw-versions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. diff --git a/java/ql/lib/change-notes/released/0.8.10.md b/java/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..b45f14bf347 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. + +### Bug Fixes + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper `mvnw` is in use and the `maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..428eedc75e3 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10-dev +version: 0.8.10 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 5d835351453..c61275f5ed8 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + ## 0.8.9 ### New Queries diff --git a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md b/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md deleted file mode 100644 index 1de07727796..00000000000 --- a/java/ql/src/change-notes/2024-02-12-android-insecure-keys.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md b/java/ql/src/change-notes/released/0.8.10.md similarity index 54% rename from java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md rename to java/ql/src/change-notes/released/0.8.10.md index 0bb4f18f2bd..c5d18ae3379 100644 --- a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md +++ b/java/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 0.8.10 + +### New Queries + +* Added a new query `java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +### Minor Analysis Improvements + * To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 8f4de528e21..ebbdbeee3b2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10-dev +version: 0.8.10 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 5b97ebbb22b..d5edcc00513 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.10.md b/javascript/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ef3ca7521ac..da16493a21c 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10-dev +version: 0.8.10 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 85516e3625d..b9627cac5ee 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.10 + +No user-facing changes. + ## 0.8.9 ### Bug Fixes diff --git a/javascript/ql/src/change-notes/released/0.8.10.md b/javascript/ql/src/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..777bbd2fded --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.10.md @@ -0,0 +1,3 @@ +## 0.8.10 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index b6181aa30e9..d224952c564 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10-dev +version: 0.8.10 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 3c06dd69b0f..1c4455b66c4 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.10 + +No user-facing changes. + ## 0.7.9 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.10.md b/misc/suite-helpers/change-notes/released/0.7.10.md new file mode 100644 index 00000000000..989c5b8f682 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.10.md @@ -0,0 +1,3 @@ +## 0.7.10 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 576395f3405..67518567297 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.9 +lastReleaseVersion: 0.7.10 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 49b7a6bda4c..54d978d5efe 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10-dev +version: 0.7.10 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index e6f318c51ea..f095607ca1b 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.11.10 + +### Minor Analysis Improvements + +* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. + ## 0.11.9 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md deleted file mode 100644 index 3c47c6ba866..00000000000 --- a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md b/python/ql/lib/change-notes/released/0.11.10.md similarity index 52% rename from python/ql/lib/change-notes/2024-03-01-dict-update-content.md rename to python/ql/lib/change-notes/released/0.11.10.md index dfb8d247fff..ed873724e4f 100644 --- a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md +++ b/python/ql/lib/change-notes/released/0.11.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.11.10 + +### Minor Analysis Improvements + * Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index b064d1778a1..ddddcbe9193 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.9 +lastReleaseVersion: 0.11.10 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e9f66e205f2..59a8b4c96d1 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10-dev +version: 0.11.10 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 50762bcbf34..d4245aba7a6 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.9.10 + +### New Queries + +* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + ## 0.9.9 No user-facing changes. diff --git a/python/ql/src/change-notes/2024-03-04-nosql-injection.md b/python/ql/src/change-notes/released/0.9.10.md similarity index 81% rename from python/ql/src/change-notes/2024-03-04-nosql-injection.md rename to python/ql/src/change-notes/released/0.9.10.md index 6e98540c757..4cbb221b789 100644 --- a/python/ql/src/change-notes/2024-03-04-nosql-injection.md +++ b/python/ql/src/change-notes/released/0.9.10.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 0.9.10 + +### New Queries + * The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index aabed7c396b..d086ed69541 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.9 +lastReleaseVersion: 0.9.10 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index aa18f2d8707..c920f667836 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10-dev +version: 0.9.10 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a623a151e89..c61a12e0f4a 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. + ## 0.8.9 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md b/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md deleted file mode 100644 index c2276f284a8..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-15-activerecord_connection_sql_sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md b/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md deleted file mode 100644 index 1486c7a472d..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-20-activerecord-sql-sink-arguments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md deleted file mode 100644 index 6f3a90768ba..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md deleted file mode 100644 index 350e049b5bf..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/released/0.8.10.md b/ruby/ql/lib/change-notes/released/0.8.10.md new file mode 100644 index 00000000000..666e28f840e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.10.md @@ -0,0 +1,8 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the `ActiveRecord` methods `select`, `reselect`, `order`, `reorder`, `joins`, `group`, and `pluck` are now recognized as sql injection sinks. +* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 7d409b83adb..de5b41999fe 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10-dev +version: 0.8.10 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 4149c728eff..f875b6d16ad 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + ## 0.8.9 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md b/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md deleted file mode 100644 index 84ea696dfef..00000000000 --- a/ruby/ql/src/change-notes/2024-02-13-rails-more-request-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added additional request sources for Ruby on Rails. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md b/ruby/ql/src/change-notes/released/0.8.10.md similarity index 51% rename from ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md rename to ruby/ql/src/change-notes/released/0.8.10.md index 43e40d3fd53..985cdf8d22e 100644 --- a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md +++ b/ruby/ql/src/change-notes/released/0.8.10.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file +## 0.8.10 + +### Minor Analysis Improvements + +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 5290c29b7fe..0521f0f75fa 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.9 +lastReleaseVersion: 0.8.10 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 8af7f9fd797..5e379268234 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10-dev +version: 0.8.10 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index dbfa6ef4512..75f2ca53f98 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.10 + +No user-facing changes. + ## 0.1.9 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.10.md b/shared/controlflow/change-notes/released/0.1.10.md new file mode 100644 index 00000000000..47358eeee93 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.10.md @@ -0,0 +1,3 @@ +## 0.1.10 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1425c0edf7f..30f5ca88be0 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.9 +lastReleaseVersion: 0.1.10 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 9d35a678276..1d43802be42 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10-dev +version: 0.1.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 67a5bf589f4..ef80788bded 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.1 + +No user-facing changes. + ## 0.2.0 ### Breaking Changes diff --git a/shared/dataflow/change-notes/released/0.2.1.md b/shared/dataflow/change-notes/released/0.2.1.md new file mode 100644 index 00000000000..3dbfc85fe11 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.1.md @@ -0,0 +1,3 @@ +## 0.2.1 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 5274e27ed52..df29a726bcc 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.0 +lastReleaseVersion: 0.2.1 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 1e7becf71c4..ee422e02ea9 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1-dev +version: 0.2.1 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4d09057118c..4730366775e 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.10.md b/shared/mad/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/mad/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 22c8f271ccc..6d7269ef3da 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 5b8dbcfab22..9943dcb7972 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.9.md b/shared/rangeanalysis/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 836fe51ee34..01db5d5734d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9-dev +version: 0.0.9 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index cd5f91f71ec..c05869c153d 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.10.md b/shared/regex/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/regex/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index ea3f7f9b238..0d4f485312f 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 01acfae0148..a9161ff578b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.10.md b/shared/ssa/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 19304ad107f..2ad254711a5 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index fba2a870356..a59e560c415 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.9.md b/shared/threat-models/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d0ed9a913b2..60cbbc56fcb 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9-dev +version: 0.0.9 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1db3a01af0b..560ad058d5b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.10.md b/shared/tutorial/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b595ae9ee70..69116705c1b 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: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index afc857bc6bc..350f9ecbeae 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.10.md b/shared/typetracking/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index b55927f59bb..fbbdcf5162a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 66c5871d982..54b1eaa4d58 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.10.md b/shared/typos/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/typos/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 644bfe11bff..4d59d9b3c34 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 63832e927fa..1ca1f71bcbc 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.10.md b/shared/util/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/util/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ca1a866a53d..28ed738a93d 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e5495abcd50..9fd5ebc26ab 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.10 + +No user-facing changes. + ## 0.2.9 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.10.md b/shared/yaml/change-notes/released/0.2.10.md new file mode 100644 index 00000000000..81c9722b19f --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.10.md @@ -0,0 +1,3 @@ +## 0.2.10 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index d021cf0a6be..a71167814cb 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.9 +lastReleaseVersion: 0.2.10 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index de5b47e120a..9643ffcec66 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10-dev +version: 0.2.10 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index e88cd0259cc..8f14bfcedc9 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.3.10 + +### Bug Fixes + +* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + ## 0.3.9 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md b/swift/ql/lib/change-notes/released/0.3.10.md similarity index 83% rename from swift/ql/lib/change-notes/2024-02-22-extension-patch.md rename to swift/ql/lib/change-notes/released/0.3.10.md index 7bd78f3b785..9d6286ff58a 100644 --- a/swift/ql/lib/change-notes/2024-02-22-extension-patch.md +++ b/swift/ql/lib/change-notes/released/0.3.10.md @@ -1,4 +1,5 @@ ---- -category: fix ---- +## 0.3.10 + +### Bug Fixes + * Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index a37a4cb3d58..70ec4798ea8 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10-dev +version: 0.3.10 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 96615d06972..bda9834c9bc 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.10 + +No user-facing changes. + ## 0.3.9 ### New Queries diff --git a/swift/ql/src/change-notes/released/0.3.10.md b/swift/ql/src/change-notes/released/0.3.10.md new file mode 100644 index 00000000000..925a48fc52e --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.10.md @@ -0,0 +1,3 @@ +## 0.3.10 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3fa5180bcb4..76ca0ac8ba7 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.9 +lastReleaseVersion: 0.3.10 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index e3ead42c98b..ba66b065529 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10-dev +version: 0.3.10 groups: - swift - queries From dc9092c9ec2cdda8188e9e44d8d51d2a0c6b6cc9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 6 Mar 2024 22:19:33 +0000 Subject: [PATCH 032/497] Post-release preparation for codeql-cli-2.16.4 --- 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/automodel/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 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/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/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 3bb9229bf94..8b17a050d82 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.7 +version: 0.12.8-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 4052647bb97..49eb255cc8f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.6 +version: 0.9.7-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index ee993bed0c9..3e8792bce0e 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.10 +version: 1.7.11-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1f421754fc8..c67ab9130a0 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.10 +version: 1.7.11-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 93c5c1120a2..a67b40f744f 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.10 +version: 0.8.11-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 46384094b19..a2148a36157 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.10 +version: 0.8.11-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index d5a2fbee5f1..e82c98f52cb 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: 0.0.9 +version: 0.0.10-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 8cc190fa880..54b284e7ee5 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.10 +version: 0.7.11-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4ded3a52f63..c89aacb8aa2 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.10 +version: 0.7.11-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 59fab0cdcc5..8064163f5cc 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.17 +version: 0.0.18-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 428eedc75e3..ed83a620d20 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.10 +version: 0.8.11-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ebbdbeee3b2..d7612d9da67 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.10 +version: 0.8.11-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index da16493a21c..30fa7de4198 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.10 +version: 0.8.11-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index d224952c564..01a3e8a0841 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.10 +version: 0.8.11-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 54d978d5efe..5d8225b2e0b 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.10 +version: 0.7.11-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 59a8b4c96d1..daab6a41206 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.10 +version: 0.11.11-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index c920f667836..5b641a329cb 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.10 +version: 0.9.11-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index de5b41999fe..81695d545ec 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.10 +version: 0.8.11-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 5e379268234..65e81bf2ba2 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.10 +version: 0.8.11-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 1d43802be42..19c95747294 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.10 +version: 0.1.11-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index ee422e02ea9..4e896e9ae02 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.1 +version: 0.2.2-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 6d7269ef3da..e3d2ccaf748 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 01db5d5734d..6a528c17637 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.9 +version: 0.0.10-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 0d4f485312f..8717c5b8a73 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 2ad254711a5..656662e9061 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 60cbbc56fcb..ece8f74f701 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.9 +version: 0.0.10-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 69116705c1b..b1f2b729a85 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: 0.2.10 +version: 0.2.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index fbbdcf5162a..efca1702069 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 4d59d9b3c34..76434dcb21c 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 28ed738a93d..f4d51c896ce 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 9643ffcec66..41f2bc851fd 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.10 +version: 0.2.11-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 70ec4798ea8..673004b5172 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.10 +version: 0.3.11-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index ba66b065529..11192f11d8b 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.10 +version: 0.3.11-dev groups: - swift - queries From c325ff8a237d6c5fa860a1eed288ee508b5c46bf Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 11 Mar 2024 16:38:33 +0000 Subject: [PATCH 033/497] Mark lines of code queries as telemetry queries The new file coverage metrics are available in all supported GHES versions. This PR tags lines of code queries as telemetry queries. Lines of code information will still be available in the SARIF file, but it will no longer be displayed in the logging output of the CLI. The one exception is the metric queries for Java/Kotlin that provides separate lines of code information for Java and Kotlin. I've kept these since separate file coverage information for languages like Java and Kotlin is only available for GHES 3.12 and later. --- cpp/ql/src/Summary/LinesOfUserCode.ql | 1 + csharp/ql/src/Metrics/Summaries/LinesOfCode.ql | 1 + go/ql/src/Summary/LinesOfCode.ql | 1 + java/ql/src/Metrics/Summaries/LinesOfCode.ql | 1 + javascript/ql/src/Summary/LinesOfUserCode.ql | 1 + python/ql/src/Summary/LinesOfUserCode.ql | 1 + ql/ql/src/queries/summary/LinesOfCode.ql | 1 + ql/ql/src/queries/summary/LinesOfUserCode.ql | 1 + ruby/ql/src/queries/summary/LinesOfCode.ql | 1 + ruby/ql/src/queries/summary/LinesOfUserCode.ql | 1 + swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql | 1 + 11 files changed, 11 insertions(+) diff --git a/cpp/ql/src/Summary/LinesOfUserCode.ql b/cpp/ql/src/Summary/LinesOfUserCode.ql index 67d3aa6a8e0..2c198a1488d 100644 --- a/cpp/ql/src/Summary/LinesOfUserCode.ql +++ b/cpp/ql/src/Summary/LinesOfUserCode.ql @@ -4,6 +4,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry * @id cpp/summary/lines-of-user-code */ diff --git a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql index 2115cd60d2b..4c6eb55e5ab 100644 --- a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -5,6 +5,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry */ import csharp diff --git a/go/ql/src/Summary/LinesOfCode.ql b/go/ql/src/Summary/LinesOfCode.ql index 383d7c5021e..04864e5c4a0 100644 --- a/go/ql/src/Summary/LinesOfCode.ql +++ b/go/ql/src/Summary/LinesOfCode.ql @@ -5,6 +5,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry */ import go diff --git a/java/ql/src/Metrics/Summaries/LinesOfCode.ql b/java/ql/src/Metrics/Summaries/LinesOfCode.ql index 769a3476ed2..1ead46f1b20 100644 --- a/java/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/java/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -7,6 +7,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry */ import java diff --git a/javascript/ql/src/Summary/LinesOfUserCode.ql b/javascript/ql/src/Summary/LinesOfUserCode.ql index 61ad13519cb..83fbb9b32da 100644 --- a/javascript/ql/src/Summary/LinesOfUserCode.ql +++ b/javascript/ql/src/Summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry * @id js/summary/lines-of-user-code */ diff --git a/python/ql/src/Summary/LinesOfUserCode.ql b/python/ql/src/Summary/LinesOfUserCode.ql index 528ae948cd7..a30ba7afd19 100644 --- a/python/ql/src/Summary/LinesOfUserCode.ql +++ b/python/ql/src/Summary/LinesOfUserCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry * @id py/summary/lines-of-user-code */ diff --git a/ql/ql/src/queries/summary/LinesOfCode.ql b/ql/ql/src/queries/summary/LinesOfCode.ql index cb5ef617476..c0dbe831967 100644 --- a/ql/ql/src/queries/summary/LinesOfCode.ql +++ b/ql/ql/src/queries/summary/LinesOfCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry */ import ql diff --git a/ql/ql/src/queries/summary/LinesOfUserCode.ql b/ql/ql/src/queries/summary/LinesOfUserCode.ql index 1701af1a5c9..8f49ce27d2f 100644 --- a/ql/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ql/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary + * telemetry */ import ql diff --git a/ruby/ql/src/queries/summary/LinesOfCode.ql b/ruby/ql/src/queries/summary/LinesOfCode.ql index 74994d77347..34e7438bab1 100644 --- a/ruby/ql/src/queries/summary/LinesOfCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfCode.ql @@ -8,6 +8,7 @@ * @kind metric * @tags summary * lines-of-code + * telemetry */ import codeql.ruby.AST diff --git a/ruby/ql/src/queries/summary/LinesOfUserCode.ql b/ruby/ql/src/queries/summary/LinesOfUserCode.ql index d8025088ceb..121124862a1 100644 --- a/ruby/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,6 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary + * telemetry */ import codeql.ruby.AST diff --git a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql index 373b6c4bd0f..9fc40680852 100644 --- a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql +++ b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql @@ -4,6 +4,7 @@ * @kind metric * @id swift/diagnostics/successfully-extracted-lines * @tags summary + * telemetry */ import swift From d1f8336be6a44017cbfc7f3749ea18764409c1db Mon Sep 17 00:00:00 2001 From: Pierre Date: Mon, 11 Mar 2024 22:21:25 +0100 Subject: [PATCH 034/497] Add changelog for 2.16.4 --- .../codeql-changelog/codeql-cli-2.16.1.rst | 2 +- .../codeql-changelog/codeql-cli-2.16.3.rst | 13 +- .../codeql-changelog/codeql-cli-2.16.4.rst | 156 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 4 files changed, 165 insertions(+), 7 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst index e9f1dd20f34..7a1e6b6230b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst @@ -171,7 +171,7 @@ Python Ruby """" -* Deleted many deprecated predicates and classes with uppercase :code:`HTTP`, :code:`CSRF`, :code:`,` etc. in their names. Use the PascalCased versions instead. +* Deleted many deprecated predicates and classes with uppercase :code:`HTTP`, :code:`CSRF` etc. in their names. Use the PascalCased versions instead. * Deleted the deprecated :code:`getAUse` and :code:`getARhs` predicates from :code:`API::Node`, use :code:`getASource` and :code:`getASink` instead. * Deleted the deprecated :code:`disablesCertificateValidation` predicate from the :code:`Http` module. * Deleted the deprecated :code:`ParamsCall`, :code:`CookiesCall`, and :code:`ActionControllerControllerClass` classes from :code:`ActionController.qll`, use the simarly named classes from :code:`codeql.ruby.frameworks.Rails::Rails` instead. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst index af699a301c4..af7c4ce84b0 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst @@ -27,14 +27,15 @@ Bug Fixes New Features ~~~~~~~~~~~~ -* A new extractor option has been added to the Python extractor: :code:`python_executable_name`. - You can use this option to override the default process the extractor uses to find and select a Python executable. - Pass one of :code:`--extractor-option python_executable_name=py` or :code:`--extractor-option python_executable_name=python` or :code:`--extractor-option python_executable_name=python3` to commands that run the extractor, for example: :code:`codeql database create`. +* A new extractor option has been added to the Python extractor: + :code:`python_executable_name`. You can use this option to override the default process the extractor uses to find and select a Python executable. Pass one of + :code:`--extractor-option python_executable_name=py` or :code:`--extractor-option python_executable_name=python` or :code:`--extractor-option python_executable_name=python3` to commands that run the extractor, for example: :code:`codeql database create`. - On Windows machines, the Python extractor will expect to find :code:`py.exe` on the system :code:`PATH` by default. - If the Python executable has a different name, you can set the new extractor option to override this value and look for :code:`python.exe` or :code:`python3.exe`. + On Windows machines, the Python extractor will expect to find :code:`py.exe` on the system :code:`PATH` by default. If the Python executable has a different name, you can set the new extractor option to override this value and look for + :code:`python.exe` or :code:`python3.exe`. - For more information about using the extractor option with the CodeQL CLI, see `Extractor options `__. + For more information about using the extractor option with the CodeQL CLI, see + \ `Extractor options `__. Security Updates ~~~~~~~~~~~~~~~~ diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst new file mode 100644 index 00000000000..dccf2ce4796 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst @@ -0,0 +1,156 @@ +.. _codeql-cli-2.16.4: + +========================== +CodeQL 2.16.4 (2024-03-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.16.4 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +Potentially Breaking Changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* A number of internal command line options (:code:`--builtin_functions_file`, :code:`--clang_builtin_functions`, + :code:`--disable-objc-default-synthesize-properties`, :code:`--list_builtin_functions`, :code:`--memory-limit-bytes`, + :code:`--mimic_config`, and :code:`--objc`) has been removed from the C/C++ extractor. It has never been possible to pass these options through the CLI itself, but some customers with advanced setups may have been passing them through internal undocumented interfaces. All of the removed options were already no-ops, and will now generate errors. + + The :code:`--verbosity` command line option has also been removed. The option was an alias for + :code:`--codeql-verbosity`, which should be used instead. + +Bug Fixes +~~~~~~~~~ + +* When parsing user-authored YAML files such as :code:`codeql-pack.yml`, + :code:`qlpack.yml`, :code:`codeql-workspace.yml`, and any YAML file defining a data extension, unquoted string values starting with a :code:`*` character are now correctly interpreted as YAML aliases. Previously, they were interpreted as strings, but with the first character skipped. + + If you see a parse error similar to :code:`while scanning an alias... unexpected` :code:`character found *(42)`,it likely means that you need to add quotes around the indicated string value. The most common cause is unquoted glob patterns that start with :code:`*`, such as :code:`include: **/*.yml`, which will need to be quoted as :code:`include: "**/*.yml"`. + +Improvements +~~~~~~~~~~~~ + +* The frontend of the C/C++ extractor has been updated, improving the extractor's reliability and increasing its ability to extract source code. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "non-constant format string" query (:code:`cpp/non-constant-format`) has been converted to a :code:`path-problem` query. +* The new C/C++ dataflow and taint-tracking libraries (:code:`semmle.code.cpp.dataflow.new.DataFlow` and :code:`semmle.code.cpp.dataflow.new.TaintTracking`) now implicitly assume that dataflow and taint modelled via :code:`DataFlowFunction` and :code:`TaintFunction` always fully overwrite their buffers and thus act as flow barriers. As a result, many dataflow and taint-tracking queries now produce fewer false positives. To remove this assumption and go back to the previous behavior for a given model, one can override the new :code:`isPartialWrite` predicate. + +C# +"" + +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are :code:`cs/code-injection`, :code:`cs/command-line-injection`, :code:`cs/user-controlled-bypass`, :code:`cs/count-untrusted-data-external-api`, :code:`cs/untrusted-data-to-external-api`, :code:`cs/ldap-injection`, :code:`cs/log-forging`, :code:`cs/xml/missing-validation`, :code:`cs/redos`, :code:`cs/regex-injection`, :code:`cs/resource-injection`, :code:`cs/sql-injection`, :code:`cs/path-injection`, :code:`cs/unsafe-deserialization-untrusted-input`, :code:`cs/web/unvalidated-url-redirection`, :code:`cs/xml/insecure-dtd-handling`, :code:`cs/xml/xpath-injection`, :code:`cs/web/xss`, and :code:`cs/uncontrolled-format-string`. + +Java +"""" + +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (:code:`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. + +Ruby +"""" + +* Calls to :code:`Object#method`, :code:`Object#public_method` and :code:`Object#singleton_method` with untrusted data are now recognised as sinks for code injection. +* Added additional request sources for Ruby on Rails. + +New Queries +~~~~~~~~~~~ + +Java +"""" + +* Added a new query :code:`java/android/insecure-local-key-gen` for finding instances of keys generated for biometric authentication in an insecure way. + +Python +"""""" + +* The query :code:`py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +Golang +"""""" + +* Fixed dataflow out of a :code:`map` using a :code:`range` statement. + +Java +"""" + +* Fixed the Java autobuilder overriding the version of Maven used by a project when the Maven wrapper :code:`mvnw` is in use and the :code:`maven-wrapper.jar` file is not present in the repository. +* Some flow steps related to :code:`android.text.Editable.toString` that were accidentally disabled have been re-enabled. + +Swift +""""" + +* Fixed an issue where :code:`TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* Improved support for flow through captured variables that properly adheres to inter-procedural control flow. +* We no longer make use of CodeQL database stats, which may affect join-orders in custom queries. It is therefore recommended to test performance of custom queries after upgrading to this version. + +Golang +"""""" + +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added destructors for named objects to the intermediate representation. + +C# +"" + +* C# 12: Add QL library support (:code:`ExperimentalAttribute`) for the experimental attribute. +* C# 12: Add extractor and QL library support for :code:`ref readonly` parameters. +* C#: The table :code:`expr_compiler_generated` has been deleted and its content has been added to :code:`compiler_generated`. +* Data flow via get only properties like :code:`public object Obj { get; }` is now captured by the data flow library. + +Java +"""" + +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL :code:`ErrorType` more often. + +Python +"""""" + +* Fixed missing flow for dictionary updates (:code:`d[] = ...`) when :code:`` is a string constant not used in dictionary literals or as name of keyword-argument. +* Fixed flow for iterable unpacking (:code:`a,b = my_tuple`) when it occurs on top-level (module) scope. + +Ruby +"""" + +* Calls to :code:`I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. +* Calls to :code:`Arel::Nodes::SqlLiteral.new` are now modeled as instances of the :code:`SqlConstruction` concept, as well as propagating taint from their argument. +* Additional arguments beyond the first of calls to the :code:`ActiveRecord` methods :code:`select`, :code:`reselect`, :code:`order`, :code:`reorder`, :code:`joins`, :code:`group`, and :code:`pluck` are now recognized as sql injection sinks. +* Calls to several methods of :code:`ActiveRecord::Connection`, such as :code:`ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index a04f37ad9e4..edec857c740 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: Tue, 12 Mar 2024 19:59:26 +0100 Subject: [PATCH 035/497] [cpp-docs] Fix 404 link in guards library doc. --- .../codeql-language-guides/using-the-guards-library-in-cpp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst b/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst index 792cbcd4703..1900f1b8e05 100644 --- a/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst +++ b/docs/codeql/codeql-language-guides/using-the-guards-library-in-cpp.rst @@ -8,7 +8,7 @@ You can use the CodeQL guards library to identify conditional expressions that c About the guards library ------------------------ -The guards library (defined in ``semmle.code.cpp.controlflow.Guards``) provides a class `GuardCondition `__ representing Boolean values that are used to make control flow decisions. +The guards library (defined in ``semmle.code.cpp.controlflow.Guards``) provides a class `GuardCondition `__ representing Boolean values that are used to make control flow decisions. A ``GuardCondition`` is considered to guard a basic block if the block can only be reached if the ``GuardCondition`` is evaluated a certain way. For instance, in the following code, ``x < 10`` is a ``GuardCondition``, and it guards all the code before the return statement. .. code-block:: cpp From 806f42ef7240357b2d2b00948210deab939afa3e Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Wed, 13 Mar 2024 09:54:17 +0000 Subject: [PATCH 036/497] Ruby: Update change note --- .../src/change-notes/2023-09-25-csrf-protection-not-enabled.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md index e8e7ac54e38..c84492291a3 100644 --- a/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md +++ b/ruby/ql/src/change-notes/2023-09-25-csrf-protection-not-enabled.md @@ -1,4 +1,4 @@ --- category: newQuery --- -* Added a new experimental query, `rb/csrf-protection-not-enabled`, to detect cases where Cross-Site Request Forgery protection is not enabled in Ruby on Rails controllers. +* Added a new query, `rb/csrf-protection-not-enabled`, to detect cases where Cross-Site Request Forgery protection is not enabled in Ruby on Rails controllers. From 533b63743b2b538f257d975851c5fca0bcfb49e7 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 13 Mar 2024 15:28:34 +0100 Subject: [PATCH 037/497] Python: test MaD syntax for keyword argument use the combined positional/keyword syntax as that is what we will probably mostly use. --- .../dataflow/model-summaries/NormalDataflowTest.ext.yml | 2 +- .../experimental/dataflow/model-summaries/model_summaries.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml index e3a7e059401..b3898193f59 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml @@ -3,7 +3,7 @@ extensions: pack: codeql/python-all extensible: summaryModel data: - - ["foo", "Member[MS_identity]", "Argument[0]", "ReturnValue", "value"] + - ["foo", "Member[MS_identity]", "Argument[0,x:]", "ReturnValue", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[1]", "Argument[0].Parameter[0]", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[0].ReturnValue", "ReturnValue", "value"] - ["foo", "Member[MS_reversed]", "Argument[0].ListElement", "ReturnValue.ListElement", "value"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py index c8c5ac0a888..071d1ae6aa4 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py +++ b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py @@ -36,6 +36,10 @@ from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_appen via_identity = MS_identity(SOURCE) SINK(via_identity) # $ flow="SOURCE, l:-1 -> via_identity" +# Simple summary keyword +via_identity_kw = MS_identity(x = SOURCE) +SINK(via_identity_kw) # $ flow="SOURCE, l:-1 -> via_identity_kw" + # Lambda summary via_lambda = MS_apply_lambda(lambda x: [x], SOURCE) SINK(via_lambda[0]) # $ flow="SOURCE, l:-1 -> via_lambda[0]" From 0d38a9625e039120e715dfe79b529dc5bfead3d8 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Mon, 20 Nov 2023 15:12:33 -0500 Subject: [PATCH 038/497] Java: copy files from experimental --- ...unsafeUrlForwardExperimentalMove.model.yml | 61 ++++ .../CWE/CWE-552/UnsafeLoadSpringResource.java | 21 ++ .../CWE/CWE-552/UnsafeResourceGet.java | 18 ++ .../CWE-552/UnsafeServletRequestDispatch.java | 11 + .../CWE/CWE-552/UnsafeUrlForward.java | 38 +++ .../CWE/CWE-552/UnsafeUrlForward.qhelp | 70 +++++ .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 63 ++++ .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 163 +++++++++++ .../CWE-552/UnsafeLoadSpringResource.java | 155 ++++++++++ .../security/CWE-552/UnsafeRequestPath.java | 52 ++++ .../security/CWE-552/UnsafeResourceGet.java | 270 ++++++++++++++++++ .../security/CWE-552/UnsafeResourceGet2.java | 58 ++++ .../CWE-552/UnsafeServletRequestDispatch.java | 131 +++++++++ .../CWE-552/UnsafeUrlForward.expected | 129 +++++++++ .../security/CWE-552/UnsafeUrlForward.java | 78 +++++ .../security/CWE-552/UnsafeUrlForward.qlref | 1 + .../test/query-tests/security/CWE-552/options | 1 + 17 files changed, 1320 insertions(+) create mode 100644 java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql create mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref create mode 100644 java/ql/test/query-tests/security/CWE-552/options diff --git a/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml b/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml new file mode 100644 index 00000000000..b48d891e692 --- /dev/null +++ b/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml @@ -0,0 +1,61 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] + - ["javax.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] + + # # ! below added by me when debugging CVEs: + # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "retrieve", "(String,String,String,ServletWebRequest,boolean)", "", "Parameter[3]", "remote", "manual"] + # - ["org.springframework.web.context.request", "ServletWebRequest", True, "getContextPath", "()", "", "ReturnValue", "remote", "manual"] + + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual"] # ! this seems like a typo; doesn't look like it's used in the query at all + + - ["org.springframework.core.io", "ClassPathResource", True, "getFilename", "", "", "Argument[this]", "get-resource", "manual"] # ! Note: `ClassPathResource` implements `Resource`, so it might make more sense to model some of these as `Resource` with subtype True. + - ["org.springframework.core.io", "ClassPathResource", True, "getPath", "", "", "Argument[this]", "get-resource", "manual"] + - ["org.springframework.core.io", "ClassPathResource", True, "getURL", "", "", "Argument[this]", "get-resource", "manual"] + - ["org.springframework.core.io", "ClassPathResource", True, "resolveURL", "", "", "Argument[this]", "get-resource", "manual"] + # # ! below added by me when debugging CVEs: + # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "retrieve", "", "", "Argument[0]", "get-resource", "manual"] # don't need + # # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "getFilePath", "", "", "Argument[0..3]", "get-resource", "manual"] # don't need + # # - ["org.springframework.cloud.config.server.resource", "ResourceRepository", True, "findOne", "", "", "Argument[0..3]", "get-resource", "manual"] # convert to summary + # # - ["org.springframework.core.io", "InputStreamSource", True, "getInputStream", "", "", "Argument[this]", "get-resource", "manual"] # convert to summary + # - ["org.springframework.util", "StreamUtils", True, "copyToString", "", "", "Argument[0]", "get-resource", "manual"] # * public class with good docs + # # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator", True, "getLocations", "(String,String,String)", "", "Argument[0..2]", "get-resource", "manual"] # convert to summary + # # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator$Locations", True, "getLocations", "()", "", "Argument[this]", "get-resource", "manual"] # convert to summary + # - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "get-resource", "manual"] # * public interface with good docs, might be problematic for FPs based on fact that the ext contributor changed this to a taint step to avoid "exists" FPS (maybe there's another way to exclude those FPs though). + # - ["javax.servlet", "ServletContext", True, "getResource", "", "", "Argument[0]", "get-resource", "manual"] + # - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "", "", "Argument[0]", "get-resource", "manual"] + # - ["javax.servlet", "ServletContext", True, "getResourcePaths", "", "", "Argument[0]", "get-resource", "manual"] + # - ["javax.servlet", "ServletContext", True, "getResource", "", "", "Argument[this]", "get-resource", "manual"] + # - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "", "", "Argument[this]", "get-resource", "manual"] + # - ["javax.servlet", "ServletContext", True, "getResourcePaths", "", "", "Argument[this]", "get-resource", "manual"] + # # - ["org.apache.tomcat.util.http", "RequestUtil", True, "normalize", "", "", "Argument[0]", "get-resource", "manual"] + + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["io.undertow.server.handlers.resource", "Resource", True, "getFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["io.undertow.server.handlers.resource", "Resource", True, "getFilePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["io.undertow.server.handlers.resource", "Resource", True, "getPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! this as a taint step seems to contradict the fact that they did `ClassPathResource.getPath` as a sink for Spring... + - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! shouldn't this be a sanitizer instead??? Or no because WEB-INF ones don't care about normalization? + - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! check if this and the below are already in the default models + - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] + + - ["org.springframework.core.io", "ClassPathResource", False, "ClassPathResource", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["org.springframework.core.io", "Resource", True, "createRelative", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + # # ! below added/modified by me when debugging CVEs: + - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + # - ["org.springframework.cloud.config.server.resource", "ResourceRepository", True, "findOne", "", "", "Argument[0..3]", "ReturnValue", "taint", "manual"] # * public interface, but might be too specific, no easily findable docs... + # - ["org.springframework.core.io", "InputStreamSource", True, "getInputStream", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # * public interface with good docs, Note: other `getInputStream`s are remote source and/or taint step, so this as taint step versus sink probably is more consistent + # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator", True, "getLocations", "(String,String,String)", "", "Argument[0..2]", "ReturnValue", "taint", "manual"] # * public interface with docs: https://www.javadoc.io/static/org.springframework.cloud/spring-cloud-config-server/2.1.0.RELEASE/org/springframework/cloud/config/server/environment/SearchPathLocator.html + # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator$Locations", True, "getLocations", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! is the `Locations` class package-private? Or does it inherit public from it's enclosing interface? + # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "getFilePath", "", "", "Argument[0..3]", "ReturnValue", "taint", "manual"] # don't need diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java b/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java new file mode 100644 index 00000000000..ce462fe490e --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java @@ -0,0 +1,21 @@ +//BAD: no path validation in Spring resource loading +@GetMapping("/file") +public String getFileContent(@RequestParam(name="fileName") String fileName) { + ClassPathResource clr = new ClassPathResource(fileName); + + File file = ResourceUtils.getFile(fileName); + + Resource resource = resourceLoader.getResource(fileName); +} + +//GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix in Spring resource loading: +@GetMapping("/file") +public String getFileContent(@RequestParam(name="fileName") String fileName) { + if (!fileName.contains("..") && fileName.hasPrefix("/public-content")) { + ClassPathResource clr = new ClassPathResource(fileName); + + File file = ResourceUtils.getFile(fileName); + + Resource resource = resourceLoader.getResource(fileName); + } +} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java new file mode 100644 index 00000000000..8b3583bf59e --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java @@ -0,0 +1,18 @@ +// BAD: no URI validation +URL url = request.getServletContext().getResource(requestUrl); +url = getClass().getResource(requestUrl); +InputStream in = url.openStream(); + +InputStream in = request.getServletContext().getResourceAsStream(requestPath); +in = getClass().getClassLoader().getResourceAsStream(requestPath); + +// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: +// (alternatively use `Path.normalize` instead of checking for `..`) +if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = request.getServletContext().getResourceAsStream(requestPath); +} + +Path path = Paths.get(requestUrl).normalize().toRealPath(); +if (path.startsWith("/trusted")) { + URL url = request.getServletContext().getResource(path.toString()); +} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java new file mode 100644 index 00000000000..a2bbf3dfcd8 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java @@ -0,0 +1,11 @@ +// BAD: no URI validation +String returnURL = request.getParameter("returnURL"); +RequestDispatcher rd = sc.getRequestDispatcher(returnURL); +rd.forward(request, response); + +// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: +// (alternatively use `Path.normalize` instead of checking for `..`) +if (!returnURL.contains("..") && returnURL.hasPrefix("/pages")) { ... } +// Also GOOD: check for a forbidden prefix, ensuring URL-encoding is not used to evade the check: +// (alternatively use `URLDecoder.decode` before `hasPrefix`) +if (returnURL.hasPrefix("/internal") && !returnURL.contains("%")) { ... } diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java new file mode 100644 index 00000000000..d159c405736 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java @@ -0,0 +1,38 @@ +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class UnsafeUrlForward { + + @GetMapping("/bad1") + public ModelAndView bad1(String url) { + return new ModelAndView(url); + } + + @GetMapping("/bad2") + public void bad2(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/good1") + public void good1(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp new file mode 100644 index 00000000000..2e425952edc --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp @@ -0,0 +1,70 @@ + + + + + +

    Constructing a server-side redirect path with user input could allow an attacker to download application binaries +(including application classes or jar files) or view arbitrary files within protected directories.

    + +
    + + +

    Unsanitized user provided data must not be used to construct the path for URL forwarding. In order to prevent +untrusted URL forwarding, it is recommended to avoid concatenating user input directly into the forwarding URL. +Instead, user input should be checked against allowed (e.g., must come within user_content/) or disallowed +(e.g. must not come within /internal) paths, ensuring that neither path traversal using ../ +or URL encoding are used to evade these checks. +

    + +
    + + +

    The following examples show the bad case and the good case respectively. +The bad methods show an HTTP request parameter being used directly in a URL forward +without validating the input, which may cause file leakage. In the good1 method, +ordinary forwarding requests are shown, which will not cause file leakage. +

    + + + +

    The following examples show an HTTP request parameter or request path being used directly in a +request dispatcher of Java EE without validating the input, which allows sensitive file exposure +attacks. It also shows how to remedy the problem by validating the user input. +

    + + + +

    The following examples show an HTTP request parameter or request path being used directly to +retrieve a resource of a Java EE application without validating the input, which allows sensitive +file exposure attacks. It also shows how to remedy the problem by validating the user input. +

    + + + +

    The following examples show an HTTP request parameter being used directly to retrieve a resource + of a Java Spring application without validating the input, which allows sensitive file exposure + attacks. It also shows how to remedy the problem by validating the user input. +

    + + +
    + +
  • File Disclosure: + Unsafe Url Forward. +
  • +
  • Jakarta Javadoc: + Security vulnerability with unsafe usage of RequestDispatcher. +
  • +
  • Micro Focus: + File Disclosure: J2EE +
  • +
  • CVE-2015-5174: + Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext getResource/getResourceAsStream/getResourcePaths Path Traversal +
  • +
  • CVE-2019-3799: + CVE-2019-3799 - Spring-Cloud-Config-Server Directory Traversal < 2.1.2, 2.0.4, 1.4.6 +
  • +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql new file mode 100644 index 00000000000..240023f9ffc --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql @@ -0,0 +1,63 @@ +/** + * @name Unsafe URL forward or include from a remote source + * @description URL forward or include based on unvalidated user-input + * may cause file information disclosure. + * @kind path-problem + * @problem.severity error + * @precision high + * @id java/unsafe-url-forward-include + * @tags security + * external/cwe-552 + */ + +import java +import UnsafeUrlForward +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.dataflow.TaintTracking +import experimental.semmle.code.java.frameworks.Jsf +import semmle.code.java.security.PathSanitizer +import UnsafeUrlForwardFlow::PathGraph + +module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof ThreatModelFlowSource and + not exists(MethodCall ma, Method m | ma.getMethod() = m | + ( + m instanceof HttpServletRequestGetRequestUriMethod or + m instanceof HttpServletRequestGetRequestUrlMethod or + m instanceof HttpServletRequestGetPathMethod + ) and + ma = source.asExpr() + ) + } + + predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } + + predicate isBarrier(DataFlow::Node node) { + node instanceof UnsafeUrlForwardSanitizer or + node instanceof PathInjectionSanitizer + } + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } + + predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { + exists(MethodCall ma | + ( + ma.getMethod() instanceof GetServletResourceMethod or + ma.getMethod() instanceof GetFacesResourceMethod or + ma.getMethod() instanceof GetClassResourceMethod or + ma.getMethod() instanceof GetClassLoaderResourceMethod or + ma.getMethod() instanceof GetWildflyResourceMethod + ) and + ma.getArgument(0) = prev.asExpr() and + ma = succ.asExpr() + ) + } +} + +module UnsafeUrlForwardFlow = TaintTracking::Global; + +from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink +where UnsafeUrlForwardFlow::flowPath(source, sink) +select sink.getNode(), source, sink, "Potentially untrusted URL forward due to $@.", + source.getNode(), "user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll new file mode 100644 index 00000000000..db610eb65ce --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll @@ -0,0 +1,163 @@ +import java +private import experimental.semmle.code.java.frameworks.Jsf +private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.StringPrefixes +private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions +private import experimental.semmle.code.java.frameworks.SpringResource + +/** A sink for unsafe URL forward vulnerabilities. */ +abstract class UnsafeUrlForwardSink extends DataFlow::Node { } + +/** A sanitizer for unsafe URL forward vulnerabilities. */ +abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } + +/** An argument to `getRequestDispatcher`. */ +private class RequestDispatcherSink extends UnsafeUrlForwardSink { + RequestDispatcherSink() { + exists(MethodCall ma | + ma.getMethod() instanceof GetRequestDispatcherMethod and + ma.getArgument(0) = this.asExpr() + ) + } +} + +/** The `getResource` method of `Class`. */ +class GetClassResourceMethod extends Method { + GetClassResourceMethod() { + this.getDeclaringType() instanceof TypeClass and + this.hasName("getResource") + } +} + +/** The `getResourceAsStream` method of `Class`. */ +class GetClassResourceAsStreamMethod extends Method { + GetClassResourceAsStreamMethod() { + this.getDeclaringType() instanceof TypeClass and + this.hasName("getResourceAsStream") + } +} + +/** The `getResource` method of `ClassLoader`. */ +class GetClassLoaderResourceMethod extends Method { + GetClassLoaderResourceMethod() { + this.getDeclaringType() instanceof ClassLoaderClass and + this.hasName("getResource") + } +} + +/** The `getResourceAsStream` method of `ClassLoader`. */ +class GetClassLoaderResourceAsStreamMethod extends Method { + GetClassLoaderResourceAsStreamMethod() { + this.getDeclaringType() instanceof ClassLoaderClass and + this.hasName("getResourceAsStream") + } +} + +/** The JBoss class `FileResourceManager`. */ +class FileResourceManager extends RefType { + FileResourceManager() { + this.hasQualifiedName("io.undertow.server.handlers.resource", "FileResourceManager") + } +} + +/** The JBoss method `getResource` of `FileResourceManager`. */ +class GetWildflyResourceMethod extends Method { + GetWildflyResourceMethod() { + this.getDeclaringType().getASupertype*() instanceof FileResourceManager and + this.hasName("getResource") + } +} + +/** The JBoss class `VirtualFile`. */ +class VirtualFile extends RefType { + VirtualFile() { this.hasQualifiedName("org.jboss.vfs", "VirtualFile") } +} + +/** The JBoss method `getChild` of `FileResourceManager`. */ +class GetVirtualFileChildMethod extends Method { + GetVirtualFileChildMethod() { + this.getDeclaringType().getASupertype*() instanceof VirtualFile and + this.hasName("getChild") + } +} + +/** An argument to `getResource()` or `getResourceAsStream()`. */ +private class GetResourceSink extends UnsafeUrlForwardSink { + GetResourceSink() { + sinkNode(this, "request-forgery") + or + sinkNode(this, "get-resource") + or + exists(MethodCall ma | + ( + ma.getMethod() instanceof GetServletResourceAsStreamMethod or + ma.getMethod() instanceof GetFacesResourceAsStreamMethod or + ma.getMethod() instanceof GetClassResourceAsStreamMethod or + ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or + ma.getMethod() instanceof GetVirtualFileChildMethod + ) and + ma.getArgument(0) = this.asExpr() + ) + } +} + +/** A sink for methods that load Spring resources. */ +private class SpringResourceSink extends UnsafeUrlForwardSink { + SpringResourceSink() { + exists(MethodCall ma | + ma.getMethod() instanceof GetResourceUtilsMethod and + ma.getArgument(0) = this.asExpr() + ) + } +} + +/** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ +private class SpringModelAndViewSink extends UnsafeUrlForwardSink { + SpringModelAndViewSink() { + exists(ClassInstanceExpr cie | + cie.getConstructedType() instanceof ModelAndView and + cie.getArgument(0) = this.asExpr() + ) + or + exists(SpringModelAndViewSetViewNameCall smavsvnc | smavsvnc.getArgument(0) = this.asExpr()) + } +} + +private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { + PrimitiveSanitizer() { + this.getType() instanceof PrimitiveType or + this.getType() instanceof BoxedType or + this.getType() instanceof NumberType + } +} + +private class SanitizingPrefix extends InterestingPrefix { + SanitizingPrefix() { + not this.getStringValue().matches("/WEB-INF/%") and + not this.getStringValue() = "forward:" + } + + override int getOffset() { result = 0 } +} + +private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { + FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } +} + +private class ForwardPrefix extends InterestingPrefix { + ForwardPrefix() { this.getStringValue() = "forward:" } + + override int getOffset() { result = 0 } +} + +/** + * An expression appended (perhaps indirectly) to `"forward:"`, and which + * is reachable from a Spring entry point. + */ +private class SpringUrlForwardSink extends UnsafeUrlForwardSink { + SpringUrlForwardSink() { + any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and + this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java b/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java new file mode 100644 index 00000000000..c7e114aede3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java @@ -0,0 +1,155 @@ +package com.example; + +import java.io.File; +import java.io.FileReader; +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.Reader; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.file.Files; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.util.ResourceUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** Sample class of Spring RestController */ +@RestController +public class UnsafeLoadSpringResource { + @GetMapping("/file1") + //BAD: Get resource from ClassPathResource without input validation + public String getFileContent1(@RequestParam(name="fileName") String fileName) { + // A request such as the following can disclose source code and application configuration + // fileName=/../../WEB-INF/views/page.jsp + // fileName=/com/example/package/SampleController.class + ClassPathResource clr = new ClassPathResource(fileName); + char[] buffer = new char[4096]; + StringBuilder out = new StringBuilder(); + try { + Reader in = new FileReader(clr.getFilename()); + for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { + out.append(buffer, 0, numRead); + } + } catch (IOException ie) { + ie.printStackTrace(); + } + return out.toString(); + } + + @GetMapping("/file1a") + //GOOD: Get resource from ClassPathResource with input path validation + public String getFileContent1a(@RequestParam(name="fileName") String fileName) { + String result = null; + if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { + ClassPathResource clr = new ClassPathResource(fileName); + char[] buffer = new char[4096]; + StringBuilder out = new StringBuilder(); + try { + Reader in = new InputStreamReader(clr.getInputStream(), "UTF-8"); + for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { + out.append(buffer, 0, numRead); + } + } catch (IOException ie) { + ie.printStackTrace(); + } + result = out.toString(); + } + return result; + } + + @GetMapping("/file2") + //BAD: Get resource from ResourceUtils without input validation + public String getFileContent2(@RequestParam(name="fileName") String fileName) { + String content = null; + + try { + // A request such as the following can disclose source code and system configuration + // fileName=/etc/hosts + // fileName=file:/etc/hosts + // fileName=/opt/appdir/WEB-INF/views/page.jsp + File file = ResourceUtils.getFile(fileName); + //Read File Content + content = new String(Files.readAllBytes(file.toPath())); + } catch (IOException ie) { + ie.printStackTrace(); + } + return content; + } + + @GetMapping("/file2a") + //GOOD: Get resource from ResourceUtils with input path validation + public String getFileContent2a(@RequestParam(name="fileName") String fileName) { + String content = null; + + if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { + try { + File file = ResourceUtils.getFile(fileName); + //Read File Content + content = new String(Files.readAllBytes(file.toPath())); + } catch (IOException ie) { + ie.printStackTrace(); + } + } + return content; + } + + @Autowired + ResourceLoader resourceLoader; + + @GetMapping("/file3") + //BAD: Get resource from ResourceLoader (same as application context) without input validation + // Note it is not detected without the generic `resource.getInputStream()` check + public String getFileContent3(@RequestParam(name="fileName") String fileName) { + String content = null; + + try { + // A request such as the following can disclose source code and system configuration + // fileName=/WEB-INF/views/page.jsp + // fileName=/WEB-INF/classes/com/example/package/SampleController.class + // fileName=file:/etc/hosts + Resource resource = resourceLoader.getResource(fileName); + + char[] buffer = new char[4096]; + StringBuilder out = new StringBuilder(); + + Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); + for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { + out.append(buffer, 0, numRead); + } + content = out.toString(); + } catch (IOException ie) { + ie.printStackTrace(); + } + return content; + } + + @GetMapping("/file3a") + //GOOD: Get resource from ResourceLoader (same as application context) with input path validation + public String getFileContent3a(@RequestParam(name="fileName") String fileName) { + String content = null; + + if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { + try { + Resource resource = resourceLoader.getResource(fileName); + + char[] buffer = new char[4096]; + StringBuilder out = new StringBuilder(); + + Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); + for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { + out.append(buffer, 0, numRead); + } + content = out.toString(); + } catch (IOException ie) { + ie.printStackTrace(); + } + } + return content; + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java new file mode 100644 index 00000000000..2de0cae0d3c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java @@ -0,0 +1,52 @@ +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +// @WebFilter("/*") +public class UnsafeRequestPath implements Filter { + private static final String BASE_PATH = "/pages"; + + @Override + // BAD: Request dispatcher from servlet path without check + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check + if (path != null && !path.startsWith("/WEB-INF")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } + + // GOOD: Request dispatcher from servlet path with check + public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } + + // GOOD: Request dispatcher from servlet path with whitelisted string comparison + public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.equals("/comaction")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java new file mode 100644 index 00000000000..64c23334f18 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java @@ -0,0 +1,270 @@ +package com.example; + +import java.io.InputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.net.URI; +import java.net.URL; +import java.net.URISyntaxException; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletOutputStream; +import javax.servlet.ServletException; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; + +import io.undertow.server.handlers.resource.FileResourceManager; +import io.undertow.server.handlers.resource.Resource; +import org.jboss.vfs.VFS; +import org.jboss.vfs.VirtualFile; + +public class UnsafeResourceGet extends HttpServlet { + private static final String BASE_PATH = "/pages"; + + @Override + // BAD: getResource constructed from `ServletContext` without input validation + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file + URL url = sc.getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResource constructed from `ServletContext` with input validation + protected void doGetGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + Path path = Paths.get(requestUrl).normalize().toRealPath(); + if (path.startsWith(BASE_PATH)) { + URL url = sc.getResource(path.toString()); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + // GOOD: getResource constructed from `ServletContext` with null check only + protected void doGetGood2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + PrintWriter writer = response.getWriter(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file + URL url = sc.getResource(requestUrl); + if (url == null) { + writer.println("Requested source not found"); + } + } + + // GOOD: getResource constructed from `ServletContext` with `equals` check + protected void doGetGood3(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletContext sc = request.getServletContext(); + + if (requestUrl.equals("/public/crossdomain.xml")) { + URL url = sc.getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + @Override + // BAD: getResourceAsStream constructed from `ServletContext` without input validation + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file + InputStream in = request.getServletContext().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResourceAsStream constructed from `ServletContext` with input validation + protected void doPostGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = request.getServletContext().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + @Override + // BAD: getResource constructed from `Class` without input validation + protected void doHead(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file + // Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory + URL url = getClass().getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResource constructed from `Class` with input validation + protected void doHeadGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + Path path = Paths.get(requestUrl).normalize().toRealPath(); + if (path.startsWith(BASE_PATH)) { + URL url = getClass().getResource(path.toString()); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + @Override + // BAD: getResourceAsStream constructed from `ClassLoader` without input validation + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file + // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory + InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResourceAsStream constructed from `ClassLoader` with input validation + protected void doPutGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + // BAD: getResource constructed from `ClassLoader` without input validation + protected void doPutBad(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file + // Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory + URL url = getClass().getClassLoader().getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // BAD: getResource constructed using Undertow IO without input validation + protected void doPutBad2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + + try { + FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); + Resource rs = rm.getResource(requestPath); + + VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); + // Do file operations + overlay.getChild(rs.getPath()); + } catch (URISyntaxException ue) { + throw new IOException("Cannot parse the URI"); + } + } + + // GOOD: getResource constructed using Undertow IO with input validation + protected void doPutGood2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + + try { + FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); + Resource rs = rm.getResource(requestPath); + + VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); + String path = rs.getPath(); + if (path.startsWith("/trusted_path") && !path.contains("..")) { + // Do file operations + overlay.getChild(path); + } + } catch (URISyntaxException ue) { + throw new IOException("Cannot parse the URI"); + } + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java new file mode 100644 index 00000000000..b3d041d024c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java @@ -0,0 +1,58 @@ +package com.example; + +import javax.faces.context.FacesContext; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.net.URL; +import java.util.Map; + +/** Sample class of JSF managed bean */ +public class UnsafeResourceGet2 { + // BAD: getResourceAsStream constructed from `ExternalContext` without input validation + public String parameterActionBad1() throws IOException { + FacesContext fc = FacesContext.getCurrentInstance(); + Map params = fc.getExternalContext().getRequestParameterMap(); + String loadUrl = params.get("loadUrl"); + + InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); + BufferedReader br = new BufferedReader(isr); + if(br.ready()) { + //Do Stuff + return "result"; + } + + return "home"; + } + + // BAD: getResource constructed from `ExternalContext` without input validation + public String parameterActionBad2() throws IOException { + FacesContext fc = FacesContext.getCurrentInstance(); + Map params = fc.getExternalContext().getRequestParameterMap(); + String loadUrl = params.get("loadUrl"); + + URL url = fc.getExternalContext().getResource(loadUrl); + + InputStream in = url.openStream(); + //Do Stuff + return "result"; + } + + // GOOD: getResource constructed from `ExternalContext` with input validation + public String parameterActionGood1() throws IOException { + FacesContext fc = FacesContext.getCurrentInstance(); + Map params = fc.getExternalContext().getRequestParameterMap(); + String loadUrl = params.get("loadUrl"); + + if (loadUrl.equals("/public/crossdomain.xml")) { + URL url = fc.getExternalContext().getResource(loadUrl); + + InputStream in = url.openStream(); + //Do Stuff + return "result"; + } + + return "home"; + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java new file mode 100644 index 00000000000..ee63939b209 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java @@ -0,0 +1,131 @@ +import java.io.IOException; +import java.net.URLDecoder; +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; + +public class UnsafeServletRequestDispatch extends HttpServlet { + private static final String BASE_PATH = "/pages"; + + @Override + // BAD: Request dispatcher constructed from `ServletContext` without input validation + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + ServletConfig cfg = getServletConfig(); + if (action.equals("Login")) { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); + rd.forward(request, response); + } + } + + @Override + // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + RequestDispatcher rd = request.getRequestDispatcher(returnURL); + rd.forward(request, response); + } + } + + @Override + // GOOD: Request dispatcher with a whitelisted URI + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else if (action.equals("Register")) { + RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); + rd.forward(request, response); + } + } + + // BAD: Request dispatcher without path traversal check + protected void doHead2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check + // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` + if (path.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // GOOD: Request dispatcher with path traversal check + protected void doHead3(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // GOOD: Request dispatcher with path normalization and comparison + protected void doHead4(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml + // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml + if (requestedPath.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); + } + } + + // FN: Request dispatcher with negation check and path normalization, but without URL decoding + // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink + // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the + // state to a different value than the one required at the sink). + protected void doHead5(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding + protected void doHead6(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + boolean hasEncoding = path.contains("%"); + while (hasEncoding) { + path = URLDecoder.decode(path, "UTF-8"); + hasEncoding = path.contains("%"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected new file mode 100644 index 00000000000..5d809244fdb --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -0,0 +1,129 @@ +edges +| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | +| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | +| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | +| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | +| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | +| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | +| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | +| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | +| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | +| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | +| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | +| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | +| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | +| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | +| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | +| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | +| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | +| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | +| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | +| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | +| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | +| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | +| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | +| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | +| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | +| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | +| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | +| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | +| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | +| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | +| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | +| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | +| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | +| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | +| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | +| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | +nodes +| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | semmle.label | fileName : String | +| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | semmle.label | new ClassPathResource(...) : ClassPathResource | +| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | semmle.label | fileName : String | +| UnsafeLoadSpringResource.java:35:31:35:33 | clr | semmle.label | clr | +| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | semmle.label | fileName : String | +| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | semmle.label | fileName | +| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | semmle.label | fileName : String | +| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | semmle.label | fileName | +| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | +| UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | +| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map | +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | semmle.label | get(...) : String | +| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl | +| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map | +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | semmle.label | get(...) : String | +| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | semmle.label | getResource(...) : URL | +| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | semmle.label | loadUrl : String | +| UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url | +| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | semmle.label | getResource(...) : URL | +| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | semmle.label | requestUrl : String | +| UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url | +| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:115:68:115:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | semmle.label | getResource(...) : URL | +| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | semmle.label | requestUrl : String | +| UnsafeResourceGet.java:150:20:150:22 | url | semmle.label | url | +| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:189:68:189:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | semmle.label | getResource(...) : URL | +| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | semmle.label | requestUrl : String | +| UnsafeResourceGet.java:226:20:226:22 | url | semmle.label | url | +| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | semmle.label | getResource(...) : Resource | +| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | semmle.label | requestPath : String | +| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | semmle.label | rs : Resource | +| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | semmle.label | getPath(...) | +| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | +| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL | +| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path | +| UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url | +| UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:20:28:20:30 | url | semmle.label | url | +| UnsafeUrlForward.java:25:21:25:30 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:26:23:26:25 | url | semmle.label | url | +| UnsafeUrlForward.java:30:27:30:36 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:31:48:31:63 | ... + ... | semmle.label | ... + ... | +| UnsafeUrlForward.java:31:61:31:63 | url | semmle.label | url | +| UnsafeUrlForward.java:36:19:36:28 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:38:33:38:35 | url | semmle.label | url | +| UnsafeUrlForward.java:47:19:47:28 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:49:33:49:62 | ... + ... | semmle.label | ... + ... | +| UnsafeUrlForward.java:58:19:58:28 | url : String | semmle.label | url : String | +| UnsafeUrlForward.java:60:33:60:62 | ... + ... | semmle.label | ... + ... | +subpaths +#select +| UnsafeLoadSpringResource.java:35:31:35:33 | clr | UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:35:31:35:33 | clr | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:27:32:27:77 | fileName | user-provided value | +| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:68:32:68:77 | fileName | user-provided value | +| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:108:32:108:77 | fileName | user-provided value | +| UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | +| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) | user-provided value | +| UnsafeResourceGet2.java:37:20:37:22 | url | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:37:20:37:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) | user-provided value | +| UnsafeResourceGet.java:41:20:41:22 | url | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:115:68:115:78 | requestPath | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:150:20:150:22 | url | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:189:68:189:78 | requestPath | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:226:20:226:22 | url | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) | user-provided value | +| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | +| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | +| UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | +| UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value | +| UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value | +| UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value | +| UnsafeUrlForward.java:31:48:31:63 | ... + ... | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | +| UnsafeUrlForward.java:31:61:31:63 | url | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | +| UnsafeUrlForward.java:38:33:38:35 | url | UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:36:19:36:28 | url | user-provided value | +| UnsafeUrlForward.java:49:33:49:62 | ... + ... | UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:47:19:47:28 | url | user-provided value | +| UnsafeUrlForward.java:60:33:60:62 | ... + ... | UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:58:19:58:28 | url | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java new file mode 100644 index 00000000000..4018ed28948 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java @@ -0,0 +1,78 @@ +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class UnsafeUrlForward { + + @GetMapping("/bad1") + public ModelAndView bad1(String url) { + return new ModelAndView(url); + } + + @GetMapping("/bad2") + public ModelAndView bad2(String url) { + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName(url); + return modelAndView; + } + + @GetMapping("/bad3") + public String bad3(String url) { + return "forward:" + url + "/swagger-ui/index.html"; + } + + @GetMapping("/bad4") + public ModelAndView bad4(String url) { + ModelAndView modelAndView = new ModelAndView("forward:" + url); + return modelAndView; + } + + @GetMapping("/bad5") + public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher(url).include(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/bad6") + public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/bad7") + public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @GetMapping("/good1") + public void good1(String url, HttpServletRequest request, HttpServletResponse response) { + try { + request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref new file mode 100644 index 00000000000..934a18cc6c7 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql diff --git a/java/ql/test/query-tests/security/CWE-552/options b/java/ql/test/query-tests/security/CWE-552/options new file mode 100644 index 00000000000..025b888db02 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/javax-faces-2.3/:${testdir}/../../../stubs/undertow-io-2.2/:${testdir}/../../../stubs/jboss-vfs-3.2/:${testdir}/../../../stubs/springframework-5.3.8/ From 2793f28428567060b66819525a5a045f52f2228d Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Mon, 20 Nov 2023 16:56:41 -0500 Subject: [PATCH 039/497] Java: move config to Query.qll file --- java/ql/lib/semmle/code/java/Jsf.qll | 35 +++++++++++++++ .../lib/semmle/code/java/SpringResource.qll | 22 +++++++++ .../code/java/security}/UnsafeUrlForward.qll | 4 +- .../java/security/UnsafeUrlForwardQuery.qll | 45 +++++++++++++++++++ .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 45 +------------------ 5 files changed, 105 insertions(+), 46 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/Jsf.qll create mode 100644 java/ql/lib/semmle/code/java/SpringResource.qll rename java/ql/{src/Security/CWE/CWE-552 => lib/semmle/code/java/security}/UnsafeUrlForward.qll (97%) create mode 100644 java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll diff --git a/java/ql/lib/semmle/code/java/Jsf.qll b/java/ql/lib/semmle/code/java/Jsf.qll new file mode 100644 index 00000000000..9023953add4 --- /dev/null +++ b/java/ql/lib/semmle/code/java/Jsf.qll @@ -0,0 +1,35 @@ +/** + * Provides classes and predicates for working with the Java Server Faces (JSF). + */ + +// TODO: COMBINE WITH EXISTING JSF-RELATED QLL FILES! +import java + +/** + * The JSF class `ExternalContext` for processing HTTP requests. + */ +class ExternalContext extends RefType { + ExternalContext() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ExternalContext") + } +} + +/** + * The method `getResource()` declared in JSF `ExternalContext`. + */ +class GetFacesResourceMethod extends Method { + GetFacesResourceMethod() { + this.getDeclaringType().getASupertype*() instanceof ExternalContext and + this.hasName("getResource") + } +} + +/** + * The method `getResourceAsStream()` declared in JSF `ExternalContext`. + */ +class GetFacesResourceAsStreamMethod extends Method { + GetFacesResourceAsStreamMethod() { + this.getDeclaringType().getASupertype*() instanceof ExternalContext and + this.hasName("getResourceAsStream") + } +} diff --git a/java/ql/lib/semmle/code/java/SpringResource.qll b/java/ql/lib/semmle/code/java/SpringResource.qll new file mode 100644 index 00000000000..a7d3a3793b6 --- /dev/null +++ b/java/ql/lib/semmle/code/java/SpringResource.qll @@ -0,0 +1,22 @@ +/** + * Provides classes for working with resource loading in Spring. + */ + +// TODO: COMBINE WITH EXISTING SPRING-RELATED QLL FILES! +import java +private import semmle.code.java.dataflow.FlowSources + +/** A utility class for resolving resource locations to files in the file system in the Spring framework. */ +class ResourceUtils extends Class { + ResourceUtils() { this.hasQualifiedName("org.springframework.util", "ResourceUtils") } +} + +/** + * A method declared in `org.springframework.util.ResourceUtils` that loads Spring resources. + */ +class GetResourceUtilsMethod extends Method { + GetResourceUtilsMethod() { + this.getDeclaringType().getASupertype*() instanceof ResourceUtils and + this.hasName(["extractArchiveURL", "extractJarFileURL", "getFile", "getURL"]) + } +} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll similarity index 97% rename from java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll rename to java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index db610eb65ce..48b4431015e 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -1,10 +1,10 @@ import java -private import experimental.semmle.code.java.frameworks.Jsf +private import semmle.code.java.Jsf private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions -private import experimental.semmle.code.java.frameworks.SpringResource +private import semmle.code.java.SpringResource /** A sink for unsafe URL forward vulnerabilities. */ abstract class UnsafeUrlForwardSink extends DataFlow::Node { } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll new file mode 100644 index 00000000000..9ee3f2ab417 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll @@ -0,0 +1,45 @@ +import java +import semmle.code.java.security.UnsafeUrlForward +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.Jsf +import semmle.code.java.security.PathSanitizer + +module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof ThreatModelFlowSource and + not exists(MethodCall ma, Method m | ma.getMethod() = m | + ( + m instanceof HttpServletRequestGetRequestUriMethod or + m instanceof HttpServletRequestGetRequestUrlMethod or + m instanceof HttpServletRequestGetPathMethod + ) and + ma = source.asExpr() + ) + } + + predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } + + predicate isBarrier(DataFlow::Node node) { + node instanceof UnsafeUrlForwardSanitizer or + node instanceof PathInjectionSanitizer + } + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } + + predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { + exists(MethodCall ma | + ( + ma.getMethod() instanceof GetServletResourceMethod or + ma.getMethod() instanceof GetFacesResourceMethod or + ma.getMethod() instanceof GetClassResourceMethod or + ma.getMethod() instanceof GetClassLoaderResourceMethod or + ma.getMethod() instanceof GetWildflyResourceMethod + ) and + ma.getArgument(0) = prev.asExpr() and + ma = succ.asExpr() + ) + } +} + +module UnsafeUrlForwardFlow = TaintTracking::Global; diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql index 240023f9ffc..4e3326a831e 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql @@ -11,52 +11,9 @@ */ import java -import UnsafeUrlForward -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.dataflow.TaintTracking -import experimental.semmle.code.java.frameworks.Jsf -import semmle.code.java.security.PathSanitizer +import semmle.code.java.security.UnsafeUrlForwardQuery import UnsafeUrlForwardFlow::PathGraph -module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof ThreatModelFlowSource and - not exists(MethodCall ma, Method m | ma.getMethod() = m | - ( - m instanceof HttpServletRequestGetRequestUriMethod or - m instanceof HttpServletRequestGetRequestUrlMethod or - m instanceof HttpServletRequestGetPathMethod - ) and - ma = source.asExpr() - ) - } - - predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } - - predicate isBarrier(DataFlow::Node node) { - node instanceof UnsafeUrlForwardSanitizer or - node instanceof PathInjectionSanitizer - } - - DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } - - predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceMethod or - ma.getMethod() instanceof GetFacesResourceMethod or - ma.getMethod() instanceof GetClassResourceMethod or - ma.getMethod() instanceof GetClassLoaderResourceMethod or - ma.getMethod() instanceof GetWildflyResourceMethod - ) and - ma.getArgument(0) = prev.asExpr() and - ma = succ.asExpr() - ) - } -} - -module UnsafeUrlForwardFlow = TaintTracking::Global; - from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink where UnsafeUrlForwardFlow::flowPath(source, sink) select sink.getNode(), source, sink, "Potentially untrusted URL forward due to $@.", From 35a083ae9e5c70a29ac426cf54112ef98286507b Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Mon, 20 Nov 2023 16:59:19 -0500 Subject: [PATCH 040/497] Java: update test cases to use inline expectations --- .../CWE-552/UnsafeLoadSpringResource.java | 10 +- .../security/CWE-552/UnsafeRequestPath.java | 12 +- .../security/CWE-552/UnsafeResourceGet.java | 12 +- .../security/CWE-552/UnsafeResourceGet2.java | 4 +- .../CWE-552/UnsafeServletRequestDispatch.java | 20 +-- .../CWE-552/UnsafeUrlForward.expected | 129 ------------------ .../security/CWE-552/UnsafeUrlForward.java | 14 +- .../security/CWE-552/UnsafeUrlForward.qlref | 1 - .../CWE-552/UnsafeUrlForwardTest.expected | 2 + .../security/CWE-552/UnsafeUrlForwardTest.ql | 18 +++ 10 files changed, 56 insertions(+), 166 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected create mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java b/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java index c7e114aede3..363d84cabe9 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java @@ -32,7 +32,7 @@ public class UnsafeLoadSpringResource { char[] buffer = new char[4096]; StringBuilder out = new StringBuilder(); try { - Reader in = new FileReader(clr.getFilename()); + Reader in = new FileReader(clr.getFilename()); // $ hasUnsafeUrlForward (path-inj?) for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { out.append(buffer, 0, numRead); } @@ -67,13 +67,13 @@ public class UnsafeLoadSpringResource { //BAD: Get resource from ResourceUtils without input validation public String getFileContent2(@RequestParam(name="fileName") String fileName) { String content = null; - + try { // A request such as the following can disclose source code and system configuration // fileName=/etc/hosts // fileName=file:/etc/hosts // fileName=/opt/appdir/WEB-INF/views/page.jsp - File file = ResourceUtils.getFile(fileName); + File file = ResourceUtils.getFile(fileName); // $ hasUnsafeUrlForward (path-inj?) //Read File Content content = new String(Files.readAllBytes(file.toPath())); } catch (IOException ie) { @@ -86,7 +86,7 @@ public class UnsafeLoadSpringResource { //GOOD: Get resource from ResourceUtils with input path validation public String getFileContent2a(@RequestParam(name="fileName") String fileName) { String content = null; - + if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { try { File file = ResourceUtils.getFile(fileName); @@ -113,7 +113,7 @@ public class UnsafeLoadSpringResource { // fileName=/WEB-INF/views/page.jsp // fileName=/WEB-INF/classes/com/example/package/SampleController.class // fileName=file:/etc/hosts - Resource resource = resourceLoader.getResource(fileName); + Resource resource = resourceLoader.getResource(fileName); // $ hasUnsafeUrlForward (path-inj?) char[] buffer = new char[4096]; StringBuilder out = new StringBuilder(); diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java index 2de0cae0d3c..55afe84bc19 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java @@ -14,23 +14,23 @@ public class UnsafeRequestPath implements Filter { private static final String BASE_PATH = "/pages"; @Override - // BAD: Request dispatcher from servlet path without check + // BAD: Request dispatcher from servlet path without check public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); + request.getRequestDispatcher(path).forward(request, response); // $ hasUnsafeUrlForward } else { chain.doFilter(request, response); } } - // GOOD: Request dispatcher from servlet path with check + // GOOD: Request dispatcher from servlet path with check public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); - + if (path.startsWith(BASE_PATH) && !path.contains("..")) { request.getRequestDispatcher(path).forward(request, response); } else { @@ -38,11 +38,11 @@ public class UnsafeRequestPath implements Filter { } } - // GOOD: Request dispatcher from servlet path with whitelisted string comparison + // GOOD: Request dispatcher from servlet path with whitelisted string comparison public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); - + if (path.equals("/comaction")) { request.getRequestDispatcher(path).forward(request, response); } else { diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java index 64c23334f18..053887984c6 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java @@ -38,7 +38,7 @@ public class UnsafeResourceGet extends HttpServlet { // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file URL url = sc.getResource(requestUrl); - InputStream in = url.openStream(); + InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; while ((bytesRead = in.read(buf)) != -1) { @@ -112,7 +112,7 @@ public class UnsafeResourceGet extends HttpServlet { ServletOutputStream out = response.getOutputStream(); // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - InputStream in = request.getServletContext().getResourceAsStream(requestPath); + InputStream in = request.getServletContext().getResourceAsStream(requestPath); // $ hasUnsafeUrlForward (path-inj?) byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; while ((bytesRead = in.read(buf)) != -1) { @@ -147,7 +147,7 @@ public class UnsafeResourceGet extends HttpServlet { // Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory URL url = getClass().getResource(requestUrl); - InputStream in = url.openStream(); + InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; while ((bytesRead = in.read(buf)) != -1) { @@ -186,7 +186,7 @@ public class UnsafeResourceGet extends HttpServlet { // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); + InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); // $ hasUnsafeUrlForward (path-inj?) byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; while ((bytesRead = in.read(buf)) != -1) { @@ -223,7 +223,7 @@ public class UnsafeResourceGet extends HttpServlet { // Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory URL url = getClass().getClassLoader().getResource(requestUrl); - InputStream in = url.openStream(); + InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; while ((bytesRead = in.read(buf)) != -1) { @@ -242,7 +242,7 @@ public class UnsafeResourceGet extends HttpServlet { VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); // Do file operations - overlay.getChild(rs.getPath()); + overlay.getChild(rs.getPath()); // $ hasUnsafeUrlForward (path-inj?) } catch (URISyntaxException ue) { throw new IOException("Cannot parse the URI"); } diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java index b3d041d024c..0043bb06c67 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java @@ -16,7 +16,7 @@ public class UnsafeResourceGet2 { Map params = fc.getExternalContext().getRequestParameterMap(); String loadUrl = params.get("loadUrl"); - InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); + InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); // $ hasUnsafeUrlForward (path-inj?) BufferedReader br = new BufferedReader(isr); if(br.ready()) { //Do Stuff @@ -34,7 +34,7 @@ public class UnsafeResourceGet2 { URL url = fc.getExternalContext().getResource(loadUrl); - InputStream in = url.openStream(); + InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) //Do Stuff return "result"; } diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java index ee63939b209..9d501f2ec0d 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java @@ -29,13 +29,13 @@ public class UnsafeServletRequestDispatch extends HttpServlet { rd.forward(request, response); } else { ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUnsafeUrlForward rd.forward(request, response); } } @Override - // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation + // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); @@ -45,7 +45,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); rd.forward(request, response); } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUnsafeUrlForward rd.forward(request, response); } } @@ -65,22 +65,22 @@ public class UnsafeServletRequestDispatch extends HttpServlet { } } - // BAD: Request dispatcher without path traversal check + // BAD: Request dispatcher without path traversal check protected void doHead2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); - // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check - // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` + // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check + // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUnsafeUrlForward } } - // GOOD: Request dispatcher with path traversal check + // GOOD: Request dispatcher with path traversal check protected void doHead3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); + String path = request.getParameter("path"); if (path.startsWith(BASE_PATH) && !path.contains("..")) { request.getServletContext().getRequestDispatcher(path).include(request, response); @@ -110,7 +110,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUnsafeUrlForward } } diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected deleted file mode 100644 index 5d809244fdb..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ /dev/null @@ -1,129 +0,0 @@ -edges -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | -| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | -| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | -| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | -| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | -| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | -| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | -nodes -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | semmle.label | new ClassPathResource(...) : ClassPathResource | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | semmle.label | clr | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | semmle.label | fileName | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | semmle.label | fileName | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | -| UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | semmle.label | loadUrl : String | -| UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:150:20:150:22 | url | semmle.label | url | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:226:20:226:22 | url | semmle.label | url | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | semmle.label | getResource(...) : Resource | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | semmle.label | requestPath : String | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | semmle.label | rs : Resource | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | semmle.label | getPath(...) | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path | -| UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url | -| UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:20:28:20:30 | url | semmle.label | url | -| UnsafeUrlForward.java:25:21:25:30 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:26:23:26:25 | url | semmle.label | url | -| UnsafeUrlForward.java:30:27:30:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:31:61:31:63 | url | semmle.label | url | -| UnsafeUrlForward.java:36:19:36:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:38:33:38:35 | url | semmle.label | url | -| UnsafeUrlForward.java:47:19:47:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:58:19:58:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | semmle.label | ... + ... | -subpaths -#select -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:35:31:35:33 | clr | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:27:32:27:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:68:32:68:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:108:32:108:77 | fileName | user-provided value | -| UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet2.java:37:20:37:22 | url | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:37:20:37:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet.java:41:20:41:22 | url | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:150:20:150:22 | url | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:226:20:226:22 | url | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | -| UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value | -| UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value | -| UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:31:61:31:63 | url | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:38:33:38:35 | url | UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:36:19:36:28 | url | user-provided value | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:47:19:47:28 | url | user-provided value | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:58:19:58:28 | url | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java index 4018ed28948..0a00637cd44 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java @@ -11,31 +11,31 @@ public class UnsafeUrlForward { @GetMapping("/bad1") public ModelAndView bad1(String url) { - return new ModelAndView(url); + return new ModelAndView(url); // $ hasUnsafeUrlForward } @GetMapping("/bad2") public ModelAndView bad2(String url) { ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); + modelAndView.setViewName(url); // $ hasUnsafeUrlForward return modelAndView; } @GetMapping("/bad3") public String bad3(String url) { - return "forward:" + url + "/swagger-ui/index.html"; + return "forward:" + url + "/swagger-ui/index.html"; // $ hasUnsafeUrlForward } @GetMapping("/bad4") public ModelAndView bad4(String url) { - ModelAndView modelAndView = new ModelAndView("forward:" + url); + ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasUnsafeUrlForward return modelAndView; } @GetMapping("/bad5") public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher(url).include(request, response); + request.getRequestDispatcher(url).include(request, response); // $ hasUnsafeUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -46,7 +46,7 @@ public class UnsafeUrlForward { @GetMapping("/bad6") public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasUnsafeUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -57,7 +57,7 @@ public class UnsafeUrlForward { @GetMapping("/bad7") public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasUnsafeUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref deleted file mode 100644 index 934a18cc6c7..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql new file mode 100644 index 00000000000..cf77edcf12a --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql @@ -0,0 +1,18 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.security.UnsafeUrlForwardQuery + +module UnsafeUrlForwardTest implements TestSig { + string getARelevantTag() { result = "hasUnsafeUrlForward" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasUnsafeUrlForward" and + exists(UnsafeUrlForwardFlow::PathNode sink | UnsafeUrlForwardFlow::flowPath(_, sink) | + location = sink.getNode().getLocation() and + element = sink.getNode().toString() and + value = "" + ) + } +} + +import MakeTest From 915e106ab382aaa060e11b02e34d61c7434452c6 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Mon, 20 Nov 2023 18:10:07 -0500 Subject: [PATCH 041/497] Java: remove path-injection related models and tests for now --- ...unsafeUrlForwardExperimentalMove.model.yml | 40 +-- .../code/java/security/UnsafeUrlForward.qll | 91 +----- .../java/security/UnsafeUrlForwardQuery.qll | 24 +- .../CWE-552/UnsafeLoadSpringResource.java | 155 ---------- .../security/CWE-552/UnsafeResourceGet.java | 270 ------------------ .../security/CWE-552/UnsafeResourceGet2.java | 58 ---- 6 files changed, 12 insertions(+), 626 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java diff --git a/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml b/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml index b48d891e692..27c1094d765 100644 --- a/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml +++ b/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml @@ -6,56 +6,18 @@ extensions: - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] - ["javax.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] - # # ! below added by me when debugging CVEs: - # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "retrieve", "(String,String,String,ServletWebRequest,boolean)", "", "Parameter[3]", "remote", "manual"] - # - ["org.springframework.web.context.request", "ServletWebRequest", True, "getContextPath", "()", "", "ReturnValue", "remote", "manual"] - - addsTo: pack: codeql/java-all extensible: sinkModel data: - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual"] # ! this seems like a typo; doesn't look like it's used in the query at all - - ["org.springframework.core.io", "ClassPathResource", True, "getFilename", "", "", "Argument[this]", "get-resource", "manual"] # ! Note: `ClassPathResource` implements `Resource`, so it might make more sense to model some of these as `Resource` with subtype True. - - ["org.springframework.core.io", "ClassPathResource", True, "getPath", "", "", "Argument[this]", "get-resource", "manual"] - - ["org.springframework.core.io", "ClassPathResource", True, "getURL", "", "", "Argument[this]", "get-resource", "manual"] - - ["org.springframework.core.io", "ClassPathResource", True, "resolveURL", "", "", "Argument[this]", "get-resource", "manual"] - # # ! below added by me when debugging CVEs: - # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "retrieve", "", "", "Argument[0]", "get-resource", "manual"] # don't need - # # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "getFilePath", "", "", "Argument[0..3]", "get-resource", "manual"] # don't need - # # - ["org.springframework.cloud.config.server.resource", "ResourceRepository", True, "findOne", "", "", "Argument[0..3]", "get-resource", "manual"] # convert to summary - # # - ["org.springframework.core.io", "InputStreamSource", True, "getInputStream", "", "", "Argument[this]", "get-resource", "manual"] # convert to summary - # - ["org.springframework.util", "StreamUtils", True, "copyToString", "", "", "Argument[0]", "get-resource", "manual"] # * public class with good docs - # # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator", True, "getLocations", "(String,String,String)", "", "Argument[0..2]", "get-resource", "manual"] # convert to summary - # # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator$Locations", True, "getLocations", "()", "", "Argument[this]", "get-resource", "manual"] # convert to summary - # - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "get-resource", "manual"] # * public interface with good docs, might be problematic for FPs based on fact that the ext contributor changed this to a taint step to avoid "exists" FPS (maybe there's another way to exclude those FPs though). - # - ["javax.servlet", "ServletContext", True, "getResource", "", "", "Argument[0]", "get-resource", "manual"] - # - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "", "", "Argument[0]", "get-resource", "manual"] - # - ["javax.servlet", "ServletContext", True, "getResourcePaths", "", "", "Argument[0]", "get-resource", "manual"] - # - ["javax.servlet", "ServletContext", True, "getResource", "", "", "Argument[this]", "get-resource", "manual"] - # - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "", "", "Argument[this]", "get-resource", "manual"] - # - ["javax.servlet", "ServletContext", True, "getResourcePaths", "", "", "Argument[this]", "get-resource", "manual"] - # # - ["org.apache.tomcat.util.http", "RequestUtil", True, "normalize", "", "", "Argument[0]", "get-resource", "manual"] - - addsTo: pack: codeql/java-all extensible: summaryModel data: - - ["io.undertow.server.handlers.resource", "Resource", True, "getFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getFilePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! this as a taint step seems to contradict the fact that they did `ClassPathResource.getPath` as a sink for Spring... - - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! shouldn't this be a sanitizer instead??? Or no because WEB-INF ones don't care about normalization? + - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! check if this and the below are already in the default models - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - - ["org.springframework.core.io", "ClassPathResource", False, "ClassPathResource", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - - ["org.springframework.core.io", "Resource", True, "createRelative", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - # # ! below added/modified by me when debugging CVEs: - - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - # - ["org.springframework.cloud.config.server.resource", "ResourceRepository", True, "findOne", "", "", "Argument[0..3]", "ReturnValue", "taint", "manual"] # * public interface, but might be too specific, no easily findable docs... - # - ["org.springframework.core.io", "InputStreamSource", True, "getInputStream", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # * public interface with good docs, Note: other `getInputStream`s are remote source and/or taint step, so this as taint step versus sink probably is more consistent - # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator", True, "getLocations", "(String,String,String)", "", "Argument[0..2]", "ReturnValue", "taint", "manual"] # * public interface with docs: https://www.javadoc.io/static/org.springframework.cloud/spring-cloud-config-server/2.1.0.RELEASE/org/springframework/cloud/config/server/environment/SearchPathLocator.html - # - ["org.springframework.cloud.config.server.environment", "SearchPathLocator$Locations", True, "getLocations", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! is the `Locations` class package-private? Or does it inherit public from it's enclosing interface? - # - ["org.springframework.cloud.config.server.resource", "ResourceController", True, "getFilePath", "", "", "Argument[0..3]", "ReturnValue", "taint", "manual"] # don't need diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index 48b4431015e..dd3e17aa832 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -22,96 +22,7 @@ private class RequestDispatcherSink extends UnsafeUrlForwardSink { } } -/** The `getResource` method of `Class`. */ -class GetClassResourceMethod extends Method { - GetClassResourceMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `Class`. */ -class GetClassResourceAsStreamMethod extends Method { - GetClassResourceAsStreamMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResourceAsStream") - } -} - -/** The `getResource` method of `ClassLoader`. */ -class GetClassLoaderResourceMethod extends Method { - GetClassLoaderResourceMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `ClassLoader`. */ -class GetClassLoaderResourceAsStreamMethod extends Method { - GetClassLoaderResourceAsStreamMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResourceAsStream") - } -} - -/** The JBoss class `FileResourceManager`. */ -class FileResourceManager extends RefType { - FileResourceManager() { - this.hasQualifiedName("io.undertow.server.handlers.resource", "FileResourceManager") - } -} - -/** The JBoss method `getResource` of `FileResourceManager`. */ -class GetWildflyResourceMethod extends Method { - GetWildflyResourceMethod() { - this.getDeclaringType().getASupertype*() instanceof FileResourceManager and - this.hasName("getResource") - } -} - -/** The JBoss class `VirtualFile`. */ -class VirtualFile extends RefType { - VirtualFile() { this.hasQualifiedName("org.jboss.vfs", "VirtualFile") } -} - -/** The JBoss method `getChild` of `FileResourceManager`. */ -class GetVirtualFileChildMethod extends Method { - GetVirtualFileChildMethod() { - this.getDeclaringType().getASupertype*() instanceof VirtualFile and - this.hasName("getChild") - } -} - -/** An argument to `getResource()` or `getResourceAsStream()`. */ -private class GetResourceSink extends UnsafeUrlForwardSink { - GetResourceSink() { - sinkNode(this, "request-forgery") - or - sinkNode(this, "get-resource") - or - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceAsStreamMethod or - ma.getMethod() instanceof GetFacesResourceAsStreamMethod or - ma.getMethod() instanceof GetClassResourceAsStreamMethod or - ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or - ma.getMethod() instanceof GetVirtualFileChildMethod - ) and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** A sink for methods that load Spring resources. */ -private class SpringResourceSink extends UnsafeUrlForwardSink { - SpringResourceSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetResourceUtilsMethod and - ma.getArgument(0) = this.asExpr() - ) - } -} - +// TODO: look into `StaplerResponse.forward`, etc., and think about re-adding the MaD "request-forgery" sinks as a result /** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ private class SpringModelAndViewSink extends UnsafeUrlForwardSink { SpringModelAndViewSink() { diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll index 9ee3f2ab417..6cd419a5e13 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll @@ -1,3 +1,5 @@ +/** Provides configurations to be used in queries related to unsafe URL forwarding. */ + import java import semmle.code.java.security.UnsafeUrlForward import semmle.code.java.dataflow.FlowSources @@ -5,9 +7,13 @@ import semmle.code.java.dataflow.TaintTracking import semmle.code.java.Jsf import semmle.code.java.security.PathSanitizer +/** + * A taint-tracking configuration for untrusted user input in a URL forward or include. + */ module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource and + // TODO: move below logic to class in UnsafeUrlForward.qll? not exists(MethodCall ma, Method m | ma.getMethod() = m | ( m instanceof HttpServletRequestGetRequestUriMethod or @@ -25,21 +31,11 @@ module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { node instanceof PathInjectionSanitizer } + // TODO: check if the below is still needed after removing path-injection related sinks. DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } - - predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceMethod or - ma.getMethod() instanceof GetFacesResourceMethod or - ma.getMethod() instanceof GetClassResourceMethod or - ma.getMethod() instanceof GetClassLoaderResourceMethod or - ma.getMethod() instanceof GetWildflyResourceMethod - ) and - ma.getArgument(0) = prev.asExpr() and - ma = succ.asExpr() - ) - } } +/** + * Taint-tracking flow for untrusted user input in a URL forward or include. + */ module UnsafeUrlForwardFlow = TaintTracking::Global; diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java b/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index 363d84cabe9..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.example; - -import java.io.File; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.io.IOException; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.nio.file.Files; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; -import org.springframework.util.ResourceUtils; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -/** Sample class of Spring RestController */ -@RestController -public class UnsafeLoadSpringResource { - @GetMapping("/file1") - //BAD: Get resource from ClassPathResource without input validation - public String getFileContent1(@RequestParam(name="fileName") String fileName) { - // A request such as the following can disclose source code and application configuration - // fileName=/../../WEB-INF/views/page.jsp - // fileName=/com/example/package/SampleController.class - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new FileReader(clr.getFilename()); // $ hasUnsafeUrlForward (path-inj?) - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - return out.toString(); - } - - @GetMapping("/file1a") - //GOOD: Get resource from ClassPathResource with input path validation - public String getFileContent1a(@RequestParam(name="fileName") String fileName) { - String result = null; - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new InputStreamReader(clr.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - result = out.toString(); - } - return result; - } - - @GetMapping("/file2") - //BAD: Get resource from ResourceUtils without input validation - public String getFileContent2(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/etc/hosts - // fileName=file:/etc/hosts - // fileName=/opt/appdir/WEB-INF/views/page.jsp - File file = ResourceUtils.getFile(fileName); // $ hasUnsafeUrlForward (path-inj?) - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file2a") - //GOOD: Get resource from ResourceUtils with input path validation - public String getFileContent2a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - File file = ResourceUtils.getFile(fileName); - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } - - @Autowired - ResourceLoader resourceLoader; - - @GetMapping("/file3") - //BAD: Get resource from ResourceLoader (same as application context) without input validation - // Note it is not detected without the generic `resource.getInputStream()` check - public String getFileContent3(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/WEB-INF/views/page.jsp - // fileName=/WEB-INF/classes/com/example/package/SampleController.class - // fileName=file:/etc/hosts - Resource resource = resourceLoader.getResource(fileName); // $ hasUnsafeUrlForward (path-inj?) - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file3a") - //GOOD: Get resource from ResourceLoader (same as application context) with input path validation - public String getFileContent3a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - Resource resource = resourceLoader.getResource(fileName); - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } -} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 053887984c6..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.example; - -import java.io.InputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.net.URI; -import java.net.URL; -import java.net.URISyntaxException; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -import io.undertow.server.handlers.resource.FileResourceManager; -import io.undertow.server.handlers.resource.Resource; -import org.jboss.vfs.VFS; -import org.jboss.vfs.VirtualFile; - -public class UnsafeResourceGet extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: getResource constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `ServletContext` with input validation - protected void doGetGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = sc.getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // GOOD: getResource constructed from `ServletContext` with null check only - protected void doGetGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - PrintWriter writer = response.getWriter(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - if (url == null) { - writer.println("Requested source not found"); - } - } - - // GOOD: getResource constructed from `ServletContext` with `equals` check - protected void doGetGood3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletContext sc = request.getServletContext(); - - if (requestUrl.equals("/public/crossdomain.xml")) { - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ServletContext` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - InputStream in = request.getServletContext().getResourceAsStream(requestPath); // $ hasUnsafeUrlForward (path-inj?) - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ServletContext` with input validation - protected void doPostGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResource constructed from `Class` without input validation - protected void doHead(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory - URL url = getClass().getResource(requestUrl); - - InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `Class` with input validation - protected void doHeadGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = getClass().getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ClassLoader` without input validation - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); // $ hasUnsafeUrlForward (path-inj?) - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ClassLoader` with input validation - protected void doPutGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // BAD: getResource constructed from `ClassLoader` without input validation - protected void doPutBad(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory - URL url = getClass().getClassLoader().getResource(requestUrl); - - InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // BAD: getResource constructed using Undertow IO without input validation - protected void doPutBad2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - // Do file operations - overlay.getChild(rs.getPath()); // $ hasUnsafeUrlForward (path-inj?) - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } - - // GOOD: getResource constructed using Undertow IO with input validation - protected void doPutGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - String path = rs.getPath(); - if (path.startsWith("/trusted_path") && !path.contains("..")) { - // Do file operations - overlay.getChild(path); - } - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java deleted file mode 100644 index 0043bb06c67..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeResourceGet2.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example; - -import javax.faces.context.FacesContext; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.IOException; -import java.net.URL; -import java.util.Map; - -/** Sample class of JSF managed bean */ -public class UnsafeResourceGet2 { - // BAD: getResourceAsStream constructed from `ExternalContext` without input validation - public String parameterActionBad1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); // $ hasUnsafeUrlForward (path-inj?) - BufferedReader br = new BufferedReader(isr); - if(br.ready()) { - //Do Stuff - return "result"; - } - - return "home"; - } - - // BAD: getResource constructed from `ExternalContext` without input validation - public String parameterActionBad2() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); // $ hasUnsafeUrlForward (SSRF) - //Do Stuff - return "result"; - } - - // GOOD: getResource constructed from `ExternalContext` with input validation - public String parameterActionGood1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - if (loadUrl.equals("/public/crossdomain.xml")) { - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); - //Do Stuff - return "result"; - } - - return "home"; - } -} From 2a682995aeadbb919d4c400b916c7737fae0b150 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Thu, 30 Nov 2023 11:16:39 -0500 Subject: [PATCH 042/497] Java: move MaD models to correct files, delete ones that already exist --- .../ql/lib/ext/jakarta.servlet.http.model.yml | 6 +++++ java/ql/lib/ext/javax.servlet.http.model.yml | 2 ++ ...unsafeUrlForwardExperimentalMove.model.yml | 23 ------------------- 3 files changed, 8 insertions(+), 23 deletions(-) create mode 100644 java/ql/lib/ext/jakarta.servlet.http.model.yml delete mode 100644 java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml diff --git a/java/ql/lib/ext/jakarta.servlet.http.model.yml b/java/ql/lib/ext/jakarta.servlet.http.model.yml new file mode 100644 index 00000000000..5a83b1ac08d --- /dev/null +++ b/java/ql/lib/ext/jakarta.servlet.http.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] diff --git a/java/ql/lib/ext/javax.servlet.http.model.yml b/java/ql/lib/ext/javax.servlet.http.model.yml index afac25e4bc8..ec35445d199 100644 --- a/java/ql/lib/ext/javax.servlet.http.model.yml +++ b/java/ql/lib/ext/javax.servlet.http.model.yml @@ -18,6 +18,8 @@ extensions: - ["javax.servlet.http", "HttpServletRequest", False, "getRemoteUser", "()", "", "ReturnValue", "remote", "manual"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "remote", "manual"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "remote", "manual"] + - ["javax.servlet.http", "HttpServletRequest", False, "getServletPath", "()", "", "ReturnValue", "remote", "manual"] + - addsTo: pack: codeql/java-all extensible: sinkModel diff --git a/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml b/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml deleted file mode 100644 index 27c1094d765..00000000000 --- a/java/ql/lib/ext/unsafeUrlForwardExperimentalMove.model.yml +++ /dev/null @@ -1,23 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: sourceModel - data: - - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] - - ["javax.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] - - - addsTo: - pack: codeql/java-all - extensible: sinkModel - data: - - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual"] # ! this seems like a typo; doesn't look like it's used in the query at all - - - addsTo: - pack: codeql/java-all - extensible: summaryModel - data: - - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] # ! check if this and the below are already in the default models - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] From 4ff884e26cad54486745861fe1145c6539418f8c Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Thu, 30 Nov 2023 11:31:39 -0500 Subject: [PATCH 043/497] Java: remove more path-injection related classes (will maybe add some of these back in a separate PR) --- java/ql/lib/semmle/code/java/Jsf.qll | 35 ------------------- .../lib/semmle/code/java/SpringResource.qll | 22 ------------ .../code/java/security/UnsafeUrlForward.qll | 2 -- .../java/security/UnsafeUrlForwardQuery.qll | 1 - 4 files changed, 60 deletions(-) delete mode 100644 java/ql/lib/semmle/code/java/Jsf.qll delete mode 100644 java/ql/lib/semmle/code/java/SpringResource.qll diff --git a/java/ql/lib/semmle/code/java/Jsf.qll b/java/ql/lib/semmle/code/java/Jsf.qll deleted file mode 100644 index 9023953add4..00000000000 --- a/java/ql/lib/semmle/code/java/Jsf.qll +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Provides classes and predicates for working with the Java Server Faces (JSF). - */ - -// TODO: COMBINE WITH EXISTING JSF-RELATED QLL FILES! -import java - -/** - * The JSF class `ExternalContext` for processing HTTP requests. - */ -class ExternalContext extends RefType { - ExternalContext() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ExternalContext") - } -} - -/** - * The method `getResource()` declared in JSF `ExternalContext`. - */ -class GetFacesResourceMethod extends Method { - GetFacesResourceMethod() { - this.getDeclaringType().getASupertype*() instanceof ExternalContext and - this.hasName("getResource") - } -} - -/** - * The method `getResourceAsStream()` declared in JSF `ExternalContext`. - */ -class GetFacesResourceAsStreamMethod extends Method { - GetFacesResourceAsStreamMethod() { - this.getDeclaringType().getASupertype*() instanceof ExternalContext and - this.hasName("getResourceAsStream") - } -} diff --git a/java/ql/lib/semmle/code/java/SpringResource.qll b/java/ql/lib/semmle/code/java/SpringResource.qll deleted file mode 100644 index a7d3a3793b6..00000000000 --- a/java/ql/lib/semmle/code/java/SpringResource.qll +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Provides classes for working with resource loading in Spring. - */ - -// TODO: COMBINE WITH EXISTING SPRING-RELATED QLL FILES! -import java -private import semmle.code.java.dataflow.FlowSources - -/** A utility class for resolving resource locations to files in the file system in the Spring framework. */ -class ResourceUtils extends Class { - ResourceUtils() { this.hasQualifiedName("org.springframework.util", "ResourceUtils") } -} - -/** - * A method declared in `org.springframework.util.ResourceUtils` that loads Spring resources. - */ -class GetResourceUtilsMethod extends Method { - GetResourceUtilsMethod() { - this.getDeclaringType().getASupertype*() instanceof ResourceUtils and - this.hasName(["extractArchiveURL", "extractJarFileURL", "getFile", "getURL"]) - } -} diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index dd3e17aa832..628397d07ef 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -1,10 +1,8 @@ import java -private import semmle.code.java.Jsf private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions -private import semmle.code.java.SpringResource /** A sink for unsafe URL forward vulnerabilities. */ abstract class UnsafeUrlForwardSink extends DataFlow::Node { } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll index 6cd419a5e13..4231af1a90a 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll @@ -4,7 +4,6 @@ import java import semmle.code.java.security.UnsafeUrlForward import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking -import semmle.code.java.Jsf import semmle.code.java.security.PathSanitizer /** From 42e3825ea3b50ee362ae723c657744de85860e5e Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 11:55:54 -0500 Subject: [PATCH 044/497] Java: convert RequestDispatcherSink to MaD --- java/ql/lib/ext/jakarta.servlet.model.yml | 8 ++++++++ java/ql/lib/ext/javax.portlet.model.yml | 7 +++++++ java/ql/lib/ext/javax.servlet.model.yml | 3 +++ .../semmle/code/java/security/UnsafeUrlForward.qll | 11 +++-------- 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 java/ql/lib/ext/jakarta.servlet.model.yml create mode 100644 java/ql/lib/ext/javax.portlet.model.yml diff --git a/java/ql/lib/ext/jakarta.servlet.model.yml b/java/ql/lib/ext/jakarta.servlet.model.yml new file mode 100644 index 00000000000..fc1274cadaf --- /dev/null +++ b/java/ql/lib/ext/jakarta.servlet.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + # TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below. + - ["jakarta.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] + - ["jakarta.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/javax.portlet.model.yml b/java/ql/lib/ext/javax.portlet.model.yml new file mode 100644 index 00000000000..e39484abcb7 --- /dev/null +++ b/java/ql/lib/ext/javax.portlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + # TODO: potentially switch to using Argument[this] of `PortletRequestDispatcher.forward|include` as sink instead of the below. + - ["javax.portlet", "PortletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/javax.servlet.model.yml b/java/ql/lib/ext/javax.servlet.model.yml index 581863c74f7..7c405ac0de9 100644 --- a/java/ql/lib/ext/javax.servlet.model.yml +++ b/java/ql/lib/ext/javax.servlet.model.yml @@ -14,6 +14,9 @@ extensions: extensible: sinkModel data: - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + # TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below. + - ["javax.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] + - ["javax.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index 628397d07ef..e7780ee971b 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -10,14 +10,9 @@ abstract class UnsafeUrlForwardSink extends DataFlow::Node { } /** A sanitizer for unsafe URL forward vulnerabilities. */ abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } -/** An argument to `getRequestDispatcher`. */ -private class RequestDispatcherSink extends UnsafeUrlForwardSink { - RequestDispatcherSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetRequestDispatcherMethod and - ma.getArgument(0) = this.asExpr() - ) - } +/** A default sink representing methods susceptible to unsafe URL forwarding. */ +private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink { + DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") } } // TODO: look into `StaplerResponse.forward`, etc., and think about re-adding the MaD "request-forgery" sinks as a result From 8d66097483a8892d4a15c2232e63d883035a45f9 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Thu, 30 Nov 2023 13:50:51 -0500 Subject: [PATCH 045/497] Java: switch StaplerResponse.forward from request-forgery sink to url-forward sink --- java/ql/lib/ext/org.kohsuke.stapler.model.yml | 2 +- java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/lib/ext/org.kohsuke.stapler.model.yml b/java/ql/lib/ext/org.kohsuke.stapler.model.yml index 63bbdbfd52a..ca9f08ba78c 100644 --- a/java/ql/lib/ext/org.kohsuke.stapler.model.yml +++ b/java/ql/lib/ext/org.kohsuke.stapler.model.yml @@ -9,7 +9,7 @@ extensions: - ["org.kohsuke.stapler", "HttpResponses", True, "staticResource", "(URL,long)", "", "Argument[0]", "request-forgery", "manual"] - ["org.kohsuke.stapler", "HttpResponses", True, "html", "(String)", "", "Argument[0]", "html-injection", "manual"] - ["org.kohsuke.stapler", "HttpResponses", True, "literalHtml", "(String)", "", "Argument[0]", "html-injection", "manual"] - - ["org.kohsuke.stapler", "StaplerResponse", True, "forward", "(Object,String,StaplerRequest)", "", "Argument[1]", "request-forgery", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "forward", "(Object,String,StaplerRequest)", "", "Argument[1]", "url-forward", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect2", "(String)", "", "Argument[0]", "url-redirection", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(int,String)", "", "Argument[1]", "url-redirection", "manual"] - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(String)", "", "Argument[0]", "url-redirection", "manual"] diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index e7780ee971b..0e96066c72e 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -15,7 +15,6 @@ private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink { DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") } } -// TODO: look into `StaplerResponse.forward`, etc., and think about re-adding the MaD "request-forgery" sinks as a result /** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ private class SpringModelAndViewSink extends UnsafeUrlForwardSink { SpringModelAndViewSink() { From 1da1e896cbc8eb1b918c8c4950010b53146391a6 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 12:25:19 -0500 Subject: [PATCH 046/497] Java: convert SpringModelAndViewSink to MaD --- .../ext/org.springframework.web.portlet.model.yml | 7 +++++++ .../ext/org.springframework.web.servlet.model.yml | 7 +++++++ .../semmle/code/java/security/UnsafeUrlForward.qll | 12 ------------ shared/mad/codeql/mad/ModelValidation.qll | 4 ++-- 4 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 java/ql/lib/ext/org.springframework.web.portlet.model.yml create mode 100644 java/ql/lib/ext/org.springframework.web.servlet.model.yml diff --git a/java/ql/lib/ext/org.springframework.web.portlet.model.yml b/java/ql/lib/ext/org.springframework.web.portlet.model.yml new file mode 100644 index 00000000000..ba90b531c33 --- /dev/null +++ b/java/ql/lib/ext/org.springframework.web.portlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.springframework.web.portlet", "ModelAndView", False, "ModelAndView", "", "", "Argument[0]", "url-forward", "manual"] + - ["org.springframework.web.portlet", "ModelAndView", False, "setViewName", "", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/org.springframework.web.servlet.model.yml b/java/ql/lib/ext/org.springframework.web.servlet.model.yml new file mode 100644 index 00000000000..acdda3d569f --- /dev/null +++ b/java/ql/lib/ext/org.springframework.web.servlet.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.springframework.web.servlet", "ModelAndView", False, "ModelAndView", "", "", "Argument[0]", "url-forward", "manual"] + - ["org.springframework.web.servlet", "ModelAndView", False, "setViewName", "", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index 0e96066c72e..cd65a6f6345 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -15,18 +15,6 @@ private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink { DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") } } -/** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ -private class SpringModelAndViewSink extends UnsafeUrlForwardSink { - SpringModelAndViewSink() { - exists(ClassInstanceExpr cie | - cie.getConstructedType() instanceof ModelAndView and - cie.getArgument(0) = this.asExpr() - ) - or - exists(SpringModelAndViewSetViewNameCall smavsvnc | smavsvnc.getArgument(0) = this.asExpr()) - } -} - private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { PrimitiveSanitizer() { this.getType() instanceof PrimitiveType or diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index bb3b8c174b9..20bcdd1908c 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -33,8 +33,8 @@ module KindValidation { "bean-validation", "fragment-injection", "groovy-injection", "hostname-verification", "information-leak", "intent-redirection", "jexl-injection", "jndi-injection", "mvel-injection", "notification", "ognl-injection", "pending-intents", - "response-splitting", "trust-boundary-violation", "template-injection", "xpath-injection", - "xslt-injection", + "response-splitting", "trust-boundary-violation", "template-injection", "url-forward", + "xpath-injection", "xslt-injection", // JavaScript-only currently, but may be shared in the future "mongodb.sink", "nosql-injection", "unsafe-deserialization", // Swift-only currently, but may be shared in the future From 5a9d7552b3d92aba8cdee9a75ea95c02819bb4cf Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Thu, 30 Nov 2023 16:05:59 -0500 Subject: [PATCH 047/497] Java: add some comments and minor code reorg --- .../code/java/security/UnsafeUrlForward.qll | 54 ++++++++++--------- .../java/security/UnsafeUrlForwardQuery.qll | 2 +- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll index cd65a6f6345..4a529896f86 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll @@ -1,20 +1,40 @@ +/** Provides classes related to unsafe URL forwarding in Java. */ + import java private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes -private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions /** A sink for unsafe URL forward vulnerabilities. */ abstract class UnsafeUrlForwardSink extends DataFlow::Node { } -/** A sanitizer for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } - /** A default sink representing methods susceptible to unsafe URL forwarding. */ private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink { DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") } } +/** + * An expression appended (perhaps indirectly) to `"forward:"`, and which + * is reachable from a Spring entry point. + */ +private class SpringUrlForwardSink extends UnsafeUrlForwardSink { + SpringUrlForwardSink() { + // TODO: check if can use MaD "Annotated" for `SpringRequestMappingMethod` or if too complicated for MaD (probably too complicated). + any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and + this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() + } +} + +// TODO: should this potentially be "include:" as well? Or does that not work similarly? +private class ForwardPrefix extends InterestingPrefix { + ForwardPrefix() { this.getStringValue() = "forward:" } + + override int getOffset() { result = 0 } +} + +/** A sanitizer for unsafe URL forward vulnerabilities. */ +abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } + private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { PrimitiveSanitizer() { this.getType() instanceof PrimitiveType or @@ -23,6 +43,11 @@ private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { } } +// TODO: double-check this sanitizer (and should I switch all "sanitizer" naming to "barrier" instead?) +private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { + FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } +} + private class SanitizingPrefix extends InterestingPrefix { SanitizingPrefix() { not this.getStringValue().matches("/WEB-INF/%") and @@ -31,24 +56,3 @@ private class SanitizingPrefix extends InterestingPrefix { override int getOffset() { result = 0 } } - -private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { - FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } -} - -private class ForwardPrefix extends InterestingPrefix { - ForwardPrefix() { this.getStringValue() = "forward:" } - - override int getOffset() { result = 0 } -} - -/** - * An expression appended (perhaps indirectly) to `"forward:"`, and which - * is reachable from a Spring entry point. - */ -private class SpringUrlForwardSink extends UnsafeUrlForwardSink { - SpringUrlForwardSink() { - any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and - this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() - } -} diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll index 4231af1a90a..49670234582 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll @@ -12,7 +12,7 @@ import semmle.code.java.security.PathSanitizer module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource and - // TODO: move below logic to class in UnsafeUrlForward.qll? + // TODO: move below logic to class in UnsafeUrlForward.qll? And check exactly why these were excluded. not exists(MethodCall ma, Method m | ma.getMethod() = m | ( m instanceof HttpServletRequestGetRequestUriMethod or From 6e7c05467bddf44f0411920392b6886f680c5ecf Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Fri, 1 Dec 2023 08:29:17 -0500 Subject: [PATCH 048/497] Java: update query metadata and alert message --- .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql index 4e3326a831e..06686d5e0bd 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ b/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql @@ -1,13 +1,16 @@ /** - * @name Unsafe URL forward or include from a remote source - * @description URL forward or include based on unvalidated user-input - * may cause file information disclosure. + * @name URL forward from a remote source + * @description URL forward based on unvalidated user-input + * may cause file information disclosure or + * redirection to malicious web sites. * @kind path-problem * @problem.severity error + * @security-severity 6.1 * @precision high - * @id java/unsafe-url-forward-include + * @id java/unvalidated-url-forward * @tags security - * external/cwe-552 + * external/cwe/cwe-552 + * external/cwe/cwe-601 */ import java @@ -16,5 +19,5 @@ import UnsafeUrlForwardFlow::PathGraph from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink where UnsafeUrlForwardFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "Potentially untrusted URL forward due to $@.", - source.getNode(), "user-provided value" +select sink.getNode(), source, sink, "Untrusted URL forward depends on a $@.", source.getNode(), + "user-provided value" From 09bc21dbd36e4f0e4ab954d5f691bc440b2cb0c5 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Fri, 1 Dec 2023 08:56:20 -0500 Subject: [PATCH 049/497] Java: rename 'UnsafeUrlForward' to 'UrlForward' --- .../{UnsafeUrlForward.qll => UrlForward.qll} | 22 +++++++++---------- ...rlForwardQuery.qll => UrlForwardQuery.qll} | 18 +++++++-------- ...{UnsafeUrlForward.java => UrlForward.java} | 2 +- ...nsafeUrlForward.qhelp => UrlForward.qhelp} | 2 +- .../{UnsafeUrlForward.ql => UrlForward.ql} | 8 +++---- .../security/CWE-552/UnsafeRequestPath.java | 2 +- .../CWE-552/UnsafeServletRequestDispatch.java | 8 +++---- .../security/CWE-552/UnsafeUrlForwardTest.ql | 18 --------------- ...dTest.expected => UrlForwardTest.expected} | 0 ...afeUrlForward.java => UrlForwardTest.java} | 16 +++++++------- .../security/CWE-552/UrlForwardTest.ql | 18 +++++++++++++++ 11 files changed, 57 insertions(+), 57 deletions(-) rename java/ql/lib/semmle/code/java/security/{UnsafeUrlForward.qll => UrlForward.qll} (66%) rename java/ql/lib/semmle/code/java/security/{UnsafeUrlForwardQuery.qll => UrlForwardQuery.qll} (55%) rename java/ql/src/Security/CWE/CWE-552/{UnsafeUrlForward.java => UrlForward.java} (97%) rename java/ql/src/Security/CWE/CWE-552/{UnsafeUrlForward.qhelp => UrlForward.qhelp} (98%) rename java/ql/src/Security/CWE/CWE-552/{UnsafeUrlForward.ql => UrlForward.ql} (71%) delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql rename java/ql/test/query-tests/security/CWE-552/{UnsafeUrlForwardTest.expected => UrlForwardTest.expected} (100%) rename java/ql/test/query-tests/security/CWE-552/{UnsafeUrlForward.java => UrlForwardTest.java} (83%) create mode 100644 java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll similarity index 66% rename from java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll rename to java/ql/lib/semmle/code/java/security/UrlForward.qll index 4a529896f86..aa21ed48aba 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -1,23 +1,23 @@ -/** Provides classes related to unsafe URL forwarding in Java. */ +/** Provides classes to reason about URL forward attacks. */ import java private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes -/** A sink for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSink extends DataFlow::Node { } +/** A URL forward sink. */ +abstract class UrlForwardSink extends DataFlow::Node { } -/** A default sink representing methods susceptible to unsafe URL forwarding. */ -private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink { - DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") } +/** A default sink representing methods susceptible to URL forwarding attacks. */ +private class DefaultUrlForwardSink extends UrlForwardSink { + DefaultUrlForwardSink() { sinkNode(this, "url-forward") } } /** * An expression appended (perhaps indirectly) to `"forward:"`, and which * is reachable from a Spring entry point. */ -private class SpringUrlForwardSink extends UnsafeUrlForwardSink { +private class SpringUrlForwardSink extends UrlForwardSink { SpringUrlForwardSink() { // TODO: check if can use MaD "Annotated" for `SpringRequestMappingMethod` or if too complicated for MaD (probably too complicated). any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and @@ -32,10 +32,10 @@ private class ForwardPrefix extends InterestingPrefix { override int getOffset() { result = 0 } } -/** A sanitizer for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } +/** A URL forward sanitizer. */ +abstract class UrlForwardSanitizer extends DataFlow::Node { } -private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { +private class PrimitiveSanitizer extends UrlForwardSanitizer { PrimitiveSanitizer() { this.getType() instanceof PrimitiveType or this.getType() instanceof BoxedType or @@ -44,7 +44,7 @@ private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer { } // TODO: double-check this sanitizer (and should I switch all "sanitizer" naming to "barrier" instead?) -private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { +private class FollowsSanitizingPrefix extends UrlForwardSanitizer { FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll similarity index 55% rename from java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll rename to java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index 49670234582..dadf4be612f 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeUrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -1,18 +1,18 @@ -/** Provides configurations to be used in queries related to unsafe URL forwarding. */ +/** Provides a taint-tracking configuration for reasoning about URL forwarding. */ import java -import semmle.code.java.security.UnsafeUrlForward +import semmle.code.java.security.UrlForward import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.PathSanitizer /** - * A taint-tracking configuration for untrusted user input in a URL forward or include. + * A taint-tracking configuration for reasoning about URL forwarding. */ -module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { +module UrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource and - // TODO: move below logic to class in UnsafeUrlForward.qll? And check exactly why these were excluded. + // TODO: move below logic to class in UrlForward.qll? And check exactly why these were excluded. not exists(MethodCall ma, Method m | ma.getMethod() = m | ( m instanceof HttpServletRequestGetRequestUriMethod or @@ -23,10 +23,10 @@ module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { ) } - predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } + predicate isSink(DataFlow::Node sink) { sink instanceof UrlForwardSink } predicate isBarrier(DataFlow::Node node) { - node instanceof UnsafeUrlForwardSanitizer or + node instanceof UrlForwardSanitizer or node instanceof PathInjectionSanitizer } @@ -35,6 +35,6 @@ module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { } /** - * Taint-tracking flow for untrusted user input in a URL forward or include. + * Taint-tracking flow for URL forwarding. */ -module UnsafeUrlForwardFlow = TaintTracking::Global; +module UrlForwardFlow = TaintTracking::Global; diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java b/java/ql/src/Security/CWE/CWE-552/UrlForward.java similarity index 97% rename from java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java rename to java/ql/src/Security/CWE/CWE-552/UrlForward.java index d159c405736..53b959bb889 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.java +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.java @@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; @Controller -public class UnsafeUrlForward { +public class UrlForward { @GetMapping("/bad1") public ModelAndView bad1(String url) { diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp similarity index 98% rename from java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp rename to java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp index 2e425952edc..fa9ffd45c10 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.qhelp +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp @@ -27,7 +27,7 @@ without validating the input, which may cause file leakage. In the good1 - +

    The following examples show an HTTP request parameter or request path being used directly in a request dispatcher of Java EE without validating the input, which allows sensitive file exposure diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql similarity index 71% rename from java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql rename to java/ql/src/Security/CWE/CWE-552/UrlForward.ql index 06686d5e0bd..66d3d0dd1ca 100644 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql @@ -14,10 +14,10 @@ */ import java -import semmle.code.java.security.UnsafeUrlForwardQuery -import UnsafeUrlForwardFlow::PathGraph +import semmle.code.java.security.UrlForwardQuery +import UrlForwardFlow::PathGraph -from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink -where UnsafeUrlForwardFlow::flowPath(source, sink) +from UrlForwardFlow::PathNode source, UrlForwardFlow::PathNode sink +where UrlForwardFlow::flowPath(source, sink) select sink.getNode(), source, sink, "Untrusted URL forward depends on a $@.", source.getNode(), "user-provided value" diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java index 55afe84bc19..3d82e7d783e 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java @@ -20,7 +20,7 @@ public class UnsafeRequestPath implements Filter { String path = ((HttpServletRequest) request).getServletPath(); // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); // $ hasUnsafeUrlForward + request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward } else { chain.doFilter(request, response); } diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java index 9d501f2ec0d..66521c5897b 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java +++ b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java @@ -29,7 +29,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { rd.forward(request, response); } else { ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUnsafeUrlForward + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUrlForward rd.forward(request, response); } } @@ -45,7 +45,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); rd.forward(request, response); } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUnsafeUrlForward + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUrlForward rd.forward(request, response); } } @@ -73,7 +73,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUnsafeUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward } } @@ -110,7 +110,7 @@ public class UnsafeServletRequestDispatch extends HttpServlet { Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUnsafeUrlForward + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUrlForward } } diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql deleted file mode 100644 index cf77edcf12a..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.ql +++ /dev/null @@ -1,18 +0,0 @@ -import java -import TestUtilities.InlineExpectationsTest -import semmle.code.java.security.UnsafeUrlForwardQuery - -module UnsafeUrlForwardTest implements TestSig { - string getARelevantTag() { result = "hasUnsafeUrlForward" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasUnsafeUrlForward" and - exists(UnsafeUrlForwardFlow::PathNode sink | UnsafeUrlForwardFlow::flowPath(_, sink) | - location = sink.getNode().getLocation() and - element = sink.getNode().toString() and - value = "" - ) - } -} - -import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected similarity index 100% rename from java/ql/test/query-tests/security/CWE-552/UnsafeUrlForwardTest.expected rename to java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java similarity index 83% rename from java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java rename to java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 0a00637cd44..2db1e812fb6 100644 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeUrlForward.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -7,35 +7,35 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; @Controller -public class UnsafeUrlForward { +public class UrlForwardTest { @GetMapping("/bad1") public ModelAndView bad1(String url) { - return new ModelAndView(url); // $ hasUnsafeUrlForward + return new ModelAndView(url); // $ hasUrlForward } @GetMapping("/bad2") public ModelAndView bad2(String url) { ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); // $ hasUnsafeUrlForward + modelAndView.setViewName(url); // $ hasUrlForward return modelAndView; } @GetMapping("/bad3") public String bad3(String url) { - return "forward:" + url + "/swagger-ui/index.html"; // $ hasUnsafeUrlForward + return "forward:" + url + "/swagger-ui/index.html"; // $ hasUrlForward } @GetMapping("/bad4") public ModelAndView bad4(String url) { - ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasUnsafeUrlForward + ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasUrlForward return modelAndView; } @GetMapping("/bad5") public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher(url).include(request, response); // $ hasUnsafeUrlForward + request.getRequestDispatcher(url).include(request, response); // $ hasUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -46,7 +46,7 @@ public class UnsafeUrlForward { @GetMapping("/bad6") public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasUnsafeUrlForward + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -57,7 +57,7 @@ public class UnsafeUrlForward { @GetMapping("/bad7") public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasUnsafeUrlForward + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasUrlForward } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql new file mode 100644 index 00000000000..4e62a35752b --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql @@ -0,0 +1,18 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.security.UrlForwardQuery + +module UrlForwardTest implements TestSig { + string getARelevantTag() { result = "hasUrlForward" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasUrlForward" and + exists(UrlForwardFlow::PathNode sink | UrlForwardFlow::flowPath(_, sink) | + location = sink.getNode().getLocation() and + element = sink.getNode().toString() and + value = "" + ) + } +} + +import MakeTest From c331393cfd3982f06098e7f1a0613124c0cb44f4 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Fri, 1 Dec 2023 12:14:27 -0500 Subject: [PATCH 050/497] Java: update qhelp --- .../CWE/CWE-552/UnsafeLoadSpringResource.java | 21 ------- .../CWE/CWE-552/UnsafeResourceGet.java | 18 ------ .../CWE-552/UnsafeServletRequestDispatch.java | 11 ---- .../src/Security/CWE/CWE-552/UrlForward.java | 43 ++++---------- .../src/Security/CWE/CWE-552/UrlForward.qhelp | 58 ++++--------------- .../ql/src/Security/CWE/CWE-552/UrlForward.ql | 6 +- 6 files changed, 25 insertions(+), 132 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java delete mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java delete mode 100644 java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java b/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index ce462fe490e..00000000000 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,21 +0,0 @@ -//BAD: no path validation in Spring resource loading -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); -} - -//GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix in Spring resource loading: -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - if (!fileName.contains("..") && fileName.hasPrefix("/public-content")) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); - } -} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 8b3583bf59e..00000000000 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,18 +0,0 @@ -// BAD: no URI validation -URL url = request.getServletContext().getResource(requestUrl); -url = getClass().getResource(requestUrl); -InputStream in = url.openStream(); - -InputStream in = request.getServletContext().getResourceAsStream(requestPath); -in = getClass().getClassLoader().getResourceAsStream(requestPath); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); -} - -Path path = Paths.get(requestUrl).normalize().toRealPath(); -if (path.startsWith("/trusted")) { - URL url = request.getServletContext().getResource(path.toString()); -} diff --git a/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index a2bbf3dfcd8..00000000000 --- a/java/ql/src/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,11 +0,0 @@ -// BAD: no URI validation -String returnURL = request.getParameter("returnURL"); -RequestDispatcher rd = sc.getRequestDispatcher(returnURL); -rd.forward(request, response); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!returnURL.contains("..") && returnURL.hasPrefix("/pages")) { ... } -// Also GOOD: check for a forbidden prefix, ensuring URL-encoding is not used to evade the check: -// (alternatively use `URLDecoder.decode` before `hasPrefix`) -if (returnURL.hasPrefix("/internal") && !returnURL.contains("%")) { ... } diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.java b/java/ql/src/Security/CWE/CWE-552/UrlForward.java index 53b959bb889..db701fbcd9a 100644 --- a/java/ql/src/Security/CWE/CWE-552/UrlForward.java +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.java @@ -1,38 +1,17 @@ -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; +public class UrlForward extends HttpServlet { + private static final String VALID_FORWARD = "https://cwe.mitre.org/data/definitions/552.html"; -@Controller -public class UrlForward { + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); - @GetMapping("/bad1") - public ModelAndView bad1(String url) { - return new ModelAndView(url); - } + // BAD: a request parameter is incorporated without validation into a URL forward + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); - @GetMapping("/bad2") - public void bad2(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/good1") - public void good1(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + // GOOD: the request parameter is validated against a known fixed string + if (VALID_FORWARD.equals(request.getParameter("target"))) { + sc.getRequestDispatcher(VALID_FORWARD).forward(request, response); } } } diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp index fa9ffd45c10..2b06a851a2b 100644 --- a/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp @@ -5,66 +5,32 @@ -

    Constructing a server-side redirect path with user input could allow an attacker to download application binaries -(including application classes or jar files) or view arbitrary files within protected directories.

    +

    Directly incorporating user input into a URL forward request without validating the input +can cause file information disclosure by allowing an attacker to access unauthorized URLs.

    -

    Unsanitized user provided data must not be used to construct the path for URL forwarding. In order to prevent -untrusted URL forwarding, it is recommended to avoid concatenating user input directly into the forwarding URL. -Instead, user input should be checked against allowed (e.g., must come within user_content/) or disallowed -(e.g. must not come within /internal) paths, ensuring that neither path traversal using ../ -or URL encoding are used to evade these checks. -

    +

    To guard against untrusted URL forwarding, it is advisable to avoid putting user input +directly into a forwarded URL. Instead, maintain a list of authorized +URLs on the server; then choose from that list based on the user input provided.

    -

    The following examples show the bad case and the good case respectively. -The bad methods show an HTTP request parameter being used directly in a URL forward -without validating the input, which may cause file leakage. In the good1 method, -ordinary forwarding requests are shown, which will not cause file leakage. +

    The following example shows an HTTP request parameter being used directly in a URL forward +without validating the input, which may cause file information disclosure. +It also shows how to remedy the problem by validating the user input against a known fixed string.

    -

    The following examples show an HTTP request parameter or request path being used directly in a -request dispatcher of Java EE without validating the input, which allows sensitive file exposure -attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter or request path being used directly to -retrieve a resource of a Java EE application without validating the input, which allows sensitive -file exposure attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter being used directly to retrieve a resource - of a Java Spring application without validating the input, which allows sensitive file exposure - attacks. It also shows how to remedy the problem by validating the user input. -

    - -
    -
  • File Disclosure: - Unsafe Url Forward. -
  • -
  • Jakarta Javadoc: - Security vulnerability with unsafe usage of RequestDispatcher. -
  • -
  • Micro Focus: - File Disclosure: J2EE -
  • -
  • CVE-2015-5174: - Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext getResource/getResourceAsStream/getResourcePaths Path Traversal -
  • -
  • CVE-2019-3799: - CVE-2019-3799 - Spring-Cloud-Config-Server Directory Traversal < 2.1.2, 2.0.4, 1.4.6 + +
  • OWASP: + Unvalidated Redirects and Forwards Cheat Sheet.
  • +
    diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql index 66d3d0dd1ca..95c540049a2 100644 --- a/java/ql/src/Security/CWE/CWE-552/UrlForward.ql +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql @@ -1,16 +1,14 @@ /** * @name URL forward from a remote source * @description URL forward based on unvalidated user-input - * may cause file information disclosure or - * redirection to malicious web sites. + * may cause file information disclosure. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.5 * @precision high * @id java/unvalidated-url-forward * @tags security * external/cwe/cwe-552 - * external/cwe/cwe-601 */ import java From 5fa63ab5c22adc24b62cdfdc4efe12e578ede3bf Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Mon, 4 Dec 2023 10:31:47 -0500 Subject: [PATCH 051/497] Java: update/add some TODO comments --- .../semmle/code/java/security/UrlForward.qll | 31 ++++++++++--------- .../code/java/security/UrlForwardQuery.qll | 9 +++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index aa21ed48aba..7e68f07987b 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -8,48 +8,49 @@ private import semmle.code.java.dataflow.StringPrefixes /** A URL forward sink. */ abstract class UrlForwardSink extends DataFlow::Node { } -/** A default sink representing methods susceptible to URL forwarding attacks. */ +/** + * A default sink representing methods susceptible to URL + * forwarding attacks. + */ private class DefaultUrlForwardSink extends UrlForwardSink { DefaultUrlForwardSink() { sinkNode(this, "url-forward") } } /** - * An expression appended (perhaps indirectly) to `"forward:"`, and which - * is reachable from a Spring entry point. + * An expression appended (perhaps indirectly) to `"forward:"` + * and reachable from a Spring entry point. */ private class SpringUrlForwardSink extends UrlForwardSink { SpringUrlForwardSink() { - // TODO: check if can use MaD "Annotated" for `SpringRequestMappingMethod` or if too complicated for MaD (probably too complicated). - any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and + any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() } } -// TODO: should this potentially be "include:" as well? Or does that not work similarly? private class ForwardPrefix extends InterestingPrefix { ForwardPrefix() { this.getStringValue() = "forward:" } override int getOffset() { result = 0 } } -/** A URL forward sanitizer. */ -abstract class UrlForwardSanitizer extends DataFlow::Node { } +/** A URL forward barrier. */ +abstract class UrlForwardBarrier extends DataFlow::Node { } -private class PrimitiveSanitizer extends UrlForwardSanitizer { - PrimitiveSanitizer() { +private class PrimitiveBarrier extends UrlForwardBarrier { + PrimitiveBarrier() { this.getType() instanceof PrimitiveType or this.getType() instanceof BoxedType or this.getType() instanceof NumberType } } -// TODO: double-check this sanitizer (and should I switch all "sanitizer" naming to "barrier" instead?) -private class FollowsSanitizingPrefix extends UrlForwardSanitizer { - FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } +private class FollowsBarrierPrefix extends UrlForwardBarrier { + FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } -private class SanitizingPrefix extends InterestingPrefix { - SanitizingPrefix() { +private class BarrierPrefix extends InterestingPrefix { + BarrierPrefix() { + // TODO: why not META-INF here as well? (and are `/` correct?) not this.getStringValue().matches("/WEB-INF/%") and not this.getStringValue() = "forward:" } diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index dadf4be612f..c92467490f3 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -12,25 +12,24 @@ import semmle.code.java.security.PathSanitizer module UrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource and - // TODO: move below logic to class in UrlForward.qll? And check exactly why these were excluded. - not exists(MethodCall ma, Method m | ma.getMethod() = m | + // excluded due to FPs + not exists(MethodCall mc, Method m | mc.getMethod() = m | ( m instanceof HttpServletRequestGetRequestUriMethod or m instanceof HttpServletRequestGetRequestUrlMethod or m instanceof HttpServletRequestGetPathMethod ) and - ma = source.asExpr() + mc = source.asExpr() ) } predicate isSink(DataFlow::Node sink) { sink instanceof UrlForwardSink } predicate isBarrier(DataFlow::Node node) { - node instanceof UrlForwardSanitizer or + node instanceof UrlForwardBarrier or node instanceof PathInjectionSanitizer } - // TODO: check if the below is still needed after removing path-injection related sinks. DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } } From e75c96c0f9be67d4423446177dedc808a1ec9239 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Dec 2023 22:03:11 -0500 Subject: [PATCH 052/497] Java: combine test cases; add test for StaplerResponse.forward --- .../security/CWE-552/UnsafeRequestPath.java | 52 ----- .../CWE-552/UnsafeServletRequestDispatch.java | 131 ------------- .../security/CWE-552/UrlForwardTest.java | 180 +++++++++++++++++- .../test/query-tests/security/CWE-552/options | 2 +- 4 files changed, 180 insertions(+), 185 deletions(-) delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java delete mode 100644 java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java deleted file mode 100644 index 3d82e7d783e..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeRequestPath.java +++ /dev/null @@ -1,52 +0,0 @@ -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -// @WebFilter("/*") -public class UnsafeRequestPath implements Filter { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher from servlet path without check - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check - if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with check - public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with whitelisted string comparison - public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.equals("/comaction")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index 66521c5897b..00000000000 --- a/java/ql/test/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,131 +0,0 @@ -import java.io.IOException; -import java.net.URLDecoder; -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -public class UnsafeServletRequestDispatch extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - ServletConfig cfg = getServletConfig(); - if (action.equals("Login")) { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUrlForward - rd.forward(request, response); - } - } - - @Override - // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUrlForward - rd.forward(request, response); - } - } - - @Override - // GOOD: Request dispatcher with a whitelisted URI - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else if (action.equals("Register")) { - RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); - rd.forward(request, response); - } - } - - // BAD: Request dispatcher without path traversal check - protected void doHead2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check - // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` - if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward - } - } - - // GOOD: Request dispatcher with path traversal check - protected void doHead3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } - - // GOOD: Request dispatcher with path normalization and comparison - protected void doHead4(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml - // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml - if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); - } - } - - // FN: Request dispatcher with negation check and path normalization, but without URL decoding - // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink - // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the - // state to a different value than the one required at the sink). - protected void doHead5(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUrlForward - } - } - - // GOOD: Request dispatcher with path traversal check and URL decoding - protected void doHead6(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - boolean hasEncoding = path.contains("%"); - while (hasEncoding) { - path = URLDecoder.decode(path, "UTF-8"); - hasEncoding = path.contains("%"); - } - - if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 2db1e812fb6..e41bc65848e 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -1,14 +1,29 @@ import java.io.IOException; +import java.net.URLDecoder; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; @Controller -public class UrlForwardTest { +public class UrlForwardTest extends HttpServlet implements Filter { + // (1) ORIGINAL @GetMapping("/bad1") public ModelAndView bad1(String url) { return new ModelAndView(url); // $ hasUrlForward @@ -75,4 +90,167 @@ public class UrlForwardTest { e.printStackTrace(); } } + + // (2) UnsafeRequestPath + private static final String BASE_PATH = "/pages"; + + @Override + // BAD: Request dispatcher from servlet path without check + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check + if (path != null && !path.startsWith("/WEB-INF")) { + request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward + } else { + chain.doFilter(request, response); + } + } + + // GOOD: Request dispatcher from servlet path with check + public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } + + // GOOD: Request dispatcher from servlet path with whitelisted string comparison + public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String path = ((HttpServletRequest) request).getServletPath(); + + if (path.equals("/comaction")) { + request.getRequestDispatcher(path).forward(request, response); + } else { + chain.doFilter(request, response); + } + } + + // (3) UnsafeServletRequestDispatch + @Override + // BAD: Request dispatcher constructed from `ServletContext` without input validation + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + ServletConfig cfg = getServletConfig(); + if (action.equals("Login")) { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + ServletContext sc = cfg.getServletContext(); + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUrlForward + rd.forward(request, response); + } + } + + @Override + // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + String returnURL = request.getParameter("returnURL"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else { + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUrlForward + rd.forward(request, response); + } + } + + @Override + // GOOD: Request dispatcher with a whitelisted URI + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String action = request.getParameter("action"); + + if (action.equals("Login")) { + RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); + rd.forward(request, response); + } else if (action.equals("Register")) { + RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); + rd.forward(request, response); + } + } + + // BAD: Request dispatcher without path traversal check + protected void doHead2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check + // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` + if (path.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + } + } + + // GOOD: Request dispatcher with path traversal check + protected void doHead3(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (path.startsWith(BASE_PATH) && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // GOOD: Request dispatcher with path normalization and comparison + protected void doHead4(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml + // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml + if (requestedPath.startsWith(BASE_PATH)) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); + } + } + + // FN: Request dispatcher with negation check and path normalization, but without URL decoding + // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink + // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the + // state to a different value than the one required at the sink). + // TODO: but does this need to take into account URLDecoder.decode in a loop...? + protected void doHead5(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); + + if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUrlForward + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding + protected void doHead6(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + boolean hasEncoding = path.contains("%"); + while (hasEncoding) { + path = URLDecoder.decode(path, "UTF-8"); + hasEncoding = path.contains("%"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // New Tests (i.e. Added by me) + public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { + String url = req.getParameter("target"); + rsp.forward(obj, url, req); // $ hasUrlForward + } + } diff --git a/java/ql/test/query-tests/security/CWE-552/options b/java/ql/test/query-tests/security/CWE-552/options index 025b888db02..bda9516fb58 100644 --- a/java/ql/test/query-tests/security/CWE-552/options +++ b/java/ql/test/query-tests/security/CWE-552/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/javax-faces-2.3/:${testdir}/../../../stubs/undertow-io-2.2/:${testdir}/../../../stubs/jboss-vfs-3.2/:${testdir}/../../../stubs/springframework-5.3.8/ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/javax-faces-2.3/:${testdir}/../../../stubs/undertow-io-2.2/:${testdir}/../../../stubs/jboss-vfs-3.2/:${testdir}/../../../stubs/stapler-1.263/:${testdir}/../../../stubs/apache-commons-fileupload-1.4/:${testdir}/../../../stubs/apache-commons-beanutils/:${testdir}/../../../stubs/saxon-xqj-9.x/:${testdir}/../../../stubs/apache-commons-lang/:${testdir}/../../../stubs/javax-servlet-2.5/ From c8ec301793067bb1d9d6c9f5e9ccacc59d086f01 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Dec 2023 22:12:08 -0500 Subject: [PATCH 053/497] Java: add change note --- java/ql/src/change-notes/2023-12-12-url-forward-query.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2023-12-12-url-forward-query.md diff --git a/java/ql/src/change-notes/2023-12-12-url-forward-query.md b/java/ql/src/change-notes/2023-12-12-url-forward-query.md new file mode 100644 index 00000000000..4efc4b7c4e0 --- /dev/null +++ b/java/ql/src/change-notes/2023-12-12-url-forward-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). From 911a61df2234dc5f9519e3238159f2e7f53f1d3f Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 11:08:24 -0500 Subject: [PATCH 054/497] Java: initial update of barrier and test cases to remove FN --- .../code/java/security/PathSanitizer.qll | 7 +- .../semmle/code/java/security/UrlForward.qll | 110 +++++++++++++- .../code/java/security/UrlForwardQuery.qll | 5 +- .../security/CWE-552/UrlForwardTest.java | 141 ++++++++++++++++-- 4 files changed, 240 insertions(+), 23 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index 4ca08f5becc..f3c54629efd 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -64,7 +64,8 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { ) } -private class ExactPathMatchSanitizer extends PathInjectionSanitizer { +// TODO: switch back to private if possible +class ExactPathMatchSanitizer extends PathInjectionSanitizer { ExactPathMatchSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() or @@ -151,7 +152,8 @@ private class DotDotCheckSanitizer extends PathInjectionSanitizer { } } -private class BlockListGuard extends PathGuard instanceof MethodCall { +// TODO: switch back to private if possible +class BlockListGuard extends PathGuard instanceof MethodCall { BlockListGuard() { (isStringPartialMatch(this) or isPathPrefixMatch(this)) and isDisallowedWord(super.getAnArgument()) @@ -228,6 +230,7 @@ private predicate isStringPartialMatch(MethodCall ma) { exists(RefType t | t = ma.getMethod().getDeclaringType() | t instanceof TypeString or t instanceof StringsKt ) and + // TODO ! Why not use `StringPartialMatchMethod` for the below? getSourceMethod(ma.getMethod()) .hasName(["contains", "matches", "regionMatches", "indexOf", "lastIndexOf"]) } diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 7e68f07987b..073507fe33a 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -4,6 +4,9 @@ import java private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes +private import semmle.code.java.security.PathSanitizer +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.controlflow.Guards /** A URL forward sink. */ abstract class UrlForwardSink extends DataFlow::Node { } @@ -44,16 +47,121 @@ private class PrimitiveBarrier extends UrlForwardBarrier { } } +// TODO: should this also take URL encoding/decoding into account? +// TODO: and PathSanitization in general? private class FollowsBarrierPrefix extends UrlForwardBarrier { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } private class BarrierPrefix extends InterestingPrefix { BarrierPrefix() { - // TODO: why not META-INF here as well? (and are `/` correct?) not this.getStringValue().matches("/WEB-INF/%") and not this.getStringValue() = "forward:" } override int getOffset() { result = 0 } } + +private class UrlPathBarrier extends UrlForwardBarrier { + UrlPathBarrier() { + this instanceof PathInjectionSanitizer and + ( + this instanceof ExactPathMatchSanitizer //TODO: still need a better solution for this edge case... + or + // TODO: these don't enforce order of checks and PathSanitization... make bypass test cases. + this instanceof NoEncodingBarrier + or + this instanceof FullyDecodesBarrier + ) + } +} + +abstract class UrlDecodeCall extends MethodCall { } + +private class DefaultUrlDecodeCall extends UrlDecodeCall { + DefaultUrlDecodeCall() { + this.getMethod().hasQualifiedName("java.net", "URLDecoder", "decode") or // TODO: reuse existing class? Or make this a class? + this.getMethod().hasQualifiedName("org.eclipse.jetty.util.URIUtil", "URIUtil", "decodePath") + } +} + +// TODO: this can probably be named/designed better... +abstract class RepeatedStmt extends Stmt { } + +private class DefaultRepeatedStmt extends RepeatedStmt { + DefaultRepeatedStmt() { this instanceof LoopStmt } +} + +abstract class CheckEncodingCall extends MethodCall { } + +private class DefaultCheckEncodingCall extends CheckEncodingCall { + DefaultCheckEncodingCall() { + // TODO: indexOf?, etc. + this.getMethod().hasQualifiedName("java.lang", "String", "contains") and // TODO: reuse existing class? Or make this a class? + this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "%" + } +} + +// TODO: better naming? +// TODO: check if any URL decoding implementations _fully_ decode... or if all need to be called in a loop? +// TODO: make this extendable instead of `RepeatedStmt`? +private class RepeatedUrlDecodeCall extends MethodCall { + RepeatedUrlDecodeCall() { + this instanceof UrlDecodeCall and + this.getAnEnclosingStmt() instanceof RepeatedStmt + } +} + +private class CheckEncodingGuard extends Guard instanceof MethodCall { + CheckEncodingGuard() { this instanceof CheckEncodingCall } + + Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } +} + +private predicate noEncodingGuard(Guard g, Expr e, boolean branch) { + g instanceof CheckEncodingGuard and + e = g.(CheckEncodingGuard).getCheckedExpr() and + branch = false + or + // branch = false and + // g instanceof AssignExpr and // AssignExpr + // exists(CheckEncodingCall call | g.(AssignExpr).getSource() = call | e = call.getQualifier()) + branch = false and + g.(Expr).getType() instanceof BooleanType and // AssignExpr + ( + exists(CheckEncodingCall call, AssignExpr ae | + ae.getSource() = call and + e = call.getQualifier() and + g = ae.getDest() + ) + or + exists(CheckEncodingCall call, LocalVariableDeclExpr vde | + vde.getInitOrPatternSource() = call and + e = call.getQualifier() and + g = vde.getAnAccess() //and + //vde.getVariable() = g + ) + ) +} + +// TODO: check edge case of !contains(%), make sure that behaves as expected at least. +private class NoEncodingBarrier extends DataFlow::Node { + NoEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } +} + +private predicate fullyDecodesGuard(Expr e) { + exists(CheckEncodingGuard g, RepeatedUrlDecodeCall decodeCall | + e = g.getCheckedExpr() and + g.controls(decodeCall.getBasicBlock(), true) + ) +} + +private class FullyDecodesBarrier extends DataFlow::Node { + FullyDecodesBarrier() { + exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | + fullyDecodesGuard(e) and + e = v.getAnAccess() and + e.getBasicBlock().bbDominates(this.asExpr().getBasicBlock()) + ) + } +} diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index c92467490f3..71d41f42dee 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -25,10 +25,7 @@ module UrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof UrlForwardSink } - predicate isBarrier(DataFlow::Node node) { - node instanceof UrlForwardBarrier or - node instanceof PathInjectionSanitizer - } + predicate isBarrier(DataFlow::Node node) { node instanceof UrlForwardBarrier } DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } } diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index e41bc65848e..c7a9d82b1a0 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -112,8 +112,9 @@ public class UrlForwardTest extends HttpServlet implements Filter { throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); + // actually BAD since could potentially bypass with ".." encoded as "%2e%2e"? if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); + request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward } else { chain.doFilter(request, response); } @@ -124,6 +125,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); + // this is still good, should not flag here..., url-decoding first doesn't matter if looking for exact match... :( if (path.equals("/comaction")) { request.getRequestDispatcher(path).forward(request, response); } else { @@ -199,8 +201,9 @@ public class UrlForwardTest extends HttpServlet implements Filter { throws ServletException, IOException { String path = request.getParameter("path"); + // actually BAD since could potentially bypass with ".." encoded as "%2e%2e"? if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward } } @@ -212,34 +215,43 @@ public class UrlForwardTest extends HttpServlet implements Filter { // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml + // actually BAD since could potentially bypass with ".." encoded as "%2e%2e": "/pages/welcome.jsp/%2e%2e/%2e%2e/WEB-INF/web.xml" becomes /pages/welcome.jsp/%2e%2e/%2e%2e/WEB-INF/web.xml, which will pass this check and potentially be problematic if decoded later? if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward } } - // FN: Request dispatcher with negation check and path normalization, but without URL decoding - // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink - // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the - // state to a different value than the one required at the sink). - // TODO: but does this need to take into account URLDecoder.decode in a loop...? + // BAD (original FN): Request dispatcher with negation check and path normalization, but without URL decoding protected void doHead5(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ MISSING: hasUrlForward + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward } } - // GOOD: Request dispatcher with path traversal check and URL decoding - protected void doHead6(HttpServletRequest request, HttpServletResponse response) + // BAD (I added to test decode with no loop): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + protected void doHead7(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); - boolean hasEncoding = path.contains("%"); - while (hasEncoding) { - path = URLDecoder.decode(path, "UTF-8"); - hasEncoding = path.contains("%"); + path = URLDecoder.decode(path, "UTF-8"); + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + } + } + + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead6(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); // v + + if (path.contains("%")){ // v.getAnAccess() + while (path.contains("%")) { + path = URLDecoder.decode(path, "UTF-8"); + } } if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { @@ -247,10 +259,107 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // New Tests (i.e. Added by me) + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead8(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); // v + while (path.contains("%")) { + path = URLDecoder.decode(path, "UTF-8"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + + // FP now.... + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + protected void doHead9(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); // v + boolean hasEncoding = path.contains("%"); + while (hasEncoding) { + path = URLDecoder.decode(path, "UTF-8"); + hasEncoding = path.contains("%"); + } + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasUrlForward + } + } + + // New Tests public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { String url = req.getParameter("target"); rsp.forward(obj, url, req); // $ hasUrlForward } + // Other Tests for edge cases: + // // GOOD (I added): Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass + // // testing `if` stmt requirement for BB controlling + // protected void doHead12(HttpServletRequest request, HttpServletResponse response) + // throws ServletException, IOException { + // String path = request.getParameter("path"); + // if (path.contains("%")) { + // while (path.contains("%")) { + // path = URLDecoder.decode(path, "UTF-8"); + // } + // } + // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // request.getServletContext().getRequestDispatcher(path).include(request, response); + // } + // } + // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // // having previously been checked against a block-list of forbidden values." + // protected void doHead8(HttpServletRequest request, HttpServletResponse response) + // throws ServletException, IOException { + // String path = request.getParameter("path"); + + // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // boolean hasEncoding = path.contains("%"); // BAD: doesn't do anything with the check... + // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + // } + // } + // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // // having previously been checked against a block-list of forbidden values." + // protected void doHead9(HttpServletRequest request, HttpServletResponse response) + // throws ServletException, IOException { + // String path = request.getParameter("path"); + + // boolean hasEncoding = path.contains("%"); // BAD: doesn't do anything with the check... and check comes BEFORE blocklist so guard should not trigger + // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + // } + // } + + // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // // having previously been checked against a block-list of forbidden values." + // protected void doHead10(HttpServletRequest request, HttpServletResponse response) + // throws ServletException, IOException { + // String path = request.getParameter("path"); + + // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // if (path.contains("%")){ // BAD: wrong check + // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + // } + // } + // } + + // // "GOOD" (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // // having previously been checked against a block-list of forbidden values." + // protected void doHead11(HttpServletRequest request, HttpServletResponse response) + // throws ServletException, IOException { + // String path = request.getParameter("path"); + + // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // if (!path.contains("%")){ // GOOD: right check + // request.getServletContext().getRequestDispatcher(path).include(request, response); + // } + // } + // } + } From f573032b2e74ccf8165650b83602b08a8f2af126 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 13:56:35 -0500 Subject: [PATCH 055/497] Java: remove todo comments from ext files --- java/ql/lib/ext/jakarta.servlet.model.yml | 1 - java/ql/lib/ext/javax.portlet.model.yml | 1 - java/ql/lib/ext/javax.servlet.model.yml | 1 - 3 files changed, 3 deletions(-) diff --git a/java/ql/lib/ext/jakarta.servlet.model.yml b/java/ql/lib/ext/jakarta.servlet.model.yml index fc1274cadaf..be2feeb3c37 100644 --- a/java/ql/lib/ext/jakarta.servlet.model.yml +++ b/java/ql/lib/ext/jakarta.servlet.model.yml @@ -3,6 +3,5 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - # TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below. - ["jakarta.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] - ["jakarta.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/javax.portlet.model.yml b/java/ql/lib/ext/javax.portlet.model.yml index e39484abcb7..15d10886624 100644 --- a/java/ql/lib/ext/javax.portlet.model.yml +++ b/java/ql/lib/ext/javax.portlet.model.yml @@ -3,5 +3,4 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - # TODO: potentially switch to using Argument[this] of `PortletRequestDispatcher.forward|include` as sink instead of the below. - ["javax.portlet", "PortletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] diff --git a/java/ql/lib/ext/javax.servlet.model.yml b/java/ql/lib/ext/javax.servlet.model.yml index 7c405ac0de9..d27011c6e12 100644 --- a/java/ql/lib/ext/javax.servlet.model.yml +++ b/java/ql/lib/ext/javax.servlet.model.yml @@ -14,7 +14,6 @@ extensions: extensible: sinkModel data: - ["javax.servlet", "ServletContext", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - # TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below. - ["javax.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] - ["javax.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"] - addsTo: From 2708e53c7f3b54f1755596513aad1b444457ee9b Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 14:02:41 -0500 Subject: [PATCH 056/497] Java: remove redundant imports --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 1 - java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll | 1 - 2 files changed, 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 073507fe33a..79f8e5f2b28 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -5,7 +5,6 @@ private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes private import semmle.code.java.security.PathSanitizer -private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.controlflow.Guards /** A URL forward sink. */ diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index 71d41f42dee..30de4ef8354 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -3,7 +3,6 @@ import java import semmle.code.java.security.UrlForward import semmle.code.java.dataflow.FlowSources -import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.PathSanitizer /** From 43b49628fc54cd2de38768e14ff9f22720852919 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 14:36:43 -0500 Subject: [PATCH 057/497] Java: use new 'SimpleTypeSanitizer', and update some non-extending subtype relationships --- .../semmle/code/java/security/UrlForward.qll | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 79f8e5f2b28..d19b8c163fd 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -6,6 +6,7 @@ private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes private import semmle.code.java.security.PathSanitizer private import semmle.code.java.controlflow.Guards +private import semmle.code.java.security.Sanitizers /** A URL forward sink. */ abstract class UrlForwardSink extends DataFlow::Node { } @@ -38,13 +39,7 @@ private class ForwardPrefix extends InterestingPrefix { /** A URL forward barrier. */ abstract class UrlForwardBarrier extends DataFlow::Node { } -private class PrimitiveBarrier extends UrlForwardBarrier { - PrimitiveBarrier() { - this.getType() instanceof PrimitiveType or - this.getType() instanceof BoxedType or - this.getType() instanceof NumberType - } -} +private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } // TODO: should this also take URL encoding/decoding into account? // TODO: and PathSanitization in general? @@ -87,9 +82,7 @@ private class DefaultUrlDecodeCall extends UrlDecodeCall { // TODO: this can probably be named/designed better... abstract class RepeatedStmt extends Stmt { } -private class DefaultRepeatedStmt extends RepeatedStmt { - DefaultRepeatedStmt() { this instanceof LoopStmt } -} +private class DefaultRepeatedStmt extends RepeatedStmt instanceof LoopStmt { } abstract class CheckEncodingCall extends MethodCall { } @@ -111,9 +104,7 @@ private class RepeatedUrlDecodeCall extends MethodCall { } } -private class CheckEncodingGuard extends Guard instanceof MethodCall { - CheckEncodingGuard() { this instanceof CheckEncodingCall } - +private class CheckEncodingGuard extends Guard instanceof MethodCall, CheckEncodingCall { Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } } From d9772c1880bb269c0c8e61db3beae8587bae8822 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 5 Mar 2024 15:04:43 -0500 Subject: [PATCH 058/497] Java: update change note --- java/ql/src/change-notes/2023-12-12-url-forward-query.md | 4 ---- java/ql/src/change-notes/2024-03-06-url-forward-query.md | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 java/ql/src/change-notes/2023-12-12-url-forward-query.md create mode 100644 java/ql/src/change-notes/2024-03-06-url-forward-query.md diff --git a/java/ql/src/change-notes/2023-12-12-url-forward-query.md b/java/ql/src/change-notes/2023-12-12-url-forward-query.md deleted file mode 100644 index 4efc4b7c4e0..00000000000 --- a/java/ql/src/change-notes/2023-12-12-url-forward-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). diff --git a/java/ql/src/change-notes/2024-03-06-url-forward-query.md b/java/ql/src/change-notes/2024-03-06-url-forward-query.md new file mode 100644 index 00000000000..46028bda4f2 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-06-url-forward-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). From d220b3a298044753382b0677d054e51da23a1246 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 14:42:46 -0400 Subject: [PATCH 059/497] Java: some updates to test cases --- .../code/java/security/PathSanitizer.qll | 9 +- .../semmle/code/java/security/UrlForward.qll | 19 +-- .../security/CWE-552/UrlForwardTest.java | 159 +++++++++--------- 3 files changed, 88 insertions(+), 99 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index f3c54629efd..77803e3e27d 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -64,7 +64,10 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { ) } -// TODO: switch back to private if possible +/** + * A sanitizer that protects against path injection vulnerabilities + * by checking for a matching path. + */ class ExactPathMatchSanitizer extends PathInjectionSanitizer { ExactPathMatchSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() @@ -152,8 +155,7 @@ private class DotDotCheckSanitizer extends PathInjectionSanitizer { } } -// TODO: switch back to private if possible -class BlockListGuard extends PathGuard instanceof MethodCall { +private class BlockListGuard extends PathGuard instanceof MethodCall { BlockListGuard() { (isStringPartialMatch(this) or isPathPrefixMatch(this)) and isDisallowedWord(super.getAnArgument()) @@ -230,7 +232,6 @@ private predicate isStringPartialMatch(MethodCall ma) { exists(RefType t | t = ma.getMethod().getDeclaringType() | t instanceof TypeString or t instanceof StringsKt ) and - // TODO ! Why not use `StringPartialMatchMethod` for the below? getSourceMethod(ma.getMethod()) .hasName(["contains", "matches", "regionMatches", "indexOf", "lastIndexOf"]) } diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index d19b8c163fd..f7001023689 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -50,23 +50,20 @@ private class FollowsBarrierPrefix extends UrlForwardBarrier { private class BarrierPrefix extends InterestingPrefix { BarrierPrefix() { not this.getStringValue().matches("/WEB-INF/%") and - not this.getStringValue() = "forward:" + not this instanceof ForwardPrefix } override int getOffset() { result = 0 } } -private class UrlPathBarrier extends UrlForwardBarrier { +private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { UrlPathBarrier() { - this instanceof PathInjectionSanitizer and - ( - this instanceof ExactPathMatchSanitizer //TODO: still need a better solution for this edge case... - or - // TODO: these don't enforce order of checks and PathSanitization... make bypass test cases. - this instanceof NoEncodingBarrier - or - this instanceof FullyDecodesBarrier - ) + this instanceof ExactPathMatchSanitizer //TODO: still need a better solution for this edge case... + or + // TODO: these don't enforce order of checks and PathSanitization... make bypass test cases. + this instanceof NoEncodingBarrier + or + this instanceof FullyDecodesBarrier } } diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index c7a9d82b1a0..9b94f3f5724 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -23,7 +23,7 @@ import org.kohsuke.stapler.StaplerResponse; @Controller public class UrlForwardTest extends HttpServlet implements Filter { - // (1) ORIGINAL + // Spring-related test cases @GetMapping("/bad1") public ModelAndView bad1(String url) { return new ModelAndView(url); // $ hasUrlForward @@ -91,7 +91,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // (2) UnsafeRequestPath + // Non-Spring test cases (UnsafeRequest*Path*) private static final String BASE_PATH = "/pages"; @Override @@ -107,12 +107,12 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // GOOD: Request dispatcher from servlet path with check + // BAD: Request dispatcher from servlet path with check that does not decode + // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); - // actually BAD since could potentially bypass with ".." encoded as "%2e%2e"? if (path.startsWith(BASE_PATH) && !path.contains("..")) { request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward } else { @@ -125,7 +125,6 @@ public class UrlForwardTest extends HttpServlet implements Filter { throws IOException, ServletException { String path = ((HttpServletRequest) request).getServletPath(); - // this is still good, should not flag here..., url-decoding first doesn't matter if looking for exact match... :( if (path.equals("/comaction")) { request.getRequestDispatcher(path).forward(request, response); } else { @@ -133,7 +132,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // (3) UnsafeServletRequestDispatch + // Non-Spring test cases (UnsafeServletRequest*Dispatch*) @Override // BAD: Request dispatcher constructed from `ServletContext` without input validation protected void doGet(HttpServletRequest request, HttpServletResponse response) @@ -190,41 +189,41 @@ public class UrlForwardTest extends HttpServlet implements Filter { String path = request.getParameter("path"); // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check - // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` if (path.startsWith(BASE_PATH)) { request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward } } - // GOOD: Request dispatcher with path traversal check + // BAD: Request dispatcher with path traversal check that does not decode + // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". protected void doHead3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); - // actually BAD since could potentially bypass with ".." encoded as "%2e%2e"? if (path.startsWith(BASE_PATH) && !path.contains("..")) { request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward } } - // GOOD: Request dispatcher with path normalization and comparison + // BAD: Request dispatcher with path normalization and comparison, but + // does not decode before normalization. protected void doHead4(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); + + // Since not decoded before normalization, "%2e%2e" can remain in the path Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml - // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml - // actually BAD since could potentially bypass with ".." encoded as "%2e%2e": "/pages/welcome.jsp/%2e%2e/%2e%2e/WEB-INF/web.xml" becomes /pages/welcome.jsp/%2e%2e/%2e%2e/WEB-INF/web.xml, which will pass this check and potentially be problematic if decoded later? if (requestedPath.startsWith(BASE_PATH)) { request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward } } - // BAD (original FN): Request dispatcher with negation check and path normalization, but without URL decoding + // BAD: Request dispatcher with negation check and path normalization, but without URL decoding. protected void doHead5(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); + // Since not decoded before normalization, "/%57EB-INF" can remain in the path and pass the `startsWith` check. Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { @@ -232,7 +231,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // BAD (I added to test decode with no loop): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // BAD: Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding protected void doHead7(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); @@ -246,9 +245,9 @@ public class UrlForwardTest extends HttpServlet implements Filter { // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass protected void doHead6(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // v + String path = request.getParameter("path"); // TODO: remove this debugging comment: // v - if (path.contains("%")){ // v.getAnAccess() + if (path.contains("%")){ // TODO: remove this debugging comment: // v.getAnAccess() while (path.contains("%")) { path = URLDecoder.decode(path, "UTF-8"); } @@ -259,10 +258,53 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } + // GOOD: Request dispatcher with URL encoding check and path traversal check + protected void doHead16(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (!path.contains("%")){ + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + } + + // TODO: clean-up + // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // having previously been checked against a block-list of forbidden values." + protected void doHead10(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + if (path.contains("%")){ // BAD: wrong check + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + // if (path.contains("%")){ // BAD: wrong check + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + // } + } + } + } + + // TODO: clean-up + // "GOOD" (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding + // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, + // having previously been checked against a block-list of forbidden values." + protected void doHead11(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String path = request.getParameter("path"); + + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { + if (!path.contains("%")){ // GOOD: right check + request.getServletContext().getRequestDispatcher(path).include(request, response); + } + } + } + // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass protected void doHead8(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // v + String path = request.getParameter("path"); // TODO: remove this debugging comment: // v while (path.contains("%")) { path = URLDecoder.decode(path, "UTF-8"); } @@ -272,6 +314,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } + // TODO: see if can fix? // FP now.... // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass protected void doHead9(HttpServletRequest request, HttpServletResponse response) @@ -288,78 +331,26 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // New Tests + // BAD: `StaplerResponse.forward` without any checks public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { String url = req.getParameter("target"); rsp.forward(obj, url, req); // $ hasUrlForward } - // Other Tests for edge cases: - // // GOOD (I added): Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass - // // testing `if` stmt requirement for BB controlling - // protected void doHead12(HttpServletRequest request, HttpServletResponse response) - // throws ServletException, IOException { - // String path = request.getParameter("path"); - // if (path.contains("%")) { - // while (path.contains("%")) { - // path = URLDecoder.decode(path, "UTF-8"); - // } - // } - // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // request.getServletContext().getRequestDispatcher(path).include(request, response); - // } - // } - // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // // having previously been checked against a block-list of forbidden values." - // protected void doHead8(HttpServletRequest request, HttpServletResponse response) - // throws ServletException, IOException { - // String path = request.getParameter("path"); + // QHelp example + private static final String VALID_FORWARD = "https://cwe.mitre.org/data/definitions/552.html"; - // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // boolean hasEncoding = path.contains("%"); // BAD: doesn't do anything with the check... - // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward - // } - // } - // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // // having previously been checked against a block-list of forbidden values." - // protected void doHead9(HttpServletRequest request, HttpServletResponse response) - // throws ServletException, IOException { - // String path = request.getParameter("path"); + protected void doGet2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); - // boolean hasEncoding = path.contains("%"); // BAD: doesn't do anything with the check... and check comes BEFORE blocklist so guard should not trigger - // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward - // } - // } - - // // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // // having previously been checked against a block-list of forbidden values." - // protected void doHead10(HttpServletRequest request, HttpServletResponse response) - // throws ServletException, IOException { - // String path = request.getParameter("path"); - - // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // if (path.contains("%")){ // BAD: wrong check - // request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward - // } - // } - // } - - // // "GOOD" (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // // having previously been checked against a block-list of forbidden values." - // protected void doHead11(HttpServletRequest request, HttpServletResponse response) - // throws ServletException, IOException { - // String path = request.getParameter("path"); - - // if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // if (!path.contains("%")){ // GOOD: right check - // request.getServletContext().getRequestDispatcher(path).include(request, response); - // } - // } - // } + // BAD: a request parameter is incorporated without validation into a URL forward + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasUrlForward + // GOOD: the request parameter is validated against a known fixed string + if (VALID_FORWARD.equals(request.getParameter("target"))) { + sc.getRequestDispatcher(VALID_FORWARD).forward(request, response); + } + } } From 052452b18666e793783032da33fd1863e5d7121f Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 15:54:11 -0400 Subject: [PATCH 060/497] Java: create UrlDecodeMethod --- .../lib/semmle/code/java/frameworks/Networking.qll | 13 +++++++++++++ .../ql/lib/semmle/code/java/security/UrlForward.qll | 7 ++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index c473cc9fc09..f86cecd5b4e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -24,6 +24,11 @@ class TypeUrl extends RefType { TypeUrl() { this.hasQualifiedName("java.net", "URL") } } +/** The type `java.net.URLDecoder`. */ +class TypeUrlDecoder extends RefType { + TypeUrlDecoder() { this.hasQualifiedName("java.net", "URLDecoder") } +} + /** The type `java.net.URI`. */ class TypeUri extends RefType { TypeUri() { this.hasQualifiedName("java.net", "URI") } @@ -157,6 +162,14 @@ class UrlOpenConnectionMethod extends Method { } } +/** The method `java.net.URLDecoder::decode`. */ +class UrlDecodeMethod extends Method { + UrlDecodeMethod() { + this.getDeclaringType() instanceof TypeUrlDecoder and + this.getName() = "decode" + } +} + /** The method `javax.net.SocketFactory::createSocket`. */ class CreateSocketMethod extends Method { CreateSocketMethod() { diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index f7001023689..be9bfb91043 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -41,8 +41,6 @@ abstract class UrlForwardBarrier extends DataFlow::Node { } private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } -// TODO: should this also take URL encoding/decoding into account? -// TODO: and PathSanitization in general? private class FollowsBarrierPrefix extends UrlForwardBarrier { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } @@ -58,9 +56,8 @@ private class BarrierPrefix extends InterestingPrefix { private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { UrlPathBarrier() { - this instanceof ExactPathMatchSanitizer //TODO: still need a better solution for this edge case... + this instanceof ExactPathMatchSanitizer or - // TODO: these don't enforce order of checks and PathSanitization... make bypass test cases. this instanceof NoEncodingBarrier or this instanceof FullyDecodesBarrier @@ -71,7 +68,7 @@ abstract class UrlDecodeCall extends MethodCall { } private class DefaultUrlDecodeCall extends UrlDecodeCall { DefaultUrlDecodeCall() { - this.getMethod().hasQualifiedName("java.net", "URLDecoder", "decode") or // TODO: reuse existing class? Or make this a class? + this.getMethod() instanceof UrlDecodeMethod or this.getMethod().hasQualifiedName("org.eclipse.jetty.util.URIUtil", "URIUtil", "decodePath") } } From 042dcf9cd961e2b24b30220b8f7618221022f339 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 16:50:41 -0400 Subject: [PATCH 061/497] Java: some updates to UrlPathBarrier code --- java/ql/lib/semmle/code/java/JDK.qll | 7 ++ .../semmle/code/java/security/UrlForward.qll | 69 +++++++++---------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/java/ql/lib/semmle/code/java/JDK.qll b/java/ql/lib/semmle/code/java/JDK.qll index 7623cc87393..55d420dbcae 100644 --- a/java/ql/lib/semmle/code/java/JDK.qll +++ b/java/ql/lib/semmle/code/java/JDK.qll @@ -38,6 +38,13 @@ class StringLengthMethod extends Method { StringLengthMethod() { this.hasName("length") and this.getDeclaringType() instanceof TypeString } } +/** The `contains()` method of the class `java.lang.String`. */ +class StringContainsMethod extends Method { + StringContainsMethod() { + this.hasName("contains") and this.getDeclaringType() instanceof TypeString + } +} + /** * The methods on the class `java.lang.String` that are used to perform partial matches with a specified substring or char. */ diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index be9bfb91043..8f1b978cbfc 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -58,12 +58,13 @@ private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionS UrlPathBarrier() { this instanceof ExactPathMatchSanitizer or - this instanceof NoEncodingBarrier + this instanceof NoUrlEncodingBarrier or - this instanceof FullyDecodesBarrier + this instanceof FullyDecodesUrlBarrier } } +/** A call to a method that decodes a URL. */ abstract class UrlDecodeCall extends MethodCall { } private class DefaultUrlDecodeCall extends UrlDecodeCall { @@ -73,77 +74,69 @@ private class DefaultUrlDecodeCall extends UrlDecodeCall { } } -// TODO: this can probably be named/designed better... -abstract class RepeatedStmt extends Stmt { } +/** A repeated call to a method that decodes a URL. */ +abstract class RepeatedUrlDecodeCall extends MethodCall { } -private class DefaultRepeatedStmt extends RepeatedStmt instanceof LoopStmt { } +private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall { + DefaultRepeatedUrlDecodeCall() { + this instanceof UrlDecodeCall and + this.getAnEnclosingStmt() instanceof LoopStmt + } +} -abstract class CheckEncodingCall extends MethodCall { } +/** A method call that checks a string for URL encoding. */ +abstract class CheckUrlEncodingCall extends MethodCall { } -private class DefaultCheckEncodingCall extends CheckEncodingCall { - DefaultCheckEncodingCall() { - // TODO: indexOf?, etc. - this.getMethod().hasQualifiedName("java.lang", "String", "contains") and // TODO: reuse existing class? Or make this a class? +private class DefaultCheckUrlEncodingCall extends CheckUrlEncodingCall { + DefaultCheckUrlEncodingCall() { + this.getMethod() instanceof StringContainsMethod and this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "%" } } -// TODO: better naming? -// TODO: check if any URL decoding implementations _fully_ decode... or if all need to be called in a loop? -// TODO: make this extendable instead of `RepeatedStmt`? -private class RepeatedUrlDecodeCall extends MethodCall { - RepeatedUrlDecodeCall() { - this instanceof UrlDecodeCall and - this.getAnEnclosingStmt() instanceof RepeatedStmt - } -} - -private class CheckEncodingGuard extends Guard instanceof MethodCall, CheckEncodingCall { +private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCall { Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } } -private predicate noEncodingGuard(Guard g, Expr e, boolean branch) { - g instanceof CheckEncodingGuard and - e = g.(CheckEncodingGuard).getCheckedExpr() and +private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { + g instanceof CheckUrlEncodingGuard and + e = g.(CheckUrlEncodingGuard).getCheckedExpr() and branch = false or - // branch = false and - // g instanceof AssignExpr and // AssignExpr - // exists(CheckEncodingCall call | g.(AssignExpr).getSource() = call | e = call.getQualifier()) branch = false and - g.(Expr).getType() instanceof BooleanType and // AssignExpr + g.(Expr).getType() instanceof BooleanType and // TODO: remove debugging comment: // AssignExpr ( - exists(CheckEncodingCall call, AssignExpr ae | + exists(CheckUrlEncodingCall call, AssignExpr ae | ae.getSource() = call and e = call.getQualifier() and g = ae.getDest() ) or - exists(CheckEncodingCall call, LocalVariableDeclExpr vde | + exists(CheckUrlEncodingCall call, LocalVariableDeclExpr vde | vde.getInitOrPatternSource() = call and e = call.getQualifier() and g = vde.getAnAccess() //and //vde.getVariable() = g + // TODO: remove debugging comments above ) ) } -// TODO: check edge case of !contains(%), make sure that behaves as expected at least. -private class NoEncodingBarrier extends DataFlow::Node { - NoEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } +private class NoUrlEncodingBarrier extends DataFlow::Node { + NoUrlEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } } -private predicate fullyDecodesGuard(Expr e) { - exists(CheckEncodingGuard g, RepeatedUrlDecodeCall decodeCall | +private predicate fullyDecodesUrlGuard(Expr e) { + exists(CheckUrlEncodingGuard g, RepeatedUrlDecodeCall decodeCall | e = g.getCheckedExpr() and g.controls(decodeCall.getBasicBlock(), true) ) } -private class FullyDecodesBarrier extends DataFlow::Node { - FullyDecodesBarrier() { +private class FullyDecodesUrlBarrier extends DataFlow::Node { + FullyDecodesUrlBarrier() { exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | - fullyDecodesGuard(e) and + fullyDecodesUrlGuard(e) and e = v.getAnAccess() and e.getBasicBlock().bbDominates(this.asExpr().getBasicBlock()) ) From a8075969d886bc86ef60b12f10bdf551f4145eba Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 18:33:00 -0400 Subject: [PATCH 062/497] Java: add QLDocs to UrlPathBarrier code --- .../semmle/code/java/security/UrlForward.qll | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 8f1b978cbfc..d4cad4e2f54 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -41,10 +41,12 @@ abstract class UrlForwardBarrier extends DataFlow::Node { } private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } +// TODO: QLDoc private class FollowsBarrierPrefix extends UrlForwardBarrier { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } +// TODO: QLDoc and fix broadness of this prefix check... private class BarrierPrefix extends InterestingPrefix { BarrierPrefix() { not this.getStringValue().matches("/WEB-INF/%") and @@ -54,6 +56,7 @@ private class BarrierPrefix extends InterestingPrefix { override int getOffset() { result = 0 } } +/** A barrier that protects against path injection vulnerabilities while accounting for URL encoding. */ private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { UrlPathBarrier() { this instanceof ExactPathMatchSanitizer @@ -77,11 +80,8 @@ private class DefaultUrlDecodeCall extends UrlDecodeCall { /** A repeated call to a method that decodes a URL. */ abstract class RepeatedUrlDecodeCall extends MethodCall { } -private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall { - DefaultRepeatedUrlDecodeCall() { - this instanceof UrlDecodeCall and - this.getAnEnclosingStmt() instanceof LoopStmt - } +private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall instanceof UrlDecodeCall { + DefaultRepeatedUrlDecodeCall() { this.getAnEnclosingStmt() instanceof LoopStmt } } /** A method call that checks a string for URL encoding. */ @@ -94,17 +94,19 @@ private class DefaultCheckUrlEncodingCall extends CheckUrlEncodingCall { } } +/** A guard that looks for a method call that checks for URL encoding. */ private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCall { Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } } +/** Holds if `g` is guard for a URL that does not contain URL encoding. */ private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { g instanceof CheckUrlEncodingGuard and e = g.(CheckUrlEncodingGuard).getCheckedExpr() and branch = false or branch = false and - g.(Expr).getType() instanceof BooleanType and // TODO: remove debugging comment: // AssignExpr + g.(Expr).getType() instanceof BooleanType and ( exists(CheckUrlEncodingCall call, AssignExpr ae | ae.getSource() = call and @@ -115,17 +117,17 @@ private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { exists(CheckUrlEncodingCall call, LocalVariableDeclExpr vde | vde.getInitOrPatternSource() = call and e = call.getQualifier() and - g = vde.getAnAccess() //and - //vde.getVariable() = g - // TODO: remove debugging comments above + g = vde.getAnAccess() ) ) } +/** A barrier for URLs that do not contain URL encoding. */ private class NoUrlEncodingBarrier extends DataFlow::Node { NoUrlEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } } +/** Holds if `g` is guard for a URL that is fully decoded. */ private predicate fullyDecodesUrlGuard(Expr e) { exists(CheckUrlEncodingGuard g, RepeatedUrlDecodeCall decodeCall | e = g.getCheckedExpr() and @@ -133,6 +135,7 @@ private predicate fullyDecodesUrlGuard(Expr e) { ) } +/** A barrier for URLs that are fully decoded. */ private class FullyDecodesUrlBarrier extends DataFlow::Node { FullyDecodesUrlBarrier() { exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | From a002674587b255694088bed6768b8c16cf6ffac9 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 21:22:35 -0400 Subject: [PATCH 063/497] Java: clean up comments on test cases --- .../security/CWE-552/UrlForwardTest.java | 59 ++++++++----------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 9b94f3f5724..e66b5c899c7 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -23,7 +23,7 @@ import org.kohsuke.stapler.StaplerResponse; @Controller public class UrlForwardTest extends HttpServlet implements Filter { - // Spring-related test cases + // Spring `ModelAndView` test cases @GetMapping("/bad1") public ModelAndView bad1(String url) { return new ModelAndView(url); // $ hasUrlForward @@ -36,6 +36,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { return modelAndView; } + // Spring `"forward:"` prefix test cases @GetMapping("/bad3") public String bad3(String url) { return "forward:" + url + "/swagger-ui/index.html"; // $ hasUrlForward @@ -47,6 +48,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { return modelAndView; } + // `RequestDispatcher` test cases from a Spring `GetMapping` entry point @GetMapping("/bad5") public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { try { @@ -91,7 +93,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // Non-Spring test cases (UnsafeRequest*Path*) + // `RequestDispatcher` test cases from non-Spring entry points private static final String BASE_PATH = "/pages"; @Override @@ -132,7 +134,6 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // Non-Spring test cases (UnsafeServletRequest*Dispatch*) @Override // BAD: Request dispatcher constructed from `ServletContext` without input validation protected void doGet(HttpServletRequest request, HttpServletResponse response) @@ -184,7 +185,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } // BAD: Request dispatcher without path traversal check - protected void doHead2(HttpServletRequest request, HttpServletResponse response) + protected void doHead1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); @@ -196,7 +197,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { // BAD: Request dispatcher with path traversal check that does not decode // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". - protected void doHead3(HttpServletRequest request, HttpServletResponse response) + protected void doHead2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); @@ -207,7 +208,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { // BAD: Request dispatcher with path normalization and comparison, but // does not decode before normalization. - protected void doHead4(HttpServletRequest request, HttpServletResponse response) + protected void doHead3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); @@ -220,7 +221,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } // BAD: Request dispatcher with negation check and path normalization, but without URL decoding. - protected void doHead5(HttpServletRequest request, HttpServletResponse response) + protected void doHead4(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); // Since not decoded before normalization, "/%57EB-INF" can remain in the path and pass the `startsWith` check. @@ -232,7 +233,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } // BAD: Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - protected void doHead7(HttpServletRequest request, HttpServletResponse response) + protected void doHead5(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); path = URLDecoder.decode(path, "UTF-8"); @@ -245,9 +246,9 @@ public class UrlForwardTest extends HttpServlet implements Filter { // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass protected void doHead6(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // TODO: remove this debugging comment: // v + String path = request.getParameter("path"); - if (path.contains("%")){ // TODO: remove this debugging comment: // v.getAnAccess() + if (path.contains("%")){ while (path.contains("%")) { path = URLDecoder.decode(path, "UTF-8"); } @@ -259,7 +260,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } // GOOD: Request dispatcher with URL encoding check and path traversal check - protected void doHead16(HttpServletRequest request, HttpServletResponse response) + protected void doHead7(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); @@ -270,41 +271,33 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // TODO: clean-up - // BAD (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // having previously been checked against a block-list of forbidden values." - protected void doHead10(HttpServletRequest request, HttpServletResponse response) + // BAD: Request dispatcher without URL decoding before WEB-INF and path traversal checks + protected void doHead8(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); - if (path.contains("%")){ // BAD: wrong check - if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - // if (path.contains("%")){ // BAD: wrong check + if (path.contains("%")){ // incorrect check + if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward - // } + } } } - } - // TODO: clean-up - // "GOOD" (I added): Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding - // Tests urlEncoding BarrierGuard "a guard that considers a string safe because it is checked for URL encoding sequences, - // having previously been checked against a block-list of forbidden values." - protected void doHead11(HttpServletRequest request, HttpServletResponse response) + // GOOD: Request dispatcher with WEB-INF, path traversal, and URL encoding checks + protected void doHead9(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getParameter("path"); if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - if (!path.contains("%")){ // GOOD: right check + if (!path.contains("%")){ // correct check request.getServletContext().getRequestDispatcher(path).include(request, response); } } } // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass - protected void doHead8(HttpServletRequest request, HttpServletResponse response) + protected void doHead10(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // TODO: remove this debugging comment: // v + String path = request.getParameter("path"); while (path.contains("%")) { path = URLDecoder.decode(path, "UTF-8"); } @@ -314,12 +307,12 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // TODO: see if can fix? - // FP now.... // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass - protected void doHead9(HttpServletRequest request, HttpServletResponse response) + protected void doHead11(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // v + String path = request.getParameter("path"); + // FP: we don't currently handle the scenario where the + // `path.contains("%")` check is stored in a variable. boolean hasEncoding = path.contains("%"); while (hasEncoding) { path = URLDecoder.decode(path, "UTF-8"); From 7310c155e24a238316224adf9cff9204f174d843 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 21:29:00 -0400 Subject: [PATCH 064/497] Java: rename SpringUrlForwardSink --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index d4cad4e2f54..76ef139b7b2 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -23,8 +23,8 @@ private class DefaultUrlForwardSink extends UrlForwardSink { * An expression appended (perhaps indirectly) to `"forward:"` * and reachable from a Spring entry point. */ -private class SpringUrlForwardSink extends UrlForwardSink { - SpringUrlForwardSink() { +private class SpringUrlForwardPrefixSink extends UrlForwardSink { + SpringUrlForwardPrefixSink() { any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() } From c5a59d6c514cbe2c8985ada441bdd5203b9c615e Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 10 Mar 2024 23:27:22 -0400 Subject: [PATCH 065/497] Java: add QLDoc --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 76ef139b7b2..e72f3ab2117 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -41,12 +41,11 @@ abstract class UrlForwardBarrier extends DataFlow::Node { } private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } -// TODO: QLDoc +/** A barrier for URLs appended to a prefix. */ private class FollowsBarrierPrefix extends UrlForwardBarrier { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } -// TODO: QLDoc and fix broadness of this prefix check... private class BarrierPrefix extends InterestingPrefix { BarrierPrefix() { not this.getStringValue().matches("/WEB-INF/%") and From e99cea340bcf8902bf133c8913cf867d943475c9 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 12 Mar 2024 12:21:22 -0400 Subject: [PATCH 066/497] Java: update UrlPathBarrier to include FollowsBarrierPrefix --- .../semmle/code/java/security/UrlForward.qll | 17 ++++----- .../security/CWE-552/UrlForwardTest.java | 36 ++++++++++++++++++- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index e72f3ab2117..8c7f8d55eb0 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -41,8 +41,7 @@ abstract class UrlForwardBarrier extends DataFlow::Node { } private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } -/** A barrier for URLs appended to a prefix. */ -private class FollowsBarrierPrefix extends UrlForwardBarrier { +private class FollowsBarrierPrefix extends DataFlow::Node { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } @@ -55,14 +54,16 @@ private class BarrierPrefix extends InterestingPrefix { override int getOffset() { result = 0 } } -/** A barrier that protects against path injection vulnerabilities while accounting for URL encoding. */ +/** + * A barrier that protects against path injection vulnerabilities while accounting + * for URL encoding and concatenated prefixes. + */ private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { UrlPathBarrier() { - this instanceof ExactPathMatchSanitizer - or - this instanceof NoUrlEncodingBarrier - or - this instanceof FullyDecodesUrlBarrier + this instanceof ExactPathMatchSanitizer or + this instanceof NoUrlEncodingBarrier or + this instanceof FullyDecodesUrlBarrier or + this instanceof FollowsBarrierPrefix } } diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index e66b5c899c7..6d1c0580cb6 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -85,7 +85,41 @@ public class UrlForwardTest extends HttpServlet implements Filter { @GetMapping("/good1") public void good1(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); + request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); // $ SPURIOUS: hasUrlForward + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // BAD: appended to a prefix without path sanitization + @GetMapping("/bad8") + public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) { + try { + String url = "/pages" + urlPath; + request.getRequestDispatcher(url).forward(request, response); // $ hasUrlForward + } catch (ServletException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // GOOD: appended to a prefix with path sanitization + @GetMapping("/good2") + public void good2(String urlPath, HttpServletRequest request, HttpServletResponse response) { + try { + while (urlPath.contains("%")) { + urlPath = URLDecoder.decode(urlPath, "UTF-8"); + } + + if (!urlPath.contains("..") && !urlPath.startsWith("/WEB-INF")) { + // Note: path injection sanitizer does not account for string concatenation instead of a `startswith` check + String url = "/pages" + urlPath; + request.getRequestDispatcher(url).forward(request, response); + } + } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { From 04d27f2d65e9fa1833731889404e57c33f9a22f0 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Tue, 12 Mar 2024 20:44:53 -0400 Subject: [PATCH 067/497] Java: adjust prefix barriers --- .../semmle/code/java/security/UrlForward.qll | 43 ++++++++++++++----- .../security/CWE-552/UrlForwardTest.java | 10 ++++- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 8c7f8d55eb0..5ea36d7c6b8 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -41,29 +41,50 @@ abstract class UrlForwardBarrier extends DataFlow::Node { } private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } -private class FollowsBarrierPrefix extends DataFlow::Node { - FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } +/** + * A barrier for values appended to a "redirect:" prefix. + * These results are excluded because they should be handled + * by the `java/unvalidated-url-redirection` query instead. + */ +private class RedirectPrefixBarrier extends UrlForwardBarrier { + RedirectPrefixBarrier() { this.asExpr() = any(RedirectPrefix fp).getAnAppendedExpression() } } -private class BarrierPrefix extends InterestingPrefix { - BarrierPrefix() { - not this.getStringValue().matches("/WEB-INF/%") and - not this instanceof ForwardPrefix - } +private class RedirectPrefix extends InterestingPrefix { + RedirectPrefix() { this.getStringValue() = "redirect:" } override int getOffset() { result = 0 } } /** - * A barrier that protects against path injection vulnerabilities while accounting - * for URL encoding and concatenated prefixes. + * A value that is the result of prepending a string that prevents + * any value from controlling the path of a URL. + */ +private class FollowsBarrierPrefix extends UrlForwardBarrier { + FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } +} + +private class BarrierPrefix extends InterestingPrefix { + int offset; + + BarrierPrefix() { + // Matches strings that look like when prepended to untrusted input, they will restrict + // the path of a URL: for example, anything containing `?` or `#`. + exists(this.getStringValue().regexpFind("[?#]", 0, offset)) + } + + override int getOffset() { result = offset } +} + +/** + * A barrier that protects against path injection vulnerabilities + * while accounting for URL encoding. */ private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { UrlPathBarrier() { this instanceof ExactPathMatchSanitizer or this instanceof NoUrlEncodingBarrier or - this instanceof FullyDecodesUrlBarrier or - this instanceof FollowsBarrierPrefix + this instanceof FullyDecodesUrlBarrier } } diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 6d1c0580cb6..19bd739c294 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -48,6 +48,14 @@ public class UrlForwardTest extends HttpServlet implements Filter { return modelAndView; } + // Not relevant for this query since redirecting instead of forwarding + // This result should be found by the `java/unvalidated-url-redirection` query instead. + @GetMapping("/redirect") + public ModelAndView redirect(String url) { + ModelAndView modelAndView = new ModelAndView("redirect:" + url); + return modelAndView; + } + // `RequestDispatcher` test cases from a Spring `GetMapping` entry point @GetMapping("/bad5") public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { @@ -85,7 +93,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { @GetMapping("/good1") public void good1(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); // $ SPURIOUS: hasUrlForward + request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { From 5ac453eb38813b14f0e62c2215486581c3943b87 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 13 Mar 2024 09:36:42 -0400 Subject: [PATCH 068/497] Java: add spurious test case for StringBuilder.append --- .../security/CWE-552/UrlForwardTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 19bd739c294..5d1d19d4be5 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -388,4 +388,25 @@ public class UrlForwardTest extends HttpServlet implements Filter { sc.getRequestDispatcher(VALID_FORWARD).forward(request, response); } } + + // Test `StringBuilder.append` sequence with `?` appended before the user input + private static final String LOGIN_URL = "/UI/Login"; + + public void doPost2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + StringBuilder forwardUrl = new StringBuilder(200); + forwardUrl.append(LOGIN_URL); + + String queryString = request.getQueryString(); + + // should be sanitized due to the `?` appended + forwardUrl.append('?').append(queryString); + + String fUrl = forwardUrl.toString(); + + ServletConfig config = getServletConfig(); + + RequestDispatcher dispatcher = config.getServletContext().getRequestDispatcher(fUrl); // $ SPURIOUS: hasUrlForward + dispatcher.forward(request, response); + } } From 1b01f26d09dc118c3796846ceaa975525c3ccf6f Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 13 Mar 2024 16:27:25 -0400 Subject: [PATCH 069/497] Java: adjust BarrierPrefix to handle prepended chars --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 2 ++ .../ql/test/query-tests/security/CWE-552/UrlForwardTest.java | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 5ea36d7c6b8..b8cc6821abf 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -71,6 +71,8 @@ private class BarrierPrefix extends InterestingPrefix { // Matches strings that look like when prepended to untrusted input, they will restrict // the path of a URL: for example, anything containing `?` or `#`. exists(this.getStringValue().regexpFind("[?#]", 0, offset)) + or + this.(CharacterLiteral).getValue() = ["?", "#"] and offset = 0 } override int getOffset() { result = offset } diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 5d1d19d4be5..f0e982c7400 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -389,7 +389,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { } } - // Test `StringBuilder.append` sequence with `?` appended before the user input + // GOOD: char `?` appended before the user input private static final String LOGIN_URL = "/UI/Login"; public void doPost2(HttpServletRequest request, HttpServletResponse response) @@ -399,14 +399,13 @@ public class UrlForwardTest extends HttpServlet implements Filter { String queryString = request.getQueryString(); - // should be sanitized due to the `?` appended forwardUrl.append('?').append(queryString); String fUrl = forwardUrl.toString(); ServletConfig config = getServletConfig(); - RequestDispatcher dispatcher = config.getServletContext().getRequestDispatcher(fUrl); // $ SPURIOUS: hasUrlForward + RequestDispatcher dispatcher = config.getServletContext().getRequestDispatcher(fUrl); dispatcher.forward(request, response); } } From fc8caa66c8ac4cb9b6a9a31f5ea24d0b50d3297a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 11:35:50 +0100 Subject: [PATCH 070/497] Python: Prepare for general content in type-tracker Due to the char-pred of Content, this change should keep exactly the same behavior as before. --- .../python/dataflow/new/TypeTracking.qll | 14 +++--- .../new/internal/TypeTrackingImpl.qll | 45 +++++-------------- 2 files changed, 21 insertions(+), 38 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll index 4f1810f059e..9d0bcb3c487 100644 --- a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll @@ -5,6 +5,7 @@ private import internal.TypeTrackingImpl as Impl import Impl::Shared::TypeTracking +private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic /** A string that may appear as the name of an attribute or access path. */ class AttributeName = Impl::TypeTrackingInput::Content; @@ -40,7 +41,11 @@ class TypeTracker extends Impl::TypeTracker { * Holds if this is the starting point of type tracking, and the value starts in the attribute named `attrName`. * The type tracking only ends after the attribute has been loaded. */ - predicate startInAttr(string attrName) { this.startInContent(attrName) } + predicate startInAttr(string attrName) { + exists(DataFlowPublic::AttributeContent content | content.getAttribute() = attrName | + this.startInContent(content) + ) + } /** * INTERNAL. DO NOT USE. @@ -48,9 +53,8 @@ class TypeTracker extends Impl::TypeTracker { * Gets the attribute associated with this type tracker. */ string getAttr() { - result = this.getContent().asSome() - or - this.getContent().isNone() and - result = "" + if this.getContent().asSome() instanceof DataFlowPublic::AttributeContent + then result = this.getContent().asSome().(DataFlowPublic::AttributeContent).getAttribute() + else result = "" } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 1a9bdb5202e..8b6e53c8b74 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -97,24 +97,14 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { private module TypeTrackerSummaryFlow = SummaryTypeTracker::SummaryFlow; -/** - * Gets the name of a possible piece of content. For Python, this is currently only attribute names, - * using the name of the attribute for the corresponding content. - */ -private string getPossibleContentName() { - Stages::TypeTracking::ref() and // the TypeTracking::append() etc. predicates that we want to cache depend on this predicate, so we can place the `ref()` call here to get around identical files. - result = any(DataFlowPublic::AttrRef a).getAttributeName() -} - module TypeTrackingInput implements Shared::TypeTrackingInput { class Node = DataFlowPublic::Node; class LocalSourceNode = DataFlowPublic::LocalSourceNode; - class Content instanceof string { - Content() { this = getPossibleContentName() } - - string toString() { result = this } + class Content extends DataFlowPublic::Content { + // this char-pred is just a temporary restriction while transitioning to more general content + Content() { this instanceof DataFlowPublic::AttributeContent } } /** @@ -181,46 +171,35 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ predicate storeStep(Node nodeFrom, Node nodeTo, Content content) { - exists(DataFlowPublic::AttrWrite a | - a.mayHaveAttributeName(content) and + exists(DataFlowPublic::AttrWrite a, string attrName | + content.(DataFlowPublic::AttributeContent).getAttribute() = attrName and + a.mayHaveAttributeName(attrName) and nodeFrom = a.getValue() and nodeTo = a.getObject() ) or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content - | - TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, contents) - ) + TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, content) } /** * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. */ predicate loadStep(Node nodeFrom, LocalSourceNode nodeTo, Content content) { - exists(DataFlowPublic::AttrRead a | - a.mayHaveAttributeName(content) and + exists(DataFlowPublic::AttrRead a, string attrName | + content.(DataFlowPublic::AttributeContent).getAttribute() = attrName and + a.mayHaveAttributeName(attrName) and nodeFrom = a.getObject() and nodeTo = a ) or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content - | - TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, contents) - ) + TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, content) } /** * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. */ predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content loadContent, Content storeContent) { - exists(DataFlowPublic::ContentSet loadContents, DataFlowPublic::ContentSet storeContents | - loadContents.(DataFlowPublic::AttributeContent).getAttribute() = loadContent and - storeContents.(DataFlowPublic::AttributeContent).getAttribute() = storeContent - | - TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContents, storeContents) - ) + TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContent, storeContent) } /** From 636cf611ae8d5f9ac3025bacff6e028902e89f88 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 11:36:47 +0100 Subject: [PATCH 071/497] Python: Allow general content in type-tracker This should not result in many changes, since store/load steps are still only implemented for attributes. --- .../semmle/python/dataflow/new/internal/TypeTrackingImpl.qll | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 8b6e53c8b74..81c1f369561 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -102,10 +102,7 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { class LocalSourceNode = DataFlowPublic::LocalSourceNode; - class Content extends DataFlowPublic::Content { - // this char-pred is just a temporary restriction while transitioning to more general content - Content() { this instanceof DataFlowPublic::AttributeContent } - } + class Content = DataFlowPublic::Content; /** * A label to use for `WithContent` and `WithoutContent` steps, restricting From 7721fb33314cee322fd4b7ac3c8bd5bfe8b2e353 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 11:44:08 +0100 Subject: [PATCH 072/497] Python: Setup shared read/store steps --- .../dataflow/new/internal/DataFlowPrivate.qll | 14 ++++++++++++++ .../dataflow/new/internal/TypeTrackingImpl.qll | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 47f41d0cd05..5ccfa251634 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -641,11 +641,18 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { //-------- // Field flow //-------- +/** + * Subset of `storeStep` that should be shared with type-tracking. + */ +predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { none() } + /** * Holds if data can flow from `nodeFrom` to `nodeTo` via an assignment to * content `c`. */ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { + storeStepCommon(nodeFrom, c, nodeTo) + or listStoreStep(nodeFrom, c, nodeTo) or setStoreStep(nodeFrom, c, nodeTo) @@ -891,10 +898,17 @@ predicate attributeStoreStep(Node nodeFrom, AttributeContent c, Node nodeTo) { ) } +/** + * Subset of `readStep` that should be shared with type-tracking. + */ +predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { none() } + /** * Holds if data can flow from `nodeFrom` to `nodeTo` via a read of content `c`. */ predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { + readStepCommon(nodeFrom, c, nodeTo) + or subscriptReadStep(nodeFrom, c, nodeTo) or iterableUnpackingReadStep(nodeFrom, c, nodeTo) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 81c1f369561..68779208de9 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -175,6 +175,8 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { nodeTo = a.getObject() ) or + DataFlowPrivate::storeStepCommon(nodeFrom, content, nodeTo) + or TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, content) } @@ -189,6 +191,8 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { nodeTo = a ) or + DataFlowPrivate::readStepCommon(nodeFrom, content, nodeTo) + or TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, content) } From a95bb7c86b1b9047fd5bcc6adf77ee195074a8c5 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 13:24:48 +0100 Subject: [PATCH 073/497] Python: Expand function reference in content test --- .../CallGraph/InlineCallGraphTest.expected | 3 +- .../CallGraph/code/func_ref_in_content.py | 53 +++++++++++++++++++ .../CallGraph/code/tuple_function_return.py | 15 ------ 3 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py delete mode 100644 python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index 55774486be0..504c5251a1a 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -15,8 +15,9 @@ pointsTo_found_typeTracker_notFound | code/func_defined_outside_class.py:39:11:39:21 | ControlFlowNode for _gen() | B._gen | | code/func_defined_outside_class.py:42:1:42:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_defined_outside_class.py:43:1:43:7 | ControlFlowNode for Attribute() | B._gen.func | +| code/func_ref_in_content.py:17:1:17:4 | ControlFlowNode for f2() | func | +| code/func_ref_in_content.py:20:1:20:4 | ControlFlowNode for f3() | func | | code/funky_regression.py:15:9:15:17 | ControlFlowNode for Attribute() | Wat.f2 | -| code/tuple_function_return.py:15:1:15:4 | ControlFlowNode for f2() | func | | code/type_tracking_limitation.py:8:1:8:3 | ControlFlowNode for x() | my_func | typeTracker_found_pointsTo_notFound | code/callable_as_argument.py:29:5:29:12 | ControlFlowNode for Attribute() | test_class.InsideTestFunc.sm | diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py new file mode 100644 index 00000000000..b89a013f5b1 --- /dev/null +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -0,0 +1,53 @@ +def func(): + print("func()") + +def return_func(): + return func + +f1 = return_func() # $ pt,tt=return_func +f1() # $ pt,tt=func + + +def return_func_in_tuple(): + return (func, 42) + +tup = return_func_in_tuple() # $ pt,tt=return_func_in_tuple + +f2, _ = tup +f2() # $ pt=func MISSING: tt + +f3 = tup[0] +f3() # $ pt=func MISSING: tt + + +def return_func_in_dict(): + return {'func': func, 'val': 42} + +dct = return_func_in_dict() # $ pt,tt=return_func_in_dict + +f4 = dct['func'] +f4() # $ MISSING: tt=func + + +def return_func_in_dict_update(): + d = {} + d["func"] = func + return d + +dct2 = return_func_in_dict_update() # $ pt,tt=return_func_in_dict_update + +f5 = dct2['func'] +f5() # $ MISSING: tt=func + + +def return_func_in_list(): + return [func, 42] + +lst = return_func_in_list() # $ pt,tt=return_func_in_list + +f6 = lst[0] +f6() # $ MISSING: pt,tt=func + +if eval("False"): # don't run this, but fool analysis to still consider it (doesn't wok if you just to `if False:`) + f7 = lst[1] + f7() diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py b/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py deleted file mode 100644 index f87b1aa23e8..00000000000 --- a/python/ql/test/experimental/library-tests/CallGraph/code/tuple_function_return.py +++ /dev/null @@ -1,15 +0,0 @@ -def func(): - print("func()") - -def return_func(): - return func - -def return_func_in_tuple(): - return (func, 42) - -f1 = return_func() # $ pt,tt=return_func -f1() # $ pt,tt=func - - -f2, _ = return_func_in_tuple() # $ pt,tt=return_func_in_tuple -f2() # $ pt=func MISSING: tt From ece8245a4be1f05fffc2e9cd7acd5e387729538e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 13:39:49 +0100 Subject: [PATCH 074/497] Python: type-track through tuple content --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 12 ++++++------ .../CallGraph/InlineCallGraphTest.expected | 1 - .../CallGraph/code/func_ref_in_content.py | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 5ccfa251634..22fb979f9dc 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -644,7 +644,9 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { /** * Subset of `storeStep` that should be shared with type-tracking. */ -predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { none() } +predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { + tupleStoreStep(nodeFrom, c, nodeTo) +} /** * Holds if data can flow from `nodeFrom` to `nodeTo` via an assignment to @@ -657,8 +659,6 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { or setStoreStep(nodeFrom, c, nodeTo) or - tupleStoreStep(nodeFrom, c, nodeTo) - or dictStoreStep(nodeFrom, c, nodeTo) or moreDictStoreSteps(nodeFrom, c, nodeTo) @@ -901,7 +901,9 @@ predicate attributeStoreStep(Node nodeFrom, AttributeContent c, Node nodeTo) { /** * Subset of `readStep` that should be shared with type-tracking. */ -predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { none() } +predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { + subscriptReadStep(nodeFrom, c, nodeTo) +} /** * Holds if data can flow from `nodeFrom` to `nodeTo` via a read of content `c`. @@ -909,8 +911,6 @@ predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { none() } predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { readStepCommon(nodeFrom, c, nodeTo) or - subscriptReadStep(nodeFrom, c, nodeTo) - or iterableUnpackingReadStep(nodeFrom, c, nodeTo) or matchReadStep(nodeFrom, c, nodeTo) diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index 504c5251a1a..667ebf28d75 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -16,7 +16,6 @@ pointsTo_found_typeTracker_notFound | code/func_defined_outside_class.py:42:1:42:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_defined_outside_class.py:43:1:43:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_ref_in_content.py:17:1:17:4 | ControlFlowNode for f2() | func | -| code/func_ref_in_content.py:20:1:20:4 | ControlFlowNode for f3() | func | | code/funky_regression.py:15:9:15:17 | ControlFlowNode for Attribute() | Wat.f2 | | code/type_tracking_limitation.py:8:1:8:3 | ControlFlowNode for x() | my_func | typeTracker_found_pointsTo_notFound diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index b89a013f5b1..87abb4198e9 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -17,7 +17,7 @@ f2, _ = tup f2() # $ pt=func MISSING: tt f3 = tup[0] -f3() # $ pt=func MISSING: tt +f3() # $ tt,pt=func def return_func_in_dict(): From 73fe596753357032044842f90816421ddd16490c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 13:57:57 +0100 Subject: [PATCH 075/497] Python: type-tracking through dictionary construction --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 4 ++-- .../library-tests/CallGraph/InlineCallGraphTest.expected | 1 + .../library-tests/CallGraph/code/func_ref_in_content.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 22fb979f9dc..3b589da37d6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -646,6 +646,8 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { */ predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { tupleStoreStep(nodeFrom, c, nodeTo) + or + dictStoreStep(nodeFrom, c, nodeTo) } /** @@ -659,8 +661,6 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { or setStoreStep(nodeFrom, c, nodeTo) or - dictStoreStep(nodeFrom, c, nodeTo) - or moreDictStoreSteps(nodeFrom, c, nodeTo) or comprehensionStoreStep(nodeFrom, c, nodeTo) diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index 667ebf28d75..ab97d594a4e 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -38,6 +38,7 @@ typeTracker_found_pointsTo_notFound | code/class_super.py:101:1:101:7 | ControlFlowNode for Attribute() | Z.foo | | code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo | | code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo | +| code/func_ref_in_content.py:29:1:29:4 | ControlFlowNode for f4() | func | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo | | code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo | diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index 87abb4198e9..57b11915c51 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -26,7 +26,7 @@ def return_func_in_dict(): dct = return_func_in_dict() # $ pt,tt=return_func_in_dict f4 = dct['func'] -f4() # $ MISSING: tt=func +f4() # $ tt=func def return_func_in_dict_update(): From dac2b57bb029e345f79e0337f5ab1ba2a2137db7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 14:51:38 +0100 Subject: [PATCH 076/497] Python: type-track through dict-updates --- .../dataflow/new/internal/DataFlowPrivate.qll | 4 ++-- .../dataflow/new/internal/TypeTrackingImpl.qll | 13 ++++++++++++- .../CallGraph/InlineCallGraphTest.expected | 1 + .../CallGraph/code/func_ref_in_content.py | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 3b589da37d6..98841726a74 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -648,6 +648,8 @@ predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { tupleStoreStep(nodeFrom, c, nodeTo) or dictStoreStep(nodeFrom, c, nodeTo) + or + moreDictStoreSteps(nodeFrom, c, nodeTo) } /** @@ -661,8 +663,6 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { or setStoreStep(nodeFrom, c, nodeTo) or - moreDictStoreSteps(nodeFrom, c, nodeTo) - or comprehensionStoreStep(nodeFrom, c, nodeTo) or iterableUnpackingStoreStep(nodeFrom, c, nodeTo) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 68779208de9..8b3e1a95ef1 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -175,7 +175,18 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { nodeTo = a.getObject() ) or - DataFlowPrivate::storeStepCommon(nodeFrom, content, nodeTo) + // type-tracking doesn't really handle PostUpdateNodes, so for some assignment steps + // like `my_dict["foo"] = foo` the data-flow step targets the PostUpdateNode for + // `my_dict`, where we want to translate that into a type-tracking step that targets + // the normal/non-PostUpdateNode for `my_dict`. + exists(DataFlowPublic::Node storeTarget | + DataFlowPrivate::storeStepCommon(nodeFrom, content, storeTarget) + | + not storeTarget instanceof DataFlowPrivate::SyntheticPostUpdateNode and + nodeTo = storeTarget + or + nodeTo = storeTarget.(DataFlowPrivate::SyntheticPostUpdateNode).getPreUpdateNode() + ) or TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, content) } diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index ab97d594a4e..378b2c64957 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -39,6 +39,7 @@ typeTracker_found_pointsTo_notFound | code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo | | code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo | | code/func_ref_in_content.py:29:1:29:4 | ControlFlowNode for f4() | func | +| code/func_ref_in_content.py:40:1:40:4 | ControlFlowNode for f5() | func | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo | | code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo | diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index 57b11915c51..4bea545cb0f 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -37,7 +37,7 @@ def return_func_in_dict_update(): dct2 = return_func_in_dict_update() # $ pt,tt=return_func_in_dict_update f5 = dct2['func'] -f5() # $ MISSING: tt=func +f5() # $ tt=func def return_func_in_list(): From 0cf3fe4a4c5d7772d2efefa0d45cf2d89e46c160 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 14:59:07 +0100 Subject: [PATCH 077/497] Python: Expand dict update tests --- .../CallGraph/InlineCallGraphTest.expected | 8 +++++--- .../CallGraph/code/func_ref_in_content.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index 378b2c64957..c5b7d6dc473 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -15,7 +15,7 @@ pointsTo_found_typeTracker_notFound | code/func_defined_outside_class.py:39:11:39:21 | ControlFlowNode for _gen() | B._gen | | code/func_defined_outside_class.py:42:1:42:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_defined_outside_class.py:43:1:43:7 | ControlFlowNode for Attribute() | B._gen.func | -| code/func_ref_in_content.py:17:1:17:4 | ControlFlowNode for f2() | func | +| code/func_ref_in_content.py:20:1:20:4 | ControlFlowNode for f2() | func | | code/funky_regression.py:15:9:15:17 | ControlFlowNode for Attribute() | Wat.f2 | | code/type_tracking_limitation.py:8:1:8:3 | ControlFlowNode for x() | my_func | typeTracker_found_pointsTo_notFound @@ -38,8 +38,10 @@ typeTracker_found_pointsTo_notFound | code/class_super.py:101:1:101:7 | ControlFlowNode for Attribute() | Z.foo | | code/class_super.py:108:1:108:8 | ControlFlowNode for Attribute() | Z.foo | | code/def_in_function.py:22:5:22:11 | ControlFlowNode for Attribute() | test.A.foo | -| code/func_ref_in_content.py:29:1:29:4 | ControlFlowNode for f4() | func | -| code/func_ref_in_content.py:40:1:40:4 | ControlFlowNode for f5() | func | +| code/func_ref_in_content.py:32:1:32:4 | ControlFlowNode for f4() | func | +| code/func_ref_in_content.py:46:1:46:4 | ControlFlowNode for f5() | func | +| code/func_ref_in_content.py:48:1:48:15 | ControlFlowNode for Subscript() | func2 | +| code/func_ref_in_content.py:50:1:50:19 | ControlFlowNode for Subscript() | func2 | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | A.foo | | code/isinstance.py:9:13:9:22 | ControlFlowNode for Attribute() | ASub.foo | | code/isinstance.py:14:13:14:22 | ControlFlowNode for Attribute() | A.foo | diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index 4bea545cb0f..b249ec0b2e9 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -1,6 +1,9 @@ def func(): print("func()") +def func2(): + print("func2()") + def return_func(): return func @@ -32,6 +35,9 @@ f4() # $ tt=func def return_func_in_dict_update(): d = {} d["func"] = func + d["func2"] = func2 + d["contested"] = func + d["contested"] = func2 return d dct2 = return_func_in_dict_update() # $ pt,tt=return_func_in_dict_update @@ -39,6 +45,10 @@ dct2 = return_func_in_dict_update() # $ pt,tt=return_func_in_dict_update f5 = dct2['func'] f5() # $ tt=func +dct2['func2']() # $ tt=func2 + +dct2['contested']() # $ tt=func2 SPURIOUS: tt=func + def return_func_in_list(): return [func, 42] From 92729dbbd659bdac0c8f9e31699161806fb80e73 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 23 Feb 2024 15:27:10 +0100 Subject: [PATCH 078/497] Python: Support iterable unpacking in type-tracking --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 8 ++++---- .../library-tests/CallGraph/InlineCallGraphTest.expected | 1 - .../library-tests/CallGraph/code/func_ref_in_content.py | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 98841726a74..f2a52377544 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -650,6 +650,8 @@ predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { dictStoreStep(nodeFrom, c, nodeTo) or moreDictStoreSteps(nodeFrom, c, nodeTo) + or + iterableUnpackingStoreStep(nodeFrom, c, nodeTo) } /** @@ -665,8 +667,6 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { or comprehensionStoreStep(nodeFrom, c, nodeTo) or - iterableUnpackingStoreStep(nodeFrom, c, nodeTo) - or attributeStoreStep(nodeFrom, c, nodeTo) or matchStoreStep(nodeFrom, c, nodeTo) @@ -903,6 +903,8 @@ predicate attributeStoreStep(Node nodeFrom, AttributeContent c, Node nodeTo) { */ predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { subscriptReadStep(nodeFrom, c, nodeTo) + or + iterableUnpackingReadStep(nodeFrom, c, nodeTo) } /** @@ -911,8 +913,6 @@ predicate readStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { readStepCommon(nodeFrom, c, nodeTo) or - iterableUnpackingReadStep(nodeFrom, c, nodeTo) - or matchReadStep(nodeFrom, c, nodeTo) or forReadStep(nodeFrom, c, nodeTo) diff --git a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected index c5b7d6dc473..ef82a9ad20c 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected +++ b/python/ql/test/experimental/library-tests/CallGraph/InlineCallGraphTest.expected @@ -15,7 +15,6 @@ pointsTo_found_typeTracker_notFound | code/func_defined_outside_class.py:39:11:39:21 | ControlFlowNode for _gen() | B._gen | | code/func_defined_outside_class.py:42:1:42:7 | ControlFlowNode for Attribute() | B._gen.func | | code/func_defined_outside_class.py:43:1:43:7 | ControlFlowNode for Attribute() | B._gen.func | -| code/func_ref_in_content.py:20:1:20:4 | ControlFlowNode for f2() | func | | code/funky_regression.py:15:9:15:17 | ControlFlowNode for Attribute() | Wat.f2 | | code/type_tracking_limitation.py:8:1:8:3 | ControlFlowNode for x() | my_func | typeTracker_found_pointsTo_notFound diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index b249ec0b2e9..24518ace088 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -17,7 +17,7 @@ def return_func_in_tuple(): tup = return_func_in_tuple() # $ pt,tt=return_func_in_tuple f2, _ = tup -f2() # $ pt=func MISSING: tt +f2() # $ pt,tt=func f3 = tup[0] f3() # $ tt,pt=func From 8a7ffac19c9162fdfbde38aa859fc114ad927ba6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 12:13:43 +0100 Subject: [PATCH 079/497] Python: Accept consistency failure --- .../CallGraph/CONSISTENCY/TypeTrackingConsistency.expected | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..6aed7c83813 --- /dev/null +++ b/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,2 @@ +| code/func_ref_in_content.py:19:1:19:5 | IterableElement | Unreachable node in step of kind store Tuple element at index 0. | +| code/func_ref_in_content.py:19:1:19:5 | IterableElement | Unreachable node in step of kind store Tuple element at index 1. | From 4d78762ba85ddb1373488ef1b0f45fc2a9f9b2a3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 12:14:14 +0100 Subject: [PATCH 080/497] Python: Ignore consistency failure --- python/ql/consistency-queries/TypeTrackingConsistency.ql | 7 +++++++ .../CallGraph/CONSISTENCY/TypeTrackingConsistency.expected | 2 -- 2 files changed, 7 insertions(+), 2 deletions(-) delete mode 100644 python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 15083229002..551573a7aef 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -36,6 +36,13 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { // which I couldn't just fix. We ignore the problems here, and instead rely on the // test-case added in https://github.com/github/codeql/pull/15841 n.getLocation().getFile().getAbsolutePath().matches("%/socketserver.py") + or + // for iterable unpacking like `a,b = some_list`, we currently don't want to allow + // type-tracking... however, in the future when we allow tracking list indexes + // precisely (that is, move away from ListElementContent), we should ensure we have + // proper flow to the synthetic `IterableElementNode`. + exists(DataFlow::ListElementContent c) and + n instanceof DataFlow::IterableElementNode } } diff --git a/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index 6aed7c83813..00000000000 --- a/python/ql/test/experimental/library-tests/CallGraph/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -| code/func_ref_in_content.py:19:1:19:5 | IterableElement | Unreachable node in step of kind store Tuple element at index 0. | -| code/func_ref_in_content.py:19:1:19:5 | IterableElement | Unreachable node in step of kind store Tuple element at index 1. | From fa0c4e18fcbe2638af0266bbd86d209e2feec054 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 4 Mar 2024 16:05:18 +0100 Subject: [PATCH 081/497] Python: Expand dict-content tt test even more While it might be useful to track content to any lookup, it's not something we do right now. --- .../CallGraph/code/func_ref_in_content.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py index 24518ace088..eee8f29778b 100644 --- a/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py +++ b/python/ql/test/experimental/library-tests/CallGraph/code/func_ref_in_content.py @@ -50,6 +50,17 @@ dct2['func2']() # $ tt=func2 dct2['contested']() # $ tt=func2 SPURIOUS: tt=func +## non-precise access is not supported right now +for k in dct2: + dct2[k]() # $ MISSING: tt=func tt=func2 + +for v in dct2.values(): + v() # $ MISSING: tt=func tt=func2 + +for k, v in dct2.items(): + v() # $ MISSING: tt=func tt=func2 + + def return_func_in_list(): return [func, 42] From 7de304bf1680d61f7b6309cb840a941445f9caf9 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 12 Mar 2024 16:07:53 +0100 Subject: [PATCH 082/497] Python: Add proper type-tracking tests for content Instead of just relying on the call-graph tests --- .../dataflow/typetracking/content_test.py | 78 +++++++++++++++++++ .../dataflow/typetracking/tracked.ql | 8 ++ 2 files changed, 86 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/typetracking/content_test.py diff --git a/python/ql/test/experimental/dataflow/typetracking/content_test.py b/python/ql/test/experimental/dataflow/typetracking/content_test.py new file mode 100644 index 00000000000..ac201f23301 --- /dev/null +++ b/python/ql/test/experimental/dataflow/typetracking/content_test.py @@ -0,0 +1,78 @@ +# test of other content types than attributes + +def test_tuple(index_arg): + tup = (tracked, other) # $tracked + + tup[0] # $ tracked + tup[1] + + a,b = tup # $tracked + a # $ tracked + b + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + tup[index_arg] + + for x in tup: + print(x) + + for i in range(len(tup)): + print(tup[i]) + + +def test_dict(key_arg): + d1 = {"t": tracked, "o": other} # $tracked + d1["t"] # $ tracked + d1.get("t") # $ MISSING: tracked + d1.setdefault("t") # $ MISSING: tracked + + d1["o"] + d1.get("o") + d1.setdefault("o") + + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + d1[key_arg] + + for k in d1: + d1[k] + + for v in d1.values(): + v + + for k, v in d1.items(): + v + + + # construction with inline updates + d2 = dict() + d2["t"] = tracked # $ tracked + d2["o"] = other + + d2["t"] # $ tracked + d2["o"] + + # notice that time-travel is also possible (just as with attributes) + d3 = dict() + d3["t"] # $ SPURIOUS: tracked + d3["t"] = tracked # $ tracked + d3["t"] # $ tracked + + +def test_list(index_arg): + l = [tracked, other] # $tracked + + l[0] # $ MISSING: tracked + l[1] + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + l[index_arg] + + for x in l: + print(x) + + for i in range(len(l)): + print(l[i]) diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index ca893688256..8bad0e33ead 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -30,6 +30,14 @@ module TrackedTest implements TestSig { not e instanceof DataFlow::ScopeEntryDefinitionNode and // ...same for `SynthCaptureNode`s not e instanceof DP::SynthCaptureNode and + // after starting to track all kinds of content, we generally just want to show + // annotations after reading the tracked data out again. (we keep the old + // attribute logic to not rewrite all our tests) + ( + t.getContent().isNone() + or + t.getContent().asSome() instanceof DataFlow::AttributeContent + ) and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and From 2b09b084e0393193e5daf97a1a512538c9aa4b57 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 12 Mar 2024 17:43:43 +0100 Subject: [PATCH 083/497] Python: Add change-note --- python/ql/lib/change-notes/2024-03-12-typetracking-content.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2024-03-12-typetracking-content.md diff --git a/python/ql/lib/change-notes/2024-03-12-typetracking-content.md b/python/ql/lib/change-notes/2024-03-12-typetracking-content.md new file mode 100644 index 00000000000..5ad93a657ae --- /dev/null +++ b/python/ql/lib/change-notes/2024-03-12-typetracking-content.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Improved the type-tracking capabilities (and therefore also API graphs) to allow tracking items in tuples and dictionaries. From af8cef5b535b068057a58654701cf27ca2641e81 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 12 Mar 2024 17:57:32 +0100 Subject: [PATCH 084/497] Python: Fixup deprecated type-tracker API --- .../dataflow/new/internal/TypeTracker.qll | 46 +++++++++++++++---- .../new/internal/TypeTrackerSpecific.qll | 2 +- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll index 0f6ff8bd3bd..01c881b2316 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll @@ -1,6 +1,7 @@ /** Step Summaries and Type Tracking */ private import TypeTrackerSpecific +private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic cached private module Cached { @@ -12,10 +13,22 @@ private module Cached { LevelStep() or CallStep() or ReturnStep() or - deprecated StoreStep(TypeTrackerContent content) { basicStoreStep(_, _, content) } or - deprecated LoadStep(TypeTrackerContent content) { basicLoadStep(_, _, content) } or + deprecated StoreStep(TypeTrackerContent content) { + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicStoreStep(_, _, dfc) + ) + } or + deprecated LoadStep(TypeTrackerContent content) { + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicLoadStep(_, _, dfc) + ) + } or deprecated LoadStoreStep(TypeTrackerContent load, TypeTrackerContent store) { - basicLoadStoreStep(_, _, load, store) + exists(DataFlowPublic::AttributeContent dfcLoad, DataFlowPublic::AttributeContent dfcStore | + dfcLoad.getAttribute() = load and dfcStore.getAttribute() = store + | + basicLoadStoreStep(_, _, dfcLoad, dfcStore) + ) } or deprecated WithContent(ContentFilter filter) { basicWithContentStep(_, _, filter) } or deprecated WithoutContent(ContentFilter filter) { basicWithoutContentStep(_, _, filter) } or @@ -29,13 +42,13 @@ private module Cached { // Restrict `content` to those that might eventually match a load. // We can't rely on `basicStoreStep` since `startInContent` might be used with // a content that has no corresponding store. - exists(TypeTrackerContent loadContents | + exists(DataFlowPublic::AttributeContent loadContents | ( basicLoadStep(_, _, loadContents) or basicLoadStoreStep(_, _, loadContents, _) ) and - compatibleContents(content, loadContents) + compatibleContents(content, loadContents.getAttribute()) ) } @@ -45,13 +58,13 @@ private module Cached { content = noContent() or // As in MkTypeTracker, restrict `content` to those that might eventually match a store. - exists(TypeTrackerContent storeContent | + exists(DataFlowPublic::AttributeContent storeContent | ( basicStoreStep(_, _, storeContent) or basicLoadStoreStep(_, _, _, storeContent) ) and - compatibleContents(storeContent, content) + compatibleContents(storeContent.getAttribute(), content) ) } @@ -198,7 +211,10 @@ private module Cached { flowsToStoreStep(nodeFrom, nodeTo, content) and summary = StoreStep(content) or - basicLoadStep(nodeFrom, nodeTo, content) and summary = LoadStep(content) + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicLoadStep(nodeFrom, nodeTo, dfc) + ) and + summary = LoadStep(content) ) or exists(TypeTrackerContent loadContent, TypeTrackerContent storeContent | @@ -281,7 +297,12 @@ deprecated private predicate smallstepProj(Node nodeFrom, StepSummary summary) { deprecated private predicate flowsToStoreStep( Node nodeFrom, TypeTrackingNode nodeTo, TypeTrackerContent content ) { - exists(Node obj | nodeTo.flowsTo(obj) and basicStoreStep(nodeFrom, obj, content)) + exists(Node obj | + nodeTo.flowsTo(obj) and + exists(DataFlowPublic::AttributeContent dfc | dfc.getAttribute() = content | + basicStoreStep(nodeFrom, obj, dfc) + ) + ) } /** @@ -292,7 +313,12 @@ deprecated private predicate flowsToLoadStoreStep( TypeTrackerContent storeContent ) { exists(Node obj | - nodeTo.flowsTo(obj) and basicLoadStoreStep(nodeFrom, obj, loadContent, storeContent) + nodeTo.flowsTo(obj) and + exists(DataFlowPublic::AttributeContent loadDfc, DataFlowPublic::AttributeContent storeDfc | + loadDfc.getAttribute() = loadContent and storeDfc.getAttribute() = storeContent + | + basicLoadStoreStep(nodeFrom, obj, loadDfc, storeDfc) + ) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll index c31cfeb5331..11cce1446f7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll @@ -15,7 +15,7 @@ deprecated class OptionalTypeTrackerContent extends string { OptionalTypeTrackerContent() { this = "" or - this instanceof TypeTrackingImpl::TypeTrackingInput::Content + this = any(DataFlowPublic::AttributeContent dfc).getAttribute() } } From 6ffaad1bc8cfb0812549780d6547c8e37a2dcea9 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 12 Mar 2024 22:32:40 +0100 Subject: [PATCH 085/497] Python: Expand type-tracking tests with nested tuples I was initially surprised to see that this didn't work, until I remembered that type-tracking only works with content of depth 1. --- .../TypeTrackingConsistency.expected | 13 +++++++++++ .../dataflow/typetracking/content_test.py | 22 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..6fc4df91699 --- /dev/null +++ b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,13 @@ +unreachableNode +| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | +| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | +| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | +| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | +| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | +| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | +| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | +| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | +| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | +| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | +| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | +| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | diff --git a/python/ql/test/experimental/dataflow/typetracking/content_test.py b/python/ql/test/experimental/dataflow/typetracking/content_test.py index ac201f23301..1c52d659582 100644 --- a/python/ql/test/experimental/dataflow/typetracking/content_test.py +++ b/python/ql/test/experimental/dataflow/typetracking/content_test.py @@ -21,6 +21,28 @@ def test_tuple(index_arg): print(tup[i]) + # nested tuples + nested_tuples = ((tracked, other), (other, tracked)) # $tracked + + nested_tuples[0][0] # $ MISSING: tracked + nested_tuples[0][1] + nested_tuples[1][0] + nested_tuples[1][1] # $ MISSING: tracked + + (aa, ab), (ba, bb) = nested_tuples + aa # $ MISSING: tracked + ab + ba + bb # $ MISSING: tracked + + + # non-precise access is not supported right now (and it's not 100% clear if we want + # to support it, or if it will lead to bad results) + for (x, y) in nested_tuples: + x + y + + def test_dict(key_arg): d1 = {"t": tracked, "o": other} # $tracked d1["t"] # $ tracked From 7a3ee0f5f8145abe25b26a64415a43ed32b7016e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Mar 2024 16:41:42 +0100 Subject: [PATCH 086/497] Python: Make `IterableSequenceNode` LocalSourceNode We do this to remove the inconsistencies, and to be ready for a future where type-tracking support content tracker of depth > 1. It works because targets of loadSteps needs to be LocalSourceNodes predicate loadStep(Node nodeFrom, LocalSourceNode nodeTo, Content content) { --- .../python/dataflow/new/internal/LocalSources.qll | 2 ++ .../CONSISTENCY/TypeTrackingConsistency.expected | 13 ------------- 2 files changed, 2 insertions(+), 13 deletions(-) delete mode 100644 python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index 34b137b3511..92d9e5887ad 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -74,6 +74,8 @@ class LocalSourceNode extends Node { this instanceof ScopeEntryDefinitionNode or this instanceof ParameterNode + or + this instanceof IterableSequenceNode } /** Holds if this `LocalSourceNode` can flow to `nodeTo` in one or more local flow steps. */ diff --git a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index 6fc4df91699..00000000000 --- a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,13 +0,0 @@ -unreachableNode -| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | -| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | -| content_test.py:31:6:31:11 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | -| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | -| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | -| content_test.py:31:16:31:21 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | -| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | -| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | -| content_test.py:40:10:40:13 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | -| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 0. | -| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind load Tuple element at index 1. | -| content_test.py:66:9:66:12 | ControlFlowNode for Tuple | Unreachable node in step of kind storeTarget. | From 5b734c76b651241e0776faf1ffa46e8a01a125c1 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 5 Mar 2024 15:50:16 +0000 Subject: [PATCH 087/497] Add manual neutral models for java.util.Locale and its subclasses --- java/ql/lib/ext/java.util.model.yml | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 7ab6780b8f8..8f621df591e 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -451,7 +451,62 @@ extensions: - ["java.util", "List", "of", "()", "summary", "manual"] - ["java.util", "List", "sort", "(Comparator)", "summary", "manual"] - ["java.util", "List", "size", "()", "summary", "manual"] + - ["java.util", "Locale$Builder", "addUnicodeLocaleAttribute", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "build", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "clear", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "clearExtensions", "()", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "removeUnicodeLocaleAttribute", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setExtension", "(char,String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLanguage", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLanguageTag", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLocale", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setLocale", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setRegion", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setScript", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setUnicodeLocaleKeyword", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setVariant", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$Builder", "setVariant", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "LanguageRange", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "LanguageRange", "(String,double)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "getRange", "()", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "mapEquivalents", "(List,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "mapEquivalents", "(List,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String,Map)", "summary", "df-manual"] + - ["java.util", "Locale$LanguageRange", "parse", "(String,Map)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "Locale", "(String,String,String)", "summary", "df-manual"] + - ["java.util", "Locale", "filterTags", "(List,Collection)", "summary", "df-manual"] + - ["java.util", "Locale", "filterTags", "(List,Collection,Locale$FilteringMode)", "summary", "df-manual"] - ["java.util", "Locale", "forLanguageTag", "(String)", "summary", "manual"] + - ["java.util", "Locale", "getCountry", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayCountry", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayLanguage", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayName", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayScript", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getDisplayVariant", "(Locale)", "summary", "df-manual"] + - ["java.util", "Locale", "getExtensionKeys", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getISO3Language", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getLanguage", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getScript", "()", "summary", "df-manual"] + - ["java.util", "Locale", "getVariant", "()", "summary", "df-manual"] + - ["java.util", "Locale", "lookupTag", "(List,Collection)", "summary", "df-manual"] + - ["java.util", "Locale", "stripExtensions", "()", "summary", "df-manual"] + - ["java.util", "Locale", "toLanguageTag", "()", "summary", "df-manual"] - ["java.util", "Map", "containsKey", "(Object)", "summary", "manual"] - ["java.util", "Map", "isEmpty", "()", "summary", "manual"] - ["java.util", "Map", "size", "()", "summary", "manual"] From 2bd08838d47309e6dbae9db9000cf39ec94587d2 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 6 Mar 2024 14:31:00 +0000 Subject: [PATCH 088/497] Add manual neutral models for java.lang.ClassLoader --- java/ql/lib/ext/java.lang.model.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 0569b4c209c..fff3a90dcb3 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -185,8 +185,19 @@ extensions: - ["java.lang", "Class", "isAssignableFrom", "(Class)", "summary", "manual"] - ["java.lang", "Class", "isInstance", "(Object)", "summary", "manual"] - ["java.lang", "Class", "toString", "()", "summary", "manual"] + - ["java.lang", "ClassLoader", "findResource", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getDefinedPackage", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getDefinedPackage", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getName", "()", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getParent", "()", "summary", "df-manual"] - ["java.lang", "ClassLoader", "getResource", "(String)", "summary", "manual"] - ["java.lang", "ClassLoader", "getResourceAsStream", "(String)", "summary", "manual"] + - ["java.lang", "ClassLoader", "getSystemResource", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "getUnnamedModule", "()", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "loadClass", "(String)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "loadClass", "(String,boolean)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "setClassAssertionStatus", "(String,boolean)", "summary", "df-manual"] + - ["java.lang", "ClassLoader", "setPackageAssertionStatus", "(String,boolean)", "summary", "df-manual"] - ["java.lang", "Enum", "Enum", "(String,int)", "summary", "manual"] - ["java.lang", "Enum", "equals", "(Object)", "summary", "manual"] - ["java.lang", "Enum", "hashCode", "()", "summary", "manual"] From 00f2a6a65e76336e0cd926a1630dd0001ed3bd14 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 15 Mar 2024 10:14:45 +0100 Subject: [PATCH 089/497] Python: Update ssa-compute test expectations --- .../CONSISTENCY/TypeTrackingConsistency.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected index 81d19f3f20d..0e829fd207f 100644 --- a/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected +++ b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected @@ -1,6 +1,6 @@ unreachableNode -| test2.py:16:17:16:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | -| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind load attribute. | +| test2.py:16:17:16:17 | ControlFlowNode for y | Unreachable node in step of kind load Attribute bar. | +| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind load Attribute attribute. | | test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test2.py:26:17:26:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | +| test2.py:26:17:26:17 | ControlFlowNode for y | Unreachable node in step of kind load Attribute bar. | | test2.py:27:23:27:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | From 6babb2ff909d750c908ed3f2faadc8a5285fe81e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 15 Mar 2024 10:24:33 +0100 Subject: [PATCH 090/497] Python: Accept .expected for `typetracking-summaries` --- .../experimental/dataflow/typetracking-summaries/summaries.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py b/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py index e11f451b865..89b5e1756d5 100644 --- a/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py +++ b/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py @@ -41,8 +41,8 @@ tms = tainted_mapped_summary[0] tms # $ MISSING: tracked another_tainted_list = TTS_append_to_list([], tracked) # $ tracked -atl = another_tainted_list[0] -atl # $ MISSING: tracked +atl = another_tainted_list[0] # $ tracked +atl # $ tracked # This will not work, as the call is not found by `getACallSimple`. from json import loads as json_loads From 7eb4419342e08b9f537cd75e1db2e0f5693c55fe Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 15 Mar 2024 10:24:57 +0100 Subject: [PATCH 091/497] Python: Restrict type-tracking content to only be precise At least for now :) --- .../dataflow/new/internal/TypeTrackingImpl.qll | 16 +++++++++++++++- .../dataflow/typetracking-summaries/summaries.py | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 8b3e1a95ef1..ce95a6cca4e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -102,7 +102,21 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { class LocalSourceNode = DataFlowPublic::LocalSourceNode; - class Content = DataFlowPublic::Content; + class Content extends DataFlowPublic::Content { + Content() { + // TODO: for now, it's not 100% clear if should support non-precise content in + // type-tracking, or if it will lead to bad results. We start with only allowing + // precise content, which should always be a good improvement! It also simplifies + // the process of examining new results from non-precise content steps in the + // future, since you will _only_ have to look over the results from the new + // non-precise steps. + this instanceof DataFlowPublic::AttributeContent + or + this instanceof DataFlowPublic::DictionaryElementContent + or + this instanceof DataFlowPublic::TupleElementContent + } + } /** * A label to use for `WithContent` and `WithoutContent` steps, restricting diff --git a/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py b/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py index 89b5e1756d5..e11f451b865 100644 --- a/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py +++ b/python/ql/test/experimental/dataflow/typetracking-summaries/summaries.py @@ -41,8 +41,8 @@ tms = tainted_mapped_summary[0] tms # $ MISSING: tracked another_tainted_list = TTS_append_to_list([], tracked) # $ tracked -atl = another_tainted_list[0] # $ tracked -atl # $ tracked +atl = another_tainted_list[0] +atl # $ MISSING: tracked # This will not work, as the call is not found by `getACallSimple`. from json import loads as json_loads From 8e52483bebdc1916ceda98d18ace0654346cdd35 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 14 Mar 2024 21:29:59 +0000 Subject: [PATCH 092/497] Add df-manual models in manually modeled classes --- java/ql/lib/ext/java.io.model.yml | 2 ++ java/ql/lib/ext/java.lang.model.yml | 17 +++++++++-------- java/ql/lib/ext/java.util.model.yml | 12 ++++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 3824c588662..e8a14a13e51 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -78,11 +78,13 @@ extensions: - ["java.io", "File", True, "getCanonicalFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getCanonicalPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.io", "File", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.io", "File", True, "getParentFile", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toURI", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.io", "File", True, "toURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.io", "FilterOutputStream", True, "FilterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.io", "InputStream", True, "read", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "InputStream", True, "read", "(byte[])", "", "Argument[this]", "Argument[0]", "taint", "manual"] diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index fff3a90dcb3..92f0a7a0805 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -114,6 +114,7 @@ extensions: - ["java.lang", "String", False, "indent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "intern", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "join", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] + - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue.Element", "taint", "df-generated"] - ["java.lang", "String", False, "repeat", "(int)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[1]", "ReturnValue", "taint", "manual"] @@ -239,14 +240,14 @@ extensions: - ["java.lang", "Thread", "interrupt", "()", "summary", "manual"] - ["java.lang", "Thread", "sleep", "(long)", "summary", "manual"] - ["java.lang", "Thread", "start", "()", "summary", "manual"] - - ["java.lang", "Throwable", "addSuppressed", "(Throwable)", "summary", "manual"] - - ["java.lang", "Throwable", "fillInStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "getStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "getSuppressed", "()", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "manual"] - - ["java.lang", "Throwable", "printStackTrace", "(PrintWriter)", "summary", "manual"] - - ["java.lang", "Throwable", "setStackTrace", "(StackTraceElement[])", "summary", "manual"] + - ["java.lang", "Throwable", "addSuppressed", "(Throwable)", "summary", "df-manual"] + - ["java.lang", "Throwable", "fillInStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "getStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "getSuppressed", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "df-manual"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintWriter)", "summary", "df-manual"] + - ["java.lang", "Throwable", "setStackTrace", "(StackTraceElement[])", "summary", "df-manual"] # The below APIs have numeric flow and are currently being stored as neutral models. # These may be changed to summary models with kinds "value-numeric" and "taint-numeric" (or similar) in the future. - ["java.lang", "Double", "doubleToLongBits", "(double)", "summary", "manual"] # taint-numeric diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 8f621df591e..be4665d4cd7 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -58,6 +58,7 @@ extensions: - ["java.util", "Collection", True, "toArray", "", "", "Argument[this].Element", "Argument[0].ArrayElement", "value", "manual"] - ["java.util", "Collection", True, "toArray", "", "", "Argument[this].Element", "ReturnValue.ArrayElement", "value", "manual"] - ["java.util", "Collections", False, "addAll", "(Collection,Object[])", "", "Argument[1].ArrayElement", "Argument[0].Element", "value", "manual"] + - ["java.util", "Collections", False, "asLifoQueue", "(Deque)", "", "Argument[0].Element", "ReturnValue.Element", "value", "df-manual"] - ["java.util", "Collections", False, "checkedCollection", "(Collection,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedList", "(List,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedMap", "(Map,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] @@ -65,6 +66,7 @@ extensions: - ["java.util", "Collections", False, "checkedNavigableMap", "(NavigableMap,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] - ["java.util", "Collections", False, "checkedNavigableMap", "(NavigableMap,Class,Class)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "manual"] - ["java.util", "Collections", False, "checkedNavigableSet", "(NavigableSet,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["java.util", "Collections", False, "checkedQueue", "(Queue,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "df-manual"] - ["java.util", "Collections", False, "checkedSet", "(Set,Class)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["java.util", "Collections", False, "checkedSortedMap", "(SortedMap,Class,Class)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] - ["java.util", "Collections", False, "checkedSortedMap", "(SortedMap,Class,Class)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "manual"] @@ -309,6 +311,9 @@ extensions: - ["java.util", "Queue", True, "poll", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["java.util", "Queue", True, "remove", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["java.util", "ResourceBundle", True, "getString", "(String)", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] + - ["java.util", "Scanner", True, "findAll", "(Pattern)", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] + - ["java.util", "Scanner", True, "findAll", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["java.util", "Scanner", True, "match", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.util", "Scanner", True, "Scanner", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util", "Scanner", True, "findInLine", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.util", "Scanner", True, "findWithinHorizon", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -428,6 +433,8 @@ extensions: - ["java.util", "Collections", "emptyList", "()", "summary", "manual"] - ["java.util", "Collections", "emptyMap", "()", "summary", "manual"] - ["java.util", "Collections", "emptySet", "()", "summary", "manual"] + - ["java.util", "Collections", "newSetFromMap", "", "summary", "df-manual"] + - ["java.util", "Collections", "reverseOrder", "", "summary", "df-manual"] - ["java.util", "Collections", "sort", "", "summary", "manual"] - ["java.util", "Enumeration", "hasMoreElements", "()", "summary", "manual"] - ["java.util", "EnumSet", "allOf", "(Class)", "summary", "df-manual"] @@ -520,6 +527,11 @@ extensions: - ["java.util", "Optional", "isPresent", "()", "summary", "manual"] - ["java.util", "Random", "nextInt", "(int)", "summary", "manual"] - ["java.util", "ResourceBundle", "getBundle", "", "summary", "df-manual"] + - ["java.util", "Scanner", "delimiter", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNext", "(Pattern)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNext", "(String)", "summary", "df-generated"] + - ["java.util", "Scanner", "ioException", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "locale", "()", "summary", "df-generated"] - ["java.util", "Set", "contains", "(Object)", "summary", "manual"] - ["java.util", "Set", "isEmpty", "()", "summary", "manual"] - ["java.util", "Set", "size", "()", "summary", "manual"] From cfbc3f73ec47a7d8e69311f280019b926f5ffaab Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Mar 2024 15:13:39 +0100 Subject: [PATCH 093/497] Pyhton: add test for conflicting summaries We noticed that when - a function has more than one summary (with different charpred) - one summary is subsumed by a subpath (or something happens around the function being extracted) - the function is called multiple times(we needed at least three) one of the summaries would no longer lead to flow. --- .../summaries/InlineTaintTest.expected | 4 + .../dataflow/summaries/InlineTaintTest.ql | 4 + .../dataflow/summaries/TestSummaries.qll | 105 ++++++++++++++++++ .../summaries/conflicting_summaries.py | 18 +++ .../summaries/extracted_package/functions.py | 5 + 5 files changed, 136 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected create mode 100644 python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql create mode 100644 python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py create mode 100644 python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py diff --git a/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected new file mode 100644 index 00000000000..366de37b867 --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.expected @@ -0,0 +1,4 @@ +argumentToEnsureNotTaintedNotMarkedAsSpurious +untaintedArgumentToEnsureTaintedNotMarkedAsMissing +testFailures +failures diff --git a/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql new file mode 100644 index 00000000000..96cc5c3e31f --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/InlineTaintTest.ql @@ -0,0 +1,4 @@ +import python +import experimental.meta.InlineTaintTest +import MakeInlineTaintTest +import TestSummaries diff --git a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll index b2e29e9999e..534fac62491 100644 --- a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll @@ -136,3 +136,108 @@ private class SummarizedCallableJsonLoads extends SummarizedCallable { preservesValue = true } } + +// Repeated summaries +private class SummarizedCallableWithSubpath extends SummarizedCallable { + SummarizedCallableWithSubpath() { this = "extracted_package.functions.with_subpath" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue" and + preservesValue = false + } +} + +private class SummarizedCallableWithSubpathAgain extends SummarizedCallable { + SummarizedCallableWithSubpathAgain() { this = "extracted_package.functions.with_subpathII" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("with_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue.Attribute[pattern]" and + preservesValue = true + } +} + +private class SummarizedCallableWithoutSubpath extends SummarizedCallable { + SummarizedCallableWithoutSubpath() { this = "extracted_package.functions.without_subpath" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue" and + preservesValue = false + } +} + +private class SummarizedCallableWithoutSubpathAgain extends SummarizedCallable { + SummarizedCallableWithoutSubpathAgain() { this = "extracted_package.functions.without_subpathII" } + + override DataFlow::CallCfgNode getACall() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getACall() + } + + override DataFlow::ArgumentNode getACallback() { + result = + API::moduleImport("extracted_package") + .getMember("functions") + .getMember("without_subpath") + .getAValueReachableFromSource() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = "ReturnValue.Attribute[pattern]" and + preservesValue = true + } +} diff --git a/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py new file mode 100644 index 00000000000..9528e9cdafc --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py @@ -0,0 +1,18 @@ +# Bad interaction of two summaries for the same function +ts = TAINTED_STRING + +from extracted_package.functions import with_subpath, without_subpath + +# For the function `with_subpath`, flow from the first argument to the return value +# can be concluded from its definition. This seems to discard all summaries, including +# the one with flow to `ReturnValue.Attribute[pattern]`. +ensure_tainted( + with_subpath(ts).pattern, # $ MISSING: tainted + with_subpath(ts), # $ tainted + with_subpath(ts), # $ tainted +) +ensure_tainted( + without_subpath(ts).pattern, # $ tainted + without_subpath(ts), # $ tainted + without_subpath(ts), # $ tainted +) \ No newline at end of file diff --git a/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py b/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py new file mode 100644 index 00000000000..f4780be20a3 --- /dev/null +++ b/python/ql/test/experimental/dataflow/summaries/extracted_package/functions.py @@ -0,0 +1,5 @@ +def with_subpath(x): + return x + +def without_subpath(x): + pass \ No newline at end of file From 55f7369df0d44893dd4cd4d843b7e740cc764854 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Fri, 15 Mar 2024 14:06:36 -0400 Subject: [PATCH 094/497] Java: performance fix --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index b8cc6821abf..464a125ef75 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -26,10 +26,15 @@ private class DefaultUrlForwardSink extends UrlForwardSink { private class SpringUrlForwardPrefixSink extends UrlForwardSink { SpringUrlForwardPrefixSink() { any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and - this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() + appendedToForwardPrefix(this) } } +pragma[nomagic] +private predicate appendedToForwardPrefix(DataFlow::ExprNode exprNode) { + exists(ForwardPrefix fp | exprNode.asExpr() = fp.getAnAppendedExpression()) +} + private class ForwardPrefix extends InterestingPrefix { ForwardPrefix() { this.getStringValue() = "forward:" } From fc367042efdba093a21e8d37ac3df1062c93c83f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 15 Mar 2024 23:19:25 +0000 Subject: [PATCH 095/497] Fix df-manual model with wrong parameter type --- java/ql/lib/ext/java.nio.file.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index fc0648c85aa..8f8db20a0c0 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -91,7 +91,7 @@ extensions: data: # summary neutrals - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] - - ["java.nio.file", "Files", "newInputStream", "(Path,LinkOption[])", "summary", "df-manual"] + - ["java.nio.file", "Files", "newInputStream", "(Path,OpenOption[])", "summary", "df-manual"] # sink neutrals - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] From 23a58a0835f096e8abba75247203235190ff2963 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 15 Mar 2024 23:21:29 +0000 Subject: [PATCH 096/497] Add df-manual models related to existing df-manual models --- java/ql/lib/ext/java.io.model.yml | 1 + java/ql/lib/ext/java.net.model.yml | 1 + java/ql/lib/ext/javax.crypto.spec.model.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index e8a14a13e51..1cbbf456779 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -120,6 +120,7 @@ extensions: - ["java.io", "File", "listFiles", "", "summary", "df-manual"] - ["java.io", "File", "mkdirs", "()", "summary", "manual"] - ["java.io", "FileInputStream", "FileInputStream", "(File)", "summary", "manual"] + - ["java.io", "FileInputStream", "FileInputStream", "(FileDescriptor)", "summary", "df-manual"] - ["java.io", "FileInputStream", "FileInputStream", "(String)", "summary", "df-manual"] - ["java.io", "InputStream", "close", "()", "summary", "manual"] - ["java.io", "ObjectInput", "readObject", "()", "summary", "df-manual"] # this is a deserialization sink modeled in regular CodeQL diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 19044ec7a40..5884c60e4e7 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -67,4 +67,5 @@ extensions: data: # summary neutrals - ["java.net", "Socket", "getOutputStream", "()", "summary", "df-manual"] + - ["java.net", "Socket", "connect", "(SocketAddress)", "summary", "df-manual"] - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/javax.crypto.spec.model.yml b/java/ql/lib/ext/javax.crypto.spec.model.yml index 2a88b6275fd..d2b7dbc99b8 100644 --- a/java/ql/lib/ext/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/javax.crypto.spec.model.yml @@ -31,3 +31,4 @@ extensions: extensible: neutralModel data: - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],String)", "summary", "df-manual"] + - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],int,int,String)", "summary", "df-manual"] From 658fffeac1acaf6e3b823635efd27df7f611584f Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 17 Mar 2024 22:03:59 -0400 Subject: [PATCH 097/497] Java: remove experimental files --- ...ndertow.server.handlers.resource.model.yml | 8 - .../jakarta.servlet.http.model.yml | 6 - .../ext/experimental/java.nio.file.model.yml | 10 -- .../java.util.concurrent.model.yml | 1 - .../experimental/javax.servlet.http.model.yml | 6 - .../org.springframework.core.io.model.yml | 16 -- .../CWE/CWE-552/UnsafeLoadSpringResource.java | 21 --- .../CWE/CWE-552/UnsafeResourceGet.java | 18 -- .../CWE-552/UnsafeServletRequestDispatch.java | 11 -- .../CWE/CWE-552/UnsafeUrlForward.java | 38 ---- .../CWE/CWE-552/UnsafeUrlForward.qhelp | 70 -------- .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 64 ------- .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 163 ------------------ 13 files changed, 432 deletions(-) delete mode 100644 java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml delete mode 100644 java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml delete mode 100644 java/ql/lib/ext/experimental/java.nio.file.model.yml delete mode 100644 java/ql/lib/ext/experimental/org.springframework.core.io.model.yml delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql delete mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll diff --git a/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml b/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml deleted file mode 100644 index 5c86c75522c..00000000000 --- a/java/ql/lib/ext/experimental/io.undertow.server.handlers.resource.model.yml +++ /dev/null @@ -1,8 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["io.undertow.server.handlers.resource", "Resource", True, "getFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getFilePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["io.undertow.server.handlers.resource", "Resource", True, "getPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml b/java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml deleted file mode 100644 index 9500beba15b..00000000000 --- a/java/ql/lib/ext/experimental/jakarta.servlet.http.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSourceModel - data: - - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/java.nio.file.model.yml b/java/ql/lib/ext/experimental/java.nio.file.model.yml deleted file mode 100644 index 647d72329d0..00000000000 --- a/java/ql/lib/ext/experimental/java.nio.file.model.yml +++ /dev/null @@ -1,10 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["java.nio.file", "Paths", True, "get", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/java.util.concurrent.model.yml b/java/ql/lib/ext/experimental/java.util.concurrent.model.yml index 82ff0a00570..9484a5f5eb9 100644 --- a/java/ql/lib/ext/experimental/java.util.concurrent.model.yml +++ b/java/ql/lib/ext/experimental/java.util.concurrent.model.yml @@ -4,4 +4,3 @@ extensions: extensible: experimentalSinkModel data: - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual", "thread-resource-abuse"] - - ["java.util.concurrent", "TimeUnit", True, "sleep", "", "", "Argument[0]", "thread-pause", "manual", "unsafe-url-forward"] diff --git a/java/ql/lib/ext/experimental/javax.servlet.http.model.yml b/java/ql/lib/ext/experimental/javax.servlet.http.model.yml index db140149a99..04681b300ca 100644 --- a/java/ql/lib/ext/experimental/javax.servlet.http.model.yml +++ b/java/ql/lib/ext/experimental/javax.servlet.http.model.yml @@ -1,9 +1,4 @@ extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSourceModel - data: - - ["javax.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual", "unsafe-url-forward"] - addsTo: pack: codeql/java-all extensible: experimentalSourceModel @@ -13,4 +8,3 @@ extensions: - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - ["javax.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - ["javax.servlet.http", "HttpServletRequest", False, "getServletPath", "()", "", "ReturnValue", "uri-path", "manual", "permissive-dot-regex-query"] - diff --git a/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml b/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml deleted file mode 100644 index e929260f21b..00000000000 --- a/java/ql/lib/ext/experimental/org.springframework.core.io.model.yml +++ /dev/null @@ -1,16 +0,0 @@ -extensions: - - addsTo: - pack: codeql/java-all - extensible: experimentalSinkModel - data: - - ["org.springframework.core.io", "ClassPathResource", True, "getFilename", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "getPath", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "getURL", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ClassPathResource", True, "resolveURL", "", "", "Argument[this]", "get-resource", "manual", "unsafe-url-forward"] - - addsTo: - pack: codeql/java-all - extensible: experimentalSummaryModel - data: - - ["org.springframework.core.io", "ClassPathResource", False, "ClassPathResource", "", "", "Argument[0]", "Argument[this]", "taint", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "Resource", True, "createRelative", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] - - ["org.springframework.core.io", "ResourceLoader", True, "getResource", "", "", "Argument[0]", "ReturnValue", "taint", "manual", "unsafe-url-forward"] diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index ce462fe490e..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,21 +0,0 @@ -//BAD: no path validation in Spring resource loading -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); -} - -//GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix in Spring resource loading: -@GetMapping("/file") -public String getFileContent(@RequestParam(name="fileName") String fileName) { - if (!fileName.contains("..") && fileName.hasPrefix("/public-content")) { - ClassPathResource clr = new ClassPathResource(fileName); - - File file = ResourceUtils.getFile(fileName); - - Resource resource = resourceLoader.getResource(fileName); - } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 8b3583bf59e..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,18 +0,0 @@ -// BAD: no URI validation -URL url = request.getServletContext().getResource(requestUrl); -url = getClass().getResource(requestUrl); -InputStream in = url.openStream(); - -InputStream in = request.getServletContext().getResourceAsStream(requestPath); -in = getClass().getClassLoader().getResourceAsStream(requestPath); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); -} - -Path path = Paths.get(requestUrl).normalize().toRealPath(); -if (path.startsWith("/trusted")) { - URL url = request.getServletContext().getResource(path.toString()); -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index 88a794ab9c6..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,11 +0,0 @@ -// BAD: no URI validation -String returnURL = request.getParameter("returnURL"); -RequestDispatcher rd = sc.getRequestDispatcher(returnURL); -rd.forward(request, response); - -// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: -// (alternatively use `Path.normalize` instead of checking for `..`) -if (!returnURL.contains("..") && returnURL.hasPrefix("/pages")) { ... } -// Also GOOD: check for a forbidden prefix, ensuring URL-encoding is not used to evade the check: -// (alternatively use `URLDecoder.decode` before `hasPrefix`) -if (returnURL.hasPrefix("/internal") && !returnURL.contains("%")) { ... } \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java deleted file mode 100644 index d159c405736..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.java +++ /dev/null @@ -1,38 +0,0 @@ -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; - -@Controller -public class UnsafeUrlForward { - - @GetMapping("/bad1") - public ModelAndView bad1(String url) { - return new ModelAndView(url); - } - - @GetMapping("/bad2") - public void bad2(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/good1") - public void good1(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp deleted file mode 100644 index 2e425952edc..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -

    Constructing a server-side redirect path with user input could allow an attacker to download application binaries -(including application classes or jar files) or view arbitrary files within protected directories.

    - -
    - - -

    Unsanitized user provided data must not be used to construct the path for URL forwarding. In order to prevent -untrusted URL forwarding, it is recommended to avoid concatenating user input directly into the forwarding URL. -Instead, user input should be checked against allowed (e.g., must come within user_content/) or disallowed -(e.g. must not come within /internal) paths, ensuring that neither path traversal using ../ -or URL encoding are used to evade these checks. -

    - -
    - - -

    The following examples show the bad case and the good case respectively. -The bad methods show an HTTP request parameter being used directly in a URL forward -without validating the input, which may cause file leakage. In the good1 method, -ordinary forwarding requests are shown, which will not cause file leakage. -

    - - - -

    The following examples show an HTTP request parameter or request path being used directly in a -request dispatcher of Java EE without validating the input, which allows sensitive file exposure -attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter or request path being used directly to -retrieve a resource of a Java EE application without validating the input, which allows sensitive -file exposure attacks. It also shows how to remedy the problem by validating the user input. -

    - - - -

    The following examples show an HTTP request parameter being used directly to retrieve a resource - of a Java Spring application without validating the input, which allows sensitive file exposure - attacks. It also shows how to remedy the problem by validating the user input. -

    - - -
    - -
  • File Disclosure: - Unsafe Url Forward. -
  • -
  • Jakarta Javadoc: - Security vulnerability with unsafe usage of RequestDispatcher. -
  • -
  • Micro Focus: - File Disclosure: J2EE -
  • -
  • CVE-2015-5174: - Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext getResource/getResourceAsStream/getResourcePaths Path Traversal -
  • -
  • CVE-2019-3799: - CVE-2019-3799 - Spring-Cloud-Config-Server Directory Traversal < 2.1.2, 2.0.4, 1.4.6 -
  • -
    -
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql deleted file mode 100644 index 15dd04a0a76..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @name Unsafe URL forward, dispatch, or load from remote source - * @description URL forward, dispatch, or load based on unvalidated user-input - * may cause file information disclosure. - * @kind path-problem - * @problem.severity error - * @precision high - * @id java/unsafe-url-forward-dispatch-load - * @tags security - * experimental - * external/cwe/cwe-552 - */ - -import java -import UnsafeUrlForward -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.dataflow.TaintTracking -import experimental.semmle.code.java.frameworks.Jsf -import semmle.code.java.security.PathSanitizer -import UnsafeUrlForwardFlow::PathGraph - -module UnsafeUrlForwardFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof ThreatModelFlowSource and - not exists(MethodCall ma, Method m | ma.getMethod() = m | - ( - m instanceof HttpServletRequestGetRequestUriMethod or - m instanceof HttpServletRequestGetRequestUrlMethod or - m instanceof HttpServletRequestGetPathMethod - ) and - ma = source.asExpr() - ) - } - - predicate isSink(DataFlow::Node sink) { sink instanceof UnsafeUrlForwardSink } - - predicate isBarrier(DataFlow::Node node) { - node instanceof UnsafeUrlForwardSanitizer or - node instanceof PathInjectionSanitizer - } - - DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } - - predicate isAdditionalFlowStep(DataFlow::Node prev, DataFlow::Node succ) { - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceMethod or - ma.getMethod() instanceof GetFacesResourceMethod or - ma.getMethod() instanceof GetClassResourceMethod or - ma.getMethod() instanceof GetClassLoaderResourceMethod or - ma.getMethod() instanceof GetWildflyResourceMethod - ) and - ma.getArgument(0) = prev.asExpr() and - ma = succ.asExpr() - ) - } -} - -module UnsafeUrlForwardFlow = TaintTracking::Global; - -from UnsafeUrlForwardFlow::PathNode source, UnsafeUrlForwardFlow::PathNode sink -where UnsafeUrlForwardFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "Potentially untrusted URL forward due to $@.", - source.getNode(), "user-provided value" diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll deleted file mode 100644 index 1baec2dd1fa..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ /dev/null @@ -1,163 +0,0 @@ -import java -private import experimental.semmle.code.java.frameworks.Jsf -private import semmle.code.java.dataflow.ExternalFlow -private import semmle.code.java.dataflow.FlowSources -private import semmle.code.java.dataflow.StringPrefixes -private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions -private import experimental.semmle.code.java.frameworks.SpringResource -private import semmle.code.java.security.Sanitizers - -private class ActiveModels extends ActiveExperimentalModels { - ActiveModels() { this = "unsafe-url-forward" } -} - -/** A sink for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSink extends DataFlow::Node { } - -/** A sanitizer for unsafe URL forward vulnerabilities. */ -abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { } - -/** An argument to `getRequestDispatcher`. */ -private class RequestDispatcherSink extends UnsafeUrlForwardSink { - RequestDispatcherSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetRequestDispatcherMethod and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** The `getResource` method of `Class`. */ -class GetClassResourceMethod extends Method { - GetClassResourceMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `Class`. */ -class GetClassResourceAsStreamMethod extends Method { - GetClassResourceAsStreamMethod() { - this.getDeclaringType() instanceof TypeClass and - this.hasName("getResourceAsStream") - } -} - -/** The `getResource` method of `ClassLoader`. */ -class GetClassLoaderResourceMethod extends Method { - GetClassLoaderResourceMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResource") - } -} - -/** The `getResourceAsStream` method of `ClassLoader`. */ -class GetClassLoaderResourceAsStreamMethod extends Method { - GetClassLoaderResourceAsStreamMethod() { - this.getDeclaringType() instanceof ClassLoaderClass and - this.hasName("getResourceAsStream") - } -} - -/** The JBoss class `FileResourceManager`. */ -class FileResourceManager extends RefType { - FileResourceManager() { - this.hasQualifiedName("io.undertow.server.handlers.resource", "FileResourceManager") - } -} - -/** The JBoss method `getResource` of `FileResourceManager`. */ -class GetWildflyResourceMethod extends Method { - GetWildflyResourceMethod() { - this.getDeclaringType().getASupertype*() instanceof FileResourceManager and - this.hasName("getResource") - } -} - -/** The JBoss class `VirtualFile`. */ -class VirtualFile extends RefType { - VirtualFile() { this.hasQualifiedName("org.jboss.vfs", "VirtualFile") } -} - -/** The JBoss method `getChild` of `FileResourceManager`. */ -class GetVirtualFileChildMethod extends Method { - GetVirtualFileChildMethod() { - this.getDeclaringType().getASupertype*() instanceof VirtualFile and - this.hasName("getChild") - } -} - -/** An argument to `getResource()` or `getResourceAsStream()`. */ -private class GetResourceSink extends UnsafeUrlForwardSink { - GetResourceSink() { - sinkNode(this, "request-forgery") - or - sinkNode(this, "get-resource") - or - exists(MethodCall ma | - ( - ma.getMethod() instanceof GetServletResourceAsStreamMethod or - ma.getMethod() instanceof GetFacesResourceAsStreamMethod or - ma.getMethod() instanceof GetClassResourceAsStreamMethod or - ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or - ma.getMethod() instanceof GetVirtualFileChildMethod - ) and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** A sink for methods that load Spring resources. */ -private class SpringResourceSink extends UnsafeUrlForwardSink { - SpringResourceSink() { - exists(MethodCall ma | - ma.getMethod() instanceof GetResourceUtilsMethod and - ma.getArgument(0) = this.asExpr() - ) - } -} - -/** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ -private class SpringModelAndViewSink extends UnsafeUrlForwardSink { - SpringModelAndViewSink() { - exists(ClassInstanceExpr cie | - cie.getConstructedType() instanceof ModelAndView and - cie.getArgument(0) = this.asExpr() - ) - or - exists(SpringModelAndViewSetViewNameCall smavsvnc | smavsvnc.getArgument(0) = this.asExpr()) - } -} - -private class PrimitiveSanitizer extends UnsafeUrlForwardSanitizer instanceof SimpleTypeSanitizer { -} - -private class SanitizingPrefix extends InterestingPrefix { - SanitizingPrefix() { - not this.getStringValue().matches("/WEB-INF/%") and - not this.getStringValue() = "forward:" - } - - override int getOffset() { result = 0 } -} - -private class FollowsSanitizingPrefix extends UnsafeUrlForwardSanitizer { - FollowsSanitizingPrefix() { this.asExpr() = any(SanitizingPrefix fp).getAnAppendedExpression() } -} - -private class ForwardPrefix extends InterestingPrefix { - ForwardPrefix() { this.getStringValue() = "forward:" } - - override int getOffset() { result = 0 } -} - -/** - * An expression appended (perhaps indirectly) to `"forward:"`, and which - * is reachable from a Spring entry point. - */ -private class SpringUrlForwardSink extends UnsafeUrlForwardSink { - SpringUrlForwardSink() { - any(SpringRequestMappingMethod sqmm).polyCalls*(this.getEnclosingCallable()) and - this.asExpr() = any(ForwardPrefix fp).getAnAppendedExpression() - } -} From a8eb1d10f646c0928dfb97b29d7fe418aadb8bab Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Sun, 17 Mar 2024 22:35:27 -0400 Subject: [PATCH 098/497] Java: remove experimental tests --- .../CWE-552/UnsafeLoadSpringResource.java | 155 ---------- .../security/CWE-552/UnsafeRequestPath.java | 52 ---- .../security/CWE-552/UnsafeResourceGet.java | 270 ------------------ .../security/CWE-552/UnsafeResourceGet2.java | 58 ---- .../CWE-552/UnsafeServletRequestDispatch.java | 131 --------- .../CWE-552/UnsafeUrlForward.expected | 129 --------- .../security/CWE-552/UnsafeUrlForward.java | 78 ----- .../security/CWE-552/UnsafeUrlForward.qlref | 1 - .../query-tests/security/CWE-552/options | 1 - 9 files changed, 875 deletions(-) delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref delete mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/options diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java deleted file mode 100644 index c7e114aede3..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeLoadSpringResource.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.example; - -import java.io.File; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.io.IOException; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.nio.file.Files; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; -import org.springframework.util.ResourceUtils; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -/** Sample class of Spring RestController */ -@RestController -public class UnsafeLoadSpringResource { - @GetMapping("/file1") - //BAD: Get resource from ClassPathResource without input validation - public String getFileContent1(@RequestParam(name="fileName") String fileName) { - // A request such as the following can disclose source code and application configuration - // fileName=/../../WEB-INF/views/page.jsp - // fileName=/com/example/package/SampleController.class - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new FileReader(clr.getFilename()); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - return out.toString(); - } - - @GetMapping("/file1a") - //GOOD: Get resource from ClassPathResource with input path validation - public String getFileContent1a(@RequestParam(name="fileName") String fileName) { - String result = null; - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - ClassPathResource clr = new ClassPathResource(fileName); - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - try { - Reader in = new InputStreamReader(clr.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - } catch (IOException ie) { - ie.printStackTrace(); - } - result = out.toString(); - } - return result; - } - - @GetMapping("/file2") - //BAD: Get resource from ResourceUtils without input validation - public String getFileContent2(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/etc/hosts - // fileName=file:/etc/hosts - // fileName=/opt/appdir/WEB-INF/views/page.jsp - File file = ResourceUtils.getFile(fileName); - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file2a") - //GOOD: Get resource from ResourceUtils with input path validation - public String getFileContent2a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - File file = ResourceUtils.getFile(fileName); - //Read File Content - content = new String(Files.readAllBytes(file.toPath())); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } - - @Autowired - ResourceLoader resourceLoader; - - @GetMapping("/file3") - //BAD: Get resource from ResourceLoader (same as application context) without input validation - // Note it is not detected without the generic `resource.getInputStream()` check - public String getFileContent3(@RequestParam(name="fileName") String fileName) { - String content = null; - - try { - // A request such as the following can disclose source code and system configuration - // fileName=/WEB-INF/views/page.jsp - // fileName=/WEB-INF/classes/com/example/package/SampleController.class - // fileName=file:/etc/hosts - Resource resource = resourceLoader.getResource(fileName); - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - return content; - } - - @GetMapping("/file3a") - //GOOD: Get resource from ResourceLoader (same as application context) with input path validation - public String getFileContent3a(@RequestParam(name="fileName") String fileName) { - String content = null; - - if (fileName.startsWith("/safe_dir") && !fileName.contains("..")) { - try { - Resource resource = resourceLoader.getResource(fileName); - - char[] buffer = new char[4096]; - StringBuilder out = new StringBuilder(); - - Reader in = new InputStreamReader(resource.getInputStream(), "UTF-8"); - for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { - out.append(buffer, 0, numRead); - } - content = out.toString(); - } catch (IOException ie) { - ie.printStackTrace(); - } - } - return content; - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java deleted file mode 100644 index 2de0cae0d3c..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeRequestPath.java +++ /dev/null @@ -1,52 +0,0 @@ -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -// @WebFilter("/*") -public class UnsafeRequestPath implements Filter { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher from servlet path without check - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check - if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with check - public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } - - // GOOD: Request dispatcher from servlet path with whitelisted string comparison - public void doFilter3(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); - - if (path.equals("/comaction")) { - request.getRequestDispatcher(path).forward(request, response); - } else { - chain.doFilter(request, response); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java deleted file mode 100644 index 64c23334f18..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.example; - -import java.io.InputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.net.URI; -import java.net.URL; -import java.net.URISyntaxException; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletOutputStream; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -import io.undertow.server.handlers.resource.FileResourceManager; -import io.undertow.server.handlers.resource.Resource; -import org.jboss.vfs.VFS; -import org.jboss.vfs.VirtualFile; - -public class UnsafeResourceGet extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: getResource constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `ServletContext` with input validation - protected void doGetGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = sc.getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // GOOD: getResource constructed from `ServletContext` with null check only - protected void doGetGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - PrintWriter writer = response.getWriter(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - URL url = sc.getResource(requestUrl); - if (url == null) { - writer.println("Requested source not found"); - } - } - - // GOOD: getResource constructed from `ServletContext` with `equals` check - protected void doGetGood3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - ServletContext sc = request.getServletContext(); - - if (requestUrl.equals("/public/crossdomain.xml")) { - URL url = sc.getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ServletContext` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file - InputStream in = request.getServletContext().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ServletContext` with input validation - protected void doPostGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = request.getServletContext().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResource constructed from `Class` without input validation - protected void doHead(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory - URL url = getClass().getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResource constructed from `Class` with input validation - protected void doHeadGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - Path path = Paths.get(requestUrl).normalize().toRealPath(); - if (path.startsWith(BASE_PATH)) { - URL url = getClass().getResource(path.toString()); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - @Override - // BAD: getResourceAsStream constructed from `ClassLoader` without input validation - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // GOOD: getResourceAsStream constructed from `ClassLoader` with input validation - protected void doPutGood(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - ServletOutputStream out = response.getOutputStream(); - - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { - InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - } - - // BAD: getResource constructed from `ClassLoader` without input validation - protected void doPutBad(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestUrl = request.getParameter("requestURL"); - ServletOutputStream out = response.getOutputStream(); - - // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file - // Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory - URL url = getClass().getClassLoader().getResource(requestUrl); - - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); - } - } - - // BAD: getResource constructed using Undertow IO without input validation - protected void doPutBad2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - // Do file operations - overlay.getChild(rs.getPath()); - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } - - // GOOD: getResource constructed using Undertow IO with input validation - protected void doPutGood2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String requestPath = request.getParameter("requestPath"); - - try { - FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile()); - Resource rs = rm.getResource(requestPath); - - VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/")); - String path = rs.getPath(); - if (path.startsWith("/trusted_path") && !path.contains("..")) { - // Do file operations - overlay.getChild(path); - } - } catch (URISyntaxException ue) { - throw new IOException("Cannot parse the URI"); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java deleted file mode 100644 index b3d041d024c..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example; - -import javax.faces.context.FacesContext; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.IOException; -import java.net.URL; -import java.util.Map; - -/** Sample class of JSF managed bean */ -public class UnsafeResourceGet2 { - // BAD: getResourceAsStream constructed from `ExternalContext` without input validation - public String parameterActionBad1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl)); - BufferedReader br = new BufferedReader(isr); - if(br.ready()) { - //Do Stuff - return "result"; - } - - return "home"; - } - - // BAD: getResource constructed from `ExternalContext` without input validation - public String parameterActionBad2() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); - //Do Stuff - return "result"; - } - - // GOOD: getResource constructed from `ExternalContext` with input validation - public String parameterActionGood1() throws IOException { - FacesContext fc = FacesContext.getCurrentInstance(); - Map params = fc.getExternalContext().getRequestParameterMap(); - String loadUrl = params.get("loadUrl"); - - if (loadUrl.equals("/public/crossdomain.xml")) { - URL url = fc.getExternalContext().getResource(loadUrl); - - InputStream in = url.openStream(); - //Do Stuff - return "result"; - } - - return "home"; - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java deleted file mode 100644 index ee63939b209..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeServletRequestDispatch.java +++ /dev/null @@ -1,131 +0,0 @@ -import java.io.IOException; -import java.net.URLDecoder; -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -public class UnsafeServletRequestDispatch extends HttpServlet { - private static final String BASE_PATH = "/pages"; - - @Override - // BAD: Request dispatcher constructed from `ServletContext` without input validation - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - ServletConfig cfg = getServletConfig(); - if (action.equals("Login")) { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); - rd.forward(request, response); - } - } - - @Override - // BAD: Request dispatcher constructed from `HttpServletRequest` without input validation - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); - rd.forward(request, response); - } - } - - @Override - // GOOD: Request dispatcher with a whitelisted URI - protected void doPut(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String action = request.getParameter("action"); - - if (action.equals("Login")) { - RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); - rd.forward(request, response); - } else if (action.equals("Register")) { - RequestDispatcher rd = request.getRequestDispatcher("/Register.jsp"); - rd.forward(request, response); - } - } - - // BAD: Request dispatcher without path traversal check - protected void doHead2(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check - // The payload "/pages/welcome.jsp/../../%57EB-INF/web.xml" can bypass the check as well since RequestDispatcher will decode `%57` as `W` - if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } - - // GOOD: Request dispatcher with path traversal check - protected void doHead3(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - - if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } - - // GOOD: Request dispatcher with path normalization and comparison - protected void doHead4(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - // /pages/welcome.jsp/../../WEB-INF/web.xml becomes /WEB-INF/web.xml - // /pages/welcome.jsp/../../%57EB-INF/web.xml becomes /%57EB-INF/web.xml - if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); - } - } - - // FN: Request dispatcher with negation check and path normalization, but without URL decoding - // When promoting this query, consider using FlowStates to make `getRequestDispatcher` a sink - // only if a URL-decoding step has NOT been crossed (i.e. make URLDecoder.decode change the - // state to a different value than the one required at the sink). - protected void doHead5(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); - - if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); - } - } - - // GOOD: Request dispatcher with path traversal check and URL decoding - protected void doHead6(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - String path = request.getParameter("path"); - boolean hasEncoding = path.contains("%"); - while (hasEncoding) { - path = URLDecoder.decode(path, "UTF-8"); - hasEncoding = path.contains("%"); - } - - if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected deleted file mode 100644 index 545471868e7..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ /dev/null @@ -1,129 +0,0 @@ -edges -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | provenance | | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | UnsafeLoadSpringResource.java:35:31:35:33 | clr | provenance | | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | provenance | | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | provenance | | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | provenance | | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | provenance | | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | provenance | | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | provenance | | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | provenance | | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | provenance | | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | provenance | | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | provenance | | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | UnsafeResourceGet2.java:37:20:37:22 | url | provenance | | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | UnsafeResourceGet.java:41:20:41:22 | url | provenance | | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | provenance | | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | UnsafeResourceGet.java:150:20:150:22 | url | provenance | | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | provenance | | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | provenance | | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | UnsafeResourceGet.java:226:20:226:22 | url | provenance | | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | provenance | | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:241:33:241:43 | requestPath : String | provenance | | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | UnsafeResourceGet.java:245:21:245:22 | rs : Resource | provenance | | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | provenance | | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | provenance | | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | provenance | | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | provenance | | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | provenance | | -| UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | provenance | | -| UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | provenance | | -| UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | provenance | | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | provenance | | -| UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | provenance | | -| UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | provenance | | -| UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | provenance | | -| UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | provenance | | -nodes -| UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:31:27:31:57 | new ClassPathResource(...) : ClassPathResource | semmle.label | new ClassPathResource(...) : ClassPathResource | -| UnsafeLoadSpringResource.java:31:49:31:56 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | semmle.label | clr | -| UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | semmle.label | fileName | -| UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | semmle.label | fileName : String | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | semmle.label | fileName | -| UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | -| UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | -| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl | -| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | semmle.label | get(...) : String | -| UnsafeResourceGet2.java:35:13:35:56 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet2.java:35:49:35:55 | loadUrl : String | semmle.label | loadUrl : String | -| UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url | -| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:39:13:39:38 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:39:28:39:37 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url | -| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:148:13:148:46 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:148:36:148:45 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:150:20:150:22 | url | semmle.label | url | -| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:224:13:224:63 | getResource(...) : URL | semmle.label | getResource(...) : URL | -| UnsafeResourceGet.java:224:53:224:62 | requestUrl : String | semmle.label | requestUrl : String | -| UnsafeResourceGet.java:226:20:226:22 | url | semmle.label | url | -| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:241:18:241:44 | getResource(...) : Resource | semmle.label | getResource(...) : Resource | -| UnsafeResourceGet.java:241:33:241:43 | requestPath : String | semmle.label | requestPath : String | -| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | semmle.label | rs : Resource | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | semmle.label | getPath(...) | -| UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL | -| UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path | -| UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url | -| UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:20:28:20:30 | url | semmle.label | url | -| UnsafeUrlForward.java:25:21:25:30 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:26:23:26:25 | url | semmle.label | url | -| UnsafeUrlForward.java:30:27:30:36 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:31:61:31:63 | url | semmle.label | url | -| UnsafeUrlForward.java:36:19:36:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:38:33:38:35 | url | semmle.label | url | -| UnsafeUrlForward.java:47:19:47:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | semmle.label | ... + ... | -| UnsafeUrlForward.java:58:19:58:28 | url : String | semmle.label | url : String | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | semmle.label | ... + ... | -subpaths -#select -| UnsafeLoadSpringResource.java:35:31:35:33 | clr | UnsafeLoadSpringResource.java:27:32:27:77 | fileName : String | UnsafeLoadSpringResource.java:35:31:35:33 | clr | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:27:32:27:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:76:38:76:45 | fileName | UnsafeLoadSpringResource.java:68:32:68:77 | fileName : String | UnsafeLoadSpringResource.java:76:38:76:45 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:68:32:68:77 | fileName | user-provided value | -| UnsafeLoadSpringResource.java:116:51:116:58 | fileName | UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | Potentially untrusted URL forward due to $@. | UnsafeLoadSpringResource.java:108:32:108:77 | fileName | user-provided value | -| UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | -| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet2.java:37:20:37:22 | url | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:37:20:37:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) | user-provided value | -| UnsafeResourceGet.java:41:20:41:22 | url | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:115:68:115:78 | requestPath | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:150:20:150:22 | url | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:189:68:189:78 | requestPath | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:226:20:226:22 | url | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | -| UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | -| UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value | -| UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value | -| UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value | -| UnsafeUrlForward.java:31:48:31:63 | ... + ... | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:48:31:63 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:31:61:31:63 | url | UnsafeUrlForward.java:30:27:30:36 | url : String | UnsafeUrlForward.java:31:61:31:63 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:30:27:30:36 | url | user-provided value | -| UnsafeUrlForward.java:38:33:38:35 | url | UnsafeUrlForward.java:36:19:36:28 | url : String | UnsafeUrlForward.java:38:33:38:35 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:36:19:36:28 | url | user-provided value | -| UnsafeUrlForward.java:49:33:49:62 | ... + ... | UnsafeUrlForward.java:47:19:47:28 | url : String | UnsafeUrlForward.java:49:33:49:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:47:19:47:28 | url | user-provided value | -| UnsafeUrlForward.java:60:33:60:62 | ... + ... | UnsafeUrlForward.java:58:19:58:28 | url : String | UnsafeUrlForward.java:60:33:60:62 | ... + ... | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:58:19:58:28 | url | user-provided value | diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java deleted file mode 100644 index 4018ed28948..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.java +++ /dev/null @@ -1,78 +0,0 @@ -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; - -@Controller -public class UnsafeUrlForward { - - @GetMapping("/bad1") - public ModelAndView bad1(String url) { - return new ModelAndView(url); - } - - @GetMapping("/bad2") - public ModelAndView bad2(String url) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); - return modelAndView; - } - - @GetMapping("/bad3") - public String bad3(String url) { - return "forward:" + url + "/swagger-ui/index.html"; - } - - @GetMapping("/bad4") - public ModelAndView bad4(String url) { - ModelAndView modelAndView = new ModelAndView("forward:" + url); - return modelAndView; - } - - @GetMapping("/bad5") - public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher(url).include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/bad6") - public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/bad7") - public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @GetMapping("/good1") - public void good1(String url, HttpServletRequest request, HttpServletResponse response) { - try { - request.getRequestDispatcher("/index.jsp?token=" + url).forward(request, response); - } catch (ServletException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref deleted file mode 100644 index 2e4cb5e726a..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/options b/java/ql/test/experimental/query-tests/security/CWE-552/options deleted file mode 100644 index 8fbf23e17df..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-552/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/:${testdir}/../../../../stubs/javax-faces-2.3/:${testdir}/../../../../stubs/undertow-io-2.2/:${testdir}/../../../../stubs/jboss-vfs-3.2/:${testdir}/../../../../stubs/springframework-5.3.8/ From 45c65b48aaa747a3198d59618fa64505af90d4a1 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Mar 2024 08:49:31 +0100 Subject: [PATCH 099/497] python: make it a real package so python2 also respects it --- .../experimental/dataflow/summaries/extracted_package/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 python/ql/test/experimental/dataflow/summaries/extracted_package/__init__.py diff --git a/python/ql/test/experimental/dataflow/summaries/extracted_package/__init__.py b/python/ql/test/experimental/dataflow/summaries/extracted_package/__init__.py new file mode 100644 index 00000000000..e69de29bb2d From 2a0c451d2d3ceeeb4a6d10a619cbe084e0f133bd Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Mar 2024 10:29:36 +0100 Subject: [PATCH 100/497] python: No `fieldFlowBranchLimit` for `SummarizedCallable`s Like https://github.com/github/codeql/pull/15689 for Ruby. --- .../python/dataflow/new/internal/DataFlowImplSpecific.qll | 2 ++ .../experimental/dataflow/summaries/conflicting_summaries.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll index cffdefe41ba..704af5b08e7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll @@ -22,4 +22,6 @@ module PythonDataFlow implements InputSig { predicate neverSkipInPathGraph = Private::neverSkipInPathGraph/1; Node exprNode(DataFlowExpr e) { result = Public::exprNode(e) } + + predicate ignoreFieldFlowBranchLimit(DataFlowCallable c) { exists(c.asLibraryCallable()) } } diff --git a/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py index 9528e9cdafc..7b031f37a9f 100644 --- a/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py +++ b/python/ql/test/experimental/dataflow/summaries/conflicting_summaries.py @@ -7,7 +7,7 @@ from extracted_package.functions import with_subpath, without_subpath # can be concluded from its definition. This seems to discard all summaries, including # the one with flow to `ReturnValue.Attribute[pattern]`. ensure_tainted( - with_subpath(ts).pattern, # $ MISSING: tainted + with_subpath(ts).pattern, # $ tainted with_subpath(ts), # $ tainted with_subpath(ts), # $ tainted ) From 0a6243d07b5cd2ea78b2322a87cce28d7ba16d68 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 18 Mar 2024 10:14:07 +0000 Subject: [PATCH 101/497] Release preparation for version 2.16.5 --- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/0.12.8.md | 3 +++ 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/0.9.7.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../campaigns/Solorigate/lib/change-notes/released/1.7.11.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 ++++ .../campaigns/Solorigate/src/change-notes/released/1.7.11.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/0.8.11.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/0.8.11.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/0.0.10.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/0.7.11.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.11.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ java/ql/automodel/src/change-notes/released/0.0.18.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/0.8.11.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/0.8.11.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.11.md | 3 +++ 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/0.8.11.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/0.7.11.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/0.11.11.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.11.md | 3 +++ 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/0.8.11.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/0.8.11.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.11.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.2.2.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.11.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/0.0.10.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.11.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.11.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/0.0.10.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/0.2.11.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/0.2.11.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.11.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.11.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.11.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/0.3.11.md | 3 +++ 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/0.3.11.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 132 files changed, 297 insertions(+), 66 deletions(-) create mode 100644 cpp/ql/lib/change-notes/released/0.12.8.md create mode 100644 cpp/ql/src/change-notes/released/0.9.7.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.11.md create mode 100644 csharp/ql/src/change-notes/released/0.8.11.md create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.10.md create mode 100644 go/ql/lib/change-notes/released/0.7.11.md create mode 100644 go/ql/src/change-notes/released/0.7.11.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.18.md create mode 100644 java/ql/lib/change-notes/released/0.8.11.md create mode 100644 java/ql/src/change-notes/released/0.8.11.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.11.md create mode 100644 javascript/ql/src/change-notes/released/0.8.11.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.11.md create mode 100644 python/ql/lib/change-notes/released/0.11.11.md create mode 100644 python/ql/src/change-notes/released/0.9.11.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.11.md create mode 100644 ruby/ql/src/change-notes/released/0.8.11.md create mode 100644 shared/controlflow/change-notes/released/0.1.11.md create mode 100644 shared/dataflow/change-notes/released/0.2.2.md create mode 100644 shared/mad/change-notes/released/0.2.11.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.10.md create mode 100644 shared/regex/change-notes/released/0.2.11.md create mode 100644 shared/ssa/change-notes/released/0.2.11.md create mode 100644 shared/threat-models/change-notes/released/0.0.10.md create mode 100644 shared/tutorial/change-notes/released/0.2.11.md create mode 100644 shared/typetracking/change-notes/released/0.2.11.md create mode 100644 shared/typos/change-notes/released/0.2.11.md create mode 100644 shared/util/change-notes/released/0.2.11.md create mode 100644 shared/yaml/change-notes/released/0.2.11.md create mode 100644 swift/ql/lib/change-notes/released/0.3.11.md create mode 100644 swift/ql/src/change-notes/released/0.3.11.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index e1c0dfbecd9..3e345c8b327 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.8 + +No user-facing changes. + ## 0.12.7 ### Minor Analysis Improvements diff --git a/cpp/ql/lib/change-notes/released/0.12.8.md b/cpp/ql/lib/change-notes/released/0.12.8.md new file mode 100644 index 00000000000..17f7d3963e2 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.8.md @@ -0,0 +1,3 @@ +## 0.12.8 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 20419e9c610..74f4c1a8fa0 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.7 +lastReleaseVersion: 0.12.8 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8b17a050d82..483b049138c 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.8-dev +version: 0.12.8 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index f6acd424bb0..69c80b835f3 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.7 + +No user-facing changes. + ## 0.9.6 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/released/0.9.7.md b/cpp/ql/src/change-notes/released/0.9.7.md new file mode 100644 index 00000000000..8583b9747e8 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.7.md @@ -0,0 +1,3 @@ +## 0.9.7 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 19139c132b2..0921a438254 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.6 +lastReleaseVersion: 0.9.7 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 49eb255cc8f..87141610f67 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.7-dev +version: 0.9.7 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 82eacfc84f7..97f22b42534 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.11 + +No user-facing changes. + ## 1.7.10 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md new file mode 100644 index 00000000000..c2790d68a54 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.11.md @@ -0,0 +1,3 @@ +## 1.7.11 + +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 31c7fe07020..6e5b0b6e2f2 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.10 +lastReleaseVersion: 1.7.11 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 3e8792bce0e..d0b814fe5eb 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.11-dev +version: 1.7.11 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 82eacfc84f7..97f22b42534 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.11 + +No user-facing changes. + ## 1.7.10 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md new file mode 100644 index 00000000000..c2790d68a54 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.11.md @@ -0,0 +1,3 @@ +## 1.7.11 + +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 31c7fe07020..6e5b0b6e2f2 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.10 +lastReleaseVersion: 1.7.11 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index c67ab9130a0..864328b2a5b 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.11-dev +version: 1.7.11 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 16cc14259e1..0444d4eb2bf 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### Major Analysis Improvements diff --git a/csharp/ql/lib/change-notes/released/0.8.11.md b/csharp/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index a67b40f744f..d202160b8fc 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.11-dev +version: 0.8.11 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 46c939e5cee..e5aaaa31e82 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/0.8.11.md b/csharp/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index a2148a36157..601609991c9 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.11-dev +version: 0.8.11 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index a59e560c415..1857b399fe8 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.10 + +No user-facing changes. + ## 0.0.9 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.10.md b/go/ql/consistency-queries/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +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 ecdd64fbab8..b740014e5ae 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.10 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index e82c98f52cb..32b42f72d6d 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: 0.0.10-dev +version: 0.0.10 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index fee5fd37a26..144be2473c0 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.11 + +No user-facing changes. + ## 0.7.10 ### Major Analysis Improvements diff --git a/go/ql/lib/change-notes/released/0.7.11.md b/go/ql/lib/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 67518567297..2610ac0272d 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.11 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 54b284e7ee5..a0ec22b27af 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.11-dev +version: 0.7.11 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 24e38b9890e..0682cd4f0bc 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.11 + +No user-facing changes. + ## 0.7.10 No user-facing changes. diff --git a/go/ql/src/change-notes/released/0.7.11.md b/go/ql/src/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 67518567297..2610ac0272d 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.11 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index c89aacb8aa2..c8852c0e76d 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.11-dev +version: 0.7.11 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index c3282c773a9..f252098a34f 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.18 + +No user-facing changes. + ## 0.0.17 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.18.md b/java/ql/automodel/src/change-notes/released/0.0.18.md new file mode 100644 index 00000000000..86c60b8abe7 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.18.md @@ -0,0 +1,3 @@ +## 0.0.18 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index cbc3d3cd493..a0d2bc59d97 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.17 +lastReleaseVersion: 0.0.18 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 8064163f5cc..1474661900b 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.18-dev +version: 0.0.18 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2a02ccee6ab..e251800c763 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/released/0.8.11.md b/java/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index ed83a620d20..96df63ac9cf 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.11-dev +version: 0.8.11 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index c61275f5ed8..92ca11112bc 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### New Queries diff --git a/java/ql/src/change-notes/released/0.8.11.md b/java/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index d7612d9da67..fcd7096e6ba 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.11-dev +version: 0.8.11 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index d5edcc00513..ae256e58d6d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.8.11.md b/javascript/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 30fa7de4198..51c8eb875b0 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.11-dev +version: 0.8.11 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index b9627cac5ee..6d837e84747 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/0.8.11.md b/javascript/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 01a3e8a0841..9ef42d7ca97 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.11-dev +version: 0.8.11 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 1c4455b66c4..db0ccde436e 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.11 + +No user-facing changes. + ## 0.7.10 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.11.md b/misc/suite-helpers/change-notes/released/0.7.11.md new file mode 100644 index 00000000000..c4d7e2d3775 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.11.md @@ -0,0 +1,3 @@ +## 0.7.11 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 67518567297..2610ac0272d 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.10 +lastReleaseVersion: 0.7.11 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 5d8225b2e0b..0991ba88415 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.11-dev +version: 0.7.11 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index f095607ca1b..50a541a2ca2 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.11 + +No user-facing changes. + ## 0.11.10 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/0.11.11.md b/python/ql/lib/change-notes/released/0.11.11.md new file mode 100644 index 00000000000..d4837264b86 --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.11.md @@ -0,0 +1,3 @@ +## 0.11.11 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index ddddcbe9193..14dd5ba832d 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.10 +lastReleaseVersion: 0.11.11 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index daab6a41206..2c8625b915b 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.11-dev +version: 0.11.11 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index d4245aba7a6..ff258db317a 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.11 + +No user-facing changes. + ## 0.9.10 ### New Queries diff --git a/python/ql/src/change-notes/released/0.9.11.md b/python/ql/src/change-notes/released/0.9.11.md new file mode 100644 index 00000000000..5f0f5649db6 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.11.md @@ -0,0 +1,3 @@ +## 0.9.11 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index d086ed69541..47eb8b55bab 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.10 +lastReleaseVersion: 0.9.11 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 5b641a329cb..d3cfcb60986 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.11-dev +version: 0.9.11 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index c61a12e0f4a..1e0b5dda19a 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/released/0.8.11.md b/ruby/ql/lib/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 81695d545ec..018d918d6c0 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.11-dev +version: 0.8.11 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index f875b6d16ad..63f443e0940 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.11 + +No user-facing changes. + ## 0.8.10 ### Minor Analysis Improvements diff --git a/ruby/ql/src/change-notes/released/0.8.11.md b/ruby/ql/src/change-notes/released/0.8.11.md new file mode 100644 index 00000000000..6f504c5c207 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.11.md @@ -0,0 +1,3 @@ +## 0.8.11 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 0521f0f75fa..7b42a9d984c 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.10 +lastReleaseVersion: 0.8.11 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 65e81bf2ba2..c35460534fa 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.11-dev +version: 0.8.11 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 75f2ca53f98..2e17ef5b94b 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.11 + +No user-facing changes. + ## 0.1.10 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.11.md b/shared/controlflow/change-notes/released/0.1.11.md new file mode 100644 index 00000000000..ab62c1ac1b3 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.11.md @@ -0,0 +1,3 @@ +## 0.1.11 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 30f5ca88be0..1d1688e8d61 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.10 +lastReleaseVersion: 0.1.11 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 19c95747294..fdcf8a31fe1 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.11-dev +version: 0.1.11 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index ef80788bded..4316eb992b2 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.2 + +No user-facing changes. + ## 0.2.1 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.2.2.md b/shared/dataflow/change-notes/released/0.2.2.md new file mode 100644 index 00000000000..98e69fd0772 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.2.md @@ -0,0 +1,3 @@ +## 0.2.2 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index df29a726bcc..16a06790aa8 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.1 +lastReleaseVersion: 0.2.2 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 4e896e9ae02..2cf6bf8d514 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.2-dev +version: 0.2.2 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 4730366775e..7a88a0fb736 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.11.md b/shared/mad/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index e3d2ccaf748..0306a9ad612 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 9943dcb7972..55a88fdbb24 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.10 + +No user-facing changes. + ## 0.0.9 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.10.md b/shared/rangeanalysis/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index ecdd64fbab8..b740014e5ae 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.10 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 6a528c17637..319e95f260d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.10-dev +version: 0.0.10 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index c05869c153d..fa6faba3823 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.11.md b/shared/regex/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 8717c5b8a73..9c8e8df3c77 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index a9161ff578b..0eebd3bf43d 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.11.md b/shared/ssa/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 656662e9061..1873962984d 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index a59e560c415..1857b399fe8 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.10 + +No user-facing changes. + ## 0.0.9 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.10.md b/shared/threat-models/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index ecdd64fbab8..b740014e5ae 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.9 +lastReleaseVersion: 0.0.10 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index ece8f74f701..8faa7db3528 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.10-dev +version: 0.0.10 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 560ad058d5b..12452c35536 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.11.md b/shared/tutorial/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index b1f2b729a85..579363af41d 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: 0.2.11-dev +version: 0.2.11 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 350f9ecbeae..557f6b217b8 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.11.md b/shared/typetracking/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index efca1702069..77c88045e8c 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 54b1eaa4d58..4dd505b626f 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.11.md b/shared/typos/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 76434dcb21c..a59e78ba210 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 1ca1f71bcbc..9803704f470 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.11.md b/shared/util/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/util/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index f4d51c896ce..51d3f8cb5e4 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 9fd5ebc26ab..1beadaccd69 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.11 + +No user-facing changes. + ## 0.2.10 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.11.md b/shared/yaml/change-notes/released/0.2.11.md new file mode 100644 index 00000000000..1037f9194f8 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.11.md @@ -0,0 +1,3 @@ +## 0.2.11 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index a71167814cb..2ee635b9937 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.10 +lastReleaseVersion: 0.2.11 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 41f2bc851fd..d00796a1abd 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.11-dev +version: 0.2.11 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 8f14bfcedc9..309087eeb32 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.11 + +No user-facing changes. + ## 0.3.10 ### Bug Fixes diff --git a/swift/ql/lib/change-notes/released/0.3.11.md b/swift/ql/lib/change-notes/released/0.3.11.md new file mode 100644 index 00000000000..10d35144a4a --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.11.md @@ -0,0 +1,3 @@ +## 0.3.11 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 76ca0ac8ba7..2b6348cc81c 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.11 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 673004b5172..e9f1faf0fa6 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.11-dev +version: 0.3.11 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index bda9834c9bc..33f843bec1c 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.11 + +No user-facing changes. + ## 0.3.10 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.11.md b/swift/ql/src/change-notes/released/0.3.11.md new file mode 100644 index 00000000000..10d35144a4a --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.11.md @@ -0,0 +1,3 @@ +## 0.3.11 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 76ca0ac8ba7..2b6348cc81c 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.10 +lastReleaseVersion: 0.3.11 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 11192f11d8b..db7094837ad 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.11-dev +version: 0.3.11 groups: - swift - queries From aebe9f69924daa58f95d8bfab60db60284f28a83 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 18 Mar 2024 12:16:26 +0000 Subject: [PATCH 102/497] Post-release preparation for codeql-cli-2.16.5 --- 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/automodel/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 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/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/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 483b049138c..022cb22884e 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.8 +version: 0.12.9-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 87141610f67..cc8476c89d3 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.7 +version: 0.9.8-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index d0b814fe5eb..31c4092b33f 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.11 +version: 1.7.12-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 864328b2a5b..dcb2674a19a 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.11 +version: 1.7.12-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d202160b8fc..61dbd30243f 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.11 +version: 0.8.12-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 601609991c9..da169055d99 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.11 +version: 0.8.12-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 32b42f72d6d..b6675cca9e1 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: 0.0.10 +version: 0.0.11-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index a0ec22b27af..fd6f38cd186 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.11 +version: 0.7.12-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index c8852c0e76d..737d9e1b542 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.11 +version: 0.7.12-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 1474661900b..b9bef7e98a0 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.18 +version: 0.0.19-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 96df63ac9cf..83e354a218f 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.11 +version: 0.8.12-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index fcd7096e6ba..cf5953276b8 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.11 +version: 0.8.12-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 51c8eb875b0..6c7d9df15d5 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.11 +version: 0.8.12-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 9ef42d7ca97..7a62520f88e 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.11 +version: 0.8.12-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 0991ba88415..b6d9a96049c 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.11 +version: 0.7.12-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 2c8625b915b..2b5cb00e405 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.11 +version: 0.11.12-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index d3cfcb60986..49eae617df8 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.11 +version: 0.9.12-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 018d918d6c0..5b1b4a67b00 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.11 +version: 0.8.12-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index c35460534fa..2ffba7618dd 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.11 +version: 0.8.12-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index fdcf8a31fe1..597af60b98f 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.11 +version: 0.1.12-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 2cf6bf8d514..aef3dfc8523 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.2 +version: 0.2.3-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 0306a9ad612..fb7384339de 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 319e95f260d..671da30468e 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.10 +version: 0.0.11-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 9c8e8df3c77..4170b61806c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 1873962984d..3cb919af401 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 8faa7db3528..d7e68330f51 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.10 +version: 0.0.11-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 579363af41d..0e0c8fc0d16 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: 0.2.11 +version: 0.2.12-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 77c88045e8c..b11e2cee9e4 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index a59e78ba210..7643692f482 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 51d3f8cb5e4..d2539564290 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index d00796a1abd..4c6e0680ff2 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.11 +version: 0.2.12-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index e9f1faf0fa6..08e0434fbe6 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.11 +version: 0.3.12-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index db7094837ad..a4cdbfe7cc1 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.11 +version: 0.3.12-dev groups: - swift - queries From e8e1dc03901193df543c6e1f69353c5cdc995674 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Mar 2024 14:23:40 +0100 Subject: [PATCH 103/497] C#: Add integration test with extraction and compilation messages --- .../all-platforms/standalone/CompilerMessage.expected | 10 ++++++++++ .../all-platforms/standalone/CompilerMessage.ql | 6 ++++++ .../standalone/ExtractortMessages.expected | 8 ++++++++ .../all-platforms/standalone/ExtractortMessages.ql | 6 ++++++ .../all-platforms/standalone/Program.cs | 3 ++- 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql diff --git a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected new file mode 100644 index 00000000000..94606c65547 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected @@ -0,0 +1,10 @@ +| Program.cs:2:9:2:9 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | +| Program.cs:2:15:2:15 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | +| Program.cs:2:21:2:21 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | +| test-db/working/implicitUsings/GlobalUsings.g.cs:3:1:3:28 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:4:1:4:48 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:5:1:5:31 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:6:1:6:33 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:7:1:7:37 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:8:1:8:38 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | +| test-db/working/implicitUsings/GlobalUsings.g.cs:9:1:9:44 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql new file mode 100644 index 00000000000..495226cf99a --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +from Diagnostic diagnostic +select diagnostic, + diagnostic.getSeverityText() + " " + diagnostic.getTag() + " " + diagnostic.getFullMessage() diff --git a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected new file mode 100644 index 00000000000..b8a1ea22079 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected @@ -0,0 +1,8 @@ +| Program.cs:2:9:2:11 | Failed to determine type | 5 | M() | +| Program.cs:2:9:2:11 | Unable to resolve target for call. (Compilation error?) | 5 | M() | +| Program.cs:2:9:2:17 | Failed to determine type | 5 | M() + M() | +| Program.cs:2:9:2:23 | Failed to determine type | 5 | M() + M() + M() | +| Program.cs:2:15:2:17 | Failed to determine type | 5 | M() | +| Program.cs:2:15:2:17 | Unable to resolve target for call. (Compilation error?) | 5 | M() | +| Program.cs:2:21:2:23 | Failed to determine type | 5 | M() | +| Program.cs:2:21:2:23 | Unable to resolve target for call. (Compilation error?) | 5 | M() | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql new file mode 100644 index 00000000000..10b9822fc2e --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate extractorMessages(ExtractorMessage msg, int severity, string elementText) { + msg.getSeverity() = severity and msg.getElementText() = elementText +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Program.cs b/csharp/ql/integration-tests/all-platforms/standalone/Program.cs index 47eee48cc79..371ed98c724 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Program.cs +++ b/csharp/ql/integration-tests/all-platforms/standalone/Program.cs @@ -1 +1,2 @@ -var dummy = "dummy"; \ No newline at end of file +var dummy = "dummy"; +dummy = M() + M() + M(); \ No newline at end of file From d749335f54bf5714ead1a2a39376ab1c6c24693e Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Mar 2024 14:24:34 +0100 Subject: [PATCH 104/497] C#: Limit extracted compilation and extraction messages --- .../Entities/Compilations/Compilation.cs | 3 +- .../Compilations/CompilerDiagnostic.cs | 45 +++++++++++++++++++ .../Entities/Compilations/Diagnostic.cs | 21 --------- .../Semmle.Extraction.CSharp/Tuples.cs | 4 +- .../Entities/ExtractionError.cs | 21 --------- .../Entities/ExtractionMessage.cs | 37 +++++++++++++++ .../Semmle.Util/EnvironmentVariables.cs | 12 +++++ .../standalone/CompilerMessage.expected | 6 --- .../standalone/ExtractortMessages.expected | 3 -- .../all-platforms/standalone/test.py | 3 ++ 10 files changed, 100 insertions(+), 55 deletions(-) create mode 100644 csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs delete mode 100644 csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs create mode 100644 csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs index a194323c9a6..e9706b3b579 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs @@ -80,8 +80,7 @@ namespace Semmle.Extraction.CSharp.Entities // Diagnostics Context.Compilation .GetDiagnostics() - .Select(d => new Diagnostic(Context, d)) - .ForEach((diag, index) => trapFile.diagnostic_for(diag, this, 0, index)); + .ForEach((diag, index) => new CompilerDiagnostic(Context, diag, this, index)); } public void PopulatePerformance(PerformanceMetrics p) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs new file mode 100644 index 00000000000..8de1442f26e --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs @@ -0,0 +1,45 @@ +using System.Collections.Concurrent; +using System.IO; +using Semmle.Util; + +namespace Semmle.Extraction.CSharp.Entities +{ + internal class CompilerDiagnostic : FreshEntity + { + private static readonly int limit = EnvironmentVariables.TryGetExtractorOption("COMPILER_DIAGNOSTIC_LIMIT") ?? 1000; + private static readonly ConcurrentDictionary messageCounts = new(); + + private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; + private readonly Compilation compilation; + private readonly int index; + + public CompilerDiagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag, Compilation compilation, int index) : base(cx) + { + diagnostic = diag; + this.compilation = compilation; + this.index = index; + TryPopulate(); + } + + protected override void Populate(TextWriter trapFile) + { + // The below doesn't limit the extractor messages to the exact limit, but it's good enough. + var key = diagnostic.Id; + var messageCount = messageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); + if (messageCount > limit) + { + if (messageCount == limit + 1) + { + Context.Extractor.Logger.LogWarning($"Stopped logging {key} compiler diagnostics after reaching {limit}"); + } + + return; + } + + trapFile.diagnostics(this, (int)diagnostic.Severity, key, diagnostic.Descriptor.Title.ToString(), + diagnostic.GetMessage(), Context.CreateLocation(diagnostic.Location)); + + trapFile.diagnostic_for(this, compilation, 0, index); + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs deleted file mode 100644 index a53ee5797f2..00000000000 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.IO; - -namespace Semmle.Extraction.CSharp.Entities -{ - internal class Diagnostic : FreshEntity - { - private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; - - public Diagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag) : base(cx) - { - diagnostic = diag; - TryPopulate(); - } - - protected override void Populate(TextWriter trapFile) - { - trapFile.diagnostics(this, (int)diagnostic.Severity, diagnostic.Id, diagnostic.Descriptor.Title.ToString(), - diagnostic.GetMessage(), Context.CreateLocation(diagnostic.Location)); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs index 71ed85cb201..9d4f913ff9c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs @@ -122,10 +122,10 @@ namespace Semmle.Extraction.CSharp internal static void destructors(this TextWriter trapFile, Destructor destructor, string name, Type containingType, Destructor original) => trapFile.WriteTuple("destructors", destructor, name, containingType, original); - internal static void diagnostic_for(this TextWriter trapFile, Diagnostic diag, Compilation comp, int fileNo, int index) => + internal static void diagnostic_for(this TextWriter trapFile, CompilerDiagnostic diag, Compilation comp, int fileNo, int index) => trapFile.WriteTuple("diagnostic_for", diag, comp, fileNo, index); - internal static void diagnostics(this TextWriter trapFile, Diagnostic diag, int severity, string errorTag, string errorMessage, string fullErrorMessage, Location location) => + internal static void diagnostics(this TextWriter trapFile, CompilerDiagnostic diag, int severity, string errorTag, string errorMessage, string fullErrorMessage, Location location) => trapFile.WriteTuple("diagnostics", diag, severity, errorTag, errorMessage, fullErrorMessage, location); internal static void dynamic_member_name(this TextWriter trapFile, Expression e, string name) => diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs deleted file mode 100644 index 99f17537790..00000000000 --- a/csharp/extractor/Semmle.Extraction/Entities/ExtractionError.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.IO; - -namespace Semmle.Extraction.Entities -{ - internal class ExtractionMessage : FreshEntity - { - private readonly Message msg; - - public ExtractionMessage(Context cx, Message msg) : base(cx) - { - this.msg = msg; - TryPopulate(); - } - - protected override void Populate(TextWriter trapFile) - { - trapFile.extractor_messages(this, msg.Severity, "C# extractor", msg.Text, msg.EntityText ?? string.Empty, - msg.Location ?? Context.CreateLocation(), msg.StackTrace ?? string.Empty); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs new file mode 100644 index 00000000000..35df66a6b0a --- /dev/null +++ b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs @@ -0,0 +1,37 @@ +using System.IO; +using System.Threading; +using Semmle.Util; + +namespace Semmle.Extraction.Entities +{ + internal class ExtractionMessage : FreshEntity + { + private static readonly int limit = EnvironmentVariables.TryGetExtractorOption("MESSAGE_LIMIT") ?? 10000; + private static int messageCount = 0; + + private readonly Message msg; + + public ExtractionMessage(Context cx, Message msg) : base(cx) + { + this.msg = msg; + TryPopulate(); + } + + protected override void Populate(TextWriter trapFile) + { + // The below doesn't limit the extractor messages to the exact limit, but it's good enough. + Interlocked.Increment(ref messageCount); + if (messageCount > limit) + { + if (messageCount == limit + 1) + { + Context.Extractor.Logger.LogWarning($"Stopped logging extractor messages after reaching {limit}"); + } + return; + } + + trapFile.extractor_messages(this, msg.Severity, "C# extractor", msg.Text, msg.EntityText ?? string.Empty, + msg.Location ?? Context.CreateLocation(), msg.StackTrace ?? string.Empty); + } + } +} diff --git a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs index 9dcccf6d878..d7bb81440ec 100644 --- a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs +++ b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs @@ -1,4 +1,6 @@ using System; +using System.Globalization; +using System.Numerics; namespace Semmle.Util { @@ -7,6 +9,16 @@ namespace Semmle.Util public static string? GetExtractorOption(string name) => Environment.GetEnvironmentVariable($"CODEQL_EXTRACTOR_CSHARP_OPTION_{name.ToUpper()}"); + public static T? TryGetExtractorOption(string name) where T : struct, INumberBase + { + var value = GetExtractorOption(name); + if (T.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out var result)) + { + return result; + } + return null; + } + public static int GetDefaultNumberOfThreads() { if (!int.TryParse(Environment.GetEnvironmentVariable("CODEQL_THREADS"), out var threads) || threads == -1) diff --git a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected index 94606c65547..cd10fe6d1f0 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected @@ -1,10 +1,4 @@ | Program.cs:2:9:2:9 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | | Program.cs:2:15:2:15 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | -| Program.cs:2:21:2:21 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | -| test-db/working/implicitUsings/GlobalUsings.g.cs:3:1:3:28 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | -| test-db/working/implicitUsings/GlobalUsings.g.cs:4:1:4:48 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | -| test-db/working/implicitUsings/GlobalUsings.g.cs:5:1:5:31 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | -| test-db/working/implicitUsings/GlobalUsings.g.cs:6:1:6:33 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | | test-db/working/implicitUsings/GlobalUsings.g.cs:7:1:7:37 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | | test-db/working/implicitUsings/GlobalUsings.g.cs:8:1:8:38 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | -| test-db/working/implicitUsings/GlobalUsings.g.cs:9:1:9:44 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected index b8a1ea22079..02b76fec42a 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected @@ -1,8 +1,5 @@ | Program.cs:2:9:2:11 | Failed to determine type | 5 | M() | -| Program.cs:2:9:2:11 | Unable to resolve target for call. (Compilation error?) | 5 | M() | | Program.cs:2:9:2:17 | Failed to determine type | 5 | M() + M() | | Program.cs:2:9:2:23 | Failed to determine type | 5 | M() + M() + M() | -| Program.cs:2:15:2:17 | Failed to determine type | 5 | M() | -| Program.cs:2:15:2:17 | Unable to resolve target for call. (Compilation error?) | 5 | M() | | Program.cs:2:21:2:23 | Failed to determine type | 5 | M() | | Program.cs:2:21:2:23 | Unable to resolve target for call. (Compilation error?) | 5 | M() | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index a17966e148a..cd9d65c5741 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,6 @@ +import os from create_database_utils import * +os.environ['CODEQL_EXTRACTOR_CSHARP_OPTION_COMPILER_DIAGNOSTIC_LIMIT'] = '2' +os.environ['CODEQL_EXTRACTOR_CSHARP_OPTION_MESSAGE_LIMIT'] = '5' run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) From 322fb6c507aec483de3bd06bba26f6d9304bf406 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Mar 2024 14:53:49 +0100 Subject: [PATCH 105/497] Change integration test to return stable results --- .../all-platforms/standalone/CompilerMessage.expected | 4 ---- .../all-platforms/standalone/CompilerMessage.ql | 6 ------ .../all-platforms/standalone/Diag.expected | 4 ++++ .../ql/integration-tests/all-platforms/standalone/Diag.ql | 6 ++++++ .../all-platforms/standalone/ExtractortMessages.expected | 5 ----- .../all-platforms/standalone/ExtractortMessages.ql | 6 ------ 6 files changed, 10 insertions(+), 21 deletions(-) delete mode 100644 csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected delete mode 100644 csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/Diag.expected create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/Diag.ql delete mode 100644 csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected delete mode 100644 csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql diff --git a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected deleted file mode 100644 index cd10fe6d1f0..00000000000 --- a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.expected +++ /dev/null @@ -1,4 +0,0 @@ -| Program.cs:2:9:2:9 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | -| Program.cs:2:15:2:15 | CS0103: The name 'M' does not exist in the current context | Error CS0103 The name 'M' does not exist in the current context | -| test-db/working/implicitUsings/GlobalUsings.g.cs:7:1:7:37 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | -| test-db/working/implicitUsings/GlobalUsings.g.cs:8:1:8:38 | CS8019: Unnecessary using directive. | Hidden CS8019 Unnecessary using directive. | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql b/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql deleted file mode 100644 index 495226cf99a..00000000000 --- a/csharp/ql/integration-tests/all-platforms/standalone/CompilerMessage.ql +++ /dev/null @@ -1,6 +0,0 @@ -import csharp -import semmle.code.csharp.commons.Diagnostics - -from Diagnostic diagnostic -select diagnostic, - diagnostic.getSeverityText() + " " + diagnostic.getTag() + " " + diagnostic.getFullMessage() diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected new file mode 100644 index 00000000000..1fcc47687ca --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected @@ -0,0 +1,4 @@ +extractorMessages +| 5 | +compilerDiagnostics +| 4 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql new file mode 100644 index 00000000000..bbd142d3af3 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate extractorMessages(int c) { c = count(ExtractorMessage msg) } + +query predicate compilerDiagnostics(int c) { c = count(Diagnostic diag) } diff --git a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected deleted file mode 100644 index 02b76fec42a..00000000000 --- a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.expected +++ /dev/null @@ -1,5 +0,0 @@ -| Program.cs:2:9:2:11 | Failed to determine type | 5 | M() | -| Program.cs:2:9:2:17 | Failed to determine type | 5 | M() + M() | -| Program.cs:2:9:2:23 | Failed to determine type | 5 | M() + M() + M() | -| Program.cs:2:21:2:23 | Failed to determine type | 5 | M() | -| Program.cs:2:21:2:23 | Unable to resolve target for call. (Compilation error?) | 5 | M() | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql b/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql deleted file mode 100644 index 10b9822fc2e..00000000000 --- a/csharp/ql/integration-tests/all-platforms/standalone/ExtractortMessages.ql +++ /dev/null @@ -1,6 +0,0 @@ -import csharp -import semmle.code.csharp.commons.Diagnostics - -query predicate extractorMessages(ExtractorMessage msg, int severity, string elementText) { - msg.getSeverity() = severity and msg.getElementText() = elementText -} From 80ae017aa1767bc84d1a5ae2282fb546437ff530 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 10 Oct 2023 15:21:15 +0100 Subject: [PATCH 106/497] Ruby: Track flow into ActiveRecord scopes --- .../dataflow/internal/DataFlowDispatch.qll | 15 ++++++++++- .../codeql/ruby/frameworks/ActiveRecord.qll | 27 +++++++++++++++++++ .../security/cwe-089/ActiveRecordInjection.rb | 11 ++++++++ .../security/cwe-089/SqlInjection.expected | 8 ++++++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index e7898a1ec4f..4ac9031f05c 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -429,7 +429,20 @@ private Callable viableSourceCallableInit(RelevantCall call) { result = getIniti /** Holds if `call` may resolve to the returned source-code method. */ private DataFlowCallable viableSourceCallable(DataFlowCall call) { result = viableSourceCallableNonInit(call) or - result.asCfgScope() = viableSourceCallableInit(call.asCall()) + result.asCfgScope() = viableSourceCallableInit(call.asCall()) or + result = any(AdditionalCallTarget t).viableTarget(call.asCall()) +} + +/** + * A unit class for adding additional call steps. + * + * Extend this class to add additional call steps to the data flow graph. + */ +class AdditionalCallTarget extends Unit { + /** + * Gets a viable target for `call`. + */ + abstract DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call); } /** Holds if `call` may resolve to the returned summarized library method. */ diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 7573e099c19..0f30f2146df 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -765,3 +765,30 @@ private class ActiveRecordCollectionProxyModelInstantiation extends ActiveRecord result = this.(ActiveRecordCollectionProxyMethodCall).getAssociation().getTargetClass() } } + +/** + * An additional call step for calls to ActiveRecord scopes. For example, in the following code: + * + * ```rb + * class User < ActiveRecord::Base + * scope :with_role, ->(role) { where(role: role) } + * end + * + * User.with_role(r) + * ``` + * + * the call to `with_role` targets the lambda, and argument `r` flows to the parameter `role`. + */ +class ActiveRecordScopeCallTarget extends AdditionalCallTarget { + override DataFlowCallable viableTarget(ExprNodes::CallCfgNode scopeCall) { + exists(DataFlow::ModuleNode model, string scopeName | + model = activeRecordBaseClass().getADescendentModule() and + exists(DataFlow::CallNode scope | + scope = model.getAModuleLevelCall("scope") and + scope.getArgument(0).getConstantValue().isStringlikeValue(scopeName) and + scope.getArgument(1).asCallable().asCallableAstNode() = result.asCfgScope() + ) and + scopeCall = model.getAnImmediateReference().getAMethodCall(scopeName).asExpr() + ) + } +} diff --git a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb index ad074de5e98..f1f8d680b75 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb @@ -204,3 +204,14 @@ class RegressionController < ActionController::Base Regression.connection.execute("SELECT * FROM users WHERE id = #{permitted_params[:user_id]}") end end + +class User + scope :with_role, ->(role) { where("role = #{role}") } +end + +class UsersController < ActionController::Base + def index + # BAD: user input passed to scope which uses it without sanitization. + @users = User.with_role(params[:role]) + end +end diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index 8b6c5bf4d16..6593e7606da 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -76,6 +76,9 @@ edges | ActiveRecordInjection.rb:203:77:203:102 | ...[...] | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | provenance | | | ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | provenance | | | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | provenance | | +| ActiveRecordInjection.rb:209:24:209:27 | role | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | provenance | | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:215:29:215:41 | ...[...] | provenance | | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | ActiveRecordInjection.rb:209:24:209:27 | role | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | @@ -201,6 +204,10 @@ nodes | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | | ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | semmle.label | call to permitted_params | | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:209:24:209:27 | role | semmle.label | role | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | semmle.label | "role = #{...}" | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:4:5:4:8 | name | semmle.label | name | | ArelInjection.rb:4:12:4:17 | call to params | semmle.label | call to params | | ArelInjection.rb:4:12:4:29 | ...[...] | semmle.label | ...[...] | @@ -257,6 +264,7 @@ subpaths | ActiveRecordInjection.rb:194:37:194:41 | query | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:194:37:194:41 | query | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | This SQL query depends on a $@. | ActiveRecordInjection.rb:215:29:215:34 | call to params | user-provided value | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | From 916b1e959e15cee53d99333c8a5d137a68fb1f54 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 18 Mar 2024 15:56:10 +0000 Subject: [PATCH 107/497] Java: Add a test for MissingEnumInSwitch --- .../MissingEnumInSwitch.expected | 10 + .../MissingEnumInSwitch.qlref | 1 + .../Statements/MissingEnumInSwitch/Test.java | 187 ++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected create mode 100644 java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref create mode 100644 java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected new file mode 100644 index 00000000000..5daf2fc5b8a --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected @@ -0,0 +1,10 @@ +| Test.java:8:5:8:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 22 more. | Test.java:4:27:4:27 | B | B | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | +| Test.java:11:5:11:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 21 more. | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | +| Test.java:15:5:15:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 20 more. | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | +| Test.java:20:5:20:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 19 more. | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | +| Test.java:26:5:26:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 18 more. | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | Test.java:4:35:4:35 | H | H | +| Test.java:33:5:33:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 2 more. | Test.java:4:21:4:21 | V | V | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | +| Test.java:56:5:56:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 1 more. | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | +| Test.java:80:5:80:13 | switch (...) | Switch statement does not have a case for $@, $@ or $@. | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | +| Test.java:105:5:105:13 | switch (...) | Switch statement does not have a case for $@ or $@. | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | Test.java:4:11:4:11 | Y | Y | +| Test.java:131:5:131:13 | switch (...) | Switch statement does not have a case for $@. | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref new file mode 100644 index 00000000000..10f1b3e8be2 --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.qlref @@ -0,0 +1 @@ +Likely Bugs/Statements/MissingEnumInSwitch.ql diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java new file mode 100644 index 00000000000..2f39918ead4 --- /dev/null +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/Test.java @@ -0,0 +1,187 @@ +public class Test { + private enum MyEnum { + // A..Z in random order + N,R,S,Y,W,E,K,I,V,X,C,B,O,J,Z,H,T,P,A,F,D,M,G,U,L,Q + } + + public void use(MyEnum e) { + switch(e) { + case A: break; + } + switch(e) { + case A: break; + case B: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + case Y: break; + } + switch(e) { + case A: break; + case B: break; + case C: break; + case D: break; + case E: break; + case F: break; + case G: break; + case H: break; + case I: break; + case J: break; + case K: break; + case L: break; + case M: break; + case N: break; + case O: break; + case P: break; + case Q: break; + case R: break; + case S: break; + case T: break; + case U: break; + case V: break; + case W: break; + case X: break; + case Y: break; + case Z: break; + } + } +} From 60b5e499050d75587bf65f5e0e3877caccd326a3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 18 Mar 2024 15:56:21 +0000 Subject: [PATCH 108/497] Java: Limit the amount of results that MissingEnumInSwitch produces per switch The tool status page warns: An analysis file contained multiple alerts that included more related locations than our allowed limit of 100. These alerts correspond to the rule java/missing-case-in-switch. Only 100 locations were stored for these alerts. --- .../Statements/MissingEnumInSwitch.ql | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql index dfea3ad72d9..0ebe0ebb025 100644 --- a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql +++ b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql @@ -13,10 +13,51 @@ import java -from SwitchStmt switch, EnumType enum, EnumConstant missing -where - switch.getExpr().getType() = enum and - missing.getDeclaringType() = enum and +EnumConstant nthMissing(SwitchStmt switch, int index) { not exists(switch.getDefaultCase()) and - not switch.getAConstCase().getValue() = missing.getAnAccess() -select switch, "Switch statement does not have a case for $@.", missing, missing.getName() + exists(EnumType enum | + switch.getExpr().getType() = enum and + result = + rank[index](EnumConstant ec | + ec.getDeclaringType() = enum and + not switch.getAConstCase().getValue() = ec.getAnAccess() + | + ec order by ec.getName() + ) + ) +} + +predicate first3(string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2, EnumConstant e3) { + exists(int n | n = strictcount(nthMissing(switch, _)) | + if n > 3 + then msg = "Switch statement does not have a case for $@, $@, $@ or " + (n - 3) + " more." + else msg = "Switch statement does not have a case for $@, $@ or $@." + ) and + e1 = nthMissing(switch, 1) and + e2 = nthMissing(switch, 2) and + e3 = nthMissing(switch, 3) +} + +predicate only2(string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2) { + msg = "Switch statement does not have a case for $@ or $@." and + e1 = nthMissing(switch, 1) and + e2 = nthMissing(switch, 2) +} + +predicate only1(string msg, SwitchStmt switch, EnumConstant e) { + msg = "Switch statement does not have a case for $@." and + e = nthMissing(switch, 1) +} + +from string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2, EnumConstant e3 +where + if first3(_, switch, _, _, _) + then first3(msg, switch, e1, e2, e3) + else + if only2(_, switch, _, _) + then ( + only2(msg, switch, e1, e2) and e1 = e3 + ) else ( + only1(msg, switch, e1) and e1 = e2 and e1 = e3 + ) +select switch, msg, e1, e1.getName(), e2, e2.getName(), e3, e3.getName() From a21eea4ee07134616ede87612c3a4b196ec404fa Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 11:46:55 +0000 Subject: [PATCH 109/497] C++: Generalize more predicates from booleans to abstract values. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 63 ++++++++++--------- .../code/cpp/ir/implementation/EdgeKind.qll | 9 +++ 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index e7762fc9fa8..d714c1ecf30 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -446,7 +446,10 @@ class IRGuardCondition extends Instruction { /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ cached predicate comparesEq(Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue) { - compares_eq(this, left, right, k, areEqual, testIsTrue) + exists(BooleanValue value | + compares_eq(this, left, right, k, areEqual, value) and + value.getValue() = testIsTrue + ) } /** @@ -455,8 +458,8 @@ class IRGuardCondition extends Instruction { */ cached predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and this.valueControls(block, value) ) } @@ -468,9 +471,9 @@ class IRGuardCondition extends Instruction { predicate ensuresEqEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean areEqual ) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) ) } @@ -572,52 +575,52 @@ private Instruction getBranchForCondition(Instruction guard) { * Beware making mistaken logical implications here relating `areEqual` and `testIsTrue`. */ private predicate compares_eq( - Instruction test, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(boolean eq | simple_comparison_eq(test, left, right, k, eq) | - areEqual = true and testIsTrue = eq + exists(AbstractValue v | simple_comparison_eq(test, left, right, k, v) | + areEqual = true and value = v or - areEqual = false and testIsTrue = eq.booleanNot() + areEqual = false and value = v.getDualValue() ) or // I think this is handled by forwarding in controlsBlock. //or //logical_comparison_eq(test, left, right, k, areEqual, testIsTrue) /* a == b + k => b == a - k */ - exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, testIsTrue)) + exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, value)) or - complex_eq(test, left, right, k, areEqual, testIsTrue) + complex_eq(test, left, right, k, areEqual, value) or /* (x is true => (left == right + k)) => (!x is false => (left == right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, isFalse) + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, dual) ) } /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual + CompareInstruction cmp, Operand left, Operand right, int k, AbstractValue value ) { left = cmp.getLeftOperand() and cmp instanceof CompareEQInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = true + value.(BooleanValue).getValue() = true or left = cmp.getLeftOperand() and cmp instanceof CompareNEInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = false + value.(BooleanValue).getValue() = false } private predicate complex_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { - sub_eq(cmp, left, right, k, areEqual, testIsTrue) + sub_eq(cmp, left, right, k, areEqual, value) or - add_eq(cmp, left, right, k, areEqual, testIsTrue) + add_eq(cmp, left, right, k, areEqual, value) } /* @@ -768,31 +771,31 @@ private predicate add_lt( // left - x == right + c => left == right + (c+x) // left == (right - x) + c => left == right + (c-x) private predicate sub_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(SubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(SubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x @@ -802,10 +805,10 @@ private predicate sub_eq( // left + x == right + c => left == right + (c-x) // left == (right + x) + c => left == right + (c+x) private predicate add_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(AddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -815,7 +818,7 @@ private predicate add_eq( ) or exists(AddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -825,7 +828,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -835,7 +838,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll index 91e1fe03e23..81db183fa63 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -90,6 +90,15 @@ class CaseEdge extends EdgeKind, TCaseEdge { * Gets the largest value of the switch expression for which control will flow along this edge. */ final string getMaxValue() { result = maxValue } + + /** + * Gets the unique value of the switch expression for which control will + * flow along this edge, if any. + */ + final string getValue() { + minValue = maxValue and + result = minValue + } } /** From 44045d3eed8403aea446f15e25bbfd451fe715e3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 12:26:15 +0000 Subject: [PATCH 110/497] C++: Add guards logic for constant comparisons. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index d714c1ecf30..60de332f847 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -452,6 +452,21 @@ class IRGuardCondition extends Instruction { ) } + /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + cached + predicate comparesEq(Operand op, int k, boolean areEqual, boolean testIsTrue) { + exists(MatchValue mv | + compares_eq(this, op, k, areEqual, mv) and + // A match value cannot be dualized, so `testIsTrue` is always true + testIsTrue = true + ) + or + exists(BooleanValue bv | + compares_eq(this, op, k, areEqual, bv) and + bv.getValue() = testIsTrue + ) + } + /** * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. * If `areEqual = false` then this implies `left != right + k`. @@ -463,6 +478,17 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEq(Operand op, int k, IRBlock block, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and this.valueControls(block, value) + ) + } + /** * Holds if (determined by this guard) `left == right + k` must be `areEqual` on the edge from * `pred` to `succ`. If `areEqual = false` then this implies `left != right + k`. @@ -477,6 +503,18 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` on the edge from + * `pred` to `succ`. If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEqEdge(Operand op, int k, IRBlock pred, IRBlock succ, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) + ) + } + /** * Holds if this condition controls `block`, meaning that `block` is only * entered if the value of this condition is `v`. This helper @@ -598,6 +636,33 @@ private predicate compares_eq( ) } +/** Holds if `op == k` is `areEqual` given that `test` is equal to `value`. */ +private predicate compares_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ + exists(AbstractValue v | simple_comparison_eq(test, op, k, v) | + areEqual = true and value = v + or + areEqual = false and value = v.getDualValue() + ) + or + complex_eq(test, op, k, areEqual, value) + or + /* (x is true => (op == k)) => (!x is false => (op == k)) */ + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), op, k, areEqual, dual) + ) + or + // ((test is `areEqual` => op == const + k2) and const == `k1`) => + // test is `areEqual` => op == k1 + k2 + exists(int k1, int k2, ConstantInstruction const | + compares_eq(test, op, const.getAUse(), k2, areEqual, value) and + int_value(const) = k1 and + k = k1 + k2 + ) +} + /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( CompareInstruction cmp, Operand left, Operand right, int k, AbstractValue value @@ -615,6 +680,15 @@ private predicate simple_comparison_eq( value.(BooleanValue).getValue() = false } +/** Rearrange various simple comparisons into `op == k` form. */ +private predicate simple_comparison_eq(Instruction test, Operand op, int k, AbstractValue value) { + exists(SwitchInstruction switch | + test = switch.getExpression() and + op.getDef() = test and + value.(MatchValue).getCase().getValue().toInt() = k + ) +} + private predicate complex_eq( CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { @@ -623,6 +697,14 @@ private predicate complex_eq( add_eq(cmp, left, right, k, areEqual, value) } +private predicate complex_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + sub_eq(test, op, k, areEqual, value) + or + add_eq(test, op, k, areEqual, value) +} + /* * Simplification of inequality expressions * Simplify conditions in the source to the canonical form l < r + k. @@ -802,6 +884,23 @@ private predicate sub_eq( ) } +// op - x == c => op == (c+x) +private predicate sub_eq(Instruction test, Operand op, int k, boolean areEqual, AbstractValue value) { + exists(SubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.getRight()) and + k = c + x + ) + or + exists(PointerSubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.getRight()) and + k = c + x + ) +} + // left + x == right + c => left == right + (c-x) // left == (right + x) + c => left == right + (c+x) private predicate add_eq( @@ -848,5 +947,30 @@ private predicate add_eq( ) } +// left + x == right + c => left == right + (c-x) +private predicate add_eq( + Instruction test, Operand left, int k, boolean areEqual, AbstractValue value +) { + exists(AddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) + or + exists(PointerAddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) +} + /** The int value of integer constant expression. */ private int int_value(Instruction i) { result = i.(IntegerConstantInstruction).getValue().toInt() } From decede51dc1ee2db399631bd80f25aa650213071 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 13:54:30 +0000 Subject: [PATCH 111/497] C++: Use the new predicate in 'ScanfChecks.qll'. --- cpp/ql/src/Critical/ScanfChecks.qll | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cpp/ql/src/Critical/ScanfChecks.qll b/cpp/ql/src/Critical/ScanfChecks.qll index b2464ecc9f4..403df4715f3 100644 --- a/cpp/ql/src/Critical/ScanfChecks.qll +++ b/cpp/ql/src/Critical/ScanfChecks.qll @@ -11,7 +11,7 @@ private predicate exprInBooleanContext(Expr e) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = e and - gc.comparesEq(valueNumber(i).getAUse(), zero(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), 0, _, _) ) or gc.getUnconvertedResultExpression() = e @@ -36,10 +36,6 @@ private string getEofValue() { ) } -private ConstantInstruction getEofInstruction() { result.getValue() = getEofValue() } - -private Operand eof() { result.getDef() = getEofInstruction() } - /** * Holds if the value of `call` has been checked to not equal `EOF`. */ @@ -47,7 +43,7 @@ private predicate checkedForEof(ScanfFunctionCall call) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = call | // call == EOF - gc.comparesEq(valueNumber(i).getAUse(), eof(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), getEofValue().toInt(), _, _) or // call < 0 (EOF is guaranteed to be negative) gc.comparesLt(valueNumber(i).getAUse(), zero(), 0, true, _) From dbd47b387afb25bce808877198cb5a2bfb0714de Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 16:26:36 +0000 Subject: [PATCH 112/497] C++: Add AST wrappers for the new predicates. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 60de332f847..ddc380c304f 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -137,6 +137,17 @@ class GuardCondition extends Expr { */ cached predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { none() } + + /** Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + cached + predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { none() } + + /** + * Holds if (determined by this guard) `e == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `e != k`. + */ + cached + predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { none() } } /** @@ -184,6 +195,20 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { this.comparesEq(left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) ) } + + override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { + exists(boolean partIsTrue, GuardCondition part | + this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) + | + part.comparesEq(e, k, areEqual, partIsTrue) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(boolean testIsTrue | + this.comparesEq(e, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) + ) + } } /** @@ -245,6 +270,21 @@ private class GuardConditionFromIR extends GuardCondition { ) } + override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, testIsTrue) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(Instruction i, boolean testIsTrue | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, testIsTrue) and + this.controls(block, testIsTrue) + ) + } + /** * Holds if this condition controls `block`, meaning that `block` is only * entered if the value of this condition is `v`. This helper From 032678a367bc849f55dfa90baba9f2548436212d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 16:27:10 +0000 Subject: [PATCH 113/497] C++: Extend tests to also test the new predicates. --- .../controlflow/guards-ir/tests.ql | 89 ++++++++++++++----- .../controlflow/guards/GuardsCompare.ql | 28 ++++-- 2 files changed, 87 insertions(+), 30 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index fe3d92d2c2b..263c30c2fec 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -4,22 +4,32 @@ import semmle.code.cpp.controlflow.IRGuards query predicate astGuards(GuardCondition guard) { any() } query predicate astGuardsCompare(int startLine, string msg) { - exists(GuardCondition guard, Expr left, Expr right, int k, string which, string op | + exists(GuardCondition guard, Expr left, int k, string which, string op | exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = left + op + k + " when " + guard + " is " + which ) and - startLine = guard.getLocation().getStartLine() and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + startLine = guard.getLocation().getStartLine() ) } @@ -46,28 +56,52 @@ query predicate astGuardsEnsure( ) } +query predicate astGuardsEnsure_const( + GuardCondition guard, Expr left, string op, int k, int start, int end +) { + exists(BasicBlock block | + guard.ensuresEq(left, k, block, true) and op = "==" + or + guard.ensuresEq(left, k, block, false) and op = "!=" + | + block.hasLocationInfo(_, start, _, end, _) + ) +} + query predicate irGuards(IRGuardCondition guard) { any() } query predicate irGuardsCompare(int startLine, string msg) { - exists(IRGuardCondition guard, Operand left, Operand right, int k, string which, string op | + exists(IRGuardCondition guard, Operand left, int k, string which, string op | exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Operand right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + + right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + k + " when " + guard + " is " + + which ) and - startLine = guard.getLocation().getStartLine() and - msg = - left.getAnyDef().getUnconvertedResultExpression() + op + - right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + - which + startLine = guard.getLocation().getStartLine() ) } @@ -95,3 +129,16 @@ query predicate irGuardsEnsure( block.getLocation().hasLocationInfo(_, start, _, end, _) ) } + +query predicate irGuardsEnsure_const( + IRGuardCondition guard, Instruction left, string op, int k, int start, int end +) { + exists(IRBlock block, Operand leftOp | + guard.ensuresEq(leftOp, k, block, true) and op = "==" + or + guard.ensuresEq(leftOp, k, block, false) and op = "!=" + | + leftOp = left.getAUse() and + block.getLocation().hasLocationInfo(_, start, _, end, _) + ) +} diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index a1373b2923b..17d4fcaae94 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -7,20 +7,30 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, Expr left, Expr right, int k, string which, string op, string msg +from GuardCondition guard, Expr left, int k, string which, string op, string msg where exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " - ) and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = left + op + k + " when " + guard + " is " + which + ) select guard.getLocation().getStartLine(), msg From 40dbc6fdd9e50c7b8d5cfc49fd741510e9b001e3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Mar 2024 16:27:18 +0000 Subject: [PATCH 114/497] C++: Accept test changes. --- .../controlflow/guards-ir/tests.expected | 88 +++++++++++++++++++ .../controlflow/guards/GuardsCompare.expected | 27 ++++++ 2 files changed, 115 insertions(+) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index ac8068e768d..2eb749580b4 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -62,7 +62,9 @@ astGuardsCompare | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | @@ -86,15 +88,20 @@ astGuardsCompare | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | @@ -102,15 +109,23 @@ astGuardsCompare | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | @@ -122,8 +137,11 @@ astGuardsCompare | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | @@ -162,7 +180,9 @@ astGuardsCompare | 165 | y >= x+43 when ... < ... is true | | 175 | 0 != call to foo+0 when ... == ... is false | | 175 | 0 == call to foo+0 when ... == ... is true | +| 175 | call to foo != 0 when ... == ... is false | | 175 | call to foo != 0+0 when ... == ... is false | +| 175 | call to foo == 0 when ... == ... is true | | 175 | call to foo == 0+0 when ... == ... is true | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | @@ -443,6 +463,34 @@ astGuardsEnsure | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 | +astGuardsEnsure_const +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 107 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 | irGuards | test.c:7:9:7:13 | CompareGT: ... > ... | | test.c:17:8:17:12 | CompareLT: ... < ... | @@ -497,7 +545,9 @@ irGuardsCompare | 26 | x >= 0+1 when CompareGT: ... > ... is true | | 31 | - ... != x+0 when CompareEQ: ... == ... is false | | 31 | - ... == x+0 when CompareEQ: ... == ... is true | +| 31 | x != -1 when CompareEQ: ... == ... is false | | 31 | x != - ...+0 when CompareEQ: ... == ... is false | +| 31 | x == -1 when CompareEQ: ... == ... is true | | 31 | x == - ...+0 when CompareEQ: ... == ... is true | | 34 | 10 < j+1 when CompareLT: ... < ... is false | | 34 | 10 >= j+1 when CompareLT: ... < ... is true | @@ -519,25 +569,35 @@ irGuardsCompare | 58 | 0 < y+1 when CompareLT: ... < ... is false | | 58 | 0 == x+0 when CompareEQ: ... == ... is true | | 58 | 0 >= y+1 when CompareLT: ... < ... is true | +| 58 | x != 0 when CompareEQ: ... == ... is false | | 58 | x != 0+0 when CompareEQ: ... == ... is false | +| 58 | x == 0 when CompareEQ: ... == ... is true | | 58 | x == 0+0 when CompareEQ: ... == ... is true | | 58 | y < 0+0 when CompareLT: ... < ... is true | | 58 | y >= 0+0 when CompareLT: ... < ... is false | | 75 | 0 != x+0 when CompareEQ: ... == ... is false | | 75 | 0 == x+0 when CompareEQ: ... == ... is true | +| 75 | x != 0 when CompareEQ: ... == ... is false | | 75 | x != 0+0 when CompareEQ: ... == ... is false | +| 75 | x == 0 when CompareEQ: ... == ... is true | | 75 | x == 0+0 when CompareEQ: ... == ... is true | | 85 | 0 != x+0 when CompareEQ: ... == ... is false | | 85 | 0 != y+0 when CompareNE: ... != ... is true | | 85 | 0 == x+0 when CompareEQ: ... == ... is true | | 85 | 0 == y+0 when CompareNE: ... != ... is false | +| 85 | x != 0 when CompareEQ: ... == ... is false | | 85 | x != 0+0 when CompareEQ: ... == ... is false | +| 85 | x == 0 when CompareEQ: ... == ... is true | | 85 | x == 0+0 when CompareEQ: ... == ... is true | +| 85 | y != 0 when CompareNE: ... != ... is true | | 85 | y != 0+0 when CompareNE: ... != ... is true | +| 85 | y == 0 when CompareNE: ... != ... is false | | 85 | y == 0+0 when CompareNE: ... != ... is false | | 94 | 0 != x+0 when CompareNE: ... != ... is true | | 94 | 0 == x+0 when CompareNE: ... != ... is false | +| 94 | x != 0 when CompareNE: ... != ... is true | | 94 | x != 0+0 when CompareNE: ... != ... is true | +| 94 | x == 0 when CompareNE: ... != ... is false | | 94 | x == 0+0 when CompareNE: ... != ... is false | | 102 | 10 < j+1 when CompareLT: ... < ... is false | | 102 | 10 >= j+1 when CompareLT: ... < ... is true | @@ -547,7 +607,9 @@ irGuardsCompare | 109 | 0 < y+1 when CompareLT: ... < ... is false | | 109 | 0 == x+0 when CompareEQ: ... == ... is true | | 109 | 0 >= y+1 when CompareLT: ... < ... is true | +| 109 | x != 0 when CompareEQ: ... == ... is false | | 109 | x != 0+0 when CompareEQ: ... == ... is false | +| 109 | x == 0 when CompareEQ: ... == ... is true | | 109 | x == 0+0 when CompareEQ: ... == ... is true | | 109 | y < 0+0 when CompareLT: ... < ... is true | | 109 | y >= 0+0 when CompareLT: ... < ... is false | @@ -585,7 +647,9 @@ irGuardsCompare | 165 | y >= x+43 when CompareLT: ... < ... is true | | 175 | 0 != call to foo+0 when CompareEQ: ... == ... is false | | 175 | 0 == call to foo+0 when CompareEQ: ... == ... is true | +| 175 | call to foo != 0 when CompareEQ: ... == ... is false | | 175 | call to foo != 0+0 when CompareEQ: ... == ... is false | +| 175 | call to foo == 0 when CompareEQ: ... == ... is true | | 175 | call to foo == 0+0 when CompareEQ: ... == ... is true | irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | @@ -841,3 +905,27 @@ irGuardsEnsure | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | != | test.cpp:31:7:31:7 | Load: x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 32 | 32 | +irGuardsEnsure_const +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | != | 0 | 79 | 79 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 76 | 76 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 86 | 86 | +| test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:18 | Load: y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | != | 0 | 95 | 95 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 99 | 99 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 103 | 103 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 107 | 107 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 110 | 110 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 113 | 113 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 113 | 113 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 58068f3991d..5f714676b5c 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -20,7 +20,9 @@ | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | @@ -44,31 +46,53 @@ | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | +| 61 | i == 0 when i is true | +| 61 | i == 1 when i is true | +| 61 | i == 2 when i is true | +| 74 | i == 0 when i is true | +| 74 | i == 1 when i is true | +| 74 | i == 2 when i is true | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | +| 84 | i == 0 when i is true | +| 84 | i == 1 when i is true | +| 84 | i == 2 when i is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | | 85 | 0 != y+0 when ... && ... is true | | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | @@ -80,8 +104,11 @@ | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | From 764e99bda75b0e9372c683c0dcf080706a727713 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 18 Mar 2024 16:56:20 +0000 Subject: [PATCH 115/497] Fix model for `java.util.Scanner#findall(String)` Co-authored-by: Anders Schack-Mulligen --- java/ql/lib/ext/java.util.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index be4665d4cd7..fe4958856d3 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -312,7 +312,7 @@ extensions: - ["java.util", "Queue", True, "remove", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["java.util", "ResourceBundle", True, "getString", "(String)", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] - ["java.util", "Scanner", True, "findAll", "(Pattern)", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] - - ["java.util", "Scanner", True, "findAll", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["java.util", "Scanner", True, "findAll", "(String)", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] - ["java.util", "Scanner", True, "match", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - ["java.util", "Scanner", True, "Scanner", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util", "Scanner", True, "findInLine", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] From e895f96a3a50b740da387fe77e8d8dd6159cc15c Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 18 Mar 2024 17:55:02 +0000 Subject: [PATCH 116/497] Ruby: Taint flow to second block param in map When `map` is called on a hash, the values in the hash are passed to the second parameter of the block. --- ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index b2a30beafc3..d2e51624b4e 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -1855,7 +1855,7 @@ module Enumerable { override predicate propagatesFlow(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and - output = "Argument[block].Parameter[0]" and + output = "Argument[block].Parameter[0, 1]" and preservesValue = true or input = "Argument[block].ReturnValue" and From 187a68bf766bf713b5ef93946bc4a1797598f621 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 18 Mar 2024 17:56:10 +0000 Subject: [PATCH 117/497] Ruby: Add flow summary for `Hash#keys` --- ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 4871d8d9924..ee90c3ee6e4 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -523,3 +523,13 @@ private class ValuesSummary extends SimpleSummarizedCallable { preservesValue = true } } + +private class KeysSummary extends SimpleSummarizedCallable { + KeysSummary() { this = "keys" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self].Element[any]" and + output = "ReturnValue.Element[?]" and + preservesValue = true + } +} From 3649af3f0568fc544cbeef82f6e4e386aab62003 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Mon, 18 Mar 2024 17:56:59 +0000 Subject: [PATCH 118/497] Go: Add test for `go/autobuilder/invalid-go-toolchain-version` diagnostic --- .../diagnostics.expected | 31 +++++++++++++++++++ .../invalid-toolchain-version/src/go.mod | 3 ++ .../invalid-toolchain-version/src/main.go | 5 +++ .../invalid-toolchain-version/test.py | 19 ++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected create mode 100644 go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod create mode 100644 go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go create mode 100644 go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected new file mode 100644 index 00000000000..e506cc1e230 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected @@ -0,0 +1,31 @@ +{ + "location": { + "file": "go.mod" + }, + "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://tip.golang.org/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", + "severity": "warning", + "source": { + "extractorName": "go", + "id": "go/autobuilder/invalid-go-toolchain-version", + "name": "`1.21` is not a valid Go toolchain version" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod new file mode 100644 index 00000000000..bee3365b899 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/go.mod @@ -0,0 +1,3 @@ +go 1.21 + +module example diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go new file mode 100644 index 00000000000..79058077776 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/src/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + +} diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py new file mode 100644 index 00000000000..2824c219d37 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/test.py @@ -0,0 +1,19 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +os.environ['LGTM_INDEX_IMPORT_PATH'] = "test" +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) From 9a8ec36a4f0e30b6c5b6553180327adaefbb6483 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 8 Mar 2024 14:47:32 +0000 Subject: [PATCH 119/497] Accept test changes --- .../test.expected | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 9ad4eeeadc8..7768a1d28bd 100644 --- a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -32,6 +32,14 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | +| AbstractCollection | add | T | +| AbstractCollection | addAll | Collection | +| AbstractCollection | contains | Object | +| AbstractCollection | containsAll | Collection | +| AbstractCollection | remove | Object | +| AbstractCollection | removeAll | Collection | +| AbstractCollection | retainAll | Collection | +| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -169,6 +177,17 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | +| Collection | add | T | +| Collection | addAll | Collection | +| Collection | contains | Object | +| Collection | containsAll | Collection | +| Collection | equals | Object | +| Collection | remove | Object | +| Collection | removeAll | Collection | +| Collection | removeIf | Predicate | +| Collection | retainAll | Collection | +| Collection | toArray | IntFunction | +| Collection | toArray | T[] | | Collection | add | V | | Collection | addAll | Collection | | Collection | contains | Object | From 32b80f8cb182163f22370fb6cd3a79619ce37b2b Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 19 Mar 2024 08:38:14 +0000 Subject: [PATCH 120/497] Ruby: Add tests for hash flow --- .../lib/codeql/ruby/frameworks/core/Array.qll | 1 + .../lib/codeql/ruby/frameworks/core/Hash.qll | 2 ++ .../dataflow/hash-flow/hash-flow.expected | 33 +++++++++++++++++++ .../dataflow/hash-flow/hash_flow.rb | 15 +++++++++ 4 files changed, 51 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index d2e51624b4e..2da521e54a1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -1855,6 +1855,7 @@ module Enumerable { override predicate propagatesFlow(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and + // For `Hash#map`, the value flows to parameter 1 output = "Argument[block].Parameter[0, 1]" and preservesValue = true or diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index ee90c3ee6e4..7583498ed08 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -524,6 +524,8 @@ private class ValuesSummary extends SimpleSummarizedCallable { } } +// We don't (yet) track data flow through hash keys, but this is still useful in cases where a +// whole hash(like) object is tainted, such as `ActionController#params`. private class KeysSummary extends SimpleSummarizedCallable { KeysSummary() { this = "keys" } diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected index d2da8837a56..23027a7d73f 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected @@ -1089,6 +1089,19 @@ edges | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | | hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | | hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | +| hash_flow.rb:1006:5:1006:5 | [post] h [element] | hash_flow.rb:1007:12:1007:12 | h [element] | provenance | | +| hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1006:5:1006:5 | [post] h [element] | provenance | | +| hash_flow.rb:1007:5:1007:8 | keys [element] | hash_flow.rb:1008:10:1008:13 | keys [element] | provenance | | +| hash_flow.rb:1007:12:1007:12 | h [element] | hash_flow.rb:1007:12:1007:17 | call to keys [element] | provenance | | +| hash_flow.rb:1007:12:1007:17 | call to keys [element] | hash_flow.rb:1007:5:1007:8 | keys [element] | provenance | | +| hash_flow.rb:1008:10:1008:13 | keys [element] | hash_flow.rb:1008:10:1008:17 | ...[...] | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1013:5:1013:5 | h [element :a] | provenance | | +| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | +| hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | provenance | | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:15:1013:15 | k | provenance | | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:18:1013:18 | v | provenance | | +| hash_flow.rb:1013:15:1013:15 | k | hash_flow.rb:1015:14:1015:14 | k | provenance | | +| hash_flow.rb:1013:18:1013:18 | v | hash_flow.rb:1014:14:1014:14 | v | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -2251,6 +2264,21 @@ nodes | hash_flow.rb:996:14:996:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:998:14:998:15 | h2 [element :b] | semmle.label | h2 [element :b] | | hash_flow.rb:998:14:998:18 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1006:5:1006:5 | [post] h [element] | semmle.label | [post] h [element] | +| hash_flow.rb:1006:14:1006:24 | call to taint | semmle.label | call to taint | +| hash_flow.rb:1007:5:1007:8 | keys [element] | semmle.label | keys [element] | +| hash_flow.rb:1007:12:1007:12 | h [element] | semmle.label | h [element] | +| hash_flow.rb:1007:12:1007:17 | call to keys [element] | semmle.label | call to keys [element] | +| hash_flow.rb:1008:10:1008:13 | keys [element] | semmle.label | keys [element] | +| hash_flow.rb:1008:10:1008:17 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:1012:14:1012:24 | call to taint | semmle.label | call to taint | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1013:15:1013:15 | k | semmle.label | k | +| hash_flow.rb:1013:18:1013:18 | v | semmle.label | v | +| hash_flow.rb:1014:14:1014:14 | v | semmle.label | v | +| hash_flow.rb:1015:14:1015:14 | k | semmle.label | k | subpaths hashLiteral | hash_flow.rb:10:12:21:5 | call to [] | @@ -2324,6 +2352,8 @@ hashLiteral | hash_flow.rb:946:13:950:5 | call to [] | | hash_flow.rb:971:9:971:38 | ...[...] | | hash_flow.rb:994:14:994:47 | ...[...] | +| hash_flow.rb:1005:9:1005:10 | call to [] | +| hash_flow.rb:1012:9:1012:45 | call to [] | #select | hash_flow.rb:22:10:22:17 | ...[...] | hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:22:10:22:17 | ...[...] | $@ | hash_flow.rb:11:15:11:24 | call to taint | call to taint | | hash_flow.rb:24:10:24:17 | ...[...] | hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:24:10:24:17 | ...[...] | $@ | hash_flow.rb:13:12:13:21 | call to taint | call to taint | @@ -2569,3 +2599,6 @@ hashLiteral | hash_flow.rb:975:10:975:13 | ...[...] | hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:975:10:975:13 | ...[...] | $@ | hash_flow.rb:971:23:971:31 | call to taint | call to taint | | hash_flow.rb:996:14:996:19 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:996:14:996:19 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | | hash_flow.rb:998:14:998:18 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:998:14:998:18 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | +| hash_flow.rb:1008:10:1008:17 | ...[...] | hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1008:10:1008:17 | ...[...] | $@ | hash_flow.rb:1006:14:1006:24 | call to taint | call to taint | +| hash_flow.rb:1014:14:1014:14 | v | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1014:14:1014:14 | v | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | +| hash_flow.rb:1015:14:1015:14 | k | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1015:14:1015:14 | k | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb index 14c2504f959..b88f8c3a4d4 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb @@ -1000,3 +1000,18 @@ class M54 end M54.new.m54(:b) + +def m55 + h = {} + h[f()] = taint(55.1) + keys = h.keys + sink(keys[:a]) # $ hasValueFlow=55.1 +end + +def m56 + h = { a: taint(56.1), taint(56.2) => :b } + h.map do |k, v| + sink(v) # $ hasValueFlow=56.1 + sink(k) # $ MISSING: hasValueFlow=56.2 SPURIOUS: hasValueFlow=56.1 + end +end From dde148ee7ef4571b3b28b583d3cc76cea8dd377b Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 19 Mar 2024 08:40:30 +0000 Subject: [PATCH 121/497] Ruby: add changenote --- ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md diff --git a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md new file mode 100644 index 00000000000..963479568a0 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow is now tracked through `ActiveRecord` scopes. From 0c3d9f75f4a48308ee2b40043d541ceee8ce9227 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 09:41:58 +0000 Subject: [PATCH 122/497] C++: Add change note. --- .../2024-03-19-predicates-for-switches-as-guards.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md new file mode 100644 index 00000000000..3dde8805599 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. \ No newline at end of file From cee6f003fd58c64916c629f7d8b27b870d6f78c5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Mar 2024 10:01:05 +0100 Subject: [PATCH 123/497] Tree-sitter: Split up `ast_node_info` table into two tables --- .../src/extractor/mod.rs | 59 +++++++++-------- .../src/generator/mod.rs | 64 ++++++++++++------- .../src/generator/ql_gen.rs | 27 ++++---- 3 files changed, 86 insertions(+), 64 deletions(-) diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 0d493ebd9e1..d26e5e45975 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -209,10 +209,10 @@ struct Visitor<'a> { diagnostics_writer: &'a mut diagnostics::LogWriter, /// A trap::Writer to accumulate trap entries trap_writer: &'a mut trap::Writer, - /// A counter for top-level child nodes - toplevel_child_counter: usize, - /// Language-specific name of the AST info table - ast_node_info_table_name: String, + /// Language-specific name of the AST location table + ast_node_location_table_name: String, + /// Language-specific name of the AST parent table + ast_node_parent_table_name: String, /// Language-specific name of the tokeninfo table tokeninfo_table_name: String, /// A lookup table from type name to node types @@ -242,8 +242,8 @@ impl<'a> Visitor<'a> { source, diagnostics_writer, trap_writer, - toplevel_child_counter: 0, - ast_node_info_table_name: format!("{}_ast_node_info", language_prefix), + ast_node_location_table_name: format!("{}_ast_node_location", language_prefix), + ast_node_parent_table_name: format!("{}_ast_node_parent", language_prefix), tokeninfo_table_name: format!("{}_tokeninfo", language_prefix), schema, stack: Vec::new(), @@ -342,27 +342,29 @@ impl<'a> Visitor<'a> { }) .unwrap(); let mut valid = true; - let (parent_id, parent_index) = match self.stack.last_mut() { + let parent_info = match self.stack.last_mut() { Some(p) if !node.is_extra() => { p.1 += 1; - (p.0, p.1 - 1) - } - _ => { - self.toplevel_child_counter += 1; - (self.file_label, self.toplevel_child_counter - 1) + Some((p.0, p.1 - 1)) } + _ => None, }; match &table.kind { EntryKind::Token { kind_id, .. } => { self.trap_writer.add_tuple( - &self.ast_node_info_table_name, - vec![ - trap::Arg::Label(id), - trap::Arg::Label(parent_id), - trap::Arg::Int(parent_index), - trap::Arg::Label(loc_label), - ], + &self.ast_node_location_table_name, + vec![trap::Arg::Label(id), trap::Arg::Label(loc_label)], ); + if let Some((parent_id, parent_index)) = parent_info { + self.trap_writer.add_tuple( + &self.ast_node_parent_table_name, + vec![ + trap::Arg::Label(id), + trap::Arg::Label(parent_id), + trap::Arg::Int(parent_index), + ], + ); + }; self.trap_writer.add_tuple( &self.tokeninfo_table_name, vec![ @@ -378,14 +380,19 @@ impl<'a> Visitor<'a> { } => { if let Some(args) = self.complex_node(&node, fields, &child_nodes, id) { self.trap_writer.add_tuple( - &self.ast_node_info_table_name, - vec![ - trap::Arg::Label(id), - trap::Arg::Label(parent_id), - trap::Arg::Int(parent_index), - trap::Arg::Label(loc_label), - ], + &self.ast_node_location_table_name, + vec![trap::Arg::Label(id), trap::Arg::Label(loc_label)], ); + if let Some((parent_id, parent_index)) = parent_info { + self.trap_writer.add_tuple( + &self.ast_node_parent_table_name, + vec![ + trap::Arg::Label(id), + trap::Arg::Label(parent_id), + trap::Arg::Int(parent_index), + ], + ); + }; let mut all_args = vec![trap::Arg::Label(id)]; all_args.extend(args); self.trap_writer.add_tuple(table_name, all_args); diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs index 0d01deae57f..ea41f3190e6 100644 --- a/shared/tree-sitter-extractor/src/generator/mod.rs +++ b/shared/tree-sitter-extractor/src/generator/mod.rs @@ -52,8 +52,8 @@ pub fn generate( for language in languages { let prefix = node_types::to_snake_case(&language.name); let ast_node_name = format!("{}_ast_node", &prefix); - let node_info_table_name = format!("{}_ast_node_info", &prefix); - let ast_node_parent_name = format!("{}_ast_node_parent", &prefix); + let node_location_table_name = format!("{}_ast_node_location", &prefix); + let node_parent_table_name = format!("{}_ast_node_parent", &prefix); let token_name = format!("{}_token", &prefix); let tokeninfo_name = format!("{}_tokeninfo", &prefix); let reserved_word_name = format!("{}_reserved_word", &prefix); @@ -72,13 +72,12 @@ pub fn generate( name: &ast_node_name, members: ast_node_members, }), - dbscheme::Entry::Union(dbscheme::Union { - name: &ast_node_parent_name, - members: [&ast_node_name, "file"].iter().cloned().collect(), - }), - dbscheme::Entry::Table(create_ast_node_info_table( - &node_info_table_name, - &ast_node_parent_name, + dbscheme::Entry::Table(create_ast_node_location_table( + &node_location_table_name, + &ast_node_name, + )), + dbscheme::Entry::Table(create_ast_node_parent_table( + &node_parent_table_name, &ast_node_name, )), ], @@ -87,7 +86,8 @@ pub fn generate( let mut body = vec![ ql::TopLevel::Class(ql_gen::create_ast_node_class( &ast_node_name, - &node_info_table_name, + &node_location_table_name, + &node_parent_table_name, )), ql::TopLevel::Class(ql_gen::create_token_class(&token_name, &tokeninfo_name)), ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)), @@ -335,18 +335,43 @@ fn convert_nodes( (entries, ast_node_members, token_kinds) } -/// Creates a dbscheme table specifying the parent node and location for each -/// AST node. +/// Creates a dbscheme table specifying the location for each AST node. /// /// # Arguments /// - `name` - the name of the table to create. -/// - `parent_name` - the name of the parent type. /// - `ast_node_name` - the name of the node child type. -fn create_ast_node_info_table<'a>( +fn create_ast_node_location_table<'a>( name: &'a str, - parent_name: &'a str, ast_node_name: &'a str, ) -> dbscheme::Table<'a> { + dbscheme::Table { + name, + columns: vec![ + dbscheme::Column { + db_type: dbscheme::DbColumnType::Int, + name: "node", + unique: true, + ql_type: ql::Type::At(ast_node_name), + ql_type_is_ref: true, + }, + dbscheme::Column { + unique: false, + db_type: dbscheme::DbColumnType::Int, + name: "loc", + ql_type: ql::Type::At("location_default"), + ql_type_is_ref: true, + }, + ], + keysets: None, + } +} + +/// Creates a dbscheme table specifying the parent node for each AST node. +/// +/// # Arguments +/// - `name` - the name of the table to create. +/// - `ast_node_name` - the name of the node child type. +fn create_ast_node_parent_table<'a>(name: &'a str, ast_node_name: &'a str) -> dbscheme::Table<'a> { dbscheme::Table { name, columns: vec![ @@ -361,7 +386,7 @@ fn create_ast_node_info_table<'a>( db_type: dbscheme::DbColumnType::Int, name: "parent", unique: false, - ql_type: ql::Type::At(parent_name), + ql_type: ql::Type::At(ast_node_name), ql_type_is_ref: true, }, dbscheme::Column { @@ -371,13 +396,6 @@ fn create_ast_node_info_table<'a>( ql_type: ql::Type::Int, ql_type_is_ref: true, }, - dbscheme::Column { - unique: false, - db_type: dbscheme::DbColumnType::Int, - name: "loc", - ql_type: ql::Type::At("location_default"), - ql_type_is_ref: true, - }, ], keysets: Some(vec!["parent", "parent_index"]), } diff --git a/shared/tree-sitter-extractor/src/generator/ql_gen.rs b/shared/tree-sitter-extractor/src/generator/ql_gen.rs index 4407cbdd32e..919ff43af42 100644 --- a/shared/tree-sitter-extractor/src/generator/ql_gen.rs +++ b/shared/tree-sitter-extractor/src/generator/ql_gen.rs @@ -4,7 +4,11 @@ use crate::{generator::ql, node_types}; /// Creates the hard-coded `AstNode` class that acts as a supertype of all /// classes we generate. -pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> ql::Class<'a> { +pub fn create_ast_node_class<'a>( + ast_node: &'a str, + node_location_table: &'a str, + node_parent_table: &'a str, +) -> ql::Class<'a> { // Default implementation of `toString` calls `this.getAPrimaryQlClass()` let to_string = ql::Predicate { qldoc: Some(String::from( @@ -32,13 +36,8 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Normal("L::Location")), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, - vec![ - ql::Expression::Var("this"), - ql::Expression::Var("_"), // parent - ql::Expression::Var("_"), // parent index - ql::Expression::Var("result"), // location - ], + node_location_table, + vec![ql::Expression::Var("this"), ql::Expression::Var("result")], ), }; let get_a_field_or_child = create_none_predicate( @@ -55,12 +54,11 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Normal("AstNode")), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, + node_parent_table, vec![ ql::Expression::Var("this"), ql::Expression::Var("result"), - ql::Expression::Var("_"), // parent index - ql::Expression::Var("_"), // location + ql::Expression::Var("_"), ], ), }; @@ -74,12 +72,11 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) -> return_type: Some(ql::Type::Int), formal_parameters: vec![], body: ql::Expression::Pred( - node_info_table, + node_parent_table, vec![ ql::Expression::Var("this"), - ql::Expression::Var("_"), // parent - ql::Expression::Var("result"), // parent index - ql::Expression::Var("_"), // location + ql::Expression::Var("_"), + ql::Expression::Var("result"), ], ), }; From d47e2690b89f69e540e5f1c1f39e558c75af22d4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 18 Mar 2024 16:14:03 +0100 Subject: [PATCH 124/497] C++: Update test results after extractor changes --- .../test/library-tests/ir/ir/PrintAST.expected | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 87179ad8bf8..669ec52376f 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1781,6 +1781,12 @@ destructors_for_temps.cpp: # 15| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 # 15| Type = [VoidType] void # 15| ValueCategory = prvalue +# 15| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 15| Type = [VoidType] void +# 15| ValueCategory = prvalue +# 15| getQualifier(): [ReuseExpr] reuse of temporary object +# 15| Type = [Class] ClassWithDestructor2 +# 15| ValueCategory = xvalue # 15| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 15| Type = [Class] ClassWithDestructor2 # 15| ValueCategory = prvalue(load) @@ -1804,6 +1810,12 @@ destructors_for_temps.cpp: # 16| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 16| Type = [Class] ClassWithDestructor2 # 16| ValueCategory = prvalue(load) +# 16| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getQualifier(): [ReuseExpr] reuse of temporary object +# 16| Type = [Class] ClassWithDestructor2 +# 16| ValueCategory = xvalue # 17| getStmt(2): [ReturnStmt] return ... # 17| getExpr(): [FunctionCall] call to get_x # 17| Type = [PlainCharType] char @@ -18145,6 +18157,12 @@ ir.cpp: # 2293| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 2293| Type = [PointerType] const char * # 2293| ValueCategory = prvalue +# 2293| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [ReuseExpr] reuse of temporary object +# 2293| Type = [Struct] String +# 2293| ValueCategory = xvalue # 2293| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2293| Type = [Struct] String # 2293| ValueCategory = lvalue From 350b239ed62d5747195bb68c73239f36acbcbfd0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 10:29:43 +0000 Subject: [PATCH 125/497] C++: Fix cartesian product in 'simple_comparison_eq'. --- cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index ddc380c304f..ab67d77f5cd 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -722,10 +722,12 @@ private predicate simple_comparison_eq( /** Rearrange various simple comparisons into `op == k` form. */ private predicate simple_comparison_eq(Instruction test, Operand op, int k, AbstractValue value) { - exists(SwitchInstruction switch | + exists(SwitchInstruction switch, CaseEdge case | test = switch.getExpression() and op.getDef() = test and - value.(MatchValue).getCase().getValue().toInt() = k + case = value.(MatchValue).getCase() and + exists(switch.getSuccessor(case)) and + case.getValue().toInt() = k ) } From d7afd7b2e1d2797528aaf9322cc997b76cb61d23 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 10:54:35 +0000 Subject: [PATCH 126/497] C++: Accept test changes. --- .../library-tests/controlflow/guards/GuardsCompare.expected | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 5f714676b5c..1057e8e1046 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -58,18 +58,12 @@ | 61 | i == 0 when i is true | | 61 | i == 1 when i is true | | 61 | i == 2 when i is true | -| 74 | i == 0 when i is true | -| 74 | i == 1 when i is true | -| 74 | i == 2 when i is true | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | | 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | -| 84 | i == 0 when i is true | -| 84 | i == 1 when i is true | -| 84 | i == 2 when i is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | | 85 | 0 != y+0 when ... && ... is true | From e16e1c7e83f4b71ec670ab19b976661988c26067 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 11:26:32 +0000 Subject: [PATCH 127/497] C++: Add tests. --- .../library-tests/ir/ir/PrintAST.expected | 780 ++++++++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 28 + cpp/ql/test/library-tests/ir/ir/ir.cpp | 15 + .../ir/ir/operand_locations.expected | 14 + .../test/library-tests/ir/ir/raw_ir.expected | 26 + 5 files changed, 863 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 87179ad8bf8..11ca89a3b45 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -18670,6 +18670,786 @@ ir.cpp: # 2376| getExpr(): [FunctionAccess] VoidToInt # 2376| Type = [RoutineType] ..()(..) # 2376| ValueCategory = prvalue +# 2381| [TopLevelFunction] int small_operation_should_not_be_constant_folded() +# 2381| : +# 2381| getEntryPoint(): [BlockStmt] { ... } +# 2382| getStmt(0): [ReturnStmt] return ... +# 2382| getExpr(): [AddExpr] ... + ... +# 2382| Type = [IntType] int +# 2382| Value = [AddExpr] 2 +# 2382| ValueCategory = prvalue +# 2382| getLeftOperand(): [Literal] 1 +# 2382| Type = [IntType] int +# 2382| Value = [Literal] 1 +# 2382| ValueCategory = prvalue +# 2382| getRightOperand(): [Literal] 1 +# 2382| Type = [IntType] int +# 2382| Value = [Literal] 1 +# 2382| ValueCategory = prvalue +# 2392| [TopLevelFunction] int large_operation_should_be_constant_folded() +# 2392| : +# 2392| getEntryPoint(): [BlockStmt] { ... } +# 2393| getStmt(0): [ReturnStmt] return ... +# 2393| getExpr(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 64 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 32 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 32 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| Type = [IntType] int +# 2393| Value = [AddExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand(): [Literal] 1 +# 2393| Type = [IntType] int +# 2393| Value = [Literal] 1 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 2 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 4 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 8 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 16 +# 2393| ValueCategory = prvalue +# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 32 +# 2393| ValueCategory = prvalue +# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 32 +# 2393| ValueCategory = prvalue +# 2393| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2393| Type = [IntType] int +# 2393| Value = [ParenthesisExpr] 64 +# 2393| ValueCategory = prvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : 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 a5a09578750..f06fefabf3c 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -15135,6 +15135,34 @@ ir.cpp: # 2374| v2374_7(void) = AliasedUse : m2374_3 # 2374| v2374_8(void) = ExitFunction : +# 2381| int small_operation_should_not_be_constant_folded() +# 2381| Block 0 +# 2381| v2381_1(void) = EnterFunction : +# 2381| m2381_2(unknown) = AliasedDefinition : +# 2381| m2381_3(unknown) = InitializeNonLocal : +# 2381| m2381_4(unknown) = Chi : total:m2381_2, partial:m2381_3 +# 2382| r2382_1(glval) = VariableAddress[#return] : +# 2382| r2382_2(int) = Constant[2] : +# 2382| m2382_3(int) = Store[#return] : &:r2382_1, r2382_2 +# 2381| r2381_5(glval) = VariableAddress[#return] : +# 2381| v2381_6(void) = ReturnValue : &:r2381_5, m2382_3 +# 2381| v2381_7(void) = AliasedUse : m2381_3 +# 2381| v2381_8(void) = ExitFunction : + +# 2392| int large_operation_should_be_constant_folded() +# 2392| Block 0 +# 2392| v2392_1(void) = EnterFunction : +# 2392| m2392_2(unknown) = AliasedDefinition : +# 2392| m2392_3(unknown) = InitializeNonLocal : +# 2392| m2392_4(unknown) = Chi : total:m2392_2, partial:m2392_3 +# 2393| r2393_1(glval) = VariableAddress[#return] : +# 2393| r2393_2(int) = Constant[64] : +# 2393| m2393_3(int) = Store[#return] : &:r2393_1, r2393_2 +# 2392| r2392_5(glval) = VariableAddress[#return] : +# 2392| v2392_6(void) = ReturnValue : &:r2392_5, m2393_3 +# 2392| v2392_7(void) = AliasedUse : m2392_3 +# 2392| v2392_8(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 492f8c71c11..a195dcd5aa4 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2378,4 +2378,19 @@ namespace return_routine_type { } +int small_operation_should_not_be_constant_folded() { + return 1 + 1; +} + +#define BINOP2(x) (x + x) +#define BINOP4(x) (BINOP2(x) + BINOP2(x)) +#define BINOP8(x) (BINOP4(x) + BINOP4(x)) +#define BINOP16(x) (BINOP8(x) + BINOP8(x)) +#define BINOP32(x) (BINOP16(x) + BINOP16(x)) +#define BINOP64(x) (BINOP32(x) + BINOP32(x)) + +int large_operation_should_be_constant_folded() { + return BINOP64(1); +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index ad4cfdb1e7c..778f87f9de9 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -12530,6 +12530,20 @@ | ir.cpp:2374:32:2374:47 | SideEffect | m2374_3 | | ir.cpp:2376:9:2376:44 | Address | &:r2376_1 | | ir.cpp:2376:16:2376:43 | StoreValue | r2376_2 | +| ir.cpp:2381:5:2381:49 | Address | &:r2381_5 | +| ir.cpp:2381:5:2381:49 | ChiPartial | partial:m2381_3 | +| ir.cpp:2381:5:2381:49 | ChiTotal | total:m2381_2 | +| ir.cpp:2381:5:2381:49 | Load | m2382_3 | +| ir.cpp:2381:5:2381:49 | SideEffect | m2381_3 | +| ir.cpp:2382:5:2382:17 | Address | &:r2382_1 | +| ir.cpp:2382:12:2382:16 | StoreValue | r2382_2 | +| ir.cpp:2392:5:2392:45 | Address | &:r2392_5 | +| ir.cpp:2392:5:2392:45 | ChiPartial | partial:m2392_3 | +| ir.cpp:2392:5:2392:45 | ChiTotal | total:m2392_2 | +| ir.cpp:2392:5:2392:45 | Load | m2393_3 | +| ir.cpp:2392:5:2392:45 | SideEffect | m2392_3 | +| ir.cpp:2393:5:2393:22 | Address | &:r2393_1 | +| ir.cpp:2393:12:2393:21 | StoreValue | r2393_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 0c42f3d2af6..ebe05f70d18 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -13977,6 +13977,32 @@ ir.cpp: # 2374| v2374_6(void) = AliasedUse : ~m? # 2374| v2374_7(void) = ExitFunction : +# 2381| int small_operation_should_not_be_constant_folded() +# 2381| Block 0 +# 2381| v2381_1(void) = EnterFunction : +# 2381| mu2381_2(unknown) = AliasedDefinition : +# 2381| mu2381_3(unknown) = InitializeNonLocal : +# 2382| r2382_1(glval) = VariableAddress[#return] : +# 2382| r2382_2(int) = Constant[2] : +# 2382| mu2382_3(int) = Store[#return] : &:r2382_1, r2382_2 +# 2381| r2381_4(glval) = VariableAddress[#return] : +# 2381| v2381_5(void) = ReturnValue : &:r2381_4, ~m? +# 2381| v2381_6(void) = AliasedUse : ~m? +# 2381| v2381_7(void) = ExitFunction : + +# 2392| int large_operation_should_be_constant_folded() +# 2392| Block 0 +# 2392| v2392_1(void) = EnterFunction : +# 2392| mu2392_2(unknown) = AliasedDefinition : +# 2392| mu2392_3(unknown) = InitializeNonLocal : +# 2393| r2393_1(glval) = VariableAddress[#return] : +# 2393| r2393_2(int) = Constant[64] : +# 2393| mu2393_3(int) = Store[#return] : &:r2393_1, r2393_2 +# 2392| r2392_4(glval) = VariableAddress[#return] : +# 2392| v2392_5(void) = ReturnValue : &:r2392_4, ~m? +# 2392| v2392_6(void) = AliasedUse : ~m? +# 2392| v2392_7(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 From 4d3076ae7e94aa3cac7b37b30b8e8aad50c3640d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 11:30:40 +0000 Subject: [PATCH 128/497] C++: Don't constant fold small binary operations. --- .../raw/internal/TranslatedElement.qll | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 81c704edb8b..e96959f5a68 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -40,12 +40,28 @@ IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) { result.getTag() = tag } +private Expr getAnOperand(BinaryOperation binOp) { result = binOp.getAnOperand() } + +private int getNumberOfBinaryOperands(BinaryOperation binOp) { + result = count(getAnOperand*(binOp)) +} + /** * Holds if `expr` is a constant of a type that can be replaced directly with * its value in the IR. This does not include address constants as we have no * means to express those as QL values. */ -predicate isIRConstant(Expr expr) { exists(expr.getValue()) } +predicate isIRConstant(Expr expr) { + exists(expr.getValue()) and + // We avoid constant folding binary operations since it's often useful to + // mark one of those as a source in dataflow, and if the operation is + // constant folded it's not possible to mark its operands as a source (or + // sink). + // But to avoid creating an outrageous amount of IR from very large + // constant expressions we fall back to constant folding if the operation + // has more than 50 operands (i.e., 1 + 2 + 3 + 4 + ... + 50) + if expr instanceof BinaryOperation then getNumberOfBinaryOperands(expr) > 50 else any() +} // Pulled out for performance. See // https://github.com/github/codeql-coreql-team/issues/1044. From 1af1ba48a9435c37d03b47b0927c8d34226b63ca Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 11:30:51 +0000 Subject: [PATCH 129/497] C++: Accept test changes. --- .../library-tests/ir/ir/aliased_ir.expected | 62 ++++++++++------ .../ir/ir/operand_locations.expected | 36 ++++++---- .../test/library-tests/ir/ir/raw_ir.expected | 71 +++++++++++++------ 3 files changed, 117 insertions(+), 52 deletions(-) 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 f06fefabf3c..2efc51f1bcd 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -1457,13 +1457,15 @@ ir.cpp: # 43| m43_3(unknown) = InitializeNonLocal : # 43| m43_4(unknown) = Chi : total:m43_2, partial:m43_3 # 44| r44_1(glval) = VariableAddress[x] : -# 44| r44_2(int) = Constant[17] : -# 44| m44_3(int) = Store[x] : &:r44_1, r44_2 +# 44| r44_2(int) = Constant[5] : +# 44| r44_3(int) = Constant[12] : +# 44| r44_4(int) = Add : r44_2, r44_3 +# 44| m44_5(int) = Store[x] : &:r44_1, r44_4 # 45| r45_1(glval) = VariableAddress[y] : # 45| r45_2(short) = Constant[7] : # 45| m45_3(short) = Store[y] : &:r45_1, r45_2 # 46| r46_1(glval) = VariableAddress[x] : -# 46| r46_2(int) = Load[x] : &:r46_1, m44_3 +# 46| r46_2(int) = Load[x] : &:r46_1, m44_5 # 46| r46_3(glval) = VariableAddress[y] : # 46| r46_4(short) = Load[y] : &:r46_3, m45_3 # 46| r46_5(int) = Convert : r46_4 @@ -1472,7 +1474,7 @@ ir.cpp: # 46| r46_8(glval) = VariableAddress[y] : # 46| m46_9(short) = Store[y] : &:r46_8, r46_7 # 47| r47_1(glval) = VariableAddress[x] : -# 47| r47_2(int) = Load[x] : &:r47_1, m44_3 +# 47| r47_2(int) = Load[x] : &:r47_1, m44_5 # 47| r47_3(glval) = VariableAddress[y] : # 47| r47_4(short) = Load[y] : &:r47_3, m46_9 # 47| r47_5(int) = Convert : r47_4 @@ -6102,14 +6104,30 @@ ir.cpp: # 913| m913_6(int) = InitializeParameter[x] : &:r913_5 # 914| r914_1(glval) = VariableAddress[a] : # 914| r914_2(bool) = Constant[1] : -# 914| m914_3(bool) = Store[a] : &:r914_1, r914_2 -# 915| r915_1(glval) = VariableAddress[b] : -# 915| r915_2(bool) = Constant[1] : -# 915| v915_3(void) = ConditionalBranch : r915_2 -#-----| False -> Block 2 +# 914| v914_3(void) = ConditionalBranch : r914_2 +#-----| False -> Block 4 +#-----| True -> Block 2 + +# 914| Block 1 +# 914| r914_4(glval) = VariableAddress[#temp914:12] : +# 914| r914_5(bool) = Constant[1] : +# 914| m914_6(bool) = Store[#temp914:12] : &:r914_4, r914_5 +# 914| r914_7(glval) = VariableAddress[#temp914:12] : +# 914| r914_8(bool) = Load[#temp914:12] : &:r914_7, m914_6 +# 914| m914_9(bool) = Store[a] : &:r914_1, r914_8 +# 915| r915_1(glval) = VariableAddress[b] : +# 915| r915_2(bool) = Constant[1] : +# 915| v915_3(void) = ConditionalBranch : r915_2 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 914| Block 2 +# 914| r914_10(bool) = Constant[1] : +# 914| v914_11(void) = ConditionalBranch : r914_10 +#-----| False -> Block 4 #-----| True -> Block 1 -# 915| Block 1 +# 915| Block 3 # 915| r915_4(glval) = VariableAddress[x] : # 915| r915_5(int) = Load[x] : &:r915_4, m913_6 # 915| r915_6(glval) = VariableAddress[#temp915:11] : @@ -6122,7 +6140,7 @@ ir.cpp: # 913| v913_8(void) = AliasedUse : m913_3 # 913| v913_9(void) = ExitFunction : -# 913| Block 2 +# 913| Block 4 # 913| v913_10(void) = Unreached : # 949| void OperatorNew() @@ -7718,15 +7736,17 @@ ir.cpp: # 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, m1214_8 # 1215| r1215_6(int) = Constant[3] : -# 1215| r1215_7(int) = Constant[2] : -# 1215| r1215_8(int) = Constant[1] : -# 1215| r1215_9(int) = Constant[0] : -# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 -# 1215| m1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 +# 1215| r1215_7(int) = Constant[0] : +# 1215| r1215_8(int) = Add : r1215_6, r1215_7 +# 1215| r1215_9(int) = Constant[2] : +# 1215| r1215_10(int) = Constant[1] : +# 1215| r1215_11(int) = Constant[0] : +# 1215| r1215_12(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_8, 3:r1215_9, 4:r1215_10, 5:r1215_11 +# 1215| m1215_13(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_12 # 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, m1214_8 # 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_11 +# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_13 # 1216| r1216_5(__attribute((vector_size(16UL))) int) = Add : r1216_2, r1216_4 # 1216| r1216_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| m1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 @@ -15142,10 +15162,12 @@ ir.cpp: # 2381| m2381_3(unknown) = InitializeNonLocal : # 2381| m2381_4(unknown) = Chi : total:m2381_2, partial:m2381_3 # 2382| r2382_1(glval) = VariableAddress[#return] : -# 2382| r2382_2(int) = Constant[2] : -# 2382| m2382_3(int) = Store[#return] : &:r2382_1, r2382_2 +# 2382| r2382_2(int) = Constant[1] : +# 2382| r2382_3(int) = Constant[1] : +# 2382| r2382_4(int) = Add : r2382_2, r2382_3 +# 2382| m2382_5(int) = Store[#return] : &:r2382_1, r2382_4 # 2381| r2381_5(glval) = VariableAddress[#return] : -# 2381| v2381_6(void) = ReturnValue : &:r2381_5, m2382_3 +# 2381| v2381_6(void) = ReturnValue : &:r2381_5, m2382_5 # 2381| v2381_7(void) = AliasedUse : m2381_3 # 2381| v2381_8(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 778f87f9de9..9b9c4888092 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1668,13 +1668,15 @@ | ir.cpp:43:6:43:8 | ChiTotal | total:m43_2 | | ir.cpp:43:6:43:8 | SideEffect | m43_3 | | ir.cpp:44:9:44:9 | Address | &:r44_1 | -| ir.cpp:44:13:44:18 | StoreValue | r44_2 | +| ir.cpp:44:13:44:13 | Left | r44_2 | +| ir.cpp:44:13:44:18 | StoreValue | r44_4 | +| ir.cpp:44:17:44:18 | Right | r44_3 | | ir.cpp:45:11:45:11 | Address | &:r45_1 | | ir.cpp:45:15:45:15 | StoreValue | r45_2 | | ir.cpp:46:5:46:5 | Address | &:r46_8 | | ir.cpp:46:9:46:9 | Address | &:r46_1 | | ir.cpp:46:9:46:9 | Left | r46_2 | -| ir.cpp:46:9:46:9 | Load | m44_3 | +| ir.cpp:46:9:46:9 | Load | m44_5 | | ir.cpp:46:9:46:13 | StoreValue | r46_7 | | ir.cpp:46:9:46:13 | Unary | r46_6 | | ir.cpp:46:13:46:13 | Address | &:r46_3 | @@ -1684,7 +1686,7 @@ | ir.cpp:47:5:47:5 | Address | &:r47_7 | | ir.cpp:47:9:47:9 | Address | &:r47_1 | | ir.cpp:47:9:47:9 | Left | r47_2 | -| ir.cpp:47:9:47:9 | Load | m44_3 | +| ir.cpp:47:9:47:9 | Load | m44_5 | | ir.cpp:47:9:47:13 | StoreValue | r47_6 | | ir.cpp:47:13:47:13 | Address | &:r47_3 | | ir.cpp:47:13:47:13 | Load | m46_9 | @@ -5227,7 +5229,13 @@ | ir.cpp:913:6:913:23 | SideEffect | m913_3 | | ir.cpp:913:29:913:29 | Address | &:r913_5 | | ir.cpp:914:8:914:8 | Address | &:r914_1 | -| ir.cpp:914:12:914:23 | StoreValue | r914_2 | +| ir.cpp:914:12:914:15 | Condition | r914_2 | +| ir.cpp:914:12:914:23 | Address | &:r914_4 | +| ir.cpp:914:12:914:23 | Address | &:r914_7 | +| ir.cpp:914:12:914:23 | Load | m914_6 | +| ir.cpp:914:12:914:23 | StoreValue | r914_5 | +| ir.cpp:914:12:914:23 | StoreValue | r914_8 | +| ir.cpp:914:20:914:23 | Condition | r914_10 | | ir.cpp:915:7:915:7 | Address | &:r915_1 | | ir.cpp:915:11:915:16 | Condition | r915_2 | | ir.cpp:915:11:915:24 | Address | &:r915_6 | @@ -6521,24 +6529,26 @@ | ir.cpp:1214:12:1214:12 | Load | m1213_7 | | ir.cpp:1214:12:1214:12 | StoreValue | r1214_2 | | ir.cpp:1215:18:1215:28 | Address | &:r1215_1 | -| ir.cpp:1215:32:1215:78 | Arg(2) | 2:r1215_6 | -| ir.cpp:1215:32:1215:78 | StoreValue | r1215_10 | +| ir.cpp:1215:32:1215:78 | Arg(2) | 2:r1215_8 | +| ir.cpp:1215:32:1215:78 | StoreValue | r1215_12 | | ir.cpp:1215:56:1215:58 | Address | &:r1215_2 | | ir.cpp:1215:56:1215:58 | Arg(0) | 0:r1215_3 | | ir.cpp:1215:56:1215:58 | Load | m1214_8 | | ir.cpp:1215:61:1215:63 | Address | &:r1215_4 | | ir.cpp:1215:61:1215:63 | Arg(1) | 1:r1215_5 | | ir.cpp:1215:61:1215:63 | Load | m1214_8 | -| ir.cpp:1215:71:1215:71 | Arg(3) | 3:r1215_7 | -| ir.cpp:1215:74:1215:74 | Arg(4) | 4:r1215_8 | -| ir.cpp:1215:77:1215:77 | Arg(5) | 5:r1215_9 | +| ir.cpp:1215:66:1215:66 | Left | r1215_6 | +| ir.cpp:1215:68:1215:68 | Right | r1215_7 | +| ir.cpp:1215:71:1215:71 | Arg(3) | 3:r1215_9 | +| ir.cpp:1215:74:1215:74 | Arg(4) | 4:r1215_10 | +| ir.cpp:1215:77:1215:77 | Arg(5) | 5:r1215_11 | | ir.cpp:1216:3:1216:5 | Address | &:r1216_6 | | ir.cpp:1216:9:1216:11 | Address | &:r1216_1 | | ir.cpp:1216:9:1216:11 | Left | r1216_2 | | ir.cpp:1216:9:1216:11 | Load | m1214_8 | | ir.cpp:1216:9:1216:25 | StoreValue | r1216_5 | | ir.cpp:1216:15:1216:25 | Address | &:r1216_3 | -| ir.cpp:1216:15:1216:25 | Load | m1215_11 | +| ir.cpp:1216:15:1216:25 | Load | m1215_13 | | ir.cpp:1216:15:1216:25 | Right | r1216_4 | | ir.cpp:1221:5:1221:21 | Address | &:r1221_7 | | ir.cpp:1221:5:1221:21 | ChiPartial | partial:m1221_3 | @@ -12533,10 +12543,12 @@ | ir.cpp:2381:5:2381:49 | Address | &:r2381_5 | | ir.cpp:2381:5:2381:49 | ChiPartial | partial:m2381_3 | | ir.cpp:2381:5:2381:49 | ChiTotal | total:m2381_2 | -| ir.cpp:2381:5:2381:49 | Load | m2382_3 | +| ir.cpp:2381:5:2381:49 | Load | m2382_5 | | ir.cpp:2381:5:2381:49 | SideEffect | m2381_3 | | ir.cpp:2382:5:2382:17 | Address | &:r2382_1 | -| ir.cpp:2382:12:2382:16 | StoreValue | r2382_2 | +| ir.cpp:2382:12:2382:12 | Left | r2382_2 | +| ir.cpp:2382:12:2382:16 | StoreValue | r2382_4 | +| ir.cpp:2382:16:2382:16 | Right | r2382_3 | | ir.cpp:2392:5:2392:45 | Address | &:r2392_5 | | ir.cpp:2392:5:2392:45 | ChiPartial | partial:m2392_3 | | ir.cpp:2392:5:2392:45 | ChiTotal | total:m2392_2 | 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 ebe05f70d18..1a4c34b9fc7 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -1357,8 +1357,10 @@ ir.cpp: # 43| mu43_2(unknown) = AliasedDefinition : # 43| mu43_3(unknown) = InitializeNonLocal : # 44| r44_1(glval) = VariableAddress[x] : -# 44| r44_2(int) = Constant[17] : -# 44| mu44_3(int) = Store[x] : &:r44_1, r44_2 +# 44| r44_2(int) = Constant[5] : +# 44| r44_3(int) = Constant[12] : +# 44| r44_4(int) = Add : r44_2, r44_3 +# 44| mu44_5(int) = Store[x] : &:r44_1, r44_4 # 45| r45_1(glval) = VariableAddress[y] : # 45| r45_2(short) = Constant[7] : # 45| mu45_3(short) = Store[y] : &:r45_1, r45_2 @@ -5747,14 +5749,39 @@ ir.cpp: # 913| mu913_5(int) = InitializeParameter[x] : &:r913_4 # 914| r914_1(glval) = VariableAddress[a] : # 914| r914_2(bool) = Constant[1] : -# 914| mu914_3(bool) = Store[a] : &:r914_1, r914_2 -# 915| r915_1(glval) = VariableAddress[b] : -# 915| r915_2(bool) = Constant[1] : -# 915| v915_3(void) = ConditionalBranch : r915_2 -#-----| False -> Block 3 -#-----| True -> Block 2 +# 914| v914_3(void) = ConditionalBranch : r914_2 +#-----| False -> Block 1 +#-----| True -> Block 4 -# 915| Block 1 +# 914| Block 1 +# 914| r914_4(glval) = VariableAddress[#temp914:12] : +# 914| r914_5(bool) = Constant[0] : +# 914| mu914_6(bool) = Store[#temp914:12] : &:r914_4, r914_5 +#-----| Goto -> Block 2 + +# 914| Block 2 +# 914| r914_7(glval) = VariableAddress[#temp914:12] : +# 914| r914_8(bool) = Load[#temp914:12] : &:r914_7, ~m? +# 914| mu914_9(bool) = Store[a] : &:r914_1, r914_8 +# 915| r915_1(glval) = VariableAddress[b] : +# 915| r915_2(bool) = Constant[1] : +# 915| v915_3(void) = ConditionalBranch : r915_2 +#-----| False -> Block 7 +#-----| True -> Block 6 + +# 914| Block 3 +# 914| r914_10(glval) = VariableAddress[#temp914:12] : +# 914| r914_11(bool) = Constant[1] : +# 914| mu914_12(bool) = Store[#temp914:12] : &:r914_10, r914_11 +#-----| Goto -> Block 2 + +# 914| Block 4 +# 914| r914_13(bool) = Constant[1] : +# 914| v914_14(void) = ConditionalBranch : r914_13 +#-----| False -> Block 1 +#-----| True -> Block 3 + +# 915| Block 5 # 915| r915_4(glval) = VariableAddress[#temp915:11] : # 915| r915_5(int) = Load[#temp915:11] : &:r915_4, ~m? # 915| mu915_6(int) = Store[b] : &:r915_1, r915_5 @@ -5763,19 +5790,19 @@ ir.cpp: # 913| v913_7(void) = AliasedUse : ~m? # 913| v913_8(void) = ExitFunction : -# 915| Block 2 +# 915| Block 6 # 915| r915_7(glval) = VariableAddress[x] : # 915| r915_8(int) = Load[x] : &:r915_7, ~m? # 915| r915_9(glval) = VariableAddress[#temp915:11] : # 915| mu915_10(int) = Store[#temp915:11] : &:r915_9, r915_8 -#-----| Goto -> Block 1 +#-----| Goto -> Block 5 -# 915| Block 3 +# 915| Block 7 # 915| r915_11(glval) = VariableAddress[x] : # 915| r915_12(int) = Load[x] : &:r915_11, ~m? # 915| r915_13(glval) = VariableAddress[#temp915:11] : # 915| mu915_14(int) = Store[#temp915:11] : &:r915_13, r915_12 -#-----| Goto -> Block 1 +#-----| Goto -> Block 5 # 949| void OperatorNew() # 949| Block 0 @@ -7266,11 +7293,13 @@ ir.cpp: # 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, ~m? # 1215| r1215_6(int) = Constant[3] : -# 1215| r1215_7(int) = Constant[2] : -# 1215| r1215_8(int) = Constant[1] : -# 1215| r1215_9(int) = Constant[0] : -# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 -# 1215| mu1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 +# 1215| r1215_7(int) = Constant[0] : +# 1215| r1215_8(int) = Add : r1215_6, r1215_7 +# 1215| r1215_9(int) = Constant[2] : +# 1215| r1215_10(int) = Constant[1] : +# 1215| r1215_11(int) = Constant[0] : +# 1215| r1215_12(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_8, 3:r1215_9, 4:r1215_10, 5:r1215_11 +# 1215| mu1215_13(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_12 # 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, ~m? # 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : @@ -13983,8 +14012,10 @@ ir.cpp: # 2381| mu2381_2(unknown) = AliasedDefinition : # 2381| mu2381_3(unknown) = InitializeNonLocal : # 2382| r2382_1(glval) = VariableAddress[#return] : -# 2382| r2382_2(int) = Constant[2] : -# 2382| mu2382_3(int) = Store[#return] : &:r2382_1, r2382_2 +# 2382| r2382_2(int) = Constant[1] : +# 2382| r2382_3(int) = Constant[1] : +# 2382| r2382_4(int) = Add : r2382_2, r2382_3 +# 2382| mu2382_5(int) = Store[#return] : &:r2382_1, r2382_4 # 2381| r2381_4(glval) = VariableAddress[#return] : # 2381| v2381_5(void) = ReturnValue : &:r2381_4, ~m? # 2381| v2381_6(void) = AliasedUse : ~m? From 72ff494739e9d2c93baf6c4359a9180dcdfed20b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Mar 2024 10:33:12 +0100 Subject: [PATCH 130/497] Ruby: Regenerate dbscheme and stats --- ruby/extractor/Cargo.lock | Bin 32436 -> 32436 bytes ruby/extractor/Cargo.toml | 2 +- ruby/extractor/cargo-bazel-lock.json | 268 +- ruby/ql/lib/codeql/ruby/AST.qll | 7 +- .../codeql/ruby/ast/internal/TreeSitter.qll | 12 +- ruby/ql/lib/ruby.dbscheme | 26 +- ruby/ql/lib/ruby.dbscheme.stats | 7754 ++++++++--------- 7 files changed, 3912 insertions(+), 4157 deletions(-) diff --git a/ruby/extractor/Cargo.lock b/ruby/extractor/Cargo.lock index d5e8f132f24041f7fc286ade2d6dbd2b1562b66a..750d630402b3719e2181b0b68b6e4d1f8dbe107c 100644 GIT binary patch delta 98 zcmdn;mvPHq#tqK}{gYEu&C(1EjMGv~Et1VlEDg<)&5SJ5%u_6qjLefP%nee^(#$QA SO_hmLIN4A^e6z1mdJX_M$sOka delta 100 zcmdn;mvPHq#tqK}15FK05-p8VOp{U!Q;kegO_I!w&CFBGOiYXo%*~9_(ozi5(vnim S)0Bx-IQgT2*k(VWv>X6t;2(eh diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 8bb8cd96dce..87a9f9f7a80 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -34,4 +34,4 @@ lazy_static = "1.4.0" # of lock-file update time, but `rules_rust` pins generates a bazel rule that unconditionally downloads `main`, which # breaks build hermeticity. So, rev-pinning it is. # See also https://github.com/bazelbuild/rules_rust/issues/2502. -codeql-extractor = { git = "https://github.com/github/codeql.git", rev = "514a92d5bd1e24e4b7367d64430762ffd1ffbe7f" } +codeql-extractor = { git = "https://github.com/github/codeql.git", rev = "cee6f003fd58c64916c629f7d8b27b870d6f78c5" } diff --git a/ruby/extractor/cargo-bazel-lock.json b/ruby/extractor/cargo-bazel-lock.json index 76a63d4376d..15b86880665 100644 --- a/ruby/extractor/cargo-bazel-lock.json +++ b/ruby/extractor/cargo-bazel-lock.json @@ -1,5 +1,5 @@ { - "checksum": "1c460a0aa044e422d51b182416888e0a45d131996cc1821a0fedbab3cd2b07bf", + "checksum": "76aa7a86db3d70a3b257062c5c6b87da62e07258e6f16a487d8c42aa561c0224", "crates": { "adler 1.0.2": { "name": "adler", @@ -7,7 +7,7 @@ "package_url": "https://github.com/jonas-schievink/adler.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/adler/1.0.2/download", + "url": "https://static.crates.io/crates/adler/1.0.2/download", "sha256": "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" } }, @@ -44,7 +44,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.20/download", + "url": "https://static.crates.io/crates/aho-corasick/0.7.20/download", "sha256": "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" } }, @@ -96,7 +96,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/1.1.2/download", + "url": "https://static.crates.io/crates/aho-corasick/1.1.2/download", "sha256": "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" } }, @@ -149,7 +149,7 @@ "package_url": "https://github.com/nical/android_system_properties", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/android_system_properties/0.1.5/download", + "url": "https://static.crates.io/crates/android_system_properties/0.1.5/download", "sha256": "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" } }, @@ -194,7 +194,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstream/0.2.6/download", + "url": "https://static.crates.io/crates/anstream/0.2.6/download", "sha256": "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" } }, @@ -274,7 +274,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle/0.3.5/download", + "url": "https://static.crates.io/crates/anstyle/0.3.5/download", "sha256": "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" } }, @@ -317,7 +317,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle-parse/0.1.1/download", + "url": "https://static.crates.io/crates/anstyle-parse/0.1.1/download", "sha256": "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" } }, @@ -369,7 +369,7 @@ "package_url": "https://github.com/rust-cli/anstyle.git", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anstyle-wincon/0.2.0/download", + "url": "https://static.crates.io/crates/anstyle-wincon/0.2.0/download", "sha256": "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" } }, @@ -421,7 +421,7 @@ "package_url": "https://github.com/cuviper/autocfg", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/autocfg/1.1.0/download", + "url": "https://static.crates.io/crates/autocfg/1.1.0/download", "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" } }, @@ -457,7 +457,7 @@ "package_url": "https://github.com/bitflags/bitflags", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "url": "https://static.crates.io/crates/bitflags/1.3.2/download", "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" } }, @@ -499,7 +499,7 @@ "package_url": "https://github.com/BurntSushi/bstr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bstr/1.9.0/download", + "url": "https://static.crates.io/crates/bstr/1.9.0/download", "sha256": "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" } }, @@ -551,7 +551,7 @@ "package_url": "https://github.com/fitzgen/bumpalo", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bumpalo/3.12.0/download", + "url": "https://static.crates.io/crates/bumpalo/3.12.0/download", "sha256": "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" } }, @@ -593,7 +593,7 @@ "package_url": "https://github.com/rust-lang/cc-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cc/1.0.79/download", + "url": "https://static.crates.io/crates/cc/1.0.79/download", "sha256": "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" } }, @@ -629,7 +629,7 @@ "package_url": "https://github.com/alexcrichton/cfg-if", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "url": "https://static.crates.io/crates/cfg-if/1.0.0/download", "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" } }, @@ -665,7 +665,7 @@ "package_url": "https://github.com/chronotope/chrono", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/chrono/0.4.24/download", + "url": "https://static.crates.io/crates/chrono/0.4.24/download", "sha256": "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" } }, @@ -761,7 +761,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap/4.2.1/download", + "url": "https://static.crates.io/crates/clap/4.2.1/download", "sha256": "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" } }, @@ -832,7 +832,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_builder/4.2.1/download", + "url": "https://static.crates.io/crates/clap_builder/4.2.1/download", "sha256": "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" } }, @@ -904,7 +904,7 @@ "package_url": "https://github.com/clap-rs/clap/tree/master/clap_derive", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_derive/4.2.0/download", + "url": "https://static.crates.io/crates/clap_derive/4.2.0/download", "sha256": "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" } }, @@ -967,7 +967,7 @@ "package_url": "https://github.com/clap-rs/clap/tree/master/clap_lex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap_lex/0.4.1/download", + "url": "https://static.crates.io/crates/clap_lex/0.4.1/download", "sha256": "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" } }, @@ -1005,7 +1005,7 @@ "Git": { "remote": "https://github.com/github/codeql.git", "commitish": { - "Rev": "514a92d5bd1e24e4b7367d64430762ffd1ffbe7f" + "Rev": "cee6f003fd58c64916c629f7d8b27b870d6f78c5" }, "strip_prefix": "shared/tree-sitter-extractor" } @@ -1159,7 +1159,7 @@ "package_url": "https://github.com/brendanzab/codespan", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/codespan-reporting/0.11.1/download", + "url": "https://static.crates.io/crates/codespan-reporting/0.11.1/download", "sha256": "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" } }, @@ -1207,7 +1207,7 @@ "package_url": "https://github.com/rust-cli/concolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/concolor-override/1.0.0/download", + "url": "https://static.crates.io/crates/concolor-override/1.0.0/download", "sha256": "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" } }, @@ -1243,7 +1243,7 @@ "package_url": "https://github.com/rust-cli/concolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/concolor-query/0.3.3/download", + "url": "https://static.crates.io/crates/concolor-query/0.3.3/download", "sha256": "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" } }, @@ -1290,7 +1290,7 @@ "package_url": "https://github.com/servo/core-foundation-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/core-foundation-sys/0.8.4/download", + "url": "https://static.crates.io/crates/core-foundation-sys/0.8.4/download", "sha256": "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" } }, @@ -1326,7 +1326,7 @@ "package_url": "https://github.com/srijs/rust-crc32fast", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crc32fast/1.3.2/download", + "url": "https://static.crates.io/crates/crc32fast/1.3.2/download", "sha256": "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" } }, @@ -1396,7 +1396,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-channel/0.5.7/download", + "url": "https://static.crates.io/crates/crossbeam-channel/0.5.7/download", "sha256": "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" } }, @@ -1453,7 +1453,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-deque/0.8.3/download", + "url": "https://static.crates.io/crates/crossbeam-deque/0.8.3/download", "sha256": "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" } }, @@ -1515,7 +1515,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-epoch/0.9.14/download", + "url": "https://static.crates.io/crates/crossbeam-epoch/0.9.14/download", "sha256": "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" } }, @@ -1606,7 +1606,7 @@ "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/crossbeam-utils/0.8.15/download", + "url": "https://static.crates.io/crates/crossbeam-utils/0.8.15/download", "sha256": "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" } }, @@ -1676,7 +1676,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxx/1.0.94/download", + "url": "https://static.crates.io/crates/cxx/1.0.94/download", "sha256": "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" } }, @@ -1771,7 +1771,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxx-build/1.0.94/download", + "url": "https://static.crates.io/crates/cxx-build/1.0.94/download", "sha256": "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" } }, @@ -1840,7 +1840,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxxbridge-flags/1.0.94/download", + "url": "https://static.crates.io/crates/cxxbridge-flags/1.0.94/download", "sha256": "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" } }, @@ -1876,7 +1876,7 @@ "package_url": "https://github.com/dtolnay/cxx", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cxxbridge-macro/1.0.94/download", + "url": "https://static.crates.io/crates/cxxbridge-macro/1.0.94/download", "sha256": "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" } }, @@ -1929,7 +1929,7 @@ "package_url": "https://github.com/bluss/either", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/either/1.8.1/download", + "url": "https://static.crates.io/crates/either/1.8.1/download", "sha256": "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" } }, @@ -1965,7 +1965,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding/0.2.33/download", + "url": "https://static.crates.io/crates/encoding/0.2.33/download", "sha256": "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" } }, @@ -2025,7 +2025,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-japanese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-japanese/1.20141219.5/download", "sha256": "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" } }, @@ -2069,7 +2069,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-korean/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-korean/1.20141219.5/download", "sha256": "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" } }, @@ -2113,7 +2113,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-simpchinese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-simpchinese/1.20141219.5/download", "sha256": "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" } }, @@ -2157,7 +2157,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-singlebyte/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-singlebyte/1.20141219.5/download", "sha256": "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" } }, @@ -2201,7 +2201,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding-index-tradchinese/1.20141219.5/download", + "url": "https://static.crates.io/crates/encoding-index-tradchinese/1.20141219.5/download", "sha256": "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" } }, @@ -2245,7 +2245,7 @@ "package_url": "https://github.com/lifthrasiir/rust-encoding", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/encoding_index_tests/0.1.4/download", + "url": "https://static.crates.io/crates/encoding_index_tests/0.1.4/download", "sha256": "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" } }, @@ -2280,7 +2280,7 @@ "package_url": "https://github.com/lambda-fairy/rust-errno", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/errno/0.3.0/download", + "url": "https://static.crates.io/crates/errno/0.3.0/download", "sha256": "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" } }, @@ -2351,7 +2351,7 @@ "package_url": "https://github.com/mneumann/errno-dragonfly-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/errno-dragonfly/0.1.2/download", + "url": "https://static.crates.io/crates/errno-dragonfly/0.1.2/download", "sha256": "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" } }, @@ -2422,7 +2422,7 @@ "package_url": "https://github.com/rust-lang/flate2-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/flate2/1.0.25/download", + "url": "https://static.crates.io/crates/flate2/1.0.25/download", "sha256": "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" } }, @@ -2479,7 +2479,7 @@ "package_url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/globset", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/globset/0.4.14/download", + "url": "https://static.crates.io/crates/globset/0.4.14/download", "sha256": "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" } }, @@ -2547,7 +2547,7 @@ "package_url": "https://github.com/withoutboats/heck", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/heck/0.4.1/download", + "url": "https://static.crates.io/crates/heck/0.4.1/download", "sha256": "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" } }, @@ -2589,7 +2589,7 @@ "package_url": "https://github.com/hermitcore/rusty-hermit", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.2.6/download", + "url": "https://static.crates.io/crates/hermit-abi/0.2.6/download", "sha256": "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" } }, @@ -2634,7 +2634,7 @@ "package_url": "https://github.com/hermitcore/rusty-hermit", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.3.1/download", + "url": "https://static.crates.io/crates/hermit-abi/0.3.1/download", "sha256": "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" } }, @@ -2670,7 +2670,7 @@ "package_url": "https://github.com/strawlab/iana-time-zone", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/iana-time-zone/0.1.56/download", + "url": "https://static.crates.io/crates/iana-time-zone/0.1.56/download", "sha256": "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" } }, @@ -2751,7 +2751,7 @@ "package_url": "https://github.com/strawlab/iana-time-zone", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/iana-time-zone-haiku/0.1.1/download", + "url": "https://static.crates.io/crates/iana-time-zone-haiku/0.1.1/download", "sha256": "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" } }, @@ -2832,7 +2832,7 @@ "package_url": "https://github.com/sunfishcode/io-lifetimes", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/io-lifetimes/1.0.10/download", + "url": "https://static.crates.io/crates/io-lifetimes/1.0.10/download", "sha256": "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" } }, @@ -2920,7 +2920,7 @@ "package_url": "https://github.com/sunfishcode/is-terminal", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/is-terminal/0.4.6/download", + "url": "https://static.crates.io/crates/is-terminal/0.4.6/download", "sha256": "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" } }, @@ -2983,7 +2983,7 @@ "package_url": "https://github.com/dtolnay/itoa", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/itoa/1.0.6/download", + "url": "https://static.crates.io/crates/itoa/1.0.6/download", "sha256": "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" } }, @@ -3019,7 +3019,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/js-sys/0.3.61/download", + "url": "https://static.crates.io/crates/js-sys/0.3.61/download", "sha256": "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" } }, @@ -3064,7 +3064,7 @@ "package_url": "https://github.com/rust-lang-nursery/lazy-static.rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/lazy_static/1.4.0/download", + "url": "https://static.crates.io/crates/lazy_static/1.4.0/download", "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" } }, @@ -3100,7 +3100,7 @@ "package_url": "https://github.com/rust-lang/libc", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/libc/0.2.141/download", + "url": "https://static.crates.io/crates/libc/0.2.141/download", "sha256": "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" } }, @@ -3257,7 +3257,7 @@ "package_url": "https://github.com/dtolnay/link-cplusplus", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/link-cplusplus/1.0.8/download", + "url": "https://static.crates.io/crates/link-cplusplus/1.0.8/download", "sha256": "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" } }, @@ -3326,7 +3326,7 @@ "package_url": "https://github.com/sunfishcode/linux-raw-sys", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/linux-raw-sys/0.3.1/download", + "url": "https://static.crates.io/crates/linux-raw-sys/0.3.1/download", "sha256": "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" } }, @@ -3398,7 +3398,7 @@ "package_url": "https://github.com/rust-lang/log", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/log/0.4.20/download", + "url": "https://static.crates.io/crates/log/0.4.20/download", "sha256": "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" } }, @@ -3440,7 +3440,7 @@ "package_url": "https://github.com/hawkw/matchers", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/matchers/0.1.0/download", + "url": "https://static.crates.io/crates/matchers/0.1.0/download", "sha256": "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" } }, @@ -3484,7 +3484,7 @@ "package_url": "https://github.com/BurntSushi/memchr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memchr/2.7.1/download", + "url": "https://static.crates.io/crates/memchr/2.7.1/download", "sha256": "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" } }, @@ -3528,7 +3528,7 @@ "package_url": "https://github.com/Gilnaa/memoffset", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memoffset/0.8.0/download", + "url": "https://static.crates.io/crates/memoffset/0.8.0/download", "sha256": "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" } }, @@ -3601,7 +3601,7 @@ "package_url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/miniz_oxide/0.6.2/download", + "url": "https://static.crates.io/crates/miniz_oxide/0.6.2/download", "sha256": "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" } }, @@ -3653,7 +3653,7 @@ "package_url": "https://github.com/nushell/nu-ansi-term", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/nu-ansi-term/0.46.0/download", + "url": "https://static.crates.io/crates/nu-ansi-term/0.46.0/download", "sha256": "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" } }, @@ -3704,7 +3704,7 @@ "package_url": "https://github.com/rust-num/num-integer", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num-integer/0.1.45/download", + "url": "https://static.crates.io/crates/num-integer/0.1.45/download", "sha256": "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" } }, @@ -3776,7 +3776,7 @@ "package_url": "https://github.com/rust-num/num-traits", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num-traits/0.2.15/download", + "url": "https://static.crates.io/crates/num-traits/0.2.15/download", "sha256": "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" } }, @@ -3844,7 +3844,7 @@ "package_url": "https://github.com/seanmonstar/num_cpus", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/num_cpus/1.15.0/download", + "url": "https://static.crates.io/crates/num_cpus/1.15.0/download", "sha256": "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" } }, @@ -3897,7 +3897,7 @@ "package_url": "https://github.com/matklad/once_cell", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/once_cell/1.17.1/download", + "url": "https://static.crates.io/crates/once_cell/1.17.1/download", "sha256": "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" } }, @@ -3942,7 +3942,7 @@ "package_url": "https://github.com/danaugrs/overload", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/overload/0.1.1/download", + "url": "https://static.crates.io/crates/overload/0.1.1/download", "sha256": "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" } }, @@ -3977,7 +3977,7 @@ "package_url": "https://github.com/taiki-e/pin-project-lite", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/pin-project-lite/0.2.9/download", + "url": "https://static.crates.io/crates/pin-project-lite/0.2.9/download", "sha256": "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" } }, @@ -4013,7 +4013,7 @@ "package_url": "https://github.com/dtolnay/proc-macro2", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.56/download", + "url": "https://static.crates.io/crates/proc-macro2/1.0.56/download", "sha256": "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" } }, @@ -4083,7 +4083,7 @@ "package_url": "https://github.com/dtolnay/quote", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/quote/1.0.26/download", + "url": "https://static.crates.io/crates/quote/1.0.26/download", "sha256": "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" } }, @@ -4153,7 +4153,7 @@ "package_url": "https://github.com/rayon-rs/rayon", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rayon/1.7.0/download", + "url": "https://static.crates.io/crates/rayon/1.7.0/download", "sha256": "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" } }, @@ -4202,7 +4202,7 @@ "package_url": "https://github.com/rayon-rs/rayon", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rayon-core/1.11.0/download", + "url": "https://static.crates.io/crates/rayon-core/1.11.0/download", "sha256": "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" } }, @@ -4278,7 +4278,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex/1.7.3/download", + "url": "https://static.crates.io/crates/regex/1.7.3/download", "sha256": "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" } }, @@ -4353,7 +4353,7 @@ "package_url": "https://github.com/BurntSushi/regex-automata", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-automata/0.1.10/download", + "url": "https://static.crates.io/crates/regex-automata/0.1.10/download", "sha256": "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" } }, @@ -4406,7 +4406,7 @@ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-automata", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-automata/0.4.3/download", + "url": "https://static.crates.io/crates/regex-automata/0.4.3/download", "sha256": "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" } }, @@ -4478,7 +4478,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.29/download", + "url": "https://static.crates.io/crates/regex-syntax/0.6.29/download", "sha256": "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" } }, @@ -4528,7 +4528,7 @@ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-syntax", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.8.2/download", + "url": "https://static.crates.io/crates/regex-syntax/0.8.2/download", "sha256": "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" } }, @@ -4570,7 +4570,7 @@ "package_url": "https://github.com/bytecodealliance/rustix", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/rustix/0.37.7/download", + "url": "https://static.crates.io/crates/rustix/0.37.7/download", "sha256": "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" } }, @@ -4682,7 +4682,7 @@ "package_url": "https://github.com/dtolnay/ryu", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ryu/1.0.13/download", + "url": "https://static.crates.io/crates/ryu/1.0.13/download", "sha256": "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" } }, @@ -4718,7 +4718,7 @@ "package_url": "https://github.com/bluss/scopeguard", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/scopeguard/1.1.0/download", + "url": "https://static.crates.io/crates/scopeguard/1.1.0/download", "sha256": "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" } }, @@ -4754,7 +4754,7 @@ "package_url": "https://github.com/dtolnay/scratch", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/scratch/1.0.5/download", + "url": "https://static.crates.io/crates/scratch/1.0.5/download", "sha256": "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" } }, @@ -4813,7 +4813,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde/1.0.159/download", + "url": "https://static.crates.io/crates/serde/1.0.159/download", "sha256": "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" } }, @@ -4890,7 +4890,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_derive/1.0.159/download", + "url": "https://static.crates.io/crates/serde_derive/1.0.159/download", "sha256": "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" } }, @@ -4967,7 +4967,7 @@ "package_url": "https://github.com/serde-rs/json", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_json/1.0.95/download", + "url": "https://static.crates.io/crates/serde_json/1.0.95/download", "sha256": "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" } }, @@ -5045,7 +5045,7 @@ "package_url": "https://github.com/hawkw/sharded-slab", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/sharded-slab/0.1.4/download", + "url": "https://static.crates.io/crates/sharded-slab/0.1.4/download", "sha256": "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" } }, @@ -5089,7 +5089,7 @@ "package_url": "https://github.com/servo/rust-smallvec", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/smallvec/1.10.0/download", + "url": "https://static.crates.io/crates/smallvec/1.10.0/download", "sha256": "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" } }, @@ -5125,7 +5125,7 @@ "package_url": "https://github.com/dguo/strsim-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/strsim/0.10.0/download", + "url": "https://static.crates.io/crates/strsim/0.10.0/download", "sha256": "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" } }, @@ -5160,7 +5160,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/1.0.109/download", + "url": "https://static.crates.io/crates/syn/1.0.109/download", "sha256": "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" } }, @@ -5250,7 +5250,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/2.0.13/download", + "url": "https://static.crates.io/crates/syn/2.0.13/download", "sha256": "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" } }, @@ -5316,7 +5316,7 @@ "package_url": "https://github.com/BurntSushi/termcolor", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/termcolor/1.2.0/download", + "url": "https://static.crates.io/crates/termcolor/1.2.0/download", "sha256": "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" } }, @@ -5363,7 +5363,7 @@ "package_url": "https://github.com/Amanieu/thread_local-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thread_local/1.1.7/download", + "url": "https://static.crates.io/crates/thread_local/1.1.7/download", "sha256": "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" } }, @@ -5412,7 +5412,7 @@ "package_url": "https://github.com/time-rs/time", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/time/0.1.45/download", + "url": "https://static.crates.io/crates/time/0.1.45/download", "sha256": "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" } }, @@ -5470,7 +5470,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing/0.1.37/download", + "url": "https://static.crates.io/crates/tracing/0.1.37/download", "sha256": "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" } }, @@ -5540,7 +5540,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-attributes/0.1.23/download", + "url": "https://static.crates.io/crates/tracing-attributes/0.1.23/download", "sha256": "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" } }, @@ -5592,7 +5592,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-core/0.1.30/download", + "url": "https://static.crates.io/crates/tracing-core/0.1.30/download", "sha256": "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" } }, @@ -5651,7 +5651,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-log/0.1.3/download", + "url": "https://static.crates.io/crates/tracing-log/0.1.3/download", "sha256": "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" } }, @@ -5710,7 +5710,7 @@ "package_url": "https://github.com/tokio-rs/tracing", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tracing-subscriber/0.3.16/download", + "url": "https://static.crates.io/crates/tracing-subscriber/0.3.16/download", "sha256": "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" } }, @@ -5811,7 +5811,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.10/download", + "url": "https://static.crates.io/crates/tree-sitter/0.20.10/download", "sha256": "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d" } }, @@ -6028,7 +6028,7 @@ "package_url": "https://github.com/dtolnay/unicode-ident", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-ident/1.0.8/download", + "url": "https://static.crates.io/crates/unicode-ident/1.0.8/download", "sha256": "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" } }, @@ -6065,7 +6065,7 @@ "package_url": "https://github.com/unicode-rs/unicode-width", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-width/0.1.10/download", + "url": "https://static.crates.io/crates/unicode-width/0.1.10/download", "sha256": "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" } }, @@ -6101,7 +6101,7 @@ "package_url": "https://github.com/alacritty/vte", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/utf8parse/0.2.1/download", + "url": "https://static.crates.io/crates/utf8parse/0.2.1/download", "sha256": "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" } }, @@ -6143,7 +6143,7 @@ "package_url": "https://github.com/tokio-rs/valuable", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/valuable/0.1.0/download", + "url": "https://static.crates.io/crates/valuable/0.1.0/download", "sha256": "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" } }, @@ -6201,7 +6201,7 @@ "package_url": "https://github.com/bytecodealliance/wasi", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasi/0.10.0+wasi-snapshot-preview1/download", + "url": "https://static.crates.io/crates/wasi/0.10.0+wasi-snapshot-preview1/download", "sha256": "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" } }, @@ -6244,7 +6244,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen/0.2.84/download", "sha256": "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" } }, @@ -6324,7 +6324,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-backend/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-backend/0.2.84/download", "sha256": "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" } }, @@ -6399,7 +6399,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-macro/0.2.84/download", "sha256": "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" } }, @@ -6454,7 +6454,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-macro-support/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.84/download", "sha256": "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" } }, @@ -6521,7 +6521,7 @@ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/wasm-bindgen-shared/0.2.84/download", + "url": "https://static.crates.io/crates/wasm-bindgen-shared/0.2.84/download", "sha256": "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" } }, @@ -6581,7 +6581,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "url": "https://static.crates.io/crates/winapi/0.3.9/download", "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" } }, @@ -6670,7 +6670,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download", "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" } }, @@ -6729,7 +6729,7 @@ "package_url": "https://github.com/BurntSushi/winapi-util", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-util/0.1.5/download", + "url": "https://static.crates.io/crates/winapi-util/0.1.5/download", "sha256": "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" } }, @@ -6776,7 +6776,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" } }, @@ -6835,7 +6835,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows/0.48.0/download", + "url": "https://static.crates.io/crates/windows/0.48.0/download", "sha256": "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" } }, @@ -6880,7 +6880,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-sys/0.45.0/download", + "url": "https://static.crates.io/crates/windows-sys/0.45.0/download", "sha256": "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" } }, @@ -6939,7 +6939,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-sys/0.48.0/download", + "url": "https://static.crates.io/crates/windows-sys/0.48.0/download", "sha256": "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" } }, @@ -7000,7 +7000,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-targets/0.42.2/download", + "url": "https://static.crates.io/crates/windows-targets/0.42.2/download", "sha256": "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" } }, @@ -7113,7 +7113,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows-targets/0.48.0/download", + "url": "https://static.crates.io/crates/windows-targets/0.48.0/download", "sha256": "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" } }, @@ -7196,7 +7196,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_gnullvm/0.42.2/download", + "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.42.2/download", "sha256": "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" } }, @@ -7255,7 +7255,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_gnullvm/0.48.0/download", + "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.0/download", "sha256": "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" } }, @@ -7314,7 +7314,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.42.2/download", "sha256": "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" } }, @@ -7373,7 +7373,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_aarch64_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.48.0/download", "sha256": "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" } }, @@ -7432,7 +7432,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.42.2/download", + "url": "https://static.crates.io/crates/windows_i686_gnu/0.42.2/download", "sha256": "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" } }, @@ -7491,7 +7491,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_gnu/0.48.0/download", + "url": "https://static.crates.io/crates/windows_i686_gnu/0.48.0/download", "sha256": "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" } }, @@ -7550,7 +7550,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_i686_msvc/0.42.2/download", "sha256": "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" } }, @@ -7609,7 +7609,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_i686_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_i686_msvc/0.48.0/download", "sha256": "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" } }, @@ -7668,7 +7668,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.42.2/download", "sha256": "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" } }, @@ -7727,7 +7727,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnu/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.48.0/download", "sha256": "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" } }, @@ -7786,7 +7786,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnullvm/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.42.2/download", "sha256": "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" } }, @@ -7845,7 +7845,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_gnullvm/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.0/download", "sha256": "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" } }, @@ -7904,7 +7904,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.42.2/download", + "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.42.2/download", "sha256": "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" } }, @@ -7963,7 +7963,7 @@ "package_url": "https://github.com/microsoft/windows-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/windows_x86_64_msvc/0.48.0/download", + "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.48.0/download", "sha256": "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" } }, diff --git a/ruby/ql/lib/codeql/ruby/AST.qll b/ruby/ql/lib/codeql/ruby/AST.qll index d517c8f4d44..e8dc28692c0 100644 --- a/ruby/ql/lib/codeql/ruby/AST.qll +++ b/ruby/ql/lib/codeql/ruby/AST.qll @@ -137,7 +137,12 @@ class AstNode extends TAstNode { /** A Ruby source file */ class RubyFile extends File { - RubyFile() { ruby_ast_node_info(_, this, _, _) } + RubyFile() { + exists(Location loc | + ruby_ast_node_location(_, loc) and + this = loc.getFile() + ) + } /** Gets a token in this file. */ private Ruby::Token getAToken() { result.getLocation().getFile() = this } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll index ef268f69ded..441f4ffefcc 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll @@ -12,13 +12,13 @@ module Ruby { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { ruby_ast_node_info(this, _, _, result) } + final L::Location getLocation() { ruby_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { ruby_ast_node_info(this, result, _, _) } + final AstNode getParent() { ruby_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { ruby_ast_node_info(this, _, result, _) } + final int getParentIndex() { ruby_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1929,13 +1929,13 @@ module Erb { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { erb_ast_node_info(this, _, _, result) } + final L::Location getLocation() { erb_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { erb_ast_node_info(this, result, _, _) } + final AstNode getParent() { erb_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { erb_ast_node_info(this, _, result, _) } + final int getParentIndex() { erb_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme index f9f0f4023e4..440de75c71e 100644 --- a/ruby/ql/lib/ruby.dbscheme +++ b/ruby/ql/lib/ruby.dbscheme @@ -1421,14 +1421,16 @@ case @ruby_token.kind of @ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield -@ruby_ast_node_parent = @file | @ruby_ast_node +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -ruby_ast_node_info( +ruby_ast_node_parent( unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @ruby_ast_node ref, + int parent_index: int ref ); /*- Erb dbscheme -*/ @@ -1497,13 +1499,15 @@ case @erb_token.kind of @erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token -@erb_ast_node_parent = @erb_ast_node | @file - -#keyset[parent, parent_index] -erb_ast_node_info( +erb_ast_node_location( unique int node: @erb_ast_node ref, - int parent: @erb_ast_node_parent ref, - int parent_index: int ref, int loc: @location_default ref ); +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats index e7d7f5e27eb..fd8850293b4 100644 --- a/ruby/ql/lib/ruby.dbscheme.stats +++ b/ruby/ql/lib/ruby.dbscheme.stats @@ -5,7 +5,7 @@ @diagnostic_error - 156 + 0 @diagnostic_info @@ -13,15 +13,15 @@ @diagnostic_warning - 0 + 188 @erb_comment_directive - 40 + 26 @erb_directive - 1225 + 1108 @erb_graphql_directive @@ -29,43 +29,43 @@ @erb_output_directive - 3555 + 3270 @erb_reserved_word - 9567 + 8756 @erb_template - 1531 + 1508 @erb_token_code - 4781 + 4378 @erb_token_comment - 27 + 26 @erb_token_content - 4977 + 4555 @file - 18245 + 18724 @folder - 5002 + 5165 @location_default - 9022418 + 9223392 @ruby_alias - 1307 + 1289 @ruby_alternative_pattern @@ -73,35 +73,35 @@ @ruby_argument_list - 691738 + 706474 @ruby_array - 248289 + 249320 @ruby_array_pattern - 178 + 179 @ruby_as_pattern - 153 + 156 @ruby_assignment - 137583 + 141202 @ruby_bare_string - 12799 + 13136 @ruby_bare_symbol - 7967 + 8435 @ruby_begin - 2590 + 2610 @ruby_begin_block @@ -109,143 +109,143 @@ @ruby_binary_ampersand - 570 + 630 @ruby_binary_ampersandampersand - 8179 + 8142 @ruby_binary_and - 1233 + 1189 @ruby_binary_bangequal - 1459 + 1434 @ruby_binary_bangtilde - 168 + 176 @ruby_binary_caret - 160 + 153 @ruby_binary_equalequal - 32934 + 33761 @ruby_binary_equalequalequal - 656 + 689 @ruby_binary_equaltilde - 1800 + 1823 @ruby_binary_langle - 1181 + 1101 @ruby_binary_langleequal - 407 + 431 @ruby_binary_langleequalrangle - 778 + 764 @ruby_binary_langlelangle - 10731 + 10779 @ruby_binary_minus - 2691 + 2747 @ruby_binary_or - 635 + 647 @ruby_binary_percent - 979 + 986 @ruby_binary_pipe - 1000 + 1058 @ruby_binary_pipepipe - 7430 + 7336 @ruby_binary_plus - 6453 + 6593 @ruby_binary_rangle - 2129 + 2114 @ruby_binary_rangleequal - 595 + 597 @ruby_binary_ranglerangle - 234 + 259 @ruby_binary_slash - 1269 + 1169 @ruby_binary_star - 3560 + 3490 @ruby_binary_starstar - 1358 + 1227 @ruby_block - 101695 + 104143 @ruby_block_argument - 6477 + 6547 @ruby_block_body - 101379 + 103820 @ruby_block_parameter - 2569 + 2543 @ruby_block_parameters - 24941 + 25884 @ruby_body_statement - 208998 + 213896 @ruby_break - 3434 + 3414 @ruby_call - 1006605 + 1027501 @ruby_case__ - 1289 + 1319 @ruby_case_match - 234 + 232 @ruby_chained_string @@ -253,47 +253,47 @@ @ruby_class - 17258 + 17441 @ruby_complex - 66 + 72 @ruby_conditional - 2954 + 2896 @ruby_delimited_symbol - 1258 + 1247 @ruby_destructured_left_assignment - 107 + 108 @ruby_destructured_parameter - 194 + 208 @ruby_do - 1681 + 1675 @ruby_do_block - 142452 + 145534 @ruby_element_reference - 80778 + 82606 @ruby_else - 7505 + 7681 @ruby_elsif - 1510 + 1583 @ruby_end_block @@ -301,15 +301,15 @@ @ruby_ensure - 3981 + 4106 @ruby_exception_variable - 924 + 935 @ruby_exceptions - 1938 + 1904 @ruby_expression_reference_pattern @@ -321,31 +321,31 @@ @ruby_for - 158 + 136 @ruby_hash - 40888 + 41915 @ruby_hash_pattern - 75 + 73 @ruby_hash_splat_argument - 1902 + 1989 @ruby_hash_splat_parameter - 1596 + 1574 @ruby_heredoc_body - 6178 + 6934 @ruby_if - 16391 + 16164 @ruby_if_guard @@ -353,39 +353,39 @@ @ruby_if_modifier - 14611 + 14541 @ruby_in - 158 + 136 @ruby_in_clause - 385 + 381 @ruby_interpolation - 38305 + 38493 @ruby_keyword_parameter - 4144 + 4763 @ruby_keyword_pattern - 80 + 77 @ruby_lambda - 7948 + 8187 @ruby_lambda_parameters - 1762 + 1811 @ruby_left_assignment_list - 2994 + 3100 @ruby_match_pattern @@ -393,39 +393,39 @@ @ruby_method - 102124 + 103532 @ruby_method_parameters - 30832 + 31208 @ruby_module - 22353 + 22962 @ruby_next - 1902 + 2020 @ruby_operator_assignment_ampersandampersandequal - 90 + 118 @ruby_operator_assignment_ampersandequal - 18 + 17 @ruby_operator_assignment_caretequal - 5 + 6 @ruby_operator_assignment_langlelangleequal - 26 + 19 @ruby_operator_assignment_minusequal - 300 + 305 @ruby_operator_assignment_percentequal @@ -433,19 +433,19 @@ @ruby_operator_assignment_pipeequal - 156 + 164 @ruby_operator_assignment_pipepipeequal - 4190 + 4272 @ruby_operator_assignment_plusequal - 1647 + 1732 @ruby_operator_assignment_ranglerangleequal - 10 + 11 @ruby_operator_assignment_slashequal @@ -453,7 +453,7 @@ @ruby_operator_assignment_starequal - 52 + 42 @ruby_operator_assignment_starstarequal @@ -461,11 +461,11 @@ @ruby_optional_parameter - 6636 + 6556 @ruby_pair - 248347 + 254198 @ruby_parenthesized_pattern @@ -473,27 +473,27 @@ @ruby_parenthesized_statements - 10912 + 11296 @ruby_pattern - 4153 + 4745 @ruby_program - 18219 + 18697 @ruby_range_dotdot - 3136 + 3690 @ruby_range_dotdotdot - 1634 + 1376 @ruby_rational - 138 + 166 @ruby_redo @@ -501,107 +501,107 @@ @ruby_regex - 13350 + 13680 @ruby_rescue - 2346 + 2299 @ruby_rescue_modifier - 448 + 458 @ruby_reserved_word - 3820965 + 3894800 @ruby_rest_assignment - 401 + 414 @ruby_retry - 60 + 58 @ruby_return - 8197 + 7979 @ruby_right_assignment_list - 1224 + 1280 @ruby_scope_resolution - 84884 + 87113 @ruby_setter - 653 + 656 @ruby_singleton_class - 663 + 677 @ruby_singleton_method - 6459 + 6325 @ruby_splat_argument - 3454 + 3606 @ruby_splat_parameter - 3192 + 3014 @ruby_string__ - 485218 + 490602 @ruby_string_array - 4213 + 4287 @ruby_subshell - 365 + 359 @ruby_superclass - 13666 + 13806 @ruby_symbol_array - 2170 + 2240 @ruby_test_pattern - 4 + 5 @ruby_then - 22451 + 22229 @ruby_token_character - 432 + 440 @ruby_token_class_variable - 868 + 887 @ruby_token_comment - 190672 + 194426 @ruby_token_constant - 294731 + 302373 @ruby_token_empty_statement - 55 + 58 @ruby_token_encoding @@ -609,11 +609,11 @@ @ruby_token_escape_sequence - 77855 + 80835 @ruby_token_false - 17433 + 17355 @ruby_token_file @@ -621,51 +621,51 @@ @ruby_token_float - 8491 + 8689 @ruby_token_forward_argument - 79 + 194 @ruby_token_forward_parameter - 144 + 287 @ruby_token_global_variable - 7342 + 7165 @ruby_token_hash_key_symbol - 241330 + 246826 @ruby_token_hash_splat_nil - 11 + 14 @ruby_token_heredoc_beginning - 6177 + 6933 @ruby_token_heredoc_content - 12929 + 12986 @ruby_token_heredoc_end - 6178 + 6934 @ruby_token_identifier - 1551542 + 1590836 @ruby_token_instance_variable - 87122 + 89852 @ruby_token_integer - 306586 + 310358 @ruby_token_line @@ -673,59 +673,59 @@ @ruby_token_nil - 18636 + 19333 @ruby_token_operator - 849 + 878 @ruby_token_self - 13755 + 14094 @ruby_token_simple_symbol - 261524 + 267609 @ruby_token_string_content - 502063 + 510164 @ruby_token_super - 5313 + 5329 @ruby_token_true - 24277 + 25065 @ruby_token_uninterpreted 11 - + @ruby_unary_bang - 5952 + 5909 @ruby_unary_definedquestion - 1301 + 1369 @ruby_unary_minus - 9633 + 9830 @ruby_unary_not - 190 + 172 @ruby_unary_plus - 1427 + 1394 @ruby_unary_tilde - 98 + 97 @ruby_undef @@ -733,7 +733,7 @@ @ruby_unless - 2663 + 2723 @ruby_unless_guard @@ -741,15 +741,15 @@ @ruby_unless_modifier - 3505 + 3416 @ruby_until - 123 + 126 @ruby_until_modifier - 234 + 238 @ruby_variable_reference_pattern @@ -757,19 +757,19 @@ @ruby_when - 3392 + 3882 @ruby_while - 1400 + 1413 @ruby_while_modifier - 194 + 198 @ruby_yield - 2477 + 2450 @yaml_alias_node @@ -794,15 +794,15 @@ containerparent - 23222 + 23863 parent - 5002 + 5165 child - 23222 + 23863 @@ -816,37 +816,37 @@ 1 2 - 2290 + 2394 2 3 - 934 + 968 3 4 - 421 + 417 4 5 - 315 + 295 5 7 - 408 + 443 7 14 - 408 + 403 14 126 - 223 + 242 @@ -862,7 +862,7 @@ 1 2 - 23222 + 23863 @@ -872,11 +872,11 @@ diagnostics - 157 + 188 id - 157 + 188 severity @@ -888,15 +888,15 @@ error_message - 26 + 53 full_error_message - 118 + 161 location - 157 + 174 @@ -910,7 +910,7 @@ 1 2 - 157 + 188 @@ -926,7 +926,7 @@ 1 2 - 157 + 188 @@ -942,7 +942,7 @@ 1 2 - 157 + 188 @@ -958,7 +958,7 @@ 1 2 - 157 + 188 @@ -974,7 +974,7 @@ 1 2 - 157 + 188 @@ -988,8 +988,8 @@ 12 - 12 - 13 + 14 + 15 13 @@ -1020,8 +1020,8 @@ 12 - 2 - 3 + 4 + 5 13 @@ -1036,8 +1036,8 @@ 12 - 9 - 10 + 12 + 13 13 @@ -1052,8 +1052,8 @@ 12 - 12 - 13 + 13 + 14 13 @@ -1068,8 +1068,8 @@ 12 - 12 - 13 + 14 + 15 13 @@ -1100,8 +1100,8 @@ 12 - 2 - 3 + 4 + 5 13 @@ -1116,8 +1116,8 @@ 12 - 9 - 10 + 12 + 13 13 @@ -1132,8 +1132,8 @@ 12 - 12 - 13 + 13 + 14 13 @@ -1150,11 +1150,16 @@ 1 2 + 26 + + + 2 + 3 13 - 11 - 12 + 10 + 11 13 @@ -1171,7 +1176,7 @@ 1 2 - 26 + 53 @@ -1187,7 +1192,7 @@ 1 2 - 26 + 53 @@ -1203,6 +1208,11 @@ 1 2 + 26 + + + 2 + 3 13 @@ -1224,11 +1234,16 @@ 1 2 + 26 + + + 2 + 3 13 - 11 - 12 + 10 + 11 13 @@ -1245,12 +1260,12 @@ 1 2 - 78 + 134 2 3 - 39 + 26 @@ -1266,7 +1281,7 @@ 1 2 - 118 + 161 @@ -1282,7 +1297,7 @@ 1 2 - 118 + 161 @@ -1298,7 +1313,7 @@ 1 2 - 118 + 161 @@ -1314,12 +1329,12 @@ 1 2 - 78 + 134 2 3 - 39 + 26 @@ -1335,7 +1350,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1351,7 +1371,7 @@ 1 2 - 157 + 174 @@ -1367,7 +1387,7 @@ 1 2 - 157 + 174 @@ -1383,7 +1403,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1399,7 +1424,12 @@ 1 2 - 157 + 161 + + + 2 + 3 + 13 @@ -1408,24 +1438,73 @@ - erb_ast_node_info - 24486 + erb_ast_node_location + 22409 node - 24486 - - - parent - 5532 - - - parent_index - 608 + 22409 loc - 24484 + 22407 + + + + + node + loc + + + 12 + + + 1 + 2 + 22409 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 22404 + + + 2 + 3 + 2 + + + + + + + + + erb_ast_node_parent + 22069 + + + node + 22069 + + + parent + 4718 + + + parent_index + 564 @@ -1439,7 +1518,7 @@ 1 2 - 24486 + 22069 @@ -1455,23 +1534,7 @@ 1 2 - 24486 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 24486 + 22069 @@ -1487,17 +1550,17 @@ 1 3 - 384 + 9 3 4 - 4908 + 4494 4 240 - 239 + 215 @@ -1513,43 +1576,17 @@ 1 3 - 384 + 9 3 4 - 4908 + 4494 4 240 - 239 - - - - - - - parent - loc - - - 12 - - - 1 - 3 - 384 - - - 3 - 4 - 4908 - - - 4 - 240 - 239 + 215 @@ -1565,62 +1602,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 2173 - 33 + 55 + 1998 + 37 @@ -1636,191 +1668,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 2173 - 33 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 33 - - - 2 - 3 - 84 - - - 3 - 4 - 12 - - - 4 - 5 - 101 - - - 5 - 6 - 53 - - - 6 - 7 - 50 - - - 7 - 8 - 43 - - - 8 - 14 - 50 - - - 14 - 23 - 53 - - - 24 - 39 - 45 - - - 41 - 62 - 45 - - - 65 - 2172 - 33 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 24481 - - - 2 - 3 - 2 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 24481 - - - 2 - 3 - 2 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 24484 + 55 + 1998 + 37 @@ -1830,15 +1728,15 @@ erb_comment_directive_child - 27 + 26 erb_comment_directive - 27 + 26 child - 27 + 26 @@ -1852,7 +1750,7 @@ 1 2 - 27 + 26 @@ -1868,7 +1766,7 @@ 1 2 - 27 + 26 @@ -1878,26 +1776,26 @@ erb_comment_directive_def - 27 + 26 id - 27 + 26 erb_directive_child - 1225 + 1108 erb_directive - 1225 + 1108 child - 1225 + 1108 @@ -1911,7 +1809,7 @@ 1 2 - 1225 + 1108 @@ -1927,7 +1825,7 @@ 1 2 - 1225 + 1108 @@ -1937,11 +1835,11 @@ erb_directive_def - 1225 + 1108 id - 1225 + 1108 @@ -2007,15 +1905,15 @@ erb_output_directive_child - 3555 + 3270 erb_output_directive - 3555 + 3270 child - 3555 + 3270 @@ -2029,7 +1927,7 @@ 1 2 - 3555 + 3270 @@ -2045,7 +1943,7 @@ 1 2 - 3555 + 3270 @@ -2055,30 +1953,30 @@ erb_output_directive_def - 3555 + 3270 id - 3555 + 3270 erb_template_child - 9761 + 8934 erb_template - 374 + 340 index - 608 + 564 child - 9761 + 8934 @@ -2092,53 +1990,58 @@ 1 3 - 10 + 9 3 4 - 124 + 115 4 7 - 25 + 21 7 - 11 - 30 - - - 11 - 15 - 33 - - - 15 - 26 - 30 - - - 27 - 35 - 30 - - - 35 - 50 - 33 - - - 53 - 78 - 30 - - - 82 - 240 + 10 25 + + 10 + 14 + 28 + + + 14 + 24 + 25 + + + 24 + 33 + 25 + + + 33 + 44 + 25 + + + 45 + 64 + 25 + + + 67 + 149 + 25 + + + 200 + 240 + 9 + @@ -2153,53 +2056,58 @@ 1 3 - 10 + 9 3 4 - 124 + 115 4 7 - 25 + 21 7 - 11 - 30 - - - 11 - 15 - 33 - - - 15 - 26 - 30 - - - 27 - 35 - 30 - - - 35 - 50 - 33 - - - 53 - 78 - 30 - - - 82 - 240 + 10 25 + + 10 + 14 + 28 + + + 14 + 24 + 25 + + + 24 + 33 + 25 + + + 33 + 44 + 25 + + + 45 + 64 + 25 + + + 67 + 149 + 25 + + + 200 + 240 + 9 + @@ -2214,62 +2122,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 148 - 33 + 55 + 145 + 37 @@ -2285,62 +2188,57 @@ 1 2 - 33 + 25 2 3 - 84 + 33 3 4 - 12 + 33 4 5 - 101 + 122 5 6 - 53 + 96 6 - 7 - 50 - - - 7 8 - 43 + 40 8 - 14 - 50 + 13 + 42 - 14 - 23 - 53 + 13 + 20 + 44 - 24 - 39 - 45 + 21 + 31 + 42 - 41 - 62 - 45 + 35 + 55 + 44 - 65 - 148 - 33 + 55 + 145 + 37 @@ -2356,7 +2254,7 @@ 1 2 - 9761 + 8934 @@ -2372,7 +2270,7 @@ 1 2 - 9761 + 8934 @@ -2382,30 +2280,30 @@ erb_template_def - 1531 + 1508 id - 1531 + 1508 erb_tokeninfo - 19328 + 17690 id - 19328 + 17690 kind - 10 + 7 value - 5305 + 4822 @@ -2419,7 +2317,7 @@ 1 2 - 19328 + 17690 @@ -2435,7 +2333,7 @@ 1 2 - 19328 + 17690 @@ -2449,23 +2347,18 @@ 12 - 1 - 2 + 1853 + 1854 2 - 1877 - 1878 + 1928 + 1929 2 - 1954 - 1955 - 2 - - - 3756 - 3757 + 3706 + 3707 2 @@ -2480,23 +2373,18 @@ 12 - 1 - 2 + 5 + 6 2 - 6 - 7 + 984 + 985 2 - 992 - 993 - 2 - - - 1084 - 1085 + 1052 + 1053 2 @@ -2513,17 +2401,17 @@ 1 2 - 4289 + 3879 2 3 - 636 + 600 3 - 1811 - 379 + 1786 + 342 @@ -2539,7 +2427,7 @@ 1 2 - 5305 + 4822 @@ -2549,15 +2437,15 @@ files - 18245 + 18724 id - 18245 + 18724 name - 18245 + 18724 @@ -2571,7 +2459,7 @@ 1 2 - 18245 + 18724 @@ -2587,7 +2475,7 @@ 1 2 - 18245 + 18724 @@ -2597,15 +2485,15 @@ folders - 5002 + 5165 id - 5002 + 5165 name - 5002 + 5165 @@ -2619,7 +2507,7 @@ 1 2 - 5002 + 5165 @@ -2635,7 +2523,7 @@ 1 2 - 5002 + 5165 @@ -2645,31 +2533,31 @@ locations_default - 9022418 + 9223392 id - 9022418 + 9223392 file - 18245 + 18724 beginLine - 31147 + 31826 beginColumn - 5186 + 5300 endLine - 31147 + 31826 endColumn - 5292 + 5407 @@ -2683,7 +2571,7 @@ 1 2 - 9022418 + 9223392 @@ -2699,7 +2587,7 @@ 1 2 - 9022418 + 9223392 @@ -2715,7 +2603,7 @@ 1 2 - 9022418 + 9223392 @@ -2731,7 +2619,7 @@ 1 2 - 9022418 + 9223392 @@ -2747,7 +2635,7 @@ 1 2 - 9022418 + 9223392 @@ -2763,72 +2651,72 @@ 1 32 - 1434 + 1479 32 47 - 1382 + 1412 47 - 70 - 1369 + 71 + 1452 - 70 - 91 - 1369 + 71 + 94 + 1439 - 91 - 117 - 1369 + 94 + 119 + 1412 - 117 - 159 - 1395 + 119 + 161 + 1412 - 159 - 208 - 1408 + 161 + 209 + 1466 - 208 - 256 - 1369 + 209 + 260 + 1439 - 256 - 326 - 1408 + 260 + 333 + 1412 - 327 - 444 - 1382 + 336 + 445 + 1425 - 444 - 671 - 1369 + 445 + 679 + 1412 - 671 - 1185 - 1369 + 684 + 1221 + 1412 - 1186 - 4592 - 1369 + 1228 + 5812 + 1412 - 4636 + 7145 22841 - 250 + 134 @@ -2844,67 +2732,67 @@ 1 7 - 1342 + 1398 7 10 - 1632 + 1641 10 13 - 1434 + 1479 13 16 - 1592 + 1668 16 20 - 1579 + 1600 20 - 24 - 1369 + 25 + 1587 - 24 - 30 - 1448 + 25 + 31 + 1573 - 30 - 37 - 1487 + 31 + 38 + 1506 - 37 - 47 - 1395 + 38 + 49 + 1506 - 47 - 64 - 1382 + 49 + 69 + 1425 - 64 - 99 - 1382 + 69 + 117 + 1425 - 100 - 207 - 1382 + 119 + 275 + 1412 - 207 + 276 2339 - 816 + 497 @@ -2920,67 +2808,67 @@ 1 16 - 1487 + 1533 16 - 23 - 1395 + 24 + 1493 - 23 - 30 - 1382 + 24 + 31 + 1412 - 30 - 39 - 1369 + 31 + 40 + 1573 - 39 - 45 - 1527 + 40 + 46 + 1452 - 45 + 46 52 - 1566 + 1533 52 - 59 - 1369 + 60 + 1587 - 59 - 67 - 1566 + 60 + 68 + 1721 - 67 - 73 - 1448 + 68 + 76 + 1533 - 73 - 82 - 1408 + 76 + 85 + 1452 - 82 - 94 - 1448 + 85 + 98 + 1412 - 94 - 114 - 1395 + 98 + 122 + 1412 - 114 + 122 357 - 882 + 605 @@ -2996,67 +2884,67 @@ 1 7 - 1342 + 1398 7 10 - 1592 + 1600 10 13 - 1461 + 1506 13 16 - 1566 + 1641 16 20 - 1592 + 1614 20 - 24 - 1382 + 25 + 1600 - 24 - 30 - 1461 + 25 + 31 + 1587 - 30 - 37 - 1487 + 31 + 38 + 1506 - 37 - 47 - 1395 + 38 + 49 + 1506 - 47 - 64 - 1382 + 49 + 69 + 1425 - 64 - 99 - 1382 + 69 + 117 + 1425 - 100 - 207 - 1382 + 119 + 275 + 1412 - 207 + 276 2339 - 816 + 497 @@ -3071,68 +2959,68 @@ 1 - 20 - 1632 + 19 + 1412 - 20 - 28 - 1395 + 19 + 27 + 1587 - 28 - 36 - 1513 + 27 + 35 + 1425 - 36 - 45 - 1434 + 35 + 44 + 1452 - 45 - 51 - 1487 + 44 + 50 + 1600 - 51 - 58 - 1513 + 50 + 57 + 1533 - 58 - 66 - 1500 + 57 + 64 + 1439 - 66 - 73 - 1500 + 64 + 71 + 1412 - 73 - 80 - 1448 + 71 + 78 + 1533 - 80 - 89 - 1421 + 78 + 87 + 1520 - 89 - 102 - 1474 + 87 + 99 + 1493 - 102 - 128 - 1369 + 99 + 118 + 1425 - 128 + 118 367 - 552 + 887 @@ -3148,72 +3036,72 @@ 1 2 - 1566 + 1600 2 5 - 1592 + 1627 5 6 - 3409 + 3484 6 10 - 2646 + 2676 10 17 - 2804 + 2878 17 24 - 2409 + 2421 24 43 - 2382 + 2448 43 78 - 2369 + 2394 78 - 118 - 2395 + 117 + 2394 - 118 - 174 - 2343 + 117 + 168 + 2407 - 174 - 268 - 2356 + 169 + 262 + 2421 - 271 - 751 - 2343 + 262 + 703 + 2394 - 757 - 7072 - 2343 + 708 + 5999 + 2394 - 7434 - 10856 - 184 + 6159 + 10971 + 282 @@ -3229,47 +3117,47 @@ 1 2 - 10083 + 10304 2 3 - 5555 + 5609 3 - 6 - 2343 + 7 + 2838 - 6 - 9 - 2330 + 7 + 10 + 2663 - 9 - 14 - 2501 + 10 + 15 + 2407 - 14 - 21 - 2356 + 15 + 23 + 2394 - 21 - 44 - 2356 + 23 + 58 + 2407 - 44 - 179 - 2356 + 58 + 287 + 2394 - 180 - 1386 - 1263 + 296 + 1392 + 807 @@ -3285,72 +3173,72 @@ 1 2 - 1566 + 1600 2 3 - 1474 + 1520 3 4 - 2356 + 2394 4 6 - 2606 + 2650 6 8 - 1777 + 1775 8 13 - 2711 + 2811 13 18 - 2474 + 2448 18 29 - 2540 + 2582 29 44 - 2343 + 2475 44 56 - 2422 + 2582 56 - 68 - 2409 + 69 + 2475 - 68 - 85 - 2448 + 69 + 86 + 2461 - 85 - 112 - 2369 + 86 + 113 + 2407 - 112 + 113 205 - 1645 + 1641 @@ -3366,42 +3254,42 @@ 1 2 - 11123 + 11299 2 3 - 6411 + 6591 3 4 - 2369 + 2380 4 5 - 1685 + 1815 5 7 - 2553 + 2623 7 - 11 - 2856 + 10 + 2367 - 11 - 19 - 2488 + 10 + 17 + 2461 - 19 - 242 - 1658 + 17 + 240 + 2286 @@ -3417,72 +3305,72 @@ 1 2 - 1566 + 1600 2 4 - 1592 + 1627 4 5 - 3462 + 3537 5 7 - 2119 + 2152 7 11 - 2698 + 2744 11 15 - 2409 + 2461 15 24 - 2395 + 2394 24 39 - 2369 + 2421 39 52 - 2409 + 2448 52 65 - 2369 + 2542 65 - 79 - 2474 + 80 + 2555 - 79 - 101 - 2395 + 80 + 102 + 2434 - 101 - 135 - 2356 + 102 + 136 + 2421 - 135 - 208 - 526 + 136 + 209 + 484 @@ -3498,88 +3386,7 @@ 1 2 - 473 - - - 2 - 3 - 592 - - - 3 - 4 - 250 - - - 4 - 5 - 276 - - - 5 - 6 - 315 - - - 6 - 9 - 460 - - - 9 - 16 - 408 - - - 16 - 44 - 394 - - - 45 - 177 - 394 - - - 180 - 796 - 394 - - - 816 - 3017 - 394 - - - 3017 - 8160 - 394 - - - 8349 - 25541 - 394 - - - 28440 - 38986 - 39 - - - - - - - beginColumn - file - - - 12 - - - 1 - 2 - 1434 + 484 2 @@ -3589,42 +3396,123 @@ 3 4 - 473 + 255 + + + 4 + 5 + 269 + + + 5 + 6 + 336 + + + 6 + 9 + 457 + + + 9 + 16 + 430 + + + 16 + 43 + 403 + + + 46 + 182 + 403 + + + 184 + 794 + 403 + + + 811 + 3014 + 403 + + + 3015 + 8230 + 403 + + + 8347 + 25670 + 403 + + + 28494 + 38951 + 40 + + + + + + + beginColumn + file + + + 12 + + + 1 + 2 + 1466 + + + 2 + 3 + 605 + + + 3 + 4 + 484 4 9 - 394 + 417 9 37 - 394 + 403 37 - 120 - 394 + 118 + 403 - 126 - 378 - 394 + 124 + 381 + 403 - 379 - 730 - 394 + 381 + 728 + 403 - 755 - 982 - 394 + 754 + 985 + 403 - 992 - 1386 - 302 + 996 + 1392 + 309 @@ -3640,62 +3528,67 @@ 1 2 - 539 + 551 2 3 - 697 + 712 3 4 - 315 + 322 4 5 - 368 + 363 5 - 8 - 473 + 7 + 363 - 8 - 15 - 421 + 7 + 13 + 457 - 15 - 45 - 394 + 13 + 35 + 403 - 45 - 125 - 394 + 35 + 103 + 403 - 132 - 341 - 394 + 109 + 281 + 403 - 342 - 667 - 394 + 286 + 583 + 403 - 682 - 1002 - 394 + 591 + 927 + 403 - 1003 - 1403 - 394 + 935 + 1163 + 403 + + + 1198 + 1405 + 107 @@ -3711,62 +3604,67 @@ 1 2 - 539 + 551 2 3 - 697 + 712 3 4 - 315 + 322 4 5 - 368 + 363 5 - 8 - 473 + 7 + 363 - 8 - 15 - 421 + 7 + 13 + 457 - 15 - 45 - 394 + 13 + 35 + 403 - 48 - 125 - 394 + 35 + 105 + 403 - 133 - 345 - 394 + 108 + 282 + 403 - 346 - 687 - 394 + 287 + 596 + 403 - 694 - 1029 - 408 + 596 + 945 + 403 - 1029 - 1409 - 381 + 956 + 1202 + 403 + + + 1223 + 1412 + 107 @@ -3782,52 +3680,52 @@ 1 2 - 1290 + 1318 2 3 - 697 + 712 3 4 - 513 + 524 4 6 - 434 + 443 6 15 - 394 + 403 15 37 - 394 + 403 37 66 - 394 + 403 66 98 - 394 + 403 100 - 126 - 394 + 127 + 403 - 126 + 128 180 - 276 + 282 @@ -3843,72 +3741,72 @@ 1 3 - 315 + 322 3 4 - 3435 + 3510 4 6 - 2474 + 2528 6 9 - 2356 + 2394 9 13 - 2448 + 2488 13 20 - 2395 + 2407 20 - 32 - 2369 + 33 + 2461 - 32 - 61 - 2356 + 33 + 64 + 2421 - 61 - 102 - 2356 + 64 + 103 + 2421 - 102 - 145 - 2395 + 103 + 143 + 2448 - 145 - 219 - 2356 + 143 + 220 + 2394 - 219 - 436 - 2343 + 220 + 446 + 2394 - 443 - 1758 - 2343 + 446 + 1691 + 2394 - 1798 - 10208 - 1197 + 1717 + 10278 + 1237 @@ -3924,47 +3822,47 @@ 1 2 - 10083 + 10304 2 3 - 5555 + 5609 3 - 6 - 2343 + 7 + 2838 - 6 - 9 - 2330 + 7 + 10 + 2663 - 9 - 14 - 2501 + 10 + 15 + 2407 - 14 - 21 - 2343 + 15 + 23 + 2394 - 21 - 44 - 2369 + 23 + 58 + 2407 - 44 - 179 - 2356 + 58 + 287 + 2394 - 180 - 1370 - 1263 + 296 + 1376 + 807 @@ -3980,42 +3878,47 @@ 1 2 - 11202 + 11420 2 3 - 5871 + 5959 3 4 - 2553 + 2636 4 5 - 1658 + 1654 5 7 - 2527 + 2650 7 - 11 - 2830 + 10 + 2407 - 11 - 20 - 2422 + 10 + 17 + 2394 - 20 + 17 + 34 + 2434 + + + 34 43 - 2079 + 269 @@ -4031,67 +3934,67 @@ 1 3 - 1579 + 1614 3 4 - 3422 + 3497 4 6 - 2764 + 2824 6 8 - 1671 + 1694 8 12 - 2488 + 2502 12 17 - 2711 + 2771 17 28 - 2448 + 2421 28 - 43 - 2435 + 42 + 2448 - 43 + 42 55 - 2409 + 2650 55 67 - 2343 + 2407 67 82 - 2382 + 2434 82 - 107 - 2409 + 108 + 2461 - 107 + 108 204 - 2079 + 2098 @@ -4107,72 +4010,72 @@ 1 2 - 1553 + 1587 2 3 - 1474 + 1520 3 4 - 2382 + 2421 4 6 - 2606 + 2650 6 8 - 1737 + 1748 8 13 - 2777 + 2851 13 18 - 2435 + 2448 18 30 - 2514 + 2488 30 - 46 - 2567 + 45 + 2448 - 46 - 59 - 2409 + 45 + 58 + 2542 - 59 - 72 - 2369 + 58 + 71 + 2421 - 72 - 89 - 2409 + 71 + 86 + 2407 - 89 - 117 - 2435 + 86 + 113 + 2394 - 117 - 208 - 1474 + 113 + 209 + 1896 @@ -4188,72 +4091,72 @@ 1 2 - 408 + 417 2 3 - 473 + 484 3 5 - 447 + 457 5 6 - 171 + 174 6 8 - 460 + 470 8 12 - 408 + 417 12 24 - 408 + 417 24 72 - 408 + 417 76 - 275 - 408 + 277 + 417 - 277 - 1197 - 408 + 278 + 1206 + 417 1227 - 3883 - 408 + 3859 + 417 - 3987 - 8621 - 408 + 3977 + 8618 + 417 - 9003 - 11196 - 408 + 9094 + 11251 + 417 - 11489 - 19733 - 65 + 11548 + 19740 + 67 @@ -4269,52 +4172,52 @@ 1 2 - 1448 + 1479 2 3 - 566 + 578 3 4 - 552 + 538 4 - 9 - 447 + 8 + 417 - 9 - 46 - 408 + 8 + 29 + 417 - 46 - 152 - 408 + 35 + 115 + 417 - 159 - 442 - 408 + 115 + 399 + 417 - 454 - 851 - 408 + 427 + 798 + 417 - 868 - 1055 - 408 + 805 + 1038 + 417 - 1055 - 1353 - 236 + 1039 + 1359 + 309 @@ -4330,149 +4233,7 @@ 1 2 - 579 - - - 2 - 3 - 631 - - - 3 - 4 - 329 - - - 4 - 6 - 460 - - - 6 - 9 - 473 - - - 9 - 17 - 421 - - - 17 - 45 - 408 - - - 49 - 149 - 408 - - - 150 - 385 - 421 - - - 389 - 729 - 408 - - - 736 - 1057 - 408 - - - 1060 - 1397 - 342 - - - - - - - endColumn - beginColumn - - - 12 - - - 1 - 2 - 908 - - - 2 - 3 - 381 - - - 3 - 4 - 487 - - - 4 - 5 - 355 - - - 5 - 7 - 368 - - - 7 - 14 - 434 - - - 15 - 33 - 447 - - - 33 - 49 - 408 - - - 49 - 64 - 434 - - - 64 - 82 - 421 - - - 83 - 96 - 421 - - - 97 - 108 - 223 - - - - - - - endColumn - endLine - - - 12 - - - 1 - 2 - 579 + 591 2 @@ -4482,52 +4243,194 @@ 3 4 - 329 + 336 4 6 - 447 + 470 6 9 - 473 + 470 9 17 - 447 + 443 17 - 55 - 408 + 47 + 417 - 55 - 162 - 408 + 51 + 153 + 417 - 171 - 382 - 408 + 153 + 387 + 417 - 396 - 729 - 408 + 390 + 717 + 417 - 767 - 1048 - 408 + 730 + 1059 + 417 - 1056 - 1390 - 329 + 1062 + 1404 + 363 + + + + + + + endColumn + beginColumn + + + 12 + + + 1 + 2 + 928 + + + 2 + 3 + 390 + + + 3 + 4 + 497 + + + 4 + 5 + 363 + + + 5 + 7 + 363 + + + 7 + 14 + 443 + + + 15 + 33 + 470 + + + 33 + 49 + 417 + + + 49 + 64 + 430 + + + 65 + 81 + 417 + + + 81 + 96 + 457 + + + 97 + 109 + 228 + + + + + + + endColumn + endLine + + + 12 + + + 1 + 2 + 591 + + + 2 + 3 + 659 + + + 3 + 4 + 336 + + + 4 + 6 + 457 + + + 6 + 9 + 470 + + + 9 + 16 + 417 + + + 16 + 43 + 430 + + + 45 + 151 + 430 + + + 161 + 379 + 417 + + + 384 + 712 + 417 + + + 729 + 1046 + 417 + + + 1049 + 1397 + 363 @@ -4537,19 +4440,19 @@ ruby_alias_def - 1307 + 1289 id - 1307 + 1289 alias - 1307 + 1289 name - 1307 + 1289 @@ -4563,7 +4466,7 @@ 1 2 - 1307 + 1289 @@ -4579,7 +4482,7 @@ 1 2 - 1307 + 1289 @@ -4595,7 +4498,7 @@ 1 2 - 1307 + 1289 @@ -4611,7 +4514,7 @@ 1 2 - 1307 + 1289 @@ -4627,7 +4530,7 @@ 1 2 - 1307 + 1289 @@ -4643,7 +4546,7 @@ 1 2 - 1307 + 1289 @@ -4820,19 +4723,19 @@ ruby_argument_list_child - 861033 + 879410 ruby_argument_list - 691475 + 706205 index - 434 + 443 child - 861033 + 879410 @@ -4846,17 +4749,17 @@ 1 2 - 584369 + 596855 2 3 - 67125 + 68483 3 34 - 39980 + 40866 @@ -4872,17 +4775,17 @@ 1 2 - 584369 + 596855 2 3 - 67125 + 68483 3 34 - 39980 + 40866 @@ -4898,46 +4801,46 @@ 1 2 - 144 + 147 2 3 - 39 + 40 3 7 - 39 + 40 7 11 - 39 + 40 11 21 - 39 + 40 23 45 - 39 + 40 56 - 386 - 39 + 385 + 40 - 960 - 8137 - 39 + 963 + 8130 + 40 - 52526 - 52527 + 52499 + 52500 13 @@ -4954,46 +4857,46 @@ 1 2 - 144 + 147 2 3 - 39 + 40 3 7 - 39 + 40 7 11 - 39 + 40 11 21 - 39 + 40 23 45 - 39 + 40 56 - 386 - 39 + 385 + 40 - 960 - 8137 - 39 + 963 + 8130 + 40 - 52526 - 52527 + 52499 + 52500 13 @@ -5010,7 +4913,7 @@ 1 2 - 861033 + 879410 @@ -5026,7 +4929,7 @@ 1 2 - 861033 + 879410 @@ -5036,22 +4939,22 @@ ruby_argument_list_def - 691738 + 706474 id - 691738 + 706474 ruby_array_child - 704712 + 708919 ruby_array - 239714 + 240456 index @@ -5059,7 +4962,7 @@ child - 704712 + 708919 @@ -5073,17 +4976,17 @@ 1 2 - 12460 + 12708 2 3 - 213368 + 213730 3 63361 - 13886 + 14018 @@ -5099,17 +5002,17 @@ 1 2 - 12460 + 12708 2 3 - 213368 + 213730 3 63361 - 13886 + 14018 @@ -5149,7 +5052,7 @@ 11 - 239715 + 240457 1294 @@ -5190,7 +5093,7 @@ 11 - 239715 + 240457 1294 @@ -5207,7 +5110,7 @@ 1 2 - 704712 + 708919 @@ -5223,7 +5126,7 @@ 1 2 - 704712 + 708919 @@ -5233,22 +5136,22 @@ ruby_array_def - 248289 + 249320 id - 248289 + 249320 ruby_array_pattern_child - 334 + 336 ruby_array_pattern - 167 + 168 index @@ -5256,7 +5159,7 @@ child - 334 + 336 @@ -5275,7 +5178,7 @@ 2 3 - 96 + 97 3 @@ -5306,7 +5209,7 @@ 2 3 - 96 + 97 3 @@ -5355,13 +5258,13 @@ 1 - 116 - 117 + 117 + 118 1 - 167 - 168 + 168 + 169 1 @@ -5401,13 +5304,13 @@ 1 - 116 - 117 + 117 + 118 1 - 167 - 168 + 168 + 169 1 @@ -5424,7 +5327,7 @@ 1 2 - 334 + 336 @@ -5440,7 +5343,7 @@ 1 2 - 334 + 336 @@ -5450,15 +5353,15 @@ ruby_array_pattern_class - 50 + 51 ruby_array_pattern - 50 + 51 class - 50 + 51 @@ -5472,7 +5375,7 @@ 1 2 - 50 + 51 @@ -5488,7 +5391,7 @@ 1 2 - 50 + 51 @@ -5498,30 +5401,30 @@ ruby_array_pattern_def - 178 + 179 id - 178 + 179 ruby_as_pattern_def - 153 + 156 id - 153 + 156 name - 153 + 156 value - 153 + 156 @@ -5535,7 +5438,7 @@ 1 2 - 153 + 156 @@ -5551,7 +5454,7 @@ 1 2 - 153 + 156 @@ -5567,7 +5470,7 @@ 1 2 - 153 + 156 @@ -5583,7 +5486,7 @@ 1 2 - 153 + 156 @@ -5599,7 +5502,7 @@ 1 2 - 153 + 156 @@ -5615,7 +5518,7 @@ 1 2 - 153 + 156 @@ -5625,19 +5528,19 @@ ruby_assignment_def - 137583 + 141202 id - 137583 + 141202 left - 137583 + 141202 right - 137583 + 141202 @@ -5651,7 +5554,7 @@ 1 2 - 137583 + 141202 @@ -5667,7 +5570,7 @@ 1 2 - 137583 + 141202 @@ -5683,7 +5586,7 @@ 1 2 - 137583 + 141202 @@ -5699,7 +5602,7 @@ 1 2 - 137583 + 141202 @@ -5715,7 +5618,7 @@ 1 2 - 137583 + 141202 @@ -5731,7 +5634,7 @@ 1 2 - 137583 + 141202 @@ -5740,24 +5643,73 @@ - ruby_ast_node_info - 9511543 + ruby_ast_node_location + 9723503 node - 9511543 - - - parent - 3325876 - - - parent_index - 2830 + 9723503 loc - 9008872 + 9209550 + + + + + node + loc + + + 12 + + + 1 + 2 + 9723503 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 8697279 + + + 2 + 4 + 512270 + + + + + + + + + ruby_ast_node_parent + 9674605 + + + node + 9674605 + + + parent + 3381025 + + + parent_index + 2892 @@ -5771,7 +5723,7 @@ 1 2 - 9511543 + 9674605 @@ -5787,23 +5739,7 @@ 1 2 - 9511543 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 9511543 + 9674605 @@ -5819,27 +5755,27 @@ 1 2 - 535595 + 533793 2 3 - 457056 + 465418 3 4 - 1793325 + 1832321 4 5 - 352556 + 359620 5 216 - 187343 + 189871 @@ -5855,63 +5791,27 @@ 1 2 - 535595 + 533793 2 3 - 457056 + 465418 3 4 - 1793325 + 1832321 4 5 - 352556 + 359620 5 216 - 187343 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 535595 - - - 2 - 3 - 457056 - - - 3 - 4 - 1793325 - - - 4 - 5 - 352556 - - - 5 - 216 - 187343 + 189871 @@ -5927,57 +5827,52 @@ 1 2 - 460 + 470 2 3 - 236 + 242 3 4 - 355 + 363 4 6 - 157 + 161 6 7 - 315 + 484 7 - 11 - 250 + 17 + 255 - 11 - 21 - 197 + 17 + 29 + 228 - 21 - 42 - 223 + 33 + 71 + 228 - 43 - 94 - 223 + 72 + 298 + 228 - 98 - 498 - 223 - - - 533 - 252642 - 184 + 358 + 251345 + 228 @@ -5993,186 +5888,52 @@ 1 2 - 460 + 470 2 3 - 236 + 242 3 4 - 355 + 363 4 6 - 157 + 161 6 7 - 315 + 484 7 - 11 - 250 + 17 + 255 - 11 - 21 - 197 + 17 + 29 + 228 - 21 - 42 - 223 + 33 + 71 + 228 - 43 - 94 - 223 + 72 + 298 + 228 - 98 - 498 - 223 - - - 533 - 252642 - 184 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 460 - - - 2 - 3 - 236 - - - 3 - 4 - 355 - - - 4 - 6 - 157 - - - 6 - 7 - 315 - - - 7 - 11 - 250 - - - 11 - 21 - 197 - - - 21 - 42 - 223 - - - 43 - 94 - 223 - - - 98 - 498 - 223 - - - 533 - 252273 - 184 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 8507847 - - - 2 - 4 - 501025 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 8507847 - - - 2 - 4 - 501025 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 8511059 - - - 2 - 3 - 497813 + 358 + 251345 + 228 @@ -6182,11 +5943,11 @@ ruby_bare_string_child - 16385 + 16784 ruby_bare_string - 12799 + 13136 index @@ -6194,7 +5955,7 @@ child - 16385 + 16784 @@ -6208,12 +5969,12 @@ 1 2 - 12434 + 12728 2 2310 - 365 + 408 @@ -6229,12 +5990,12 @@ 1 2 - 12434 + 12728 2 2310 - 365 + 408 @@ -6264,7 +6025,7 @@ 4 - 12800 + 13137 19 @@ -6295,7 +6056,7 @@ 4 - 12800 + 13137 19 @@ -6312,7 +6073,7 @@ 1 2 - 16385 + 16784 @@ -6328,7 +6089,7 @@ 1 2 - 16385 + 16784 @@ -6338,22 +6099,22 @@ ruby_bare_string_def - 12799 + 13136 id - 12799 + 13136 ruby_bare_symbol_child - 7967 + 8435 ruby_bare_symbol - 7967 + 8435 index @@ -6361,7 +6122,7 @@ child - 7967 + 8435 @@ -6375,7 +6136,7 @@ 1 2 - 7967 + 8435 @@ -6391,7 +6152,7 @@ 1 2 - 7967 + 8435 @@ -6405,8 +6166,8 @@ 12 - 3128 - 3129 + 3570 + 3571 2 @@ -6421,8 +6182,8 @@ 12 - 3128 - 3129 + 3570 + 3571 2 @@ -6439,7 +6200,7 @@ 1 2 - 7967 + 8435 @@ -6455,7 +6216,7 @@ 1 2 - 7967 + 8435 @@ -6465,18 +6226,18 @@ ruby_bare_symbol_def - 7967 + 8435 id - 7967 + 8435 ruby_begin_block_child - 33 + 39 ruby_begin_block @@ -6488,7 +6249,7 @@ child - 33 + 39 @@ -6502,7 +6263,7 @@ 1 2 - 4 + 3 2 @@ -6512,17 +6273,12 @@ 3 4 - 1 - - - 5 - 6 2 7 8 - 2 + 4 @@ -6538,7 +6294,7 @@ 1 2 - 4 + 3 2 @@ -6548,17 +6304,12 @@ 3 4 - 1 - - - 5 - 6 2 7 8 - 2 + 4 @@ -6571,26 +6322,21 @@ 12 - - 2 - 3 - 2 - 4 5 - 2 - - - 5 - 6 - 1 + 4 6 7 1 + + 7 + 8 + 1 + 10 11 @@ -6607,26 +6353,21 @@ 12 - - 2 - 3 - 2 - 4 5 - 2 - - - 5 - 6 - 1 + 4 6 7 1 + + 7 + 8 + 1 + 10 11 @@ -6646,7 +6387,7 @@ 1 2 - 33 + 39 @@ -6662,7 +6403,7 @@ 1 2 - 33 + 39 @@ -6683,11 +6424,11 @@ ruby_begin_child - 7613 + 7606 ruby_begin - 2590 + 2610 index @@ -6695,7 +6436,7 @@ child - 7613 + 7606 @@ -6709,32 +6450,32 @@ 1 2 - 163 + 161 2 3 - 1398 + 1414 3 4 - 512 + 537 4 5 - 211 + 200 5 8 - 226 + 221 8 40 - 80 + 77 @@ -6750,32 +6491,32 @@ 1 2 - 163 + 161 2 3 - 1398 + 1414 3 4 - 512 + 537 4 5 - 211 + 200 5 8 - 226 + 221 8 40 - 80 + 77 @@ -6824,23 +6565,23 @@ 3 - 39 - 62 + 37 + 59 3 - 80 - 175 + 77 + 166 3 - 306 - 1030 + 298 + 1036 3 - 2427 - 2591 + 2449 + 2611 2 @@ -6890,23 +6631,23 @@ 3 - 39 - 62 + 37 + 59 3 - 80 - 175 + 77 + 166 3 - 306 - 1030 + 298 + 1036 3 - 2427 - 2591 + 2449 + 2611 2 @@ -6923,7 +6664,7 @@ 1 2 - 7613 + 7606 @@ -6939,7 +6680,7 @@ 1 2 - 7613 + 7606 @@ -6949,26 +6690,26 @@ ruby_begin_def - 2590 + 2610 id - 2590 + 2610 ruby_binary_def - 71864 + 73665 id - 71864 + 73665 left - 71864 + 73665 operator @@ -6976,7 +6717,7 @@ right - 71864 + 73665 @@ -6990,7 +6731,7 @@ 1 2 - 71864 + 73665 @@ -7006,7 +6747,7 @@ 1 2 - 71864 + 73665 @@ -7022,7 +6763,7 @@ 1 2 - 71864 + 73665 @@ -7038,7 +6779,7 @@ 1 2 - 71864 + 73665 @@ -7054,7 +6795,7 @@ 1 2 - 71864 + 73665 @@ -7070,7 +6811,7 @@ 1 2 - 71864 + 73665 @@ -7084,68 +6825,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7160,68 +6901,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7236,68 +6977,68 @@ 12 - 160 - 169 + 153 + 177 2 - 234 - 408 + 259 + 432 2 - 570 - 596 + 597 + 631 2 - 635 - 657 + 647 + 690 2 - 778 - 974 + 764 + 987 2 - 979 - 1001 + 1026 + 1033 2 - 1014 - 1071 + 1058 + 1073 2 - 1233 - 1270 + 1169 + 1190 2 - 1358 - 1801 + 1227 + 1824 2 - 1837 - 2322 + 2079 + 2661 2 - 2691 - 3561 + 2747 + 3491 2 - 6453 - 7170 + 6593 + 7408 2 - 32934 - 32935 + 33761 + 33762 1 @@ -7314,7 +7055,7 @@ 1 2 - 71864 + 73665 @@ -7330,7 +7071,7 @@ 1 2 - 71864 + 73665 @@ -7346,7 +7087,7 @@ 1 2 - 71864 + 73665 @@ -7356,15 +7097,15 @@ ruby_block_argument_child - 6477 + 6541 ruby_block_argument - 6477 + 6541 child - 6477 + 6541 @@ -7378,7 +7119,7 @@ 1 2 - 6477 + 6541 @@ -7394,7 +7135,7 @@ 1 2 - 6477 + 6541 @@ -7404,26 +7145,26 @@ ruby_block_argument_def - 6477 + 6547 id - 6477 + 6547 ruby_block_body - 101379 + 103820 ruby_block - 101379 + 103820 body - 101379 + 103820 @@ -7437,7 +7178,7 @@ 1 2 - 101379 + 103820 @@ -7453,7 +7194,7 @@ 1 2 - 101379 + 103820 @@ -7463,19 +7204,19 @@ ruby_block_body_child - 101550 + 103995 ruby_block_body - 101379 + 103820 index - 52 + 53 child - 101550 + 103995 @@ -7489,12 +7230,12 @@ 1 2 - 101260 + 103699 2 5 - 118 + 121 @@ -7510,12 +7251,12 @@ 1 2 - 101260 + 103699 2 5 - 118 + 121 @@ -7539,8 +7280,8 @@ 13 - 7701 - 7702 + 7718 + 7719 13 @@ -7565,8 +7306,8 @@ 13 - 7701 - 7702 + 7718 + 7719 13 @@ -7583,7 +7324,7 @@ 1 2 - 101550 + 103995 @@ -7599,7 +7340,7 @@ 1 2 - 101550 + 103995 @@ -7609,48 +7350,48 @@ ruby_block_body_def - 101379 + 103820 id - 101379 + 103820 ruby_block_def - 101695 + 104143 id - 101695 + 104143 ruby_block_parameter_def - 2569 + 2543 id - 2569 + 2543 ruby_block_parameter_name - 2569 + 2537 ruby_block_parameter - 2569 + 2537 name - 2569 + 2537 @@ -7664,7 +7405,7 @@ 1 2 - 2569 + 2537 @@ -7680,7 +7421,7 @@ 1 2 - 2569 + 2537 @@ -7690,15 +7431,15 @@ ruby_block_parameters - 10585 + 10767 ruby_block - 10585 + 10767 parameters - 10585 + 10767 @@ -7712,7 +7453,7 @@ 1 2 - 10585 + 10767 @@ -7728,7 +7469,7 @@ 1 2 - 10585 + 10767 @@ -7738,19 +7479,19 @@ ruby_block_parameters_child - 28929 + 30131 ruby_block_parameters - 24941 + 25884 index - 15 + 14 child - 28929 + 30131 @@ -7764,17 +7505,17 @@ 1 2 - 21362 + 22189 2 3 - 3263 + 3329 3 6 - 316 + 365 @@ -7790,17 +7531,17 @@ 1 2 - 21362 + 22189 2 3 - 3263 + 3329 3 6 - 316 + 365 @@ -7814,29 +7555,29 @@ 12 - 11 - 12 - 3 + 27 + 28 + 2 - 19 - 20 - 3 + 35 + 36 + 2 - 103 - 104 - 3 + 122 + 123 + 2 - 1166 - 1167 - 3 + 1232 + 1233 + 2 - 8125 - 8126 - 3 + 8630 + 8631 + 2 @@ -7850,29 +7591,29 @@ 12 - 11 - 12 - 3 + 27 + 28 + 2 - 19 - 20 - 3 + 35 + 36 + 2 - 103 - 104 - 3 + 122 + 123 + 2 - 1166 - 1167 - 3 + 1232 + 1233 + 2 - 8125 - 8126 - 3 + 8630 + 8631 + 2 @@ -7888,7 +7629,7 @@ 1 2 - 28929 + 30131 @@ -7904,7 +7645,7 @@ 1 2 - 28929 + 30131 @@ -7914,11 +7655,11 @@ ruby_block_parameters_def - 24941 + 25884 id - 24941 + 25884 @@ -8061,19 +7802,19 @@ ruby_body_statement_child - 627527 + 641142 ruby_body_statement - 202481 + 206879 index - 1135 + 1187 child - 627527 + 641142 @@ -8087,37 +7828,37 @@ 1 2 - 93050 + 95107 2 3 - 37058 + 37693 3 4 - 24051 + 24510 4 5 - 15391 + 15881 5 7 - 15925 + 16388 7 23 - 15269 + 15560 23 - 371 - 1734 + 397 + 1736 @@ -8133,37 +7874,37 @@ 1 2 - 93050 + 95107 2 3 - 37058 + 37693 3 4 - 24051 + 24510 4 5 - 15391 + 15881 5 7 - 15925 + 16388 7 23 - 15269 + 15560 23 - 371 - 1734 + 397 + 1736 @@ -8179,67 +7920,67 @@ 1 2 - 79 + 140 2 3 - 119 + 122 3 4 - 76 + 77 4 5 - 85 + 62 5 7 - 79 - - - 7 - 10 98 + + 8 + 10 + 86 + 10 - 14 + 12 + 89 + + + 12 + 26 + 95 + + + 26 + 42 92 - 14 - 23 + 42 + 77 89 - 24 - 39 - 85 - - - 39 - 69 + 80 + 179 89 - 69 - 144 - 85 + 184 + 1016 + 89 - 144 - 566 - 85 - - - 623 - 65961 - 67 + 1134 + 68975 + 47 @@ -8255,67 +7996,67 @@ 1 2 - 79 + 140 2 3 - 119 + 122 3 4 - 76 + 77 4 5 - 85 + 62 5 7 - 79 - - - 7 - 10 98 + + 8 + 10 + 86 + 10 - 14 + 12 + 89 + + + 12 + 26 + 95 + + + 26 + 42 92 - 14 - 23 + 42 + 77 89 - 24 - 39 - 85 - - - 39 - 69 + 80 + 179 89 - 69 - 144 - 85 + 184 + 1016 + 89 - 144 - 566 - 85 - - - 623 - 65961 - 67 + 1134 + 68975 + 47 @@ -8331,7 +8072,7 @@ 1 2 - 627527 + 641142 @@ -8347,7 +8088,7 @@ 1 2 - 627527 + 641142 @@ -8357,26 +8098,26 @@ ruby_body_statement_def - 208998 + 213896 id - 208998 + 213896 ruby_break_child - 399 + 394 ruby_break - 399 + 394 child - 399 + 394 @@ -8390,7 +8131,7 @@ 1 2 - 399 + 394 @@ -8406,7 +8147,7 @@ 1 2 - 399 + 394 @@ -8416,26 +8157,26 @@ ruby_break_def - 3434 + 3414 id - 3434 + 3414 ruby_call_arguments - 688552 + 703178 ruby_call - 688552 + 703178 arguments - 688552 + 703178 @@ -8449,7 +8190,7 @@ 1 2 - 688552 + 703178 @@ -8465,7 +8206,7 @@ 1 2 - 688552 + 703178 @@ -8475,15 +8216,15 @@ ruby_call_block - 240751 + 246208 ruby_call - 240751 + 246208 block - 240751 + 246208 @@ -8497,7 +8238,7 @@ 1 2 - 240751 + 246208 @@ -8513,7 +8254,7 @@ 1 2 - 240751 + 246208 @@ -8523,26 +8264,26 @@ ruby_call_def - 1006605 + 1027501 id - 1006605 + 1027501 ruby_call_method - 1006605 + 1027501 ruby_call - 1006605 + 1027501 method - 1006605 + 1027501 @@ -8556,7 +8297,7 @@ 1 2 - 1006605 + 1027501 @@ -8572,7 +8313,7 @@ 1 2 - 1006605 + 1027501 @@ -8582,15 +8323,15 @@ ruby_call_operator - 562262 + 571632 ruby_call - 562262 + 571632 operator - 562262 + 571632 @@ -8604,7 +8345,7 @@ 1 2 - 562262 + 571632 @@ -8620,7 +8361,7 @@ 1 2 - 562262 + 571632 @@ -8630,15 +8371,15 @@ ruby_call_receiver - 562262 + 571632 ruby_call - 562262 + 571632 receiver - 562262 + 571632 @@ -8652,7 +8393,7 @@ 1 2 - 562262 + 571632 @@ -8668,7 +8409,7 @@ 1 2 - 562262 + 571632 @@ -8678,19 +8419,19 @@ ruby_case_child - 4349 + 4685 ruby_case__ - 1289 + 1267 index - 67 + 86 child - 4349 + 4685 @@ -8704,32 +8445,37 @@ 1 2 - 36 + 69 2 3 - 328 + 405 3 4 - 546 + 399 4 5 - 202 + 166 5 - 7 - 110 + 6 + 89 - 7 - 23 - 64 + 6 + 12 + 100 + + + 12 + 87 + 39 @@ -8745,32 +8491,37 @@ 1 2 - 36 + 69 2 3 - 328 + 405 3 4 - 546 + 399 4 5 - 202 + 166 5 - 7 - 110 + 6 + 89 - 7 - 23 - 64 + 6 + 12 + 100 + + + 12 + 87 + 39 @@ -8786,42 +8537,37 @@ 1 2 - 21 + 42 2 3 - 9 + 12 - 4 + 3 6 6 - 8 - 11 - 6 + 6 + 9 + 7 - 14 - 22 - 6 + 9 + 31 + 7 - 33 - 58 - 6 + 39 + 140 + 7 - 123 - 302 - 6 - - - 408 - 421 - 6 + 228 + 1268 + 5 @@ -8837,42 +8583,37 @@ 1 2 - 21 + 42 2 3 - 9 + 12 - 4 + 3 6 6 - 8 - 11 - 6 + 6 + 9 + 7 - 14 - 22 - 6 + 9 + 31 + 7 - 33 - 58 - 6 + 39 + 140 + 7 - 123 - 302 - 6 - - - 408 - 421 - 6 + 228 + 1268 + 5 @@ -8888,7 +8629,7 @@ 1 2 - 4349 + 4685 @@ -8904,7 +8645,7 @@ 1 2 - 4349 + 4685 @@ -8914,22 +8655,22 @@ ruby_case_def - 1289 + 1319 id - 1289 + 1319 ruby_case_match_clauses - 385 + 381 ruby_case_match - 234 + 232 index @@ -8937,7 +8678,7 @@ clauses - 385 + 381 @@ -8951,12 +8692,12 @@ 1 2 - 161 + 160 2 3 - 41 + 40 3 @@ -8982,12 +8723,12 @@ 1 2 - 161 + 160 2 3 - 41 + 40 3 @@ -9013,17 +8754,12 @@ 1 2 - 3 + 2 2 3 - 1 - - - 4 - 5 - 1 + 3 5 @@ -9051,13 +8787,13 @@ 1 - 73 - 74 + 72 + 73 1 - 234 - 235 + 232 + 233 1 @@ -9074,17 +8810,12 @@ 1 2 - 3 + 2 2 3 - 1 - - - 4 - 5 - 1 + 3 5 @@ -9112,13 +8843,13 @@ 1 - 73 - 74 + 72 + 73 1 - 234 - 235 + 232 + 233 1 @@ -9135,7 +8866,7 @@ 1 2 - 385 + 381 @@ -9151,7 +8882,7 @@ 1 2 - 385 + 381 @@ -9161,15 +8892,15 @@ ruby_case_match_def - 234 + 232 id - 234 + 232 value - 234 + 232 @@ -9183,7 +8914,7 @@ 1 2 - 234 + 232 @@ -9199,7 +8930,7 @@ 1 2 - 234 + 232 @@ -9257,15 +8988,15 @@ ruby_case_value - 1246 + 1277 ruby_case__ - 1246 + 1277 value - 1246 + 1277 @@ -9279,7 +9010,7 @@ 1 2 - 1246 + 1277 @@ -9295,7 +9026,7 @@ 1 2 - 1246 + 1277 @@ -9305,7 +9036,7 @@ ruby_chained_string_child - 3346 + 3320 ruby_chained_string @@ -9313,11 +9044,11 @@ index - 36 + 35 child - 3346 + 3320 @@ -9331,32 +9062,32 @@ 2 3 - 297 + 296 3 4 - 202 + 215 4 5 - 131 + 128 5 6 - 122 + 116 6 8 - 67 + 65 8 13 - 61 + 59 @@ -9372,32 +9103,32 @@ 2 3 - 297 + 296 3 4 - 202 + 215 4 5 - 131 + 128 5 6 - 122 + 116 6 8 - 67 + 65 8 13 - 61 + 59 @@ -9413,57 +9144,57 @@ 2 3 - 3 + 2 4 5 - 3 + 2 7 8 - 3 + 2 8 9 - 3 + 2 20 21 - 3 + 2 33 34 - 3 + 2 42 43 - 3 + 2 - 82 - 83 - 3 + 81 + 82 + 2 - 125 - 126 - 3 + 124 + 125 + 2 - 191 - 192 - 3 + 196 + 197 + 2 - 288 - 289 - 6 + 295 + 296 + 5 @@ -9479,57 +9210,57 @@ 2 3 - 3 + 2 4 5 - 3 + 2 7 8 - 3 + 2 8 9 - 3 + 2 20 21 - 3 + 2 33 34 - 3 + 2 42 43 - 3 + 2 - 82 - 83 - 3 + 81 + 82 + 2 - 125 - 126 - 3 + 124 + 125 + 2 - 191 - 192 - 3 + 196 + 197 + 2 - 288 - 289 - 6 + 295 + 296 + 5 @@ -9545,7 +9276,7 @@ 1 2 - 3346 + 3320 @@ -9561,7 +9292,7 @@ 1 2 - 3346 + 3320 @@ -9582,15 +9313,15 @@ ruby_class_body - 15560 + 15734 ruby_class - 15560 + 15734 body - 15560 + 15734 @@ -9604,7 +9335,7 @@ 1 2 - 15560 + 15734 @@ -9620,7 +9351,7 @@ 1 2 - 15560 + 15734 @@ -9630,15 +9361,15 @@ ruby_class_def - 17258 + 17441 id - 17258 + 17441 name - 17258 + 17441 @@ -9652,7 +9383,7 @@ 1 2 - 17258 + 17441 @@ -9668,7 +9399,7 @@ 1 2 - 17258 + 17441 @@ -9678,15 +9409,15 @@ ruby_class_superclass - 13666 + 13806 ruby_class - 13666 + 13806 superclass - 13666 + 13806 @@ -9700,7 +9431,7 @@ 1 2 - 13666 + 13806 @@ -9716,7 +9447,7 @@ 1 2 - 13666 + 13806 @@ -9726,15 +9457,15 @@ ruby_complex_def - 66 + 72 id - 66 + 72 child - 66 + 72 @@ -9748,7 +9479,7 @@ 1 2 - 66 + 72 @@ -9764,7 +9495,7 @@ 1 2 - 66 + 72 @@ -9774,23 +9505,23 @@ ruby_conditional_def - 2954 + 2896 id - 2954 + 2896 alternative - 2954 + 2896 condition - 2954 + 2896 consequence - 2954 + 2896 @@ -9804,7 +9535,7 @@ 1 2 - 2954 + 2896 @@ -9820,7 +9551,7 @@ 1 2 - 2954 + 2896 @@ -9836,7 +9567,7 @@ 1 2 - 2954 + 2896 @@ -9852,7 +9583,7 @@ 1 2 - 2954 + 2896 @@ -9868,7 +9599,7 @@ 1 2 - 2954 + 2896 @@ -9884,7 +9615,7 @@ 1 2 - 2954 + 2896 @@ -9900,7 +9631,7 @@ 1 2 - 2954 + 2896 @@ -9916,7 +9647,7 @@ 1 2 - 2954 + 2896 @@ -9932,7 +9663,7 @@ 1 2 - 2954 + 2896 @@ -9948,7 +9679,7 @@ 1 2 - 2954 + 2896 @@ -9964,7 +9695,7 @@ 1 2 - 2954 + 2896 @@ -9980,7 +9711,7 @@ 1 2 - 2954 + 2896 @@ -9990,19 +9721,19 @@ ruby_delimited_symbol_child - 1749 + 1742 ruby_delimited_symbol - 1258 + 1247 index - 24 + 23 child - 1749 + 1742 @@ -10016,7 +9747,7 @@ 1 2 - 930 + 920 2 @@ -10026,7 +9757,7 @@ 3 9 - 73 + 71 @@ -10042,7 +9773,7 @@ 1 2 - 930 + 920 2 @@ -10052,7 +9783,7 @@ 3 9 - 73 + 71 @@ -10068,42 +9799,42 @@ 1 2 - 3 + 2 3 4 - 3 + 2 - 5 - 6 - 3 + 6 + 7 + 2 - 8 - 9 - 3 + 9 + 10 + 2 - 12 - 13 - 3 + 13 + 14 + 2 24 25 - 3 + 2 - 107 - 108 - 3 + 109 + 110 + 2 - 410 - 411 - 3 + 416 + 417 + 2 @@ -10119,42 +9850,42 @@ 1 2 - 3 + 2 3 4 - 3 + 2 - 5 - 6 - 3 + 6 + 7 + 2 - 8 - 9 - 3 + 9 + 10 + 2 - 12 - 13 - 3 + 13 + 14 + 2 24 25 - 3 + 2 - 107 - 108 - 3 + 109 + 110 + 2 - 410 - 411 - 3 + 416 + 417 + 2 @@ -10170,7 +9901,7 @@ 1 2 - 1749 + 1742 @@ -10186,7 +9917,7 @@ 1 2 - 1749 + 1742 @@ -10196,22 +9927,22 @@ ruby_delimited_symbol_def - 1258 + 1247 id - 1258 + 1247 ruby_destructured_left_assignment_child - 222 + 226 ruby_destructured_left_assignment - 107 + 108 index @@ -10219,7 +9950,7 @@ child - 222 + 226 @@ -10248,7 +9979,7 @@ 4 5 - 4 + 5 @@ -10279,7 +10010,7 @@ 4 5 - 4 + 5 @@ -10293,23 +10024,23 @@ 12 - 4 - 5 + 5 + 6 1 - 16 - 17 + 17 + 18 1 - 95 - 96 + 96 + 97 1 - 107 - 108 + 108 + 109 1 @@ -10324,23 +10055,23 @@ 12 - 4 - 5 + 5 + 6 1 - 16 - 17 + 17 + 18 1 - 95 - 96 + 96 + 97 1 - 107 - 108 + 108 + 109 1 @@ -10357,7 +10088,7 @@ 1 2 - 222 + 226 @@ -10373,7 +10104,7 @@ 1 2 - 222 + 226 @@ -10383,22 +10114,22 @@ ruby_destructured_left_assignment_def - 107 + 108 id - 107 + 108 ruby_destructured_parameter_child - 424 + 463 ruby_destructured_parameter - 194 + 208 index @@ -10406,7 +10137,7 @@ child - 424 + 463 @@ -10425,7 +10156,7 @@ 2 3 - 150 + 162 3 @@ -10435,7 +10166,7 @@ 4 12 - 9 + 11 @@ -10456,7 +10187,7 @@ 2 3 - 150 + 162 3 @@ -10466,7 +10197,7 @@ 4 12 - 9 + 11 @@ -10480,38 +10211,38 @@ 12 - 1 - 2 + 2 + 3 1 - 2 - 3 + 3 + 4 5 - 4 - 5 + 5 + 6 1 - 9 - 10 + 11 + 12 1 - 28 - 29 + 30 + 31 1 - 178 - 179 + 192 + 193 1 - 194 - 195 + 208 + 209 1 @@ -10526,38 +10257,38 @@ 12 - 1 - 2 + 2 + 3 1 - 2 - 3 + 3 + 4 5 - 4 - 5 + 5 + 6 1 - 9 - 10 + 11 + 12 1 - 28 - 29 + 30 + 31 1 - 178 - 179 + 192 + 193 1 - 194 - 195 + 208 + 209 1 @@ -10574,7 +10305,7 @@ 1 2 - 424 + 463 @@ -10590,7 +10321,7 @@ 1 2 - 424 + 463 @@ -10600,26 +10331,26 @@ ruby_destructured_parameter_def - 194 + 208 id - 194 + 208 ruby_do_block_body - 142294 + 145373 ruby_do_block - 142294 + 145373 body - 142294 + 145373 @@ -10633,7 +10364,7 @@ 1 2 - 142294 + 145373 @@ -10649,7 +10380,7 @@ 1 2 - 142294 + 145373 @@ -10659,26 +10390,26 @@ ruby_do_block_def - 142452 + 145534 id - 142452 + 145534 ruby_do_block_parameters - 16036 + 16724 ruby_do_block - 16036 + 16724 parameters - 16036 + 16724 @@ -10692,7 +10423,7 @@ 1 2 - 16036 + 16724 @@ -10708,7 +10439,7 @@ 1 2 - 16036 + 16724 @@ -10718,11 +10449,11 @@ ruby_do_child - 9374 + 9352 ruby_do - 1655 + 1651 index @@ -10730,7 +10461,7 @@ child - 9374 + 9352 @@ -10744,37 +10475,37 @@ 1 2 - 350 + 347 2 3 - 296 + 300 3 4 - 200 + 204 4 - 5 - 77 + 6 + 149 - 5 + 6 7 - 106 + 25 7 8 - 140 + 137 8 9 - 206 + 209 9 @@ -10805,37 +10536,37 @@ 1 2 - 350 + 347 2 3 - 296 + 300 3 4 - 200 + 204 4 - 5 - 77 + 6 + 149 - 5 + 6 7 - 106 + 25 7 8 - 140 + 137 8 9 - 206 + 209 9 @@ -10890,7 +10621,7 @@ 116 - 1656 + 1652 15 @@ -10931,7 +10662,7 @@ 116 - 1656 + 1652 15 @@ -10948,7 +10679,7 @@ 1 2 - 9374 + 9352 @@ -10964,7 +10695,7 @@ 1 2 - 9374 + 9352 @@ -10974,30 +10705,30 @@ ruby_do_def - 1681 + 1675 id - 1681 + 1675 ruby_element_reference_child - 80931 + 82748 ruby_element_reference - 80773 + 82601 index - 5 + 4 child - 80931 + 82748 @@ -11011,12 +10742,12 @@ 1 2 - 80615 + 82455 2 3 - 157 + 146 @@ -11032,12 +10763,12 @@ 1 2 - 80615 + 82455 2 3 - 157 + 146 @@ -11056,8 +10787,8 @@ 2 - 31710 - 31711 + 34958 + 34959 2 @@ -11077,8 +10808,8 @@ 2 - 31710 - 31711 + 34958 + 34959 2 @@ -11095,7 +10826,7 @@ 1 2 - 80931 + 82748 @@ -11111,7 +10842,7 @@ 1 2 - 80931 + 82748 @@ -11121,15 +10852,15 @@ ruby_element_reference_def - 80778 + 82606 id - 80778 + 82606 object - 80778 + 82606 @@ -11143,7 +10874,7 @@ 1 2 - 80778 + 82606 @@ -11159,7 +10890,7 @@ 1 2 - 80778 + 82606 @@ -11169,19 +10900,19 @@ ruby_else_child - 9507 + 9730 ruby_else - 7493 + 7669 index - 33 + 32 child - 9507 + 9730 @@ -11195,17 +10926,17 @@ 1 2 - 6305 + 6454 2 3 - 742 + 758 3 12 - 445 + 455 @@ -11221,17 +10952,17 @@ 1 2 - 6305 + 6454 2 3 - 742 + 758 3 12 - 445 + 455 @@ -11247,57 +10978,57 @@ 1 2 - 3 - - - 3 - 4 - 3 + 2 4 5 - 3 + 2 5 6 - 3 + 2 + + + 6 + 7 + 2 9 10 - 3 + 2 15 16 - 3 + 2 26 27 - 3 + 2 - 61 - 62 - 3 + 64 + 65 + 2 - 145 - 146 - 3 + 152 + 153 + 2 - 387 - 388 - 3 + 405 + 406 + 2 - 2441 - 2442 - 3 + 2557 + 2558 + 2 @@ -11313,57 +11044,57 @@ 1 2 - 3 - - - 3 - 4 - 3 + 2 4 5 - 3 + 2 5 6 - 3 + 2 + + + 6 + 7 + 2 9 10 - 3 + 2 15 16 - 3 + 2 26 27 - 3 + 2 - 61 - 62 - 3 + 64 + 65 + 2 - 145 - 146 - 3 + 152 + 153 + 2 - 387 - 388 - 3 + 405 + 406 + 2 - 2441 - 2442 - 3 + 2557 + 2558 + 2 @@ -11379,7 +11110,7 @@ 1 2 - 9507 + 9730 @@ -11395,7 +11126,7 @@ 1 2 - 9507 + 9730 @@ -11405,26 +11136,26 @@ ruby_else_def - 7505 + 7681 id - 7505 + 7681 ruby_elsif_alternative - 982 + 1058 ruby_elsif - 982 + 1058 alternative - 982 + 1058 @@ -11438,7 +11169,7 @@ 1 2 - 982 + 1058 @@ -11454,7 +11185,7 @@ 1 2 - 982 + 1058 @@ -11464,15 +11195,15 @@ ruby_elsif_consequence - 1505 + 1571 ruby_elsif - 1505 + 1571 consequence - 1505 + 1571 @@ -11486,7 +11217,7 @@ 1 2 - 1505 + 1571 @@ -11502,7 +11233,7 @@ 1 2 - 1505 + 1571 @@ -11512,15 +11243,15 @@ ruby_elsif_def - 1510 + 1583 id - 1510 + 1583 condition - 1510 + 1583 @@ -11534,7 +11265,7 @@ 1 2 - 1510 + 1583 @@ -11550,7 +11281,7 @@ 1 2 - 1510 + 1583 @@ -11568,7 +11299,7 @@ index - 9 + 10 child @@ -11586,12 +11317,12 @@ 1 2 - 7 + 8 2 3 - 4 + 3 3 @@ -11599,8 +11330,8 @@ 1 - 9 - 10 + 10 + 11 1 @@ -11617,12 +11348,12 @@ 1 2 - 7 + 8 2 3 - 4 + 3 3 @@ -11630,8 +11361,8 @@ 1 - 9 - 10 + 10 + 11 1 @@ -11648,7 +11379,7 @@ 1 2 - 6 + 7 2 @@ -11656,8 +11387,8 @@ 1 - 6 - 7 + 5 + 6 1 @@ -11679,7 +11410,7 @@ 1 2 - 6 + 7 2 @@ -11687,8 +11418,8 @@ 1 - 6 - 7 + 5 + 6 1 @@ -11747,19 +11478,19 @@ ruby_ensure_child - 5114 + 5236 ruby_ensure - 3981 + 4106 index - 49 + 47 child - 5114 + 5236 @@ -11773,17 +11504,17 @@ 1 2 - 3204 + 3323 2 3 - 543 + 554 3 17 - 233 + 227 @@ -11799,17 +11530,17 @@ 1 2 - 3204 + 3323 2 3 - 543 + 554 3 17 - 233 + 227 @@ -11825,42 +11556,42 @@ 1 2 - 24 + 23 3 4 - 6 + 5 4 5 - 3 + 2 5 6 - 3 + 2 17 18 - 3 + 2 76 77 - 3 + 2 - 253 - 254 - 3 + 261 + 262 + 2 - 1297 - 1298 - 3 + 1369 + 1370 + 2 @@ -11876,42 +11607,42 @@ 1 2 - 24 + 23 3 4 - 6 + 5 4 5 - 3 + 2 5 6 - 3 + 2 17 18 - 3 + 2 76 77 - 3 + 2 - 253 - 254 - 3 + 261 + 262 + 2 - 1297 - 1298 - 3 + 1369 + 1370 + 2 @@ -11927,7 +11658,7 @@ 1 2 - 5114 + 5236 @@ -11943,7 +11674,7 @@ 1 2 - 5114 + 5236 @@ -11953,26 +11684,26 @@ ruby_ensure_def - 3981 + 4106 id - 3981 + 4106 ruby_exception_variable_def - 924 + 935 id - 924 + 935 child - 924 + 935 @@ -11986,7 +11717,7 @@ 1 2 - 924 + 935 @@ -12002,7 +11733,7 @@ 1 2 - 924 + 935 @@ -12012,19 +11743,19 @@ ruby_exceptions_child - 2188 + 2128 ruby_exceptions - 1938 + 1904 index - 20 + 11 child - 2188 + 2128 @@ -12038,17 +11769,17 @@ 1 2 - 1770 + 1748 2 - 4 - 152 + 5 + 153 - 4 - 9 - 15 + 5 + 6 + 2 @@ -12064,17 +11795,17 @@ 1 2 - 1770 + 1748 2 - 4 - 152 + 5 + 153 - 4 - 9 - 15 + 5 + 6 + 2 @@ -12090,11 +11821,6 @@ 1 2 - 7 - - - 2 - 3 2 @@ -12103,8 +11829,8 @@ 2 - 21 - 22 + 22 + 23 2 @@ -12113,8 +11839,8 @@ 2 - 761 - 762 + 806 + 807 2 @@ -12131,11 +11857,6 @@ 1 2 - 7 - - - 2 - 3 2 @@ -12144,8 +11865,8 @@ 2 - 21 - 22 + 22 + 23 2 @@ -12154,8 +11875,8 @@ 2 - 761 - 762 + 806 + 807 2 @@ -12172,7 +11893,7 @@ 1 2 - 2188 + 2128 @@ -12188,7 +11909,7 @@ 1 2 - 2188 + 2128 @@ -12198,11 +11919,11 @@ ruby_exceptions_def - 1938 + 1904 id - 1938 + 1904 @@ -12452,23 +12173,23 @@ ruby_for_def - 158 + 136 id - 158 + 136 body - 158 + 136 pattern - 158 + 136 value - 158 + 136 @@ -12482,7 +12203,7 @@ 1 2 - 158 + 136 @@ -12498,7 +12219,7 @@ 1 2 - 158 + 136 @@ -12514,7 +12235,7 @@ 1 2 - 158 + 136 @@ -12530,7 +12251,7 @@ 1 2 - 158 + 136 @@ -12546,7 +12267,7 @@ 1 2 - 158 + 136 @@ -12562,7 +12283,7 @@ 1 2 - 158 + 136 @@ -12578,7 +12299,7 @@ 1 2 - 158 + 136 @@ -12594,7 +12315,7 @@ 1 2 - 158 + 136 @@ -12610,7 +12331,7 @@ 1 2 - 158 + 136 @@ -12626,7 +12347,7 @@ 1 2 - 158 + 136 @@ -12642,7 +12363,7 @@ 1 2 - 158 + 136 @@ -12658,7 +12379,7 @@ 1 2 - 158 + 136 @@ -12668,19 +12389,19 @@ ruby_hash_child - 93915 + 96207 ruby_hash - 37005 + 37893 index - 1408 + 1439 child - 93915 + 96207 @@ -12694,32 +12415,32 @@ 1 2 - 15244 + 15577 2 3 - 10347 + 10573 3 4 - 4146 + 4318 4 5 - 4291 + 4385 5 20 - 2817 + 2878 20 108 - 157 + 161 @@ -12735,32 +12456,32 @@ 1 2 - 15244 + 15577 2 3 - 10347 + 10573 3 4 - 4146 + 4318 4 5 - 4291 + 4385 5 20 - 2817 + 2878 20 108 - 157 + 161 @@ -12776,41 +12497,41 @@ 1 2 - 355 + 363 2 3 - 250 + 255 3 4 - 329 + 336 5 6 - 105 + 107 7 13 - 118 + 121 16 55 - 118 + 121 59 - 1654 - 118 + 1660 + 121 - 2811 - 2812 + 2817 + 2818 13 @@ -12827,41 +12548,41 @@ 1 2 - 355 + 363 2 3 - 250 + 255 3 4 - 329 + 336 5 6 - 105 + 107 7 13 - 118 + 121 16 55 - 118 + 121 59 - 1654 - 118 + 1660 + 121 - 2811 - 2812 + 2817 + 2818 13 @@ -12878,7 +12599,7 @@ 1 2 - 93915 + 96207 @@ -12894,7 +12615,7 @@ 1 2 - 93915 + 96207 @@ -12904,22 +12625,22 @@ ruby_hash_def - 40888 + 41915 id - 40888 + 41915 ruby_hash_pattern_child - 98 + 94 ruby_hash_pattern - 70 + 68 index @@ -12927,7 +12648,7 @@ child - 98 + 94 @@ -12946,7 +12667,7 @@ 2 3 - 14 + 12 3 @@ -12972,7 +12693,7 @@ 2 3 - 14 + 12 3 @@ -13001,13 +12722,13 @@ 1 - 20 - 21 + 18 + 19 1 - 70 - 71 + 68 + 69 1 @@ -13032,13 +12753,13 @@ 1 - 20 - 21 + 18 + 19 1 - 70 - 71 + 68 + 69 1 @@ -13055,7 +12776,7 @@ 1 2 - 98 + 94 @@ -13071,7 +12792,7 @@ 1 2 - 98 + 94 @@ -13081,15 +12802,15 @@ ruby_hash_pattern_class - 9 + 32 ruby_hash_pattern - 9 + 32 class - 9 + 32 @@ -13103,7 +12824,7 @@ 1 2 - 9 + 32 @@ -13119,7 +12840,7 @@ 1 2 - 9 + 32 @@ -13129,26 +12850,26 @@ ruby_hash_pattern_def - 75 + 73 id - 75 + 73 ruby_hash_splat_argument_child - 1902 + 1988 ruby_hash_splat_argument - 1902 + 1988 child - 1902 + 1988 @@ -13162,7 +12883,7 @@ 1 2 - 1902 + 1988 @@ -13178,7 +12899,7 @@ 1 2 - 1902 + 1988 @@ -13188,37 +12909,37 @@ ruby_hash_splat_argument_def - 1902 + 1989 id - 1902 + 1989 ruby_hash_splat_parameter_def - 1596 + 1574 id - 1596 + 1574 ruby_hash_splat_parameter_name - 1366 + 1352 ruby_hash_splat_parameter - 1366 + 1352 name - 1366 + 1352 @@ -13232,7 +12953,7 @@ 1 2 - 1366 + 1352 @@ -13248,7 +12969,7 @@ 1 2 - 1366 + 1352 @@ -13258,19 +12979,19 @@ ruby_heredoc_body_child - 26162 + 26244 ruby_heredoc_body - 5519 + 5817 index - 552 + 512 child - 26162 + 26244 @@ -13284,12 +13005,12 @@ 2 3 - 3156 + 3504 4 5 - 692 + 701 5 @@ -13299,7 +13020,7 @@ 6 7 - 720 + 675 7 @@ -13308,13 +13029,13 @@ 10 - 15 - 415 + 17 + 467 - 16 + 17 218 - 203 + 137 @@ -13330,12 +13051,12 @@ 2 3 - 3156 + 3504 4 5 - 692 + 701 5 @@ -13345,7 +13066,7 @@ 6 7 - 720 + 675 7 @@ -13354,13 +13075,13 @@ 10 - 15 - 415 + 17 + 467 - 16 + 17 218 - 203 + 137 @@ -13376,32 +13097,32 @@ 1 2 - 326 + 302 2 3 - 43 + 40 3 5 - 50 + 47 5 - 11 - 43 + 13 + 40 - 11 - 46 - 43 + 13 + 43 + 40 - 57 - 2168 - 45 + 56 + 2463 + 42 @@ -13417,32 +13138,32 @@ 1 2 - 326 + 302 2 3 - 43 + 40 3 5 - 50 + 47 5 - 11 - 43 + 13 + 40 - 11 - 46 - 43 + 13 + 43 + 40 - 57 - 2168 - 45 + 56 + 2463 + 42 @@ -13458,7 +13179,7 @@ 1 2 - 26162 + 26244 @@ -13474,7 +13195,7 @@ 1 2 - 26162 + 26244 @@ -13484,26 +13205,26 @@ ruby_heredoc_body_def - 6178 + 6934 id - 6178 + 6934 ruby_if_alternative - 7005 + 7192 ruby_if - 7005 + 7192 alternative - 7005 + 7192 @@ -13517,7 +13238,7 @@ 1 2 - 7005 + 7192 @@ -13533,7 +13254,7 @@ 1 2 - 7005 + 7192 @@ -13543,15 +13264,15 @@ ruby_if_consequence - 16338 + 16117 ruby_if - 16338 + 16117 consequence - 16338 + 16117 @@ -13565,7 +13286,7 @@ 1 2 - 16338 + 16117 @@ -13581,7 +13302,7 @@ 1 2 - 16338 + 16117 @@ -13591,15 +13312,15 @@ ruby_if_def - 16391 + 16164 id - 16391 + 16164 condition - 16391 + 16164 @@ -13613,7 +13334,7 @@ 1 2 - 16391 + 16164 @@ -13629,7 +13350,7 @@ 1 2 - 16391 + 16164 @@ -13687,19 +13408,19 @@ ruby_if_modifier_def - 14611 + 14541 id - 14611 + 14541 body - 14611 + 14541 condition - 14611 + 14541 @@ -13713,7 +13434,7 @@ 1 2 - 14611 + 14541 @@ -13729,7 +13450,7 @@ 1 2 - 14611 + 14541 @@ -13745,7 +13466,7 @@ 1 2 - 14611 + 14541 @@ -13761,7 +13482,7 @@ 1 2 - 14611 + 14541 @@ -13777,7 +13498,7 @@ 1 2 - 14611 + 14541 @@ -13793,7 +13514,7 @@ 1 2 - 14611 + 14541 @@ -13803,15 +13524,15 @@ ruby_in_clause_body - 345 + 341 ruby_in_clause - 345 + 341 body - 345 + 341 @@ -13825,7 +13546,7 @@ 1 2 - 345 + 341 @@ -13841,7 +13562,7 @@ 1 2 - 345 + 341 @@ -13851,15 +13572,15 @@ ruby_in_clause_def - 385 + 381 id - 385 + 381 pattern - 385 + 381 @@ -13873,7 +13594,7 @@ 1 2 - 385 + 381 @@ -13889,7 +13610,7 @@ 1 2 - 385 + 381 @@ -13947,15 +13668,15 @@ ruby_in_def - 158 + 136 id - 158 + 136 child - 158 + 136 @@ -13969,7 +13690,7 @@ 1 2 - 158 + 136 @@ -13985,7 +13706,7 @@ 1 2 - 158 + 136 @@ -13995,11 +13716,11 @@ ruby_interpolation_child - 38305 + 38493 ruby_interpolation - 38305 + 38493 index @@ -14007,7 +13728,7 @@ child - 38305 + 38493 @@ -14021,7 +13742,7 @@ 1 2 - 38305 + 38493 @@ -14037,7 +13758,7 @@ 1 2 - 38305 + 38493 @@ -14051,8 +13772,8 @@ 12 - 15038 - 15039 + 16291 + 16292 2 @@ -14067,8 +13788,8 @@ 12 - 15038 - 15039 + 16291 + 16292 2 @@ -14085,7 +13806,7 @@ 1 2 - 38305 + 38493 @@ -14101,7 +13822,7 @@ 1 2 - 38305 + 38493 @@ -14111,26 +13832,26 @@ ruby_interpolation_def - 38305 + 38493 id - 38305 + 38493 ruby_keyword_parameter_def - 4144 + 4763 id - 4144 + 4763 name - 4144 + 4763 @@ -14144,7 +13865,7 @@ 1 2 - 4144 + 4763 @@ -14160,7 +13881,7 @@ 1 2 - 4144 + 4763 @@ -14170,15 +13891,15 @@ ruby_keyword_parameter_value - 3100 + 3293 ruby_keyword_parameter - 3100 + 3293 value - 3100 + 3293 @@ -14192,7 +13913,7 @@ 1 2 - 3100 + 3293 @@ -14208,7 +13929,7 @@ 1 2 - 3100 + 3293 @@ -14218,15 +13939,15 @@ ruby_keyword_pattern_def - 80 + 77 id - 80 + 77 key__ - 80 + 77 @@ -14240,7 +13961,7 @@ 1 2 - 80 + 77 @@ -14256,7 +13977,7 @@ 1 2 - 80 + 77 @@ -14266,15 +13987,15 @@ ruby_keyword_pattern_value - 40 + 56 ruby_keyword_pattern - 40 + 56 value - 40 + 56 @@ -14288,7 +14009,7 @@ 1 2 - 40 + 56 @@ -14304,7 +14025,7 @@ 1 2 - 40 + 56 @@ -14314,15 +14035,15 @@ ruby_lambda_def - 7948 + 8187 id - 7948 + 8187 body - 7948 + 8187 @@ -14336,7 +14057,7 @@ 1 2 - 7948 + 8187 @@ -14352,7 +14073,7 @@ 1 2 - 7948 + 8187 @@ -14362,15 +14083,15 @@ ruby_lambda_parameters - 1762 + 1811 ruby_lambda - 1762 + 1811 parameters - 1762 + 1811 @@ -14384,7 +14105,7 @@ 1 2 - 1762 + 1811 @@ -14400,7 +14121,7 @@ 1 2 - 1762 + 1811 @@ -14410,11 +14131,11 @@ ruby_lambda_parameters_child - 2109 + 2197 ruby_lambda_parameters - 1752 + 1801 index @@ -14422,7 +14143,7 @@ child - 2109 + 2197 @@ -14436,17 +14157,17 @@ 1 2 - 1514 + 1545 2 3 - 167 + 164 3 9 - 71 + 92 @@ -14462,17 +14183,17 @@ 1 2 - 1514 + 1545 2 3 - 167 + 164 3 9 - 71 + 92 @@ -14511,18 +14232,18 @@ 1 - 71 - 72 + 92 + 93 1 - 238 - 239 + 256 + 257 1 - 1752 - 1753 + 1801 + 1802 1 @@ -14562,18 +14283,18 @@ 1 - 71 - 72 + 92 + 93 1 - 238 - 239 + 256 + 257 1 - 1752 - 1753 + 1801 + 1802 1 @@ -14590,7 +14311,7 @@ 1 2 - 2109 + 2197 @@ -14606,7 +14327,7 @@ 1 2 - 2109 + 2197 @@ -14616,22 +14337,22 @@ ruby_lambda_parameters_def - 1762 + 1811 id - 1762 + 1811 ruby_left_assignment_list_child - 6610 + 6934 ruby_left_assignment_list - 2994 + 3100 index @@ -14639,7 +14360,7 @@ child - 6610 + 6934 @@ -14653,22 +14374,22 @@ 1 2 - 372 + 382 2 3 - 1951 + 2002 3 4 - 505 + 531 4 16 - 166 + 185 @@ -14684,22 +14405,22 @@ 1 2 - 372 + 382 2 3 - 1951 + 2002 3 4 - 505 + 531 4 16 - 166 + 185 @@ -14713,63 +14434,63 @@ 12 - 2 - 3 + 3 + 4 1 - - 4 - 5 - 2 - 6 7 - 3 + 2 10 11 + 3 + + + 15 + 16 1 - 14 - 15 + 20 + 21 1 - 16 - 17 + 22 + 23 1 - 30 - 31 + 41 + 42 1 - 59 - 60 + 72 + 73 1 - 166 - 167 + 185 + 186 1 - 671 - 672 + 716 + 717 1 - 2622 - 2623 + 2718 + 2719 1 - 2994 - 2995 + 3100 + 3101 1 @@ -14784,63 +14505,63 @@ 12 - 2 - 3 + 3 + 4 1 - - 4 - 5 - 2 - 6 7 - 3 + 2 10 11 + 3 + + + 15 + 16 1 - 14 - 15 + 20 + 21 1 - 16 - 17 + 22 + 23 1 - 30 - 31 + 41 + 42 1 - 59 - 60 + 72 + 73 1 - 166 - 167 + 185 + 186 1 - 671 - 672 + 716 + 717 1 - 2622 - 2623 + 2718 + 2719 1 - 2994 - 2995 + 3100 + 3101 1 @@ -14857,7 +14578,7 @@ 1 2 - 6610 + 6934 @@ -14873,7 +14594,7 @@ 1 2 - 6610 + 6934 @@ -14883,11 +14604,11 @@ ruby_left_assignment_list_def - 2994 + 3100 id - 2994 + 3100 @@ -15010,15 +14731,15 @@ ruby_method_body - 101013 + 102401 ruby_method - 101013 + 102401 body - 101013 + 102401 @@ -15032,7 +14753,7 @@ 1 2 - 101013 + 102401 @@ -15048,7 +14769,7 @@ 1 2 - 101013 + 102401 @@ -15058,15 +14779,15 @@ ruby_method_def - 102124 + 103532 id - 102124 + 103532 name - 102124 + 103532 @@ -15080,7 +14801,7 @@ 1 2 - 102124 + 103532 @@ -15096,7 +14817,7 @@ 1 2 - 102124 + 103532 @@ -15106,15 +14827,15 @@ ruby_method_parameters - 29141 + 29519 ruby_method - 29141 + 29519 parameters - 29141 + 29519 @@ -15128,7 +14849,7 @@ 1 2 - 29141 + 29519 @@ -15144,7 +14865,7 @@ 1 2 - 29141 + 29519 @@ -15154,19 +14875,19 @@ ruby_method_parameters_child - 50543 + 51112 ruby_method_parameters - 30620 + 31001 index - 39 + 41 child - 50543 + 51112 @@ -15180,22 +14901,22 @@ 1 2 - 18615 + 18836 2 3 - 7339 + 7543 3 4 - 2903 + 2840 4 - 14 - 1762 + 15 + 1781 @@ -15211,22 +14932,22 @@ 1 2 - 18615 + 18836 2 3 - 7339 + 7543 3 4 - 2903 + 2840 4 - 14 - 1762 + 15 + 1781 @@ -15242,62 +14963,62 @@ 1 2 - 6 + 8 4 5 - 3 + 2 - 5 - 6 - 3 + 7 + 8 + 2 - 11 - 12 - 3 + 13 + 14 + 2 - 29 - 30 - 3 + 37 + 38 + 2 - 54 - 55 - 3 + 59 + 60 + 2 - 125 - 126 - 3 + 129 + 130 + 2 - 255 - 256 - 3 + 262 + 263 + 2 - 574 - 575 - 3 + 594 + 595 + 2 - 1520 - 1521 - 3 + 1541 + 1542 + 2 - 3911 - 3912 - 3 + 4056 + 4057 + 2 - 9975 - 9976 - 3 + 10336 + 10337 + 2 @@ -15313,62 +15034,62 @@ 1 2 - 6 + 8 4 5 - 3 + 2 - 5 - 6 - 3 + 7 + 8 + 2 - 11 - 12 - 3 + 13 + 14 + 2 - 29 - 30 - 3 + 37 + 38 + 2 - 54 - 55 - 3 + 59 + 60 + 2 - 125 - 126 - 3 + 129 + 130 + 2 - 255 - 256 - 3 + 262 + 263 + 2 - 574 - 575 - 3 + 594 + 595 + 2 - 1520 - 1521 - 3 + 1541 + 1542 + 2 - 3911 - 3912 - 3 + 4056 + 4057 + 2 - 9975 - 9976 - 3 + 10336 + 10337 + 2 @@ -15384,7 +15105,7 @@ 1 2 - 50543 + 51112 @@ -15400,7 +15121,7 @@ 1 2 - 50543 + 51112 @@ -15410,26 +15131,26 @@ ruby_method_parameters_def - 30832 + 31208 id - 30832 + 31208 ruby_module_body - 22274 + 22881 ruby_module - 22274 + 22881 body - 22274 + 22881 @@ -15443,7 +15164,7 @@ 1 2 - 22274 + 22881 @@ -15459,7 +15180,7 @@ 1 2 - 22274 + 22881 @@ -15469,15 +15190,15 @@ ruby_module_def - 22353 + 22962 id - 22353 + 22962 name - 22353 + 22962 @@ -15491,7 +15212,7 @@ 1 2 - 22353 + 22962 @@ -15507,7 +15228,7 @@ 1 2 - 22353 + 22962 @@ -15517,15 +15238,15 @@ ruby_next_child - 241 + 256 ruby_next - 241 + 256 child - 241 + 256 @@ -15539,7 +15260,7 @@ 1 2 - 241 + 256 @@ -15555,7 +15276,7 @@ 1 2 - 241 + 256 @@ -15565,34 +15286,34 @@ ruby_next_def - 1902 + 2020 id - 1902 + 2020 ruby_operator_assignment_def - 6006 + 6160 id - 6006 + 6160 left - 6006 + 6160 operator - 17 + 16 right - 6006 + 6160 @@ -15606,7 +15327,7 @@ 1 2 - 6006 + 6160 @@ -15622,7 +15343,7 @@ 1 2 - 6006 + 6160 @@ -15638,7 +15359,7 @@ 1 2 - 6006 + 6160 @@ -15654,7 +15375,7 @@ 1 2 - 6006 + 6160 @@ -15670,7 +15391,7 @@ 1 2 - 6006 + 6160 @@ -15686,7 +15407,7 @@ 1 2 - 6006 + 6160 @@ -15700,8 +15421,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15710,28 +15431,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15746,8 +15467,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15756,28 +15477,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15792,8 +15513,8 @@ 12 - 2 - 3 + 3 + 4 2 @@ -15802,28 +15523,28 @@ 2 - 8 - 9 + 10 + 11 2 - 9 - 10 + 11 + 12 2 - 60 - 61 + 64 + 65 2 - 630 - 631 + 707 + 708 2 - 1645 - 1646 + 1808 + 1809 2 @@ -15840,7 +15561,7 @@ 1 2 - 6006 + 6160 @@ -15856,7 +15577,7 @@ 1 2 - 6006 + 6160 @@ -15872,7 +15593,7 @@ 1 2 - 6006 + 6160 @@ -15882,19 +15603,19 @@ ruby_optional_parameter_def - 6636 + 6556 id - 6636 + 6556 name - 6636 + 6556 value - 6636 + 6556 @@ -15908,7 +15629,7 @@ 1 2 - 6636 + 6556 @@ -15924,7 +15645,7 @@ 1 2 - 6636 + 6556 @@ -15940,7 +15661,7 @@ 1 2 - 6636 + 6556 @@ -15956,7 +15677,7 @@ 1 2 - 6636 + 6556 @@ -15972,7 +15693,7 @@ 1 2 - 6636 + 6556 @@ -15988,7 +15709,7 @@ 1 2 - 6636 + 6556 @@ -15998,15 +15719,15 @@ ruby_pair_def - 248347 + 254198 id - 248347 + 254198 key__ - 248347 + 254198 @@ -16020,7 +15741,7 @@ 1 2 - 248347 + 254198 @@ -16036,7 +15757,7 @@ 1 2 - 248347 + 254198 @@ -16046,15 +15767,15 @@ ruby_pair_value - 248347 + 254198 ruby_pair - 248347 + 254198 value - 248347 + 254198 @@ -16068,7 +15789,7 @@ 1 2 - 248347 + 254198 @@ -16084,7 +15805,7 @@ 1 2 - 248347 + 254198 @@ -16142,11 +15863,11 @@ ruby_parenthesized_statements_child - 10948 + 11347 ruby_parenthesized_statements - 10874 + 11258 index @@ -16154,7 +15875,7 @@ child - 10948 + 11347 @@ -16168,12 +15889,12 @@ 1 2 - 10810 + 11179 2 5 - 64 + 79 @@ -16189,12 +15910,12 @@ 1 2 - 10810 + 11179 2 5 - 64 + 79 @@ -16218,13 +15939,13 @@ 1 - 64 - 65 + 79 + 80 1 - 10874 - 10875 + 11258 + 11259 1 @@ -16249,13 +15970,13 @@ 1 - 64 - 65 + 79 + 80 1 - 10874 - 10875 + 11258 + 11259 1 @@ -16272,7 +15993,7 @@ 1 2 - 10948 + 11347 @@ -16288,7 +16009,7 @@ 1 2 - 10948 + 11347 @@ -16298,26 +16019,26 @@ ruby_parenthesized_statements_def - 10912 + 11296 id - 10912 + 11296 ruby_pattern_def - 4153 + 4745 id - 4153 + 4745 child - 4153 + 4745 @@ -16331,7 +16052,7 @@ 1 2 - 4153 + 4745 @@ -16347,7 +16068,7 @@ 1 2 - 4153 + 4745 @@ -16357,11 +16078,11 @@ ruby_program_child - 33982 + 33893 ruby_program - 10658 + 10674 index @@ -16369,7 +16090,7 @@ child - 33982 + 33893 @@ -16383,32 +16104,32 @@ 1 2 - 3932 + 3956 2 3 - 2514 + 2531 3 4 - 1758 + 1772 4 5 - 801 + 794 5 8 - 917 + 902 8 - 79 - 733 + 81 + 716 @@ -16424,32 +16145,32 @@ 1 2 - 3932 + 3956 2 3 - 2514 + 2531 3 4 - 1758 + 1772 4 5 - 801 + 794 5 8 - 917 + 902 8 - 79 - 733 + 81 + 716 @@ -16465,57 +16186,57 @@ 1 2 - 46 + 50 2 3 - 36 + 29 - 4 - 9 - 21 + 3 + 7 + 17 - 9 - 12 - 18 + 8 + 11 + 17 - 13 - 17 - 18 + 11 + 15 + 17 - 17 - 28 - 18 + 16 + 23 + 17 - 29 - 44 - 18 + 26 + 36 + 17 - 45 - 80 - 18 + 38 + 60 + 17 - 89 - 190 - 18 + 67 + 129 + 17 - 239 - 1373 - 18 + 145 + 397 + 17 - 2191 - 3473 - 6 + 540 + 3560 + 14 @@ -16531,57 +16252,57 @@ 1 2 - 46 + 50 2 3 - 36 + 29 - 4 - 9 - 21 + 3 + 7 + 17 - 9 - 12 - 18 + 8 + 11 + 17 - 13 - 17 - 18 + 11 + 15 + 17 - 17 - 28 - 18 + 16 + 23 + 17 - 29 - 44 - 18 + 26 + 36 + 17 - 45 - 80 - 18 + 38 + 60 + 17 - 89 - 190 - 18 + 67 + 129 + 17 - 239 - 1373 - 18 + 145 + 397 + 17 - 2191 - 3473 - 6 + 540 + 3560 + 14 @@ -16597,7 +16318,7 @@ 1 2 - 33982 + 33893 @@ -16613,7 +16334,7 @@ 1 2 - 33982 + 33893 @@ -16623,26 +16344,26 @@ ruby_program_def - 18219 + 18697 id - 18219 + 18697 ruby_range_begin - 4491 + 4748 ruby_range - 4491 + 4748 begin - 4491 + 4748 @@ -16656,7 +16377,7 @@ 1 2 - 4491 + 4748 @@ -16672,7 +16393,7 @@ 1 2 - 4491 + 4748 @@ -16682,11 +16403,11 @@ ruby_range_def - 4770 + 5066 id - 4770 + 5066 operator @@ -16704,7 +16425,7 @@ 1 2 - 4770 + 5066 @@ -16718,13 +16439,13 @@ 12 - 1634 - 1635 + 1376 + 1377 1 - 3136 - 3137 + 3690 + 3691 1 @@ -16735,15 +16456,15 @@ ruby_range_end - 4576 + 4818 ruby_range - 4576 + 4818 end - 4576 + 4818 @@ -16757,7 +16478,7 @@ 1 2 - 4576 + 4818 @@ -16773,7 +16494,7 @@ 1 2 - 4576 + 4818 @@ -16783,15 +16504,15 @@ ruby_rational_def - 138 + 166 id - 138 + 166 child - 138 + 166 @@ -16805,7 +16526,7 @@ 1 2 - 138 + 166 @@ -16821,7 +16542,7 @@ 1 2 - 138 + 166 @@ -16890,19 +16611,19 @@ ruby_regex_child - 44658 + 45368 ruby_regex - 13335 + 13665 index - 150 + 146 child - 44658 + 45368 @@ -16916,42 +16637,42 @@ 1 2 - 6808 + 7006 2 3 - 752 + 800 3 4 - 1826 + 1868 4 5 - 506 + 500 5 6 - 1108 + 1124 6 8 - 1034 + 1031 8 16 - 1055 + 1094 16 50 - 242 + 236 @@ -16967,42 +16688,42 @@ 1 2 - 6808 + 7006 2 3 - 752 + 800 3 4 - 1826 + 1868 4 5 - 506 + 500 5 6 - 1108 + 1124 6 8 - 1034 + 1031 8 16 - 1055 + 1094 16 50 - 242 + 236 @@ -17018,67 +16739,67 @@ 1 2 - 18 + 17 4 5 - 12 + 11 6 7 - 3 + 2 7 8 - 12 + 11 8 15 - 12 + 11 15 - 19 - 12 + 18 + 8 - 19 - 23 - 9 + 18 + 21 + 11 - 23 + 21 31 - 12 + 11 32 80 - 12 + 11 103 - 175 - 12 + 184 + 11 - 239 - 424 - 12 + 249 + 445 + 11 - 671 - 1287 - 12 + 696 + 1331 + 11 - 1881 - 4345 - 9 + 1953 + 4557 + 8 @@ -17094,67 +16815,67 @@ 1 2 - 18 + 17 4 5 - 12 + 11 6 7 - 3 + 2 7 8 - 12 + 11 8 15 - 12 + 11 15 - 19 - 12 + 18 + 8 - 19 - 23 - 9 + 18 + 21 + 11 - 23 + 21 31 - 12 + 11 32 80 - 12 + 11 103 - 175 - 12 + 184 + 11 - 239 - 424 - 12 + 249 + 445 + 11 - 671 - 1287 - 12 + 696 + 1331 + 11 - 1881 - 4345 - 9 + 1953 + 4557 + 8 @@ -17170,7 +16891,7 @@ 1 2 - 44658 + 45368 @@ -17186,7 +16907,7 @@ 1 2 - 44658 + 45368 @@ -17196,26 +16917,26 @@ ruby_regex_def - 13350 + 13680 id - 13350 + 13680 ruby_rescue_body - 2083 + 2050 ruby_rescue - 2083 + 2050 body - 2083 + 2050 @@ -17229,7 +16950,7 @@ 1 2 - 2083 + 2050 @@ -17245,7 +16966,7 @@ 1 2 - 2083 + 2050 @@ -17255,26 +16976,26 @@ ruby_rescue_def - 2346 + 2299 id - 2346 + 2299 ruby_rescue_exceptions - 1938 + 1904 ruby_rescue - 1938 + 1904 exceptions - 1938 + 1904 @@ -17288,7 +17009,7 @@ 1 2 - 1938 + 1904 @@ -17304,7 +17025,7 @@ 1 2 - 1938 + 1904 @@ -17314,19 +17035,19 @@ ruby_rescue_modifier_def - 448 + 458 id - 448 + 458 body - 448 + 458 handler - 448 + 458 @@ -17340,7 +17061,7 @@ 1 2 - 448 + 458 @@ -17356,7 +17077,7 @@ 1 2 - 448 + 458 @@ -17372,7 +17093,7 @@ 1 2 - 448 + 458 @@ -17388,7 +17109,7 @@ 1 2 - 448 + 458 @@ -17404,7 +17125,7 @@ 1 2 - 448 + 458 @@ -17420,7 +17141,7 @@ 1 2 - 448 + 458 @@ -17430,15 +17151,15 @@ ruby_rescue_variable - 924 + 935 ruby_rescue - 924 + 935 variable - 924 + 935 @@ -17452,7 +17173,7 @@ 1 2 - 924 + 935 @@ -17468,7 +17189,7 @@ 1 2 - 924 + 935 @@ -17478,15 +17199,15 @@ ruby_rest_assignment_child - 383 + 392 ruby_rest_assignment - 383 + 392 child - 383 + 392 @@ -17500,7 +17221,7 @@ 1 2 - 383 + 392 @@ -17516,7 +17237,7 @@ 1 2 - 383 + 392 @@ -17526,11 +17247,11 @@ ruby_rest_assignment_def - 401 + 414 id - 401 + 414 @@ -17585,26 +17306,26 @@ ruby_retry_def - 60 + 58 id - 60 + 58 ruby_return_child - 5084 + 4938 ruby_return - 5084 + 4938 child - 5084 + 4938 @@ -17618,7 +17339,7 @@ 1 2 - 5084 + 4938 @@ -17634,7 +17355,7 @@ 1 2 - 5084 + 4938 @@ -17644,30 +17365,30 @@ ruby_return_def - 8197 + 7979 id - 8197 + 7979 ruby_right_assignment_list_child - 2600 + 2741 ruby_right_assignment_list - 1224 + 1280 index - 15 + 14 child - 2600 + 2741 @@ -17681,17 +17402,17 @@ 2 3 - 1098 + 1136 3 4 - 104 + 113 4 6 - 21 + 29 @@ -17707,17 +17428,17 @@ 2 3 - 1098 + 1136 3 4 - 104 + 113 4 6 - 21 + 29 @@ -17731,24 +17452,24 @@ 12 - 1 - 2 - 3 + 2 + 3 + 2 - 7 - 8 - 3 + 10 + 11 + 2 - 41 - 42 - 3 + 48 + 49 + 2 - 399 - 400 - 6 + 427 + 428 + 5 @@ -17762,24 +17483,24 @@ 12 - 1 - 2 - 3 + 2 + 3 + 2 - 7 - 8 - 3 + 10 + 11 + 2 - 41 - 42 - 3 + 48 + 49 + 2 - 399 - 400 - 6 + 427 + 428 + 5 @@ -17795,7 +17516,7 @@ 1 2 - 2600 + 2741 @@ -17811,7 +17532,7 @@ 1 2 - 2600 + 2741 @@ -17821,26 +17542,26 @@ ruby_right_assignment_list_def - 1224 + 1280 id - 1224 + 1280 ruby_scope_resolution_def - 84884 + 87113 id - 84884 + 87113 name - 84884 + 87113 @@ -17854,7 +17575,7 @@ 1 2 - 84884 + 87113 @@ -17870,7 +17591,7 @@ 1 2 - 84884 + 87113 @@ -17880,15 +17601,15 @@ ruby_scope_resolution_scope - 83028 + 85203 ruby_scope_resolution - 83028 + 85203 scope - 83028 + 85203 @@ -17902,7 +17623,7 @@ 1 2 - 83028 + 85203 @@ -17918,7 +17639,7 @@ 1 2 - 83028 + 85203 @@ -17928,15 +17649,15 @@ ruby_setter_def - 653 + 656 id - 653 + 656 name - 653 + 656 @@ -17950,7 +17671,7 @@ 1 2 - 653 + 656 @@ -17966,7 +17687,7 @@ 1 2 - 653 + 656 @@ -17976,15 +17697,15 @@ ruby_singleton_class_body - 663 + 677 ruby_singleton_class - 663 + 677 body - 663 + 677 @@ -17998,7 +17719,7 @@ 1 2 - 663 + 677 @@ -18014,7 +17735,7 @@ 1 2 - 663 + 677 @@ -18024,15 +17745,15 @@ ruby_singleton_class_def - 663 + 677 id - 663 + 677 value - 663 + 677 @@ -18046,7 +17767,7 @@ 1 2 - 663 + 677 @@ -18062,7 +17783,7 @@ 1 2 - 663 + 677 @@ -18072,15 +17793,15 @@ ruby_singleton_method_body - 6447 + 6313 ruby_singleton_method - 6447 + 6313 body - 6447 + 6313 @@ -18094,7 +17815,7 @@ 1 2 - 6447 + 6313 @@ -18110,7 +17831,7 @@ 1 2 - 6447 + 6313 @@ -18120,19 +17841,19 @@ ruby_singleton_method_def - 6459 + 6325 id - 6459 + 6325 name - 6459 + 6325 object - 6459 + 6325 @@ -18146,7 +17867,7 @@ 1 2 - 6459 + 6325 @@ -18162,7 +17883,7 @@ 1 2 - 6459 + 6325 @@ -18178,7 +17899,7 @@ 1 2 - 6459 + 6325 @@ -18194,7 +17915,7 @@ 1 2 - 6459 + 6325 @@ -18210,7 +17931,7 @@ 1 2 - 6459 + 6325 @@ -18226,7 +17947,7 @@ 1 2 - 6459 + 6325 @@ -18236,15 +17957,15 @@ ruby_singleton_method_parameters - 4073 + 3929 ruby_singleton_method - 4073 + 3929 parameters - 4073 + 3929 @@ -18258,7 +17979,7 @@ 1 2 - 4073 + 3929 @@ -18274,7 +17995,7 @@ 1 2 - 4073 + 3929 @@ -18284,15 +18005,15 @@ ruby_splat_argument_child - 3454 + 3605 ruby_splat_argument - 3454 + 3605 child - 3454 + 3605 @@ -18306,7 +18027,7 @@ 1 2 - 3454 + 3605 @@ -18322,7 +18043,7 @@ 1 2 - 3454 + 3605 @@ -18332,37 +18053,37 @@ ruby_splat_argument_def - 3454 + 3606 id - 3454 + 3606 ruby_splat_parameter_def - 3192 + 3014 id - 3192 + 3014 ruby_splat_parameter_name - 2514 + 2297 ruby_splat_parameter - 2514 + 2297 name - 2514 + 2297 @@ -18376,7 +18097,7 @@ 1 2 - 2514 + 2297 @@ -18392,7 +18113,7 @@ 1 2 - 2514 + 2297 @@ -18402,19 +18123,19 @@ ruby_string_array_child - 12799 + 13136 ruby_string_array - 4062 + 4120 index - 536 + 606 child - 12799 + 13136 @@ -18428,32 +18149,32 @@ 1 2 - 1313 + 1350 2 3 - 1310 + 1304 3 4 - 625 + 630 4 5 - 349 + 356 5 10 - 325 + 332 10 - 537 - 140 + 607 + 148 @@ -18469,32 +18190,32 @@ 1 2 - 1313 + 1350 2 3 - 1310 + 1304 3 4 - 625 + 630 4 5 - 349 + 356 5 10 - 325 + 332 10 - 537 - 140 + 607 + 148 @@ -18510,22 +18231,22 @@ 1 2 - 432 + 506 2 - 7 - 42 + 10 + 48 - 7 - 47 - 41 + 11 + 266 + 46 - 49 - 4063 - 21 + 344 + 4121 + 6 @@ -18541,22 +18262,22 @@ 1 2 - 432 + 506 2 - 7 - 42 + 10 + 48 - 7 - 47 - 41 + 11 + 266 + 46 - 49 - 4063 - 21 + 344 + 4121 + 6 @@ -18572,7 +18293,7 @@ 1 2 - 12799 + 13136 @@ -18588,7 +18309,7 @@ 1 2 - 12799 + 13136 @@ -18598,22 +18319,22 @@ ruby_string_array_def - 4213 + 4287 id - 4213 + 4287 ruby_string_child - 549106 + 559228 ruby_string__ - 477859 + 483542 index @@ -18621,7 +18342,7 @@ child - 549106 + 559228 @@ -18635,12 +18356,12 @@ 1 2 - 449884 + 454555 2 282 - 27975 + 28987 @@ -18656,12 +18377,12 @@ 1 2 - 449884 + 454555 2 282 - 27975 + 28987 @@ -18677,31 +18398,36 @@ 1 2 - 129 + 95 - 4 - 5 - 64 + 2 + 3 + 34 5 - 7 + 6 + 64 + + + 6 + 9 22 - 7 - 27 + 9 + 37 22 - 28 - 83 + 37 + 108 22 - 104 - 477860 + 129 + 483543 22 @@ -18718,31 +18444,36 @@ 1 2 - 129 + 95 - 4 - 5 - 64 + 2 + 3 + 34 5 - 7 + 6 + 64 + + + 6 + 9 22 - 7 - 27 + 9 + 37 22 - 28 - 83 + 37 + 108 22 - 104 - 477860 + 129 + 483543 22 @@ -18759,7 +18490,7 @@ 1 2 - 549106 + 559228 @@ -18775,7 +18506,7 @@ 1 2 - 549106 + 559228 @@ -18785,30 +18516,30 @@ ruby_string_def - 485218 + 490602 id - 485218 + 490602 ruby_subshell_child - 561 + 551 ruby_subshell - 365 + 359 index - 33 + 32 child - 561 + 551 @@ -18827,17 +18558,17 @@ 2 3 - 58 + 53 3 5 - 33 + 32 5 12 - 9 + 8 @@ -18858,17 +18589,17 @@ 2 3 - 58 + 53 3 5 - 33 + 32 5 12 - 9 + 8 @@ -18884,37 +18615,37 @@ 1 2 - 12 + 11 2 3 - 6 + 5 3 4 - 3 + 2 - 6 - 7 - 3 + 7 + 8 + 2 14 15 - 3 + 2 - 33 - 34 - 3 + 32 + 33 + 2 - 119 - 120 - 3 + 120 + 121 + 2 @@ -18930,37 +18661,37 @@ 1 2 - 12 + 11 2 3 - 6 + 5 3 4 - 3 + 2 - 6 - 7 - 3 + 7 + 8 + 2 14 15 - 3 + 2 - 33 - 34 - 3 + 32 + 33 + 2 - 119 - 120 - 3 + 120 + 121 + 2 @@ -18976,7 +18707,7 @@ 1 2 - 561 + 551 @@ -18992,7 +18723,7 @@ 1 2 - 561 + 551 @@ -19002,26 +18733,26 @@ ruby_subshell_def - 365 + 359 id - 365 + 359 ruby_superclass_def - 13666 + 13806 id - 13666 + 13806 child - 13666 + 13806 @@ -19035,7 +18766,7 @@ 1 2 - 13666 + 13806 @@ -19051,7 +18782,7 @@ 1 2 - 13666 + 13806 @@ -19061,19 +18792,19 @@ ruby_symbol_array_child - 7967 + 8435 ruby_symbol_array - 2170 + 2240 index - 241 + 233 child - 7967 + 8435 @@ -19087,37 +18818,37 @@ 1 2 - 178 + 219 2 3 - 1161 + 1129 3 4 - 354 + 347 4 5 - 127 + 160 5 8 - 183 + 189 8 - 94 - 163 + 24 + 170 - 95 - 96 - 2 + 24 + 100 + 23 @@ -19133,37 +18864,37 @@ 1 2 - 178 + 219 2 3 - 1161 + 1129 3 4 - 354 + 347 4 5 - 127 + 160 5 8 - 183 + 189 8 - 94 - 163 + 24 + 170 - 95 - 96 - 2 + 24 + 100 + 23 @@ -19179,37 +18910,37 @@ 1 2 - 5 + 9 2 3 - 152 + 139 4 - 9 - 20 + 8 + 18 - 9 - 20 - 20 + 8 + 17 + 18 - 23 - 47 - 20 + 19 + 41 + 18 - 55 - 783 - 20 + 44 + 163 + 18 - 852 - 853 - 2 + 230 + 949 + 9 @@ -19225,37 +18956,37 @@ 1 2 - 5 + 9 2 3 - 152 + 139 4 - 9 - 20 + 8 + 18 - 9 - 20 - 20 + 8 + 17 + 18 - 23 - 47 - 20 + 19 + 41 + 18 - 55 - 783 - 20 + 44 + 163 + 18 - 852 - 853 - 2 + 230 + 949 + 9 @@ -19271,7 +19002,7 @@ 1 2 - 7967 + 8435 @@ -19287,7 +19018,7 @@ 1 2 - 7967 + 8435 @@ -19297,30 +19028,30 @@ ruby_symbol_array_def - 2170 + 2240 id - 2170 + 2240 ruby_test_pattern_def - 4 + 5 id - 4 + 5 pattern - 4 + 5 value - 4 + 5 @@ -19334,7 +19065,7 @@ 1 2 - 4 + 5 @@ -19350,7 +19081,7 @@ 1 2 - 4 + 5 @@ -19366,7 +19097,7 @@ 1 2 - 4 + 5 @@ -19382,7 +19113,7 @@ 1 2 - 4 + 5 @@ -19398,7 +19129,7 @@ 1 2 - 4 + 5 @@ -19414,7 +19145,7 @@ 1 2 - 4 + 5 @@ -19424,19 +19155,19 @@ ruby_then_child - 37566 + 37016 ruby_then - 22451 + 22229 index - 91 + 85 child - 37566 + 37016 @@ -19450,22 +19181,22 @@ 1 2 - 14093 + 13943 2 3 - 5076 + 5070 3 4 - 1811 + 1817 4 37 - 1469 + 1398 @@ -19481,22 +19212,22 @@ 1 2 - 14093 + 13943 2 3 - 5076 + 5070 3 4 - 1811 + 1817 4 37 - 1469 + 1398 @@ -19512,51 +19243,51 @@ 1 2 - 35 + 30 - 3 + 2 4 - 2 + 4 4 5 - 10 + 9 - 5 + 6 8 - 5 + 4 - 9 - 10 - 5 + 8 + 9 + 4 10 - 18 + 19 7 - 29 - 60 + 30 + 61 7 - 95 - 309 + 98 + 310 7 - 577 - 3282 + 592 + 3508 7 - 8814 - 8815 + 9408 + 9409 2 @@ -19573,51 +19304,51 @@ 1 2 - 35 + 30 - 3 + 2 4 - 2 + 4 4 5 - 10 + 9 - 5 + 6 8 - 5 + 4 - 9 - 10 - 5 + 8 + 9 + 4 10 - 18 + 19 7 - 29 - 60 + 30 + 61 7 - 95 - 309 + 98 + 310 7 - 577 - 3282 + 592 + 3508 7 - 8814 - 8815 + 9408 + 9409 2 @@ -19634,7 +19365,7 @@ 1 2 - 37566 + 37016 @@ -19650,7 +19381,7 @@ 1 2 - 37566 + 37016 @@ -19660,22 +19391,22 @@ ruby_then_def - 22451 + 22229 id - 22451 + 22229 ruby_tokeninfo - 6212759 + 6351611 id - 6212759 + 6351611 kind @@ -19683,7 +19414,7 @@ value - 272576 + 275925 @@ -19697,7 +19428,7 @@ 1 2 - 6212759 + 6351611 @@ -19713,7 +19444,7 @@ 1 2 - 6212759 + 6351611 @@ -19727,63 +19458,68 @@ 12 - 42 + 1 + 2 + 4 + + + 49 160 - 5 + 4 - 262 - 428 - 5 + 291 + 443 + 4 - 1906 - 1907 + 2054 + 2055 2 - 2167 - 2168 - 5 + 2462 + 2463 + 4 - 4685 - 4919 - 5 + 5047 + 5260 + 4 - 5076 - 6845 - 5 + 5496 + 7346 + 4 - 9531 - 10121 - 5 + 10365 + 10609 + 4 - 14916 - 20953 - 5 + 15376 + 22709 + 4 - 28887 - 64458 - 5 + 31415 + 70704 + 4 - 69189 - 98135 - 5 + 77014 + 106932 + 4 - 117445 - 609106 - 5 + 129596 + 673263 + 4 - 1367617 - 1367618 + 1509036 + 1509037 2 @@ -19800,51 +19536,51 @@ 1 2 - 12 + 16 - 5 + 6 26 - 5 + 4 - 30 - 41 - 5 + 36 + 48 + 4 - 70 - 122 - 5 + 68 + 121 + 4 - 135 - 172 - 5 + 151 + 181 + 4 - 1500 - 1951 - 5 + 1509 + 2060 + 4 - 3612 - 4307 - 5 + 3983 + 4628 + 4 - 5291 - 8590 - 5 + 5781 + 9380 + 4 - 12176 - 21807 - 5 + 13063 + 24102 + 4 - 53746 - 53747 + 58689 + 58690 2 @@ -19861,32 +19597,32 @@ 1 2 - 162402 + 164156 2 3 - 39879 + 41140 3 4 - 19155 + 19333 4 7 - 22724 + 22761 7 29 - 20693 + 20750 29 - 222217 - 7720 + 243390 + 7783 @@ -19902,12 +19638,12 @@ 1 2 - 259340 + 262839 2 5 - 13235 + 13085 @@ -19917,15 +19653,15 @@ ruby_unary_def - 13726 + 14535 id - 13726 + 14535 operand - 13726 + 14535 operator @@ -19943,7 +19679,7 @@ 1 2 - 13726 + 14535 @@ -19959,7 +19695,7 @@ 1 2 - 13726 + 14535 @@ -19975,7 +19711,7 @@ 1 2 - 13726 + 14535 @@ -19991,7 +19727,7 @@ 1 2 - 13726 + 14535 @@ -20005,33 +19741,33 @@ 12 - 98 - 99 + 97 + 98 1 - 190 - 191 + 172 + 173 1 - 566 - 567 + 947 + 948 1 - 1301 - 1302 + 1369 + 1370 1 - 1938 - 1939 + 2120 + 2121 1 - 9633 - 9634 + 9830 + 9831 1 @@ -20046,33 +19782,33 @@ 12 - 98 - 99 + 97 + 98 1 - 190 - 191 + 172 + 173 1 - 566 - 567 + 947 + 948 1 - 1301 - 1302 + 1369 + 1370 1 - 1938 - 1939 + 2120 + 2121 1 - 9633 - 9634 + 9830 + 9831 1 @@ -20230,15 +19966,15 @@ ruby_unless_alternative - 42 + 43 ruby_unless - 42 + 43 alternative - 42 + 43 @@ -20252,7 +19988,7 @@ 1 2 - 42 + 43 @@ -20268,7 +20004,7 @@ 1 2 - 42 + 43 @@ -20278,15 +20014,15 @@ ruby_unless_consequence - 2662 + 2721 ruby_unless - 2662 + 2721 consequence - 2662 + 2721 @@ -20300,7 +20036,7 @@ 1 2 - 2662 + 2721 @@ -20316,7 +20052,7 @@ 1 2 - 2662 + 2721 @@ -20326,15 +20062,15 @@ ruby_unless_def - 2663 + 2723 id - 2663 + 2723 condition - 2663 + 2723 @@ -20348,7 +20084,7 @@ 1 2 - 2663 + 2723 @@ -20364,7 +20100,7 @@ 1 2 - 2663 + 2723 @@ -20422,19 +20158,19 @@ ruby_unless_modifier_def - 3505 + 3416 id - 3505 + 3416 body - 3505 + 3416 condition - 3505 + 3416 @@ -20448,7 +20184,7 @@ 1 2 - 3505 + 3416 @@ -20464,7 +20200,7 @@ 1 2 - 3505 + 3416 @@ -20480,7 +20216,7 @@ 1 2 - 3505 + 3416 @@ -20496,7 +20232,7 @@ 1 2 - 3505 + 3416 @@ -20512,7 +20248,7 @@ 1 2 - 3505 + 3416 @@ -20528,7 +20264,7 @@ 1 2 - 3505 + 3416 @@ -20538,19 +20274,19 @@ ruby_until_def - 123 + 126 id - 123 + 126 body - 123 + 126 condition - 123 + 126 @@ -20564,7 +20300,7 @@ 1 2 - 123 + 126 @@ -20580,7 +20316,7 @@ 1 2 - 123 + 126 @@ -20596,7 +20332,7 @@ 1 2 - 123 + 126 @@ -20612,7 +20348,7 @@ 1 2 - 123 + 126 @@ -20628,7 +20364,7 @@ 1 2 - 123 + 126 @@ -20644,7 +20380,7 @@ 1 2 - 123 + 126 @@ -20654,19 +20390,19 @@ ruby_until_modifier_def - 234 + 238 id - 234 + 238 body - 234 + 238 condition - 234 + 238 @@ -20680,7 +20416,7 @@ 1 2 - 234 + 238 @@ -20696,7 +20432,7 @@ 1 2 - 234 + 238 @@ -20712,7 +20448,7 @@ 1 2 - 234 + 238 @@ -20728,7 +20464,7 @@ 1 2 - 234 + 238 @@ -20744,7 +20480,7 @@ 1 2 - 234 + 238 @@ -20760,7 +20496,7 @@ 1 2 - 234 + 238 @@ -20818,15 +20554,15 @@ ruby_when_body - 3358 + 3790 ruby_when - 3358 + 3790 body - 3358 + 3790 @@ -20840,7 +20576,7 @@ 1 2 - 3358 + 3790 @@ -20856,7 +20592,7 @@ 1 2 - 3358 + 3790 @@ -20866,22 +20602,22 @@ ruby_when_def - 3392 + 3882 id - 3392 + 3882 ruby_when_pattern - 4153 + 4745 ruby_when - 3377 + 3882 index @@ -20889,7 +20625,7 @@ pattern - 4153 + 4745 @@ -20903,17 +20639,17 @@ 1 2 - 2934 + 3393 2 3 - 293 + 330 3 16 - 150 + 159 @@ -20929,17 +20665,17 @@ 1 2 - 2934 + 3393 2 3 - 293 + 330 3 16 - 150 + 159 @@ -20960,51 +20696,56 @@ 3 4 - 4 + 2 4 5 + 2 + + + 5 + 6 1 - 6 - 7 + 10 + 11 1 - 14 - 15 + 19 + 20 1 - 25 - 26 + 31 + 32 1 - 35 - 36 + 44 + 45 1 - 85 - 86 + 90 + 91 1 - 150 - 151 + 159 + 160 1 - 443 - 444 + 489 + 490 1 - 3377 - 3378 + 3882 + 3883 1 @@ -21026,51 +20767,56 @@ 3 4 - 4 + 2 4 5 + 2 + + + 5 + 6 1 - 6 - 7 + 10 + 11 1 - 14 - 15 + 19 + 20 1 - 25 - 26 + 31 + 32 1 - 35 - 36 + 44 + 45 1 - 85 - 86 + 90 + 91 1 - 150 - 151 + 159 + 160 1 - 443 - 444 + 489 + 490 1 - 3377 - 3378 + 3882 + 3883 1 @@ -21087,7 +20833,7 @@ 1 2 - 4153 + 4745 @@ -21103,7 +20849,7 @@ 1 2 - 4153 + 4745 @@ -21113,19 +20859,19 @@ ruby_while_def - 1400 + 1413 id - 1400 + 1413 body - 1400 + 1413 condition - 1400 + 1413 @@ -21139,7 +20885,7 @@ 1 2 - 1400 + 1413 @@ -21155,7 +20901,7 @@ 1 2 - 1400 + 1413 @@ -21171,7 +20917,7 @@ 1 2 - 1400 + 1413 @@ -21187,7 +20933,7 @@ 1 2 - 1400 + 1413 @@ -21203,7 +20949,7 @@ 1 2 - 1400 + 1413 @@ -21219,7 +20965,7 @@ 1 2 - 1400 + 1413 @@ -21229,19 +20975,19 @@ ruby_while_modifier_def - 194 + 198 id - 194 + 198 body - 194 + 198 condition - 194 + 198 @@ -21255,7 +21001,7 @@ 1 2 - 194 + 198 @@ -21271,7 +21017,7 @@ 1 2 - 194 + 198 @@ -21287,7 +21033,7 @@ 1 2 - 194 + 198 @@ -21303,7 +21049,7 @@ 1 2 - 194 + 198 @@ -21319,7 +21065,7 @@ 1 2 - 194 + 198 @@ -21335,7 +21081,7 @@ 1 2 - 194 + 198 @@ -21345,15 +21091,15 @@ ruby_yield_child - 1111 + 1103 ruby_yield - 1111 + 1103 child - 1111 + 1103 @@ -21367,7 +21113,7 @@ 1 2 - 1111 + 1103 @@ -21383,7 +21129,7 @@ 1 2 - 1111 + 1103 @@ -21393,11 +21139,11 @@ ruby_yield_def - 2477 + 2450 id - 2477 + 2450 From 865026f22bbd22226ee8686fb6f4f7eb6f3ee88d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Mar 2024 10:41:17 +0100 Subject: [PATCH 131/497] Ruby: Add up/downgrade scripts (sigh) --- .../erb_ast_node_info.ql | 44 + .../old.dbscheme | 1513 +++++++++++++++++ .../ruby.dbscheme | 1509 ++++++++++++++++ .../ruby_ast_node_info.ql | 44 + .../upgrade.properties | 8 + .../erb_ast_node_location.ql | 11 + .../erb_ast_node_parent.ql | 7 + .../old.dbscheme | 1509 ++++++++++++++++ .../ruby.dbscheme | 1513 +++++++++++++++++ .../ruby_ast_node_location.ql | 11 + .../ruby_ast_node_parent.ql | 7 + .../upgrade.properties | 8 + 12 files changed, 6184 insertions(+) create mode 100644 ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql create mode 100644 ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme create mode 100644 ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme create mode 100644 ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql create mode 100644 ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql create mode 100644 ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql new file mode 100644 index 00000000000..ed8cf128f1d --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/erb_ast_node_info.ql @@ -0,0 +1,44 @@ +class TAstNodeParent = @file or @erb_ast_node; + +abstract class AstNodeParent extends TAstNodeParent { + string toString() { none() } +} + +class AstNode extends AstNodeParent, @erb_ast_node { } + +class File extends AstNodeParent, @file { } + +class Location extends @location_default { + string toString() { none() } +} + +pragma[nomagic] +predicate hasFileParent( + AstNode n, File f, int startline, int startcolumn, int endline, int endcolumn +) { + exists(Location loc | + not erb_ast_node_parent(n, _, _) and + erb_ast_node_location(n, loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) +} + +pragma[nomagic] +predicate hasFileParent(AstNode n, File f, int i) { + n = + rank[i + 1](AstNode n0, int startline, int startcolumn, int endline, int endcolumn | + hasFileParent(n0, f, startline, startcolumn, endline, endcolumn) + | + n0 order by startline, startcolumn, endline, endcolumn + ) +} + +from AstNode n, AstNodeParent parent, int i, Location location +where + erb_ast_node_location(n, location) and + ( + erb_ast_node_parent(n, parent, i) + or + hasFileParent(n, parent, i) + ) +select n, parent, i, location diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme new file mode 100644 index 00000000000..440de75c71e --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/old.dbscheme @@ -0,0 +1,1513 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme new file mode 100644 index 00000000000..f9f0f4023e4 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby.dbscheme @@ -0,0 +1,1509 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql new file mode 100644 index 00000000000..06551527942 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/ruby_ast_node_info.ql @@ -0,0 +1,44 @@ +class TAstNodeParent = @file or @ruby_ast_node; + +abstract class AstNodeParent extends TAstNodeParent { + string toString() { none() } +} + +class AstNode extends AstNodeParent, @ruby_ast_node { } + +class File extends AstNodeParent, @file { } + +class Location extends @location_default { + string toString() { none() } +} + +pragma[nomagic] +predicate hasFileParent( + AstNode n, File f, int startline, int startcolumn, int endline, int endcolumn +) { + exists(Location loc | + not ruby_ast_node_parent(n, _, _) and + ruby_ast_node_location(n, loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) +} + +pragma[nomagic] +predicate hasFileParent(AstNode n, File f, int i) { + n = + rank[i + 1](AstNode n0, int startline, int startcolumn, int endline, int endcolumn | + hasFileParent(n0, f, startline, startcolumn, endline, endcolumn) + | + n0 order by startline, startcolumn, endline, endcolumn + ) +} + +from AstNode n, AstNodeParent parent, int i, Location location +where + ruby_ast_node_location(n, location) and + ( + ruby_ast_node_parent(n, parent, i) + or + hasFileParent(n, parent, i) + ) +select n, parent, i, location diff --git a/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties new file mode 100644 index 00000000000..b75ccdefc20 --- /dev/null +++ b/ruby/downgrades/440de75c71e9206ce16eed49a22c76e7889b5fc3/upgrade.properties @@ -0,0 +1,8 @@ +description: Merge `ruby_ast_node_location` and `ruby_ast_node_parent` into `ruby_ast_node_info` (and same for `erb`) +compatibility: backwards +erb_ast_node_info.rel: run erb_ast_node_info.qlo +erb_ast_node_location.rel: delete +erb_ast_node_parent.rel: delete +ruby_ast_node_info.rel: run ruby_ast_node_info.qlo +ruby_ast_node_location.rel: delete +ruby_ast_node_parent.rel: delete diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql new file mode 100644 index 00000000000..add4e3d655c --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_location.ql @@ -0,0 +1,11 @@ +class AstNode extends @erb_ast_node { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from AstNode n, Location location +where erb_ast_node_info(n, _, _, location) +select n, location diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql new file mode 100644 index 00000000000..2a7b6b2ff78 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/erb_ast_node_parent.ql @@ -0,0 +1,7 @@ +class AstNode extends @erb_ast_node { + string toString() { none() } +} + +from AstNode n, int i, AstNode parent +where erb_ast_node_info(n, parent, i, _) +select n, parent, i diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme new file mode 100644 index 00000000000..f9f0f4023e4 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/old.dbscheme @@ -0,0 +1,1509 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location_default ref +); + diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme new file mode 100644 index 00000000000..440de75c71e --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby.dbscheme @@ -0,0 +1,1513 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * 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( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +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 +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql new file mode 100644 index 00000000000..09f30acf973 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_location.ql @@ -0,0 +1,11 @@ +class AstNode extends @ruby_ast_node { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from AstNode n, Location location +where ruby_ast_node_info(n, _, _, location) +select n, location diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql new file mode 100644 index 00000000000..024ed9ee6b7 --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/ruby_ast_node_parent.ql @@ -0,0 +1,7 @@ +class AstNode extends @ruby_ast_node { + string toString() { none() } +} + +from AstNode n, int i, AstNode parent +where ruby_ast_node_info(n, parent, i, _) +select n, parent, i diff --git a/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties new file mode 100644 index 00000000000..ddac0258abe --- /dev/null +++ b/ruby/ql/lib/upgrades/f9f0f4023e433184fda76f595247bf448b782135/upgrade.properties @@ -0,0 +1,8 @@ +description: Split up `ruby_ast_node_info` into `ruby_ast_node_location` and `ruby_ast_node_parent` (and same for `erb`) +compatibility: backwards +erb_ast_node_location.rel: run erb_ast_node_location.qlo +erb_ast_node_parent.rel: run erb_ast_node_parent.qlo +erb_ast_node_info.rel: delete +ruby_ast_node_location.rel: run ruby_ast_node_location.qlo +ruby_ast_node_parent.rel: run ruby_ast_node_parent.qlo +ruby_ast_node_info.rel: delete From 31e04631d1dfe4d0c9b3e627a136c3c6ed854120 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Mar 2024 11:25:00 +0100 Subject: [PATCH 132/497] QL4QL: Regenerate DB scheme and stats --- .../src/codeql_ql/ast/internal/TreeSitter.qll | 24 +- ql/ql/src/ql.dbscheme | 50 +- ql/ql/src/ql.dbscheme.stats | 9868 ++++++++--------- 3 files changed, 4918 insertions(+), 5024 deletions(-) diff --git a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll index 76e96979cfd..877f676e396 100644 --- a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll +++ b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll @@ -12,13 +12,13 @@ module QL { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { ql_ast_node_info(this, _, _, result) } + final L::Location getLocation() { ql_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { ql_ast_node_info(this, result, _, _) } + final AstNode getParent() { ql_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { ql_ast_node_info(this, _, result, _) } + final int getParentIndex() { ql_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1282,13 +1282,13 @@ module Dbscheme { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { dbscheme_ast_node_info(this, _, _, result) } + final L::Location getLocation() { dbscheme_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { dbscheme_ast_node_info(this, result, _, _) } + final AstNode getParent() { dbscheme_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { dbscheme_ast_node_info(this, _, result, _) } + final int getParentIndex() { dbscheme_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1618,13 +1618,13 @@ module Blame { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { blame_ast_node_info(this, _, _, result) } + final L::Location getLocation() { blame_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { blame_ast_node_info(this, result, _, _) } + final AstNode getParent() { blame_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { blame_ast_node_info(this, _, result, _) } + final int getParentIndex() { blame_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } @@ -1731,13 +1731,13 @@ module JSON { string toString() { result = this.getAPrimaryQlClass() } /** Gets the location of this element. */ - final L::Location getLocation() { json_ast_node_info(this, _, _, result) } + final L::Location getLocation() { json_ast_node_location(this, result) } /** Gets the parent of this element. */ - final AstNode getParent() { json_ast_node_info(this, result, _, _) } + final AstNode getParent() { json_ast_node_parent(this, result, _) } /** Gets the index of this node among the children of its parent. */ - final int getParentIndex() { json_ast_node_info(this, _, result, _) } + final int getParentIndex() { json_ast_node_parent(this, _, result) } /** Gets a field or child node of this node. */ AstNode getAFieldOrChild() { none() } diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme index 97aa35b9ef5..21aebc3b431 100644 --- a/ql/ql/src/ql.dbscheme +++ b/ql/ql/src/ql.dbscheme @@ -972,14 +972,16 @@ case @ql_token.kind of @ql_ast_node = @ql_add_expr | @ql_aggregate | @ql_annot_arg | @ql_annotation | @ql_arityless_predicate_expr | @ql_as_expr | @ql_as_exprs | @ql_body | @ql_bool | @ql_call_body | @ql_call_or_unqual_agg_expr | @ql_charpred | @ql_class_member | @ql_classless_predicate | @ql_comp_term | @ql_conjunction | @ql_dataclass | @ql_datatype | @ql_datatype_branch | @ql_datatype_branches | @ql_disjunction | @ql_expr_aggregate_body | @ql_expr_annotation | @ql_field | @ql_full_aggregate_body | @ql_higher_order_term | @ql_if_term | @ql_implication | @ql_import_directive | @ql_import_module_expr | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_member_predicate | @ql_module | @ql_module_alias_body | @ql_module_expr | @ql_module_instantiation | @ql_module_member | @ql_module_name | @ql_module_param | @ql_mul_expr | @ql_negation | @ql_order_by | @ql_order_bys | @ql_par_expr | @ql_predicate_alias_body | @ql_predicate_expr | @ql_prefix_cast | @ql_ql | @ql_qualified_expr | @ql_qualified_rhs | @ql_quantified | @ql_range | @ql_select | @ql_set_literal | @ql_signature_expr | @ql_special_call | @ql_super_ref | @ql_token | @ql_type_alias_body | @ql_type_expr | @ql_type_union_body | @ql_unary_expr | @ql_unqual_agg_body | @ql_var_decl | @ql_var_name | @ql_variable -@ql_ast_node_parent = @file | @ql_ast_node +ql_ast_node_location( + unique int node: @ql_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -ql_ast_node_info( +ql_ast_node_parent( unique int node: @ql_ast_node ref, - int parent: @ql_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @ql_ast_node ref, + int parent_index: int ref ); /*- Dbscheme dbscheme -*/ @@ -1159,14 +1161,16 @@ case @dbscheme_token.kind of @dbscheme_ast_node = @dbscheme_annotation | @dbscheme_args_annotation | @dbscheme_branch | @dbscheme_case_decl | @dbscheme_col_type | @dbscheme_column | @dbscheme_dbscheme | @dbscheme_entry | @dbscheme_repr_type | @dbscheme_table | @dbscheme_table_name | @dbscheme_token | @dbscheme_union_decl -@dbscheme_ast_node_parent = @dbscheme_ast_node | @file +dbscheme_ast_node_location( + unique int node: @dbscheme_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -dbscheme_ast_node_info( +dbscheme_ast_node_parent( unique int node: @dbscheme_ast_node ref, - int parent: @dbscheme_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @dbscheme_ast_node ref, + int parent_index: int ref ); /*- Blame dbscheme -*/ @@ -1222,14 +1226,16 @@ case @blame_token.kind of @blame_ast_node = @blame_blame_entry | @blame_blame_info | @blame_file_entry | @blame_token -@blame_ast_node_parent = @blame_ast_node | @file +blame_ast_node_location( + unique int node: @blame_ast_node ref, + int loc: @location_default ref +); #keyset[parent, parent_index] -blame_ast_node_info( +blame_ast_node_parent( unique int node: @blame_ast_node ref, - int parent: @blame_ast_node_parent ref, - int parent_index: int ref, - int loc: @location_default ref + int parent: @blame_ast_node ref, + int parent_index: int ref ); /*- JSON dbscheme -*/ @@ -1304,13 +1310,15 @@ case @json_token.kind of @json_ast_node = @json_array | @json_document | @json_object | @json_pair | @json_string__ | @json_token -@json_ast_node_parent = @file | @json_ast_node - -#keyset[parent, parent_index] -json_ast_node_info( +json_ast_node_location( unique int node: @json_ast_node ref, - int parent: @json_ast_node_parent ref, - int parent_index: int ref, int loc: @location_default ref ); +#keyset[parent, parent_index] +json_ast_node_parent( + unique int node: @json_ast_node ref, + int parent: @json_ast_node ref, + int parent_index: int ref +); + diff --git a/ql/ql/src/ql.dbscheme.stats b/ql/ql/src/ql.dbscheme.stats index 61923351ee9..1e992f7d7a4 100644 --- a/ql/ql/src/ql.dbscheme.stats +++ b/ql/ql/src/ql.dbscheme.stats @@ -29,115 +29,115 @@ @dbscheme_annotation - 20670 + 30564 @dbscheme_args_annotation - 20661 + 30555 @dbscheme_branch - 116911 + 151025 @dbscheme_case_decl - 4372 + 5423 @dbscheme_col_type - 252564 + 341399 @dbscheme_column - 252564 + 341399 @dbscheme_dbscheme - 532 + 686 @dbscheme_entry - 169630 + 230044 @dbscheme_repr_type - 252564 + 341399 @dbscheme_reserved_word - 1309648 + 1756569 @dbscheme_table - 105934 + 146537 @dbscheme_table_name - 105934 + 146537 @dbscheme_token_annot_name - 20670 + 30564 @dbscheme_token_block_comment - 17513 + 22060 @dbscheme_token_boolean - 1440 + 2146 @dbscheme_token_date - 1042 + 1170 @dbscheme_token_dbtype - 565153 + 750840 @dbscheme_token_float - 2354 + 2962 @dbscheme_token_int - 258872 + 350777 @dbscheme_token_integer - 124608 + 158986 @dbscheme_token_line_comment - 37863 + 62355 @dbscheme_token_qldoc - 8004 + 10956 @dbscheme_token_ref - 210468 + 281648 @dbscheme_token_simple_id - 397838 + 543204 @dbscheme_token_string - 51435 + 67865 @dbscheme_token_unique - 75701 + 102289 @dbscheme_token_varchar - 7697 + 7961 @dbscheme_union_decl - 51790 + 67798 @diagnostic_debug @@ -157,255 +157,255 @@ @file - 11682 + 12283 @folder - 3982 + 4402 @json_array - 481 + 2026 @json_document - 272 + 324 @json_object - 787 + 5034 @json_pair - 2223 + 12461 @json_reserved_word - 19369 + 82515 @json_string__ - 5469 + 22176 @json_token_comment - 18 + 19 @json_token_false - 259 + 607 @json_token_null - 106 + 248 @json_token_number - 27 + 71 @json_token_string_content - 5465 + 22171 @json_token_true - 246 + 978 @location_default - 8479546 + 9617371 @ql_add_expr - 14857 + 13786 @ql_aggregate - 9694 + 9053 @ql_annot_arg - 6094 + 4043 @ql_annotation - 72771 + 65278 @ql_arityless_predicate_expr - 67354 + 58107 @ql_as_expr - 19448 + 20508 @ql_as_exprs - 8242 + 8493 @ql_body - 70726 + 65826 @ql_bool - 5039 + 4274 @ql_call_body - 66692 + 57368 @ql_call_or_unqual_agg_expr - 66692 + 57368 @ql_charpred - 12588 + 12088 @ql_class_member - 84646 + 79133 @ql_classless_predicate - 24640 + 23253 @ql_comp_term - 138784 + 140334 @ql_conjunction - 80925 + 76308 @ql_dataclass - 23834 + 22563 @ql_datatype - 809 + 548 @ql_datatype_branch - 3437 + 2719 @ql_datatype_branches - 809 + 548 @ql_disjunction - 40259 + 44890 @ql_expr_aggregate_body - 1293 + 1216 @ql_expr_annotation - 1328 + 601 @ql_field - 4149 + 3721 @ql_full_aggregate_body - 6714 + 6356 @ql_higher_order_term - 105 + 77 @ql_if_term - 3226 + 2953 @ql_implication - 87 + 101 @ql_import_directive - 24818 + 25764 @ql_import_module_expr - 24818 + 25764 @ql_in_expr - 1003 + 1037 @ql_instance_of - 17128 + 15913 @ql_literal - 98847 + 109390 @ql_member_predicate - 47549 + 43952 @ql_module - 3916 + 4567 @ql_module_alias_body - 725 + 917 @ql_module_expr - 72503 + 76399 @ql_module_instantiation - 1043 + 1740 @ql_module_member - 119591 + 118178 @ql_module_name - 6324 + 7606 @ql_module_param - 299 + 266 @ql_mul_expr - 631 + 585 @ql_negation - 12010 + 11727 @ql_order_by - 1098 + 1067 @ql_order_bys - 674 + 661 @ql_par_expr - 6038 + 5799 @ql_predicate_alias_body - 329 + 372 @ql_predicate_expr - 662 + 739 @ql_prefix_cast @@ -413,183 +413,183 @@ @ql_ql - 10785 + 11167 @ql_qualified_expr - 168511 + 165157 @ql_qualified_rhs - 168511 + 165157 @ql_quantified - 26111 + 24227 @ql_range - 417 + 365 @ql_reserved_word - 1966059 + 1875319 @ql_select - 5640 + 5989 @ql_set_literal - 3557 + 4014 @ql_signature_expr - 2248 + 3709 @ql_special_call - 4863 + 4424 @ql_super_ref - 2444 + 2901 @ql_token_addop - 14857 + 13786 @ql_token_agg_id - 9694 + 9053 @ql_token_annot_name - 75427 + 66480 @ql_token_block_comment - 1061 + 992 @ql_token_class_name - 224655 + 204253 @ql_token_closure - 2123 + 2234 @ql_token_compop - 138784 + 140334 @ql_token_dbtype - 3604 + 3766 @ql_token_direction - 200 + 205 @ql_token_empty - 2683 + 2344 @ql_token_false - 2391 + 1973 @ql_token_float - 296 + 305 @ql_token_integer - 20738 + 21612 @ql_token_line_comment - 20706 + 20888 @ql_token_literal_id - 67459 + 58184 @ql_token_mulop - 631 + 585 @ql_token_predicate - 28901 + 26200 @ql_token_predicate_name - 229368 + 221079 @ql_token_primitive_type - 49384 + 47956 @ql_token_qldoc - 56786 + 55406 @ql_token_quantifier - 26111 + 24227 @ql_token_result - 55181 + 52493 @ql_token_simple_id - 542286 + 512064 @ql_token_special_id - 4863 + 4424 @ql_token_string - 73436 + 83938 @ql_token_super - 2444 + 2901 @ql_token_this - 53091 + 50826 @ql_token_true - 2648 + 2301 @ql_token_underscore - 20351 + 17184 @ql_token_unop - 1171 + 1158 @ql_type_alias_body - 1245 + 817 @ql_type_expr - 236975 + 218057 @ql_type_union_body - 249 + 253 @ql_unary_expr - 1171 + 1158 @ql_unqual_agg_body @@ -597,15 +597,15 @@ @ql_var_decl - 129441 + 114137 @ql_var_name - 415356 + 380908 @ql_variable - 393587 + 369462 @yaml_alias_node @@ -617,19 +617,61 @@ @yaml_mapping_node - 160 + 186 @yaml_scalar_node - 1136 + 1481 @yaml_sequence_node - 52 + 59 - blame_ast_node_info + blame_ast_node_location + 0 + + + node + 0 + + + loc + 0 + + + + + node + loc + + + 12 + + + 1 + 2 + 1 + + + + + + + loc + node + + + 12 + + + + + + + + blame_ast_node_parent 0 @@ -644,10 +686,6 @@ parent_index 0 - - loc - 0 - @@ -682,22 +720,6 @@ - - node - loc - - - 12 - - - 1 - 2 - 1 - - - - - parent node @@ -718,16 +740,6 @@ - - parent - loc - - - 12 - - - - parent_index node @@ -748,46 +760,6 @@ - - parent_index - loc - - - 12 - - - - - - loc - node - - - 12 - - - - - - loc - parent - - - 12 - - - - - - loc - parent_index - - - 12 - - - - @@ -1286,15 +1258,15 @@ containerparent - 15662 + 16683 parent - 3982 + 4402 child - 15662 + 16683 @@ -1308,32 +1280,32 @@ 1 2 - 1880 + 2157 2 3 - 882 + 978 3 4 - 354 + 375 4 6 - 334 + 348 6 - 14 - 312 + 15 + 339 - 14 - 240 - 220 + 15 + 255 + 205 @@ -1349,7 +1321,7 @@ 1 2 - 15662 + 16683 @@ -1359,15 +1331,15 @@ dbscheme_annotation_args_annotation - 20661 + 30555 dbscheme_annotation - 20661 + 30555 args_annotation - 20661 + 30555 @@ -1381,7 +1353,7 @@ 1 2 - 20661 + 30555 @@ -1397,7 +1369,7 @@ 1 2 - 20661 + 30555 @@ -1407,11 +1379,11 @@ dbscheme_annotation_def - 20670 + 30564 id - 20670 + 30564 @@ -1466,11 +1438,11 @@ dbscheme_args_annotation_child - 34968 + 49845 dbscheme_args_annotation - 20661 + 30555 index @@ -1478,7 +1450,7 @@ child - 34968 + 49845 @@ -1492,17 +1464,17 @@ 1 2 - 7137 + 12292 2 3 - 12741 + 17236 3 4 - 783 + 1027 @@ -1518,17 +1490,17 @@ 1 2 - 7137 + 12292 2 3 - 12741 + 17236 3 4 - 783 + 1027 @@ -1542,18 +1514,18 @@ 12 - 783 - 784 + 1027 + 1028 1 - 13524 - 13525 + 18263 + 18264 1 - 20661 - 20662 + 30555 + 30556 1 @@ -1568,18 +1540,18 @@ 12 - 783 - 784 + 1027 + 1028 1 - 13524 - 13525 + 18263 + 18264 1 - 20661 - 20662 + 30555 + 30556 1 @@ -1596,7 +1568,7 @@ 1 2 - 34968 + 49845 @@ -1612,7 +1584,7 @@ 1 2 - 34968 + 49845 @@ -1622,15 +1594,15 @@ dbscheme_args_annotation_def - 20661 + 30555 id - 20661 + 30555 name - 20661 + 30555 @@ -1644,7 +1616,7 @@ 1 2 - 20661 + 30555 @@ -1660,7 +1632,7 @@ 1 2 - 20661 + 30555 @@ -1669,24 +1641,73 @@ - dbscheme_ast_node_info - 4444432 + dbscheme_ast_node_location + 5985718 node - 4444432 - - - parent - 1354658 - - - parent_index - 476 + 5985718 loc - 3650776 + 4903745 + + + + + node + loc + + + 12 + + + 1 + 2 + 5985718 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 3821772 + + + 2 + 3 + 1081973 + + + + + + + + + dbscheme_ast_node_parent + 5900617 + + + node + 5900617 + + + parent + 1833365 + + + parent_index + 501 @@ -1700,7 +1721,7 @@ 1 2 - 4444432 + 5900617 @@ -1716,23 +1737,7 @@ 1 2 - 4444432 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 4444432 + 5900617 @@ -1748,32 +1753,32 @@ 1 2 - 793673 + 1081973 2 4 - 117079 + 151168 4 5 - 11481 + 13080 5 6 - 247420 + 341594 6 8 - 112901 + 149771 8 - 477 - 72104 + 502 + 95779 @@ -1789,73 +1794,32 @@ 1 2 - 793673 + 1081973 2 4 - 117079 + 151168 4 5 - 11481 + 13080 5 6 - 247420 + 341594 6 8 - 112901 + 149771 8 - 477 - 72104 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 793673 - - - 2 - 4 - 117079 - - - 4 - 5 - 11481 - - - 5 - 6 - 247420 - - - 6 - 8 - 112901 - - - 8 - 477 - 72104 + 502 + 95779 @@ -1869,69 +1833,69 @@ 12 - 7 - 257 - 39 - - - 258 - 307 + 3 + 140 38 - 321 - 338 + 147 + 386 + 38 + + + 387 + 491 + 31 + + + 491 + 492 + 49 + + + 499 + 712 + 38 + + + 717 + 841 42 - 345 - 508 - 37 + 842 + 1054 + 38 - 508 - 652 - 37 + 1055 + 1190 + 44 - 661 - 763 - 36 + 1192 + 1357 + 41 - 769 - 930 - 36 + 1362 + 1575 + 39 - 936 - 1034 - 36 + 1582 + 2577 + 38 - 1047 - 1122 - 36 + 2626 + 5260 + 38 - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1354659 - 31 + 5283 + 1833366 + 27 @@ -1945,208 +1909,69 @@ 12 - 7 - 257 - 39 - - - 258 - 307 + 3 + 140 38 - 321 - 338 - 42 - - - 345 - 508 - 37 - - - 508 - 652 - 37 - - - 661 - 763 - 36 - - - 769 - 930 - 36 - - - 936 - 1034 - 36 - - - 1047 - 1122 - 36 - - - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1354659 - 31 - - - - - - - parent_index - loc - - - 12 - - - 7 - 257 - 39 - - - 258 - 307 + 147 + 386 38 - 321 - 338 + 387 + 491 + 31 + + + 491 + 492 + 49 + + + 499 + 712 + 38 + + + 717 + 841 42 - 345 - 508 - 37 + 842 + 1054 + 38 - 508 - 652 - 37 + 1055 + 1190 + 44 - 661 - 763 - 36 + 1192 + 1357 + 41 - 769 - 930 - 36 + 1362 + 1575 + 39 - 936 - 1034 - 36 + 1582 + 2577 + 38 - 1047 - 1122 - 36 + 2626 + 5260 + 38 - 1122 - 1375 - 36 - - - 1381 - 1960 - 36 - - - 2174 - 3839 - 36 - - - 3932 - 1079008 - 31 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 2857120 - - - 2 - 3 - 793656 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 2857120 - - - 2 - 3 - 793656 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 3132771 - - - 2 - 3 - 518005 + 5283 + 1833366 + 27 @@ -2156,11 +1981,11 @@ dbscheme_branch_child - 233822 + 302050 dbscheme_branch - 116911 + 151025 index @@ -2168,7 +1993,7 @@ child - 233822 + 302050 @@ -2182,7 +2007,7 @@ 2 3 - 116911 + 151025 @@ -2198,7 +2023,7 @@ 2 3 - 116911 + 151025 @@ -2212,8 +2037,8 @@ 12 - 116911 - 116912 + 151025 + 151026 2 @@ -2228,8 +2053,8 @@ 12 - 116911 - 116912 + 151025 + 151026 2 @@ -2246,7 +2071,7 @@ 1 2 - 233822 + 302050 @@ -2262,7 +2087,7 @@ 1 2 - 233822 + 302050 @@ -2272,11 +2097,11 @@ dbscheme_branch_def - 116911 + 151025 id - 116911 + 151025 @@ -2331,11 +2156,11 @@ dbscheme_case_decl_child - 116911 + 151025 dbscheme_case_decl - 4372 + 5423 index @@ -2343,7 +2168,7 @@ child - 116911 + 151025 @@ -2362,57 +2187,57 @@ 2 3 - 661 + 841 3 4 - 486 + 605 4 5 - 595 + 691 5 6 - 335 + 456 6 8 - 187 + 218 9 - 12 - 335 + 11 + 408 - 12 + 11 18 - 347 + 438 21 29 - 395 + 467 29 38 - 360 + 436 38 - 116 - 335 + 117 + 407 - 116 + 118 219 - 335 + 455 @@ -2433,57 +2258,57 @@ 2 3 - 661 + 841 3 4 - 486 + 605 4 5 - 595 + 691 5 6 - 335 + 456 6 8 - 187 + 218 9 - 12 - 335 + 11 + 408 - 12 + 11 18 - 347 + 438 21 29 - 395 + 467 29 38 - 360 + 436 38 - 116 - 335 + 117 + 407 - 116 + 118 219 - 335 + 455 @@ -2497,63 +2322,73 @@ 12 - 120 - 121 - 21 - - - 135 - 136 - 27 - - - 143 - 210 - 11 - - - 227 - 228 - 34 - - - 238 - 404 - 17 - - - 405 - 421 + 156 + 157 20 - 449 - 452 + 159 + 160 + 1 + + + 219 + 220 + 27 + + + 227 + 294 + 11 + + + 311 + 312 + 32 + + + 330 + 494 + 17 + + + 521 + 544 + 13 + + + 544 + 548 + 9 + + + 581 + 584 15 - 466 - 469 + 598 + 601 17 - 472 - 607 + 643 + 795 17 - 614 - 1424 + 802 + 1764 17 - 1424 - 2295 + 1764 + 2830 17 - 2629 - 4373 + 3285 + 5424 5 @@ -2568,63 +2403,73 @@ 12 - 120 - 121 - 21 - - - 135 - 136 - 27 - - - 143 - 210 - 11 - - - 227 - 228 - 34 - - - 238 - 404 - 17 - - - 405 - 421 + 156 + 157 20 - 449 - 452 + 159 + 160 + 1 + + + 219 + 220 + 27 + + + 227 + 294 + 11 + + + 311 + 312 + 32 + + + 330 + 494 + 17 + + + 521 + 544 + 13 + + + 544 + 548 + 9 + + + 581 + 584 15 - 466 - 469 + 598 + 601 17 - 472 - 607 + 643 + 795 17 - 614 - 1424 + 802 + 1764 17 - 1424 - 2295 + 1764 + 2830 17 - 2629 - 4373 + 3285 + 5424 5 @@ -2641,7 +2486,7 @@ 1 2 - 116911 + 151025 @@ -2657,7 +2502,7 @@ 1 2 - 116911 + 151025 @@ -2667,19 +2512,19 @@ dbscheme_case_decl_def - 4372 + 5423 id - 4372 + 5423 base - 4372 + 5423 discriminator - 4372 + 5423 @@ -2693,7 +2538,7 @@ 1 2 - 4372 + 5423 @@ -2709,7 +2554,7 @@ 1 2 - 4372 + 5423 @@ -2725,7 +2570,7 @@ 1 2 - 4372 + 5423 @@ -2741,7 +2586,7 @@ 1 2 - 4372 + 5423 @@ -2757,7 +2602,7 @@ 1 2 - 4372 + 5423 @@ -2773,7 +2618,7 @@ 1 2 - 4372 + 5423 @@ -2783,15 +2628,15 @@ dbscheme_col_type_def - 252564 + 341399 id - 252564 + 341399 child - 252564 + 341399 @@ -2805,7 +2650,7 @@ 1 2 - 252564 + 341399 @@ -2821,7 +2666,7 @@ 1 2 - 252564 + 341399 @@ -2831,23 +2676,23 @@ dbscheme_column_def - 252564 + 341399 id - 252564 + 341399 col_name - 252564 + 341399 col_type - 252564 + 341399 repr_type - 252564 + 341399 @@ -2861,7 +2706,7 @@ 1 2 - 252564 + 341399 @@ -2877,7 +2722,7 @@ 1 2 - 252564 + 341399 @@ -2893,7 +2738,7 @@ 1 2 - 252564 + 341399 @@ -2909,7 +2754,7 @@ 1 2 - 252564 + 341399 @@ -2925,7 +2770,7 @@ 1 2 - 252564 + 341399 @@ -2941,7 +2786,7 @@ 1 2 - 252564 + 341399 @@ -2957,7 +2802,7 @@ 1 2 - 252564 + 341399 @@ -2973,7 +2818,7 @@ 1 2 - 252564 + 341399 @@ -2989,7 +2834,7 @@ 1 2 - 252564 + 341399 @@ -3005,7 +2850,7 @@ 1 2 - 252564 + 341399 @@ -3021,7 +2866,7 @@ 1 2 - 252564 + 341399 @@ -3037,7 +2882,7 @@ 1 2 - 252564 + 341399 @@ -3047,15 +2892,15 @@ dbscheme_column_is_ref - 210468 + 281648 dbscheme_column - 210468 + 281648 is_ref - 210468 + 281648 @@ -3069,7 +2914,7 @@ 1 2 - 210468 + 281648 @@ -3085,7 +2930,7 @@ 1 2 - 210468 + 281648 @@ -3095,15 +2940,15 @@ dbscheme_column_is_unique - 75701 + 102289 dbscheme_column - 75701 + 102289 is_unique - 75701 + 102289 @@ -3117,7 +2962,7 @@ 1 2 - 75701 + 102289 @@ -3133,7 +2978,7 @@ 1 2 - 75701 + 102289 @@ -3143,15 +2988,15 @@ dbscheme_column_qldoc - 470 + 670 dbscheme_column - 470 + 670 qldoc - 470 + 670 @@ -3165,7 +3010,7 @@ 1 2 - 470 + 670 @@ -3181,7 +3026,7 @@ 1 2 - 470 + 670 @@ -3191,19 +3036,19 @@ dbscheme_dbscheme_child - 169630 + 230044 dbscheme_dbscheme - 532 + 685 index - 476 + 501 child - 169630 + 230044 @@ -3216,68 +3061,68 @@ 2 - 142 - 43 + 147 + 56 - 142 - 200 - 40 + 148 + 205 + 55 - 200 - 259 - 41 + 205 + 275 + 54 - 260 - 278 - 41 + 275 + 287 + 52 - 278 - 288 - 38 + 287 + 306 + 62 - 290 - 305 - 46 + 307 + 312 + 52 - 305 - 310 - 42 + 313 + 320 + 56 - 310 - 315 - 40 - - - 316 + 320 418 - 43 + 55 418 - 457 + 460 + 58 + + + 460 + 464 46 - 457 - 462 - 28 + 465 + 469 + 59 - 462 - 466 - 45 + 470 + 478 + 57 - 466 - 477 - 39 + 478 + 502 + 23 @@ -3292,68 +3137,68 @@ 2 - 142 - 43 + 147 + 56 - 142 - 200 - 40 + 148 + 205 + 55 - 200 - 259 - 41 + 205 + 275 + 54 - 260 - 278 - 41 + 275 + 287 + 52 - 278 - 288 - 38 + 287 + 306 + 62 - 290 - 305 - 46 + 307 + 312 + 52 - 305 - 310 - 42 + 313 + 320 + 56 - 310 - 315 - 40 - - - 316 + 320 418 - 43 + 55 418 - 457 + 460 + 58 + + + 460 + 464 46 - 457 - 462 - 28 + 465 + 469 + 59 - 462 - 466 - 45 + 470 + 478 + 57 - 466 - 477 - 39 + 478 + 502 + 23 @@ -3367,58 +3212,63 @@ 12 - 7 - 137 - 39 + 3 + 140 + 38 - 138 - 187 - 43 + 147 + 230 + 38 - 187 - 188 + 231 + 272 + 31 + + + 272 + 273 70 - 190 - 330 + 279 + 469 + 38 + + + 470 + 561 37 - 331 - 418 - 36 - - - 419 - 422 - 42 - - - 422 - 452 + 562 + 563 40 - 452 - 502 - 36 + 563 + 601 + 40 - 510 - 529 - 32 + 601 + 664 + 41 - 529 - 530 + 664 + 682 + 27 + + + 682 + 683 76 - 530 - 533 + 683 + 686 25 @@ -3433,58 +3283,63 @@ 12 - 7 - 137 - 39 + 3 + 140 + 38 - 138 - 187 - 43 + 147 + 230 + 38 - 187 - 188 + 231 + 272 + 31 + + + 272 + 273 70 - 190 - 330 + 279 + 469 + 38 + + + 470 + 561 37 - 331 - 418 - 36 - - - 419 - 422 - 42 - - - 422 - 452 + 562 + 563 40 - 452 - 502 - 36 + 563 + 601 + 40 - 510 - 529 - 32 + 601 + 664 + 41 - 529 - 530 + 664 + 682 + 27 + + + 682 + 683 76 - 530 - 533 + 683 + 686 25 @@ -3501,7 +3356,7 @@ 1 2 - 169630 + 230044 @@ -3517,7 +3372,7 @@ 1 2 - 169630 + 230044 @@ -3527,26 +3382,26 @@ dbscheme_dbscheme_def - 532 + 686 id - 532 + 686 dbscheme_entry_def - 169630 + 230044 id - 169630 + 230044 child - 169630 + 230044 @@ -3560,7 +3415,7 @@ 1 2 - 169630 + 230044 @@ -3576,7 +3431,7 @@ 1 2 - 169630 + 230044 @@ -3586,11 +3441,11 @@ dbscheme_repr_type_child - 260261 + 349360 dbscheme_repr_type - 252564 + 341399 index @@ -3598,7 +3453,7 @@ child - 260261 + 349360 @@ -3612,12 +3467,12 @@ 1 2 - 244867 + 333438 2 3 - 7697 + 7961 @@ -3633,12 +3488,12 @@ 1 2 - 244867 + 333438 2 3 - 7697 + 7961 @@ -3652,13 +3507,13 @@ 12 - 7697 - 7698 + 7961 + 7962 1 - 252564 - 252565 + 341399 + 341400 1 @@ -3673,13 +3528,13 @@ 12 - 7697 - 7698 + 7961 + 7962 1 - 252564 - 252565 + 341399 + 341400 1 @@ -3696,7 +3551,7 @@ 1 2 - 260261 + 349360 @@ -3712,7 +3567,7 @@ 1 2 - 260261 + 349360 @@ -3722,22 +3577,22 @@ dbscheme_repr_type_def - 252564 + 341399 id - 252564 + 341399 dbscheme_table_child - 273234 + 371963 dbscheme_table - 105934 + 146537 index @@ -3745,7 +3600,7 @@ child - 273234 + 371963 @@ -3759,32 +3614,32 @@ 1 2 - 22414 + 32738 2 3 - 41141 + 55828 3 4 - 16585 + 24047 4 5 - 16007 + 21522 5 7 - 9023 + 11405 7 11 - 764 + 997 @@ -3800,32 +3655,32 @@ 1 2 - 22414 + 32738 2 3 - 41141 + 55828 3 4 - 16585 + 24047 4 5 - 16007 + 21522 5 7 - 9023 + 11405 7 11 - 764 + 997 @@ -3844,48 +3699,48 @@ 1 - 145 - 146 + 181 + 182 1 - 265 - 266 + 337 + 338 1 - 764 - 765 + 997 + 998 1 - 4621 - 4622 + 5790 + 5791 1 - 9787 - 9788 + 12402 + 12403 1 - 25794 - 25795 + 33924 + 33925 1 - 42379 - 42380 + 57971 + 57972 1 - 83520 - 83521 + 113799 + 113800 1 - 105934 - 105935 + 146537 + 146538 1 @@ -3905,48 +3760,48 @@ 1 - 145 - 146 + 181 + 182 1 - 265 - 266 + 337 + 338 1 - 764 - 765 + 997 + 998 1 - 4621 - 4622 + 5790 + 5791 1 - 9787 - 9788 + 12402 + 12403 1 - 25794 - 25795 + 33924 + 33925 1 - 42379 - 42380 + 57971 + 57972 1 - 83520 - 83521 + 113799 + 113800 1 - 105934 - 105935 + 146537 + 146538 1 @@ -3963,7 +3818,7 @@ 1 2 - 273234 + 371963 @@ -3979,7 +3834,7 @@ 1 2 - 273234 + 371963 @@ -3989,15 +3844,15 @@ dbscheme_table_def - 105934 + 146537 id - 105934 + 146537 table_name - 105934 + 146537 @@ -4011,7 +3866,7 @@ 1 2 - 105934 + 146537 @@ -4027,7 +3882,7 @@ 1 2 - 105934 + 146537 @@ -4037,15 +3892,15 @@ dbscheme_table_name_def - 105934 + 146537 id - 105934 + 146537 child - 105934 + 146537 @@ -4059,7 +3914,7 @@ 1 2 - 105934 + 146537 @@ -4075,7 +3930,7 @@ 1 2 - 105934 + 146537 @@ -4085,11 +3940,11 @@ dbscheme_tokeninfo - 3090306 + 4152352 id - 3090306 + 4152352 kind @@ -4097,7 +3952,7 @@ value - 7109 + 7232 @@ -4111,7 +3966,7 @@ 1 2 - 3090306 + 4152352 @@ -4127,7 +3982,7 @@ 1 2 - 3090306 + 4152352 @@ -4141,83 +3996,83 @@ 12 - 1042 - 1043 + 1170 + 1171 1 - 1440 - 1441 + 2146 + 2147 1 - 2354 - 2355 + 2962 + 2963 1 - 7697 - 7698 + 7961 + 7962 1 - 8004 - 8005 + 10956 + 10957 1 - 17513 - 17514 + 22060 + 22061 1 - 20670 - 20671 + 30564 + 30565 1 - 37863 - 37864 + 62355 + 62356 1 - 51435 - 51436 + 67865 + 67866 1 - 75701 - 75702 + 102289 + 102290 1 - 124608 - 124609 + 158986 + 158987 1 - 210468 - 210469 + 281648 + 281649 1 - 258872 - 258873 + 350777 + 350778 1 - 397838 - 397839 + 543204 + 543205 1 - 565153 - 565154 + 750840 + 750841 1 - 1309648 - 1309649 + 1756569 + 1756570 1 @@ -4247,33 +4102,33 @@ 1 - 99 - 100 + 100 + 101 1 - 197 - 198 + 207 + 208 1 - 302 - 303 + 303 + 304 1 - 595 - 596 + 616 + 617 1 - 2601 - 2602 + 2655 + 2656 1 - 3292 - 3293 + 3328 + 3329 1 @@ -4294,68 +4149,68 @@ 3 - 9 - 534 + 13 + 575 - 9 - 25 + 13 + 29 + 422 + + + 29 + 38 + 546 + + + 38 + 56 + 638 + + + 56 + 77 + 597 + + + 77 + 116 + 541 + + + 116 + 149 543 - 25 - 32 + 149 + 156 + 481 + + + 156 + 199 544 - 32 - 51 - 471 + 202 + 312 + 540 - 51 - 67 - 534 + 312 + 416 + 543 - 67 - 73 - 567 + 416 + 1685 + 543 - 73 - 107 - 611 - - - 107 - 121 - 590 - - - 121 - 157 - 534 - - - 158 - 235 - 412 - - - 240 - 322 - 544 - - - 324 - 1897 - 534 - - - 2000 - 270542 - 72 + 1697 + 354482 + 100 @@ -4371,7 +4226,7 @@ 1 2 - 7109 + 7232 @@ -4381,11 +4236,11 @@ dbscheme_union_decl_child - 209792 + 276677 dbscheme_union_decl - 51790 + 67798 index @@ -4393,7 +4248,7 @@ child - 209792 + 276677 @@ -4407,37 +4262,42 @@ 1 2 - 2156 + 2870 2 3 - 25065 + 33104 3 4 - 7795 + 10107 4 5 - 4896 + 6309 5 6 - 3506 + 4592 6 9 - 4492 + 5609 9 + 69 + 5085 + + + 85 106 - 3880 + 122 @@ -4453,37 +4313,42 @@ 1 2 - 2156 + 2870 2 3 - 25065 + 33104 3 4 - 7795 + 10107 4 5 - 4896 + 6309 5 6 - 3506 + 4592 6 9 - 4492 + 5609 9 + 69 + 5085 + + + 85 106 - 3880 + 122 @@ -4497,63 +4362,68 @@ 12 - 7 - 40 + 11 + 44 7 - 41 - 42 + 45 + 46 11 - 55 - 56 + 59 + 103 2 - 70 - 71 + 122 + 123 17 - 71 - 72 - 10 + 123 + 124 + 6 - 98 - 147 - 9 - - - 213 - 223 - 9 - - - 223 - 399 + 126 + 166 8 - 453 - 477 + 173 + 319 + 6 + + + 327 + 328 8 - 505 - 1059 + 328 + 544 8 - 1142 - 3881 + 647 + 671 8 - 4790 - 51791 + 699 + 1414 + 8 + + + 1501 + 5208 + 8 + + + 6334 + 67799 8 @@ -4568,63 +4438,68 @@ 12 - 7 - 40 + 11 + 44 7 - 41 - 42 + 45 + 46 11 - 55 - 56 + 59 + 103 2 - 70 - 71 + 122 + 123 17 - 71 - 72 - 10 + 123 + 124 + 6 - 98 - 147 - 9 - - - 213 - 223 - 9 - - - 223 - 399 + 126 + 166 8 - 453 - 477 + 173 + 319 + 6 + + + 327 + 328 8 - 505 - 1059 + 328 + 544 8 - 1142 - 3881 + 647 + 671 8 - 4790 - 51791 + 699 + 1414 + 8 + + + 1501 + 5208 + 8 + + + 6334 + 67799 8 @@ -4641,7 +4516,7 @@ 1 2 - 209792 + 276677 @@ -4657,7 +4532,7 @@ 1 2 - 209792 + 276677 @@ -4667,15 +4542,15 @@ dbscheme_union_decl_def - 51790 + 67798 id - 51790 + 67798 base - 51790 + 67798 @@ -4689,7 +4564,7 @@ 1 2 - 51790 + 67798 @@ -4705,7 +4580,7 @@ 1 2 - 51790 + 67798 @@ -5242,15 +5117,15 @@ files - 11682 + 12283 id - 11682 + 12283 name - 11682 + 12283 @@ -5264,7 +5139,7 @@ 1 2 - 11682 + 12283 @@ -5280,7 +5155,7 @@ 1 2 - 11682 + 12283 @@ -5290,15 +5165,15 @@ folders - 3982 + 4402 id - 3982 + 4402 name - 3982 + 4402 @@ -5312,7 +5187,7 @@ 1 2 - 3982 + 4402 @@ -5328,7 +5203,7 @@ 1 2 - 3982 + 4402 @@ -5338,11 +5213,11 @@ json_array_child - 2660 + 5897 json_array - 450 + 1962 index @@ -5350,7 +5225,7 @@ child - 2660 + 5897 @@ -5364,32 +5239,27 @@ 1 2 - 129 + 935 2 3 - 136 + 623 3 4 - 78 + 179 4 - 5 - 37 - - - 5 7 - 41 + 149 7 612 - 29 + 76 @@ -5405,32 +5275,27 @@ 1 2 - 129 + 935 2 3 - 136 + 623 3 4 - 78 + 179 4 - 5 - 37 - - - 5 7 - 41 + 149 7 612 - 29 + 76 @@ -5451,26 +5316,31 @@ 2 3 - 84 + 26 3 4 - 61 + 58 4 - 7 + 5 + 61 + + + 5 + 8 48 - 7 - 22 + 8 + 61 46 - 26 - 451 + 69 + 1963 8 @@ -5492,26 +5362,31 @@ 2 3 - 84 + 26 3 4 - 61 + 58 4 - 7 + 5 + 61 + + + 5 + 8 48 - 7 - 22 + 8 + 61 46 - 26 - 451 + 69 + 1963 8 @@ -5528,7 +5403,7 @@ 1 2 - 2660 + 5897 @@ -5544,7 +5419,7 @@ 1 2 - 2660 + 5897 @@ -5554,35 +5429,84 @@ json_array_def - 481 + 2026 id - 481 + 2026 - json_ast_node_info - 34722 + json_ast_node_location + 148630 node - 34722 + 148630 + + + loc + 148504 + + + + + node + loc + + + 12 + + + 1 + 2 + 148630 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 148378 + + + 2 + 3 + 126 + + + + + + + + + json_ast_node_parent + 148287 + + + node + 148287 parent - 9501 + 42018 parent_index 1223 - - loc - 34603 - @@ -5595,7 +5519,7 @@ 1 2 - 34722 + 148287 @@ -5611,23 +5535,7 @@ 1 2 - 34722 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 34722 + 148287 @@ -5643,22 +5551,22 @@ 1 3 - 597 + 608 3 4 - 8027 + 36317 4 - 12 - 718 + 6 + 3406 - 13 + 7 1224 - 159 + 1687 @@ -5674,53 +5582,22 @@ 1 3 - 597 + 608 3 4 - 8027 + 36317 4 - 12 - 718 + 6 + 3406 - 13 + 7 1224 - 159 - - - - - - - parent - loc - - - 12 - - - 1 - 3 - 597 - - - 3 - 4 - 8027 - - - 4 - 12 - 718 - - - 13 - 1224 - 159 + 1687 @@ -5741,27 +5618,37 @@ 2 3 - 168 + 52 3 4 - 106 + 116 4 + 6 + 54 + + + 6 7 - 96 + 68 7 - 22 - 94 + 12 + 96 - 22 - 9502 - 31 + 12 + 213 + 92 + + + 226 + 42019 + 17 @@ -5782,131 +5669,37 @@ 2 3 - 168 + 52 3 4 - 106 + 116 4 + 6 + 54 + + + 6 7 - 96 + 68 7 - 22 - 94 - - - 22 - 9502 - 31 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 728 - - - 2 - 3 - 168 - - - 3 - 4 - 106 - - - 4 - 7 + 12 96 - 7 - 22 - 94 + 12 + 213 + 92 - 22 - 9385 - 31 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 34484 - - - 2 - 3 - 119 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 34484 - - - 2 - 3 - 119 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 34601 - - - 2 - 3 - 2 + 226 + 42019 + 17 @@ -5916,11 +5709,11 @@ json_document_child - 269 + 321 json_document - 269 + 321 index @@ -5928,7 +5721,7 @@ child - 269 + 321 @@ -5942,7 +5735,7 @@ 1 2 - 269 + 321 @@ -5958,7 +5751,7 @@ 1 2 - 269 + 321 @@ -5972,8 +5765,8 @@ 12 - 269 - 270 + 321 + 322 1 @@ -5988,8 +5781,8 @@ 12 - 269 - 270 + 321 + 322 1 @@ -6006,7 +5799,7 @@ 1 2 - 269 + 321 @@ -6022,7 +5815,7 @@ 1 2 - 269 + 321 @@ -6032,30 +5825,30 @@ json_document_def - 272 + 324 id - 272 + 324 json_object_child - 2223 + 12461 json_object - 763 + 4817 index - 110 + 159 child - 2223 + 12461 @@ -6069,32 +5862,27 @@ 1 2 - 211 + 754 2 3 - 322 + 2780 3 4 - 65 + 781 4 - 6 - 44 + 11 + 445 - 6 - 7 - 102 - - - 7 - 111 - 19 + 11 + 160 + 57 @@ -6110,32 +5898,27 @@ 1 2 - 211 + 754 2 3 - 322 + 2780 3 4 - 65 + 781 4 - 6 - 44 + 11 + 445 - 6 - 7 - 102 - - - 7 - 111 - 19 + 11 + 160 + 57 @@ -6151,37 +5934,42 @@ 1 2 - 61 + 23 2 3 - 11 + 65 3 4 - 10 + 2 4 5 - 2 + 20 5 6 + 11 + + + 6 + 9 + 12 + + + 9 + 10 14 - 7 - 166 - 9 - - - 230 - 764 - 3 + 13 + 4818 + 12 @@ -6197,37 +5985,42 @@ 1 2 - 61 + 23 2 3 - 11 + 65 3 4 - 10 + 2 4 5 - 2 + 20 5 6 + 11 + + + 6 + 9 + 12 + + + 9 + 10 14 - 7 - 166 - 9 - - - 230 - 764 - 3 + 13 + 4818 + 12 @@ -6243,7 +6036,7 @@ 1 2 - 2223 + 12461 @@ -6259,7 +6052,7 @@ 1 2 - 2223 + 12461 @@ -6269,30 +6062,30 @@ json_object_def - 787 + 5034 id - 787 + 5034 json_pair_def - 2223 + 12461 id - 2223 + 12461 key__ - 2223 + 12461 value - 2223 + 12461 @@ -6306,7 +6099,7 @@ 1 2 - 2223 + 12461 @@ -6322,7 +6115,7 @@ 1 2 - 2223 + 12461 @@ -6338,7 +6131,7 @@ 1 2 - 2223 + 12461 @@ -6354,7 +6147,7 @@ 1 2 - 2223 + 12461 @@ -6370,7 +6163,7 @@ 1 2 - 2223 + 12461 @@ -6386,7 +6179,7 @@ 1 2 - 2223 + 12461 @@ -6396,15 +6189,15 @@ json_string_child - 5465 + 22171 json_string__ - 5465 + 22171 child - 5465 + 22171 @@ -6418,7 +6211,7 @@ 1 2 - 5465 + 22171 @@ -6434,7 +6227,7 @@ 1 2 - 5465 + 22171 @@ -6444,22 +6237,22 @@ json_string_def - 5469 + 22176 id - 5469 + 22176 json_tokeninfo - 25490 + 106609 id - 25490 + 106609 kind @@ -6467,7 +6260,7 @@ value - 3153 + 4324 @@ -6481,7 +6274,7 @@ 1 2 - 25490 + 106609 @@ -6497,7 +6290,7 @@ 1 2 - 25490 + 106609 @@ -6511,38 +6304,38 @@ 12 - 18 - 19 + 19 + 20 1 - 27 - 28 + 71 + 72 1 - 106 - 107 + 248 + 249 1 - 246 - 247 + 607 + 608 1 - 259 - 260 + 978 + 979 1 - 5465 - 5466 + 22171 + 22172 1 - 19369 - 19370 + 82515 + 82516 1 @@ -6567,18 +6360,18 @@ 1 - 14 - 15 + 16 + 17 1 - 18 - 19 + 29 + 30 1 - 3111 - 3112 + 4277 + 4278 1 @@ -6595,17 +6388,27 @@ 1 2 - 2832 + 3160 2 - 7 - 246 + 3 + 406 - 7 - 10939 - 75 + 3 + 5 + 365 + + + 5 + 62 + 326 + + + 71 + 44353 + 67 @@ -6621,7 +6424,12 @@ 1 2 - 3153 + 4316 + + + 2 + 3 + 8 @@ -6631,31 +6439,31 @@ locations_default - 8479546 + 9617371 id - 8479546 + 9617371 file - 11682 + 12283 beginLine - 9036 + 11293 beginColumn - 1371 + 1385 endLine - 9036 + 11293 endColumn - 1376 + 1389 @@ -6669,7 +6477,7 @@ 1 2 - 8479546 + 9617371 @@ -6685,7 +6493,7 @@ 1 2 - 8479546 + 9617371 @@ -6701,7 +6509,7 @@ 1 2 - 8479546 + 9617371 @@ -6717,7 +6525,7 @@ 1 2 - 8479546 + 9617371 @@ -6733,7 +6541,7 @@ 1 2 - 8479546 + 9617371 @@ -6749,72 +6557,72 @@ 1 21 - 906 + 930 21 32 - 909 + 950 32 40 - 959 + 1024 40 54 - 882 + 930 54 - 70 - 903 + 72 + 952 - 70 - 88 - 878 + 72 + 89 + 965 - 88 - 117 - 880 + 89 + 119 + 929 - 117 - 160 - 879 + 119 + 164 + 934 - 160 - 236 - 880 + 164 + 243 + 923 - 236 - 377 - 877 + 243 + 392 + 923 - 377 - 709 - 878 + 392 + 748 + 923 - 709 - 2101 - 877 + 748 + 2678 + 922 - 2102 - 9785 - 880 + 2683 + 9950 + 923 - 9805 + 9962 54160 - 94 + 55 @@ -6830,72 +6638,72 @@ 1 3 - 511 + 434 3 4 - 1068 + 775 4 5 - 961 + 1146 5 6 - 680 + 995 6 7 - 632 + 691 7 9 - 946 + 988 9 11 - 969 + 919 11 - 16 - 1044 + 15 + 992 - 16 - 23 - 907 + 15 + 22 + 1018 - 23 - 36 - 906 + 22 + 34 + 975 - 36 - 65 - 885 + 34 + 61 + 935 - 65 - 158 - 879 + 61 + 143 + 922 - 158 - 1002 - 877 + 143 + 975 + 923 - 1002 - 9027 - 417 + 977 + 11284 + 570 @@ -6911,67 +6719,67 @@ 1 11 - 997 + 1028 11 17 - 858 + 920 17 21 - 876 + 913 21 26 - 967 + 1027 26 32 - 939 + 987 32 39 - 976 + 994 39 47 - 938 + 1014 47 - 56 - 928 + 57 + 1003 - 56 + 57 66 - 908 + 957 66 77 - 925 + 1001 77 87 - 897 + 934 87 - 98 - 929 + 99 + 1024 - 98 + 99 512 - 544 + 481 @@ -6987,72 +6795,72 @@ 1 3 - 510 + 434 3 4 - 1068 + 774 4 5 - 962 + 1147 5 6 - 680 + 995 6 7 - 632 + 690 7 9 - 946 + 989 9 11 - 969 + 919 11 - 16 - 1044 + 15 + 992 - 16 - 23 - 907 + 15 + 22 + 1018 - 23 - 36 - 906 + 22 + 34 + 975 - 36 - 65 - 885 + 34 + 61 + 935 - 65 - 158 - 879 + 61 + 143 + 922 - 158 - 1002 - 877 + 143 + 975 + 923 - 1002 - 9027 - 417 + 977 + 11284 + 570 @@ -7068,67 +6876,67 @@ 1 14 - 962 + 1008 14 - 20 - 888 + 21 + 1081 - 20 - 24 - 908 + 21 + 25 + 958 - 24 - 29 - 942 + 25 + 30 + 950 - 29 - 36 - 942 + 30 + 37 + 999 - 36 - 43 - 953 + 37 + 44 + 1031 - 43 - 51 - 914 + 44 + 52 + 923 - 51 - 61 - 930 + 52 + 62 + 946 - 61 - 72 - 954 + 62 + 73 + 1042 - 72 - 82 - 911 + 73 + 83 + 1006 - 82 - 92 - 914 + 83 + 93 + 934 - 92 - 102 - 933 + 93 + 104 + 945 - 102 + 104 523 - 531 + 460 @@ -7144,62 +6952,67 @@ 1 2 - 1328 + 1130 - 2 - 10 - 621 + 4 + 5 + 1128 - 10 + 5 11 - 1424 + 801 11 - 20 - 819 + 16 + 994 - 20 - 38 - 679 + 16 + 22 + 854 - 38 + 22 + 30 + 890 + + + 30 + 41 + 877 + + + 41 + 56 + 860 + + + 56 92 - 685 + 854 92 - 170 - 680 + 1472 + 847 - 170 - 595 - 678 + 1499 + 2520 + 847 - 596 - 1692 - 679 + 2527 + 5340 + 847 - 1692 - 3137 - 679 - - - 3137 - 12009 - 678 - - - 12114 - 51821 - 86 + 5348 + 46386 + 364 @@ -7215,52 +7028,62 @@ 1 2 - 2644 + 2258 2 3 - 1456 + 654 3 + 4 + 1191 + + + 4 + 5 + 1015 + + + 5 + 6 + 658 + + + 6 + 7 + 532 + + + 7 + 8 + 712 + + + 8 10 - 685 + 1014 10 - 11 - 354 + 109 + 852 - 11 - 12 - 565 + 109 + 400 + 847 - 12 - 18 - 691 + 400 + 626 + 849 - 18 - 206 - 680 - - - 206 - 332 - 684 - - - 332 - 542 - 679 - - - 542 - 11511 - 598 + 626 + 12065 + 711 @@ -7276,57 +7099,62 @@ 1 2 - 1516 + 1130 - 2 - 7 - 524 + 3 + 4 + 1454 - 7 + 4 8 - 1697 + 977 8 - 13 - 674 + 11 + 746 - 13 - 18 - 834 + 11 + 15 + 1029 - 18 - 28 - 695 + 15 + 20 + 966 - 28 - 46 - 696 + 20 + 27 + 942 - 46 - 76 - 685 + 27 + 37 + 854 - 76 - 92 - 692 + 37 + 57 + 853 - 92 - 105 - 687 + 57 + 84 + 882 - 105 - 387 - 336 + 84 + 101 + 895 + + + 101 + 397 + 565 @@ -7342,42 +7170,42 @@ 1 2 - 4164 + 4809 2 3 - 1304 + 1797 3 4 - 500 + 961 4 6 - 624 + 940 6 - 9 - 648 + 10 + 986 - 9 - 14 - 756 + 10 + 16 + 862 - 14 - 26 - 678 + 16 + 45 + 848 - 26 - 4558 - 362 + 45 + 5676 + 90 @@ -7393,57 +7221,67 @@ 1 2 - 1328 + 1130 - 2 - 7 - 666 + 3 + 4 + 1128 - 7 + 4 8 - 1472 + 710 8 - 13 - 824 + 10 + 808 - 13 - 18 - 712 + 10 + 14 + 1024 - 18 + 14 + 19 + 1007 + + + 19 26 - 679 + 963 26 - 42 - 690 + 34 + 848 - 42 - 73 - 701 + 34 + 49 + 857 - 73 - 91 - 697 + 49 + 77 + 860 - 91 - 105 - 721 + 77 + 97 + 895 - 105 - 391 - 546 + 97 + 118 + 857 + + + 118 + 400 + 206 @@ -7459,7 +7297,7 @@ 1 4 - 92 + 102 4 @@ -7469,658 +7307,13 @@ 5 8 + 65 + + + 8 + 9 122 - - 8 - 9 - 123 - - - 9 - 11 - 117 - - - 11 - 12 - 40 - - - 12 - 13 - 109 - - - 13 - 17 - 118 - - - 17 - 22 - 108 - - - 22 - 33 - 106 - - - 33 - 75 - 103 - - - 75 - 739 - 103 - - - 740 - 195640 - 103 - - - 213807 - 865889 - 6 - - - - - - - beginColumn - file - - - 12 - - - 1 - 3 - 120 - - - 4 - 5 - 120 - - - 5 - 7 - 71 - - - 7 - 8 - 62 - - - 8 - 9 - 119 - - - 9 - 11 - 109 - - - 11 - 12 - 40 - - - 12 - 13 - 112 - - - 13 - 17 - 125 - - - 17 - 23 - 105 - - - 23 - 34 - 106 - - - 34 - 79 - 103 - - - 80 - 3436 - 103 - - - 3468 - 11682 - 76 - - - - - - - beginColumn - beginLine - - - 12 - - - 1 - 2 - 215 - - - 2 - 3 - 318 - - - 3 - 4 - 126 - - - 4 - 5 - 141 - - - 5 - 6 - 75 - - - 6 - 8 - 103 - - - 8 - 13 - 117 - - - 13 - 32 - 104 - - - 32 - 2080 - 103 - - - 2093 - 9035 - 69 - - - - - - - beginColumn - endLine - - - 12 - - - 1 - 2 - 215 - - - 2 - 3 - 318 - - - 3 - 4 - 126 - - - 4 - 5 - 141 - - - 5 - 6 - 75 - - - 6 - 8 - 103 - - - 8 - 13 - 117 - - - 13 - 32 - 104 - - - 32 - 2112 - 103 - - - 2123 - 9035 - 69 - - - - - - - beginColumn - endColumn - - - 12 - - - 1 - 2 - 693 - - - 2 - 3 - 314 - - - 3 - 4 - 112 - - - 4 - 7 - 114 - - - 7 - 84 - 103 - - - 84 - 263 - 35 - - - - - - - endLine - id - - - 12 - - - 1 - 2 - 1323 - - - 2 - 11 - 675 - - - 11 - 12 - 1420 - - - 12 - 22 - 806 - - - 22 - 44 - 680 - - - 44 - 95 - 683 - - - 95 - 173 - 685 - - - 173 - 808 - 678 - - - 823 - 1711 - 678 - - - 1711 - 3189 - 678 - - - 3189 - 16909 - 678 - - - 17178 - 52390 - 52 - - - - - - - endLine - file - - - 12 - - - 1 - 2 - 2641 - - - 2 - 3 - 1465 - - - 3 - 10 - 673 - - - 10 - 11 - 361 - - - 11 - 12 - 555 - - - 12 - 18 - 699 - - - 18 - 206 - 680 - - - 206 - 330 - 682 - - - 330 - 541 - 680 - - - 541 - 6341 - 600 - - - - - - - endLine - beginLine - - - 12 - - - 1 - 2 - 2018 - - - 2 - 3 - 2354 - - - 3 - 4 - 1144 - - - 4 - 5 - 627 - - - 5 - 8 - 797 - - - 8 - 12 - 693 - - - 12 - 20 - 679 - - - 20 - 50 - 682 - - - 50 - 64 - 42 - - - - - - - endLine - beginColumn - - - 12 - - - 1 - 2 - 1468 - - - 2 - 7 - 555 - - - 7 - 8 - 1644 - - - 8 - 13 - 721 - - - 13 - 18 - 825 - - - 18 - 28 - 709 - - - 28 - 45 - 682 - - - 45 - 76 - 699 - - - 76 - 92 - 694 - - - 92 - 105 - 695 - - - 105 - 388 - 344 - - - - - - - endLine - endColumn - - - 12 - - - 1 - 2 - 1323 - - - 2 - 7 - 691 - - - 7 - 8 - 1491 - - - 8 - 12 - 718 - - - 12 - 17 - 669 - - - 17 - 24 - 732 - - - 24 - 40 - 707 - - - 40 - 70 - 691 - - - 70 - 90 - 732 - - - 90 - 104 - 704 - - - 104 - 391 - 578 - - - - - - - endColumn - id - - - 12 - - - 1 - 4 - 87 - - - 4 - 5 - 120 - - - 5 - 8 - 120 - - - 8 - 9 - 123 - 9 11 @@ -8129,47 +7322,737 @@ 11 12 - 41 + 73 12 13 - 108 + 114 13 - 17 - 121 + 18 + 106 - 17 - 22 + 18 + 21 + 115 + + + 21 + 32 + 118 + + + 32 + 61 + 104 + + + 61 + 255 + 104 + + + 261 + 113805 + 104 + + + 114086 + 1069778 + 27 + + + + + + + beginColumn + file + + + 12 + + + 1 + 3 + 118 + + + 3 + 4 + 13 + + + 4 + 5 + 119 + + + 5 + 8 + 75 + + + 8 + 9 + 119 + + + 9 + 11 105 + + 11 + 12 + 73 + + + 12 + 13 + 111 + + + 13 + 19 + 122 + + + 19 + 22 + 111 + 22 33 - 107 + 108 33 - 73 + 66 + 107 + + + 68 + 683 104 - 73 - 547 + 732 + 12283 + 100 + + + + + + + beginColumn + beginLine + + + 12 + + + 1 + 2 + 223 + + + 2 + 3 + 307 + + + 3 + 4 + 135 + + + 4 + 5 + 140 + + + 5 + 6 + 78 + + + 6 + 8 + 101 + + + 8 + 13 + 120 + + + 13 + 32 104 - 571 - 148376 + 32 + 2144 104 - 149850 - 309769 - 22 + 2186 + 11292 + 73 + + + + + + + beginColumn + endLine + + + 12 + + + 1 + 2 + 223 + + + 2 + 3 + 307 + + + 3 + 4 + 135 + + + 4 + 5 + 140 + + + 5 + 6 + 78 + + + 6 + 8 + 100 + + + 8 + 13 + 121 + + + 13 + 32 + 104 + + + 32 + 2158 + 104 + + + 2226 + 11292 + 73 + + + + + + + beginColumn + endColumn + + + 12 + + + 1 + 2 + 689 + + + 2 + 3 + 323 + + + 3 + 4 + 118 + + + 4 + 7 + 117 + + + 7 + 88 + 104 + + + 88 + 266 + 34 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 1129 + + + 4 + 5 + 1 + + + 5 + 6 + 1128 + + + 6 + 12 + 762 + + + 12 + 17 + 961 + + + 17 + 23 + 922 + + + 23 + 31 + 919 + + + 31 + 43 + 899 + + + 43 + 58 + 879 + + + 58 + 100 + 855 + + + 100 + 1721 + 847 + + + 1722 + 2799 + 847 + + + 2805 + 6136 + 847 + + + 6136 + 46393 + 297 + + + + + + + endLine + file + + + 12 + + + 1 + 2 + 2258 + + + 2 + 3 + 654 + + + 3 + 4 + 1191 + + + 4 + 5 + 1017 + + + 5 + 6 + 652 + + + 6 + 7 + 522 + + + 7 + 8 + 735 + + + 8 + 10 + 1005 + + + 10 + 109 + 850 + + + 109 + 400 + 850 + + + 400 + 626 + 849 + + + 626 + 6687 + 710 + + + + + + + endLine + beginLine + + + 12 + + + 1 + 2 + 1130 + + + 2 + 3 + 3437 + + + 3 + 4 + 1709 + + + 4 + 5 + 1095 + + + 5 + 6 + 700 + + + 6 + 9 + 918 + + + 9 + 14 + 918 + + + 14 + 25 + 868 + + + 25 + 60 + 518 + + + + + + + endLine + beginColumn + + + 12 + + + 1 + 2 + 1129 + + + 2 + 3 + 1 + + + 3 + 4 + 1454 + + + 4 + 8 + 926 + + + 8 + 11 + 708 + + + 11 + 15 + 1045 + + + 15 + 20 + 968 + + + 20 + 27 + 954 + + + 27 + 37 + 880 + + + 37 + 57 + 867 + + + 57 + 84 + 872 + + + 84 + 100 + 847 + + + 100 + 397 + 642 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 2 + 1129 + + + 2 + 3 + 1 + + + 3 + 4 + 1128 + + + 4 + 8 + 718 + + + 8 + 10 + 801 + + + 10 + 13 + 814 + + + 13 + 17 + 919 + + + 17 + 23 + 965 + + + 23 + 31 + 959 + + + 31 + 44 + 879 + + + 44 + 70 + 851 + + + 70 + 93 + 878 + + + 93 + 109 + 849 + + + 109 + 400 + 402 + + + + + + + endColumn + id + + + 12 + + + 1 + 4 + 95 + + + 4 + 5 + 120 + + + 5 + 8 + 64 + + + 8 + 9 + 120 + + + 9 + 11 + 105 + + + 11 + 12 + 76 + + + 12 + 13 + 113 + + + 13 + 18 + 109 + + + 18 + 21 + 111 + + + 21 + 31 + 106 + + + 31 + 55 + 106 + + + 55 + 191 + 105 + + + 192 + 56899 + 105 + + + 58047 + 407640 + 54 @@ -8185,72 +8068,72 @@ 1 3 - 113 + 110 3 + 4 + 15 + + + 4 5 - 122 + 119 5 - 7 - 70 - - - 7 8 - 63 + 74 8 9 - 117 + 116 9 11 - 108 + 104 11 12 - 38 + 73 12 13 - 112 + 114 13 - 17 - 124 + 19 + 126 - 17 + 19 23 - 105 + 115 23 - 33 - 106 + 34 + 114 - 33 - 71 - 104 + 34 + 72 + 105 - 71 - 2586 - 104 + 72 + 1551 + 105 - 2841 - 10750 - 90 + 1727 + 11266 + 99 @@ -8266,52 +8149,52 @@ 1 2 - 213 + 219 2 3 - 316 + 306 3 4 - 126 + 134 4 5 - 141 + 142 5 6 - 71 + 74 6 8 - 102 + 103 8 - 12 - 106 + 13 + 120 - 12 - 28 - 106 + 13 + 33 + 108 - 28 - 1632 - 104 + 33 + 2296 + 105 - 1663 - 6417 - 91 + 2325 + 10163 + 78 @@ -8327,31 +8210,31 @@ 1 2 - 683 + 676 2 3 - 268 + 276 3 4 - 116 + 124 4 7 - 109 + 112 7 - 34 - 104 + 36 + 105 - 34 - 102 + 36 + 105 96 @@ -8368,52 +8251,52 @@ 1 2 - 213 + 219 2 3 - 316 + 306 3 4 - 126 + 134 4 5 - 141 + 142 5 6 - 71 + 74 6 8 - 102 + 103 8 - 12 + 13 + 121 + + + 13 + 33 107 - 12 - 28 - 107 + 33 + 2249 + 105 - 28 - 1640 - 104 - - - 1670 - 6384 - 89 + 2292 + 10163 + 78 @@ -8423,23 +8306,23 @@ ql_add_expr_def - 14857 + 13786 id - 14857 + 13786 left - 14857 + 13786 right - 14857 + 13786 child - 14857 + 13786 @@ -8453,7 +8336,7 @@ 1 2 - 14857 + 13786 @@ -8469,7 +8352,7 @@ 1 2 - 14857 + 13786 @@ -8485,7 +8368,7 @@ 1 2 - 14857 + 13786 @@ -8501,7 +8384,7 @@ 1 2 - 14857 + 13786 @@ -8517,7 +8400,7 @@ 1 2 - 14857 + 13786 @@ -8533,7 +8416,7 @@ 1 2 - 14857 + 13786 @@ -8549,7 +8432,7 @@ 1 2 - 14857 + 13786 @@ -8565,7 +8448,7 @@ 1 2 - 14857 + 13786 @@ -8581,7 +8464,7 @@ 1 2 - 14857 + 13786 @@ -8597,7 +8480,7 @@ 1 2 - 14857 + 13786 @@ -8613,7 +8496,7 @@ 1 2 - 14857 + 13786 @@ -8629,7 +8512,7 @@ 1 2 - 14857 + 13786 @@ -8639,11 +8522,11 @@ ql_aggregate_child - 17934 + 16852 ql_aggregate - 9694 + 9053 index @@ -8651,7 +8534,7 @@ child - 17934 + 16852 @@ -8665,17 +8548,17 @@ 1 2 - 1687 + 1481 2 3 - 7774 + 7345 3 4 - 233 + 227 @@ -8691,17 +8574,17 @@ 1 2 - 1687 + 1481 2 3 - 7774 + 7345 3 4 - 233 + 227 @@ -8715,18 +8598,18 @@ 12 - 233 - 234 + 227 + 228 1 - 8007 - 8008 + 7572 + 7573 1 - 9694 - 9695 + 9053 + 9054 1 @@ -8741,18 +8624,18 @@ 12 - 233 - 234 + 227 + 228 1 - 8007 - 8008 + 7572 + 7573 1 - 9694 - 9695 + 9053 + 9054 1 @@ -8769,7 +8652,7 @@ 1 2 - 17934 + 16852 @@ -8785,7 +8668,7 @@ 1 2 - 17934 + 16852 @@ -8795,26 +8678,26 @@ ql_aggregate_def - 9694 + 9053 id - 9694 + 9053 ql_annot_arg_def - 6094 + 4043 id - 6094 + 4043 child - 6094 + 4043 @@ -8828,7 +8711,7 @@ 1 2 - 6094 + 4043 @@ -8844,7 +8727,7 @@ 1 2 - 6094 + 4043 @@ -8854,11 +8737,11 @@ ql_annotation_args - 6862 + 4365 ql_annotation - 5326 + 3721 index @@ -8866,7 +8749,7 @@ args - 6862 + 4365 @@ -8880,17 +8763,12 @@ 1 2 - 4776 + 3448 3 - 4 - 382 - - - 5 10 - 168 + 273 @@ -8906,17 +8784,12 @@ 1 2 - 4776 + 3448 3 - 4 - 382 - - - 5 10 - 168 + 273 @@ -8930,28 +8803,28 @@ 12 - 2 - 3 + 1 + 2 2 - 48 - 49 + 15 + 16 2 - 168 - 169 + 33 + 34 2 - 550 - 551 + 273 + 274 2 - 5326 - 5327 + 3721 + 3722 1 @@ -8966,28 +8839,28 @@ 12 - 2 - 3 + 1 + 2 2 - 48 - 49 + 15 + 16 2 - 168 - 169 + 33 + 34 2 - 550 - 551 + 273 + 274 2 - 5326 - 5327 + 3721 + 3722 1 @@ -9004,7 +8877,7 @@ 1 2 - 6862 + 4365 @@ -9020,7 +8893,7 @@ 1 2 - 6862 + 4365 @@ -9030,15 +8903,15 @@ ql_annotation_def - 72771 + 65278 id - 72771 + 65278 name - 72771 + 65278 @@ -9052,7 +8925,7 @@ 1 2 - 72771 + 65278 @@ -9068,7 +8941,7 @@ 1 2 - 72771 + 65278 @@ -9078,15 +8951,15 @@ ql_arityless_predicate_expr_def - 67354 + 58107 id - 67354 + 58107 name - 67354 + 58107 @@ -9100,7 +8973,7 @@ 1 2 - 67354 + 58107 @@ -9116,7 +8989,7 @@ 1 2 - 67354 + 58107 @@ -9126,15 +8999,15 @@ ql_arityless_predicate_expr_qualifier - 10179 + 10163 ql_arityless_predicate_expr - 10179 + 10163 qualifier - 10179 + 10163 @@ -9148,7 +9021,7 @@ 1 2 - 10179 + 10163 @@ -9164,7 +9037,7 @@ 1 2 - 10179 + 10163 @@ -9174,11 +9047,11 @@ ql_as_expr_child - 19682 + 20772 ql_as_expr - 19448 + 20508 index @@ -9186,7 +9059,7 @@ child - 19682 + 20772 @@ -9200,12 +9073,12 @@ 1 2 - 19214 + 20244 2 3 - 234 + 264 @@ -9221,12 +9094,12 @@ 1 2 - 19214 + 20244 2 3 - 234 + 264 @@ -9240,13 +9113,13 @@ 12 - 234 - 235 + 264 + 265 1 - 19448 - 19449 + 20508 + 20509 1 @@ -9261,13 +9134,13 @@ 12 - 234 - 235 + 264 + 265 1 - 19448 - 19449 + 20508 + 20509 1 @@ -9284,7 +9157,7 @@ 1 2 - 19682 + 20772 @@ -9300,7 +9173,7 @@ 1 2 - 19682 + 20772 @@ -9310,22 +9183,22 @@ ql_as_expr_def - 19448 + 20508 id - 19448 + 20508 ql_as_exprs_child - 19448 + 20508 ql_as_exprs - 8242 + 8493 index @@ -9333,7 +9206,7 @@ child - 19448 + 20508 @@ -9347,32 +9220,32 @@ 1 2 - 3031 + 2998 2 3 - 2962 + 3100 3 4 - 672 + 714 4 5 - 702 + 739 5 7 - 678 + 714 7 36 - 197 + 228 @@ -9388,32 +9261,32 @@ 1 2 - 3031 + 2998 2 3 - 2962 + 3100 3 4 - 672 + 714 4 5 - 702 + 739 5 7 - 678 + 714 7 36 - 197 + 228 @@ -9438,47 +9311,52 @@ 3 - 4 - 4 - - - 4 5 - 6 + 3 - 6 - 10 + 7 + 9 2 10 + 11 + 5 + + + 12 13 - 3 + 2 13 - 19 + 17 3 - 26 - 55 + 17 + 23 3 - 123 - 720 + 35 + 67 3 - 875 - 2250 + 145 + 770 3 - 5211 - 8243 + 942 + 2396 + 3 + + + 5495 + 8494 2 @@ -9504,47 +9382,52 @@ 3 - 4 - 4 - - - 4 5 - 6 + 3 - 6 - 10 + 7 + 9 2 10 + 11 + 5 + + + 12 13 - 3 + 2 13 - 19 + 17 3 - 26 - 55 + 17 + 23 3 - 123 - 720 + 35 + 67 3 - 875 - 2250 + 145 + 770 3 - 5211 - 8243 + 942 + 2396 + 3 + + + 5495 + 8494 2 @@ -9561,7 +9444,7 @@ 1 2 - 19448 + 20508 @@ -9577,7 +9460,7 @@ 1 2 - 19448 + 20508 @@ -9587,35 +9470,89 @@ ql_as_exprs_def - 8242 + 8493 id - 8242 + 8493 - ql_ast_node_info - 6543748 + ql_ast_node_location + 6230328 node - 6543748 + 6230328 + + + loc + 4563391 + + + + + node + loc + + + 12 + + + 1 + 2 + 6230328 + + + + + + + loc + node + + + 12 + + + 1 + 2 + 3246688 + + + 2 + 3 + 979956 + + + 3 + 6 + 336747 + + + + + + + + + ql_ast_node_parent + 6197281 + + + node + 6197281 parent - 3102776 + 2947735 parent_index 2057 - - loc - 4792814 - @@ -9628,7 +9565,7 @@ 1 2 - 6543748 + 6197281 @@ -9644,23 +9581,7 @@ 1 2 - 6543748 - - - - - - - node - loc - - - 12 - - - 1 - 2 - 6543748 + 6197281 @@ -9676,27 +9597,27 @@ 1 2 - 1758472 + 1667033 2 3 - 308336 + 276121 3 4 - 770593 + 754976 4 11 - 240390 + 228408 11 2058 - 24985 + 21197 @@ -9712,63 +9633,27 @@ 1 2 - 1758472 + 1667033 2 3 - 308336 + 276121 3 4 - 770593 + 754976 4 11 - 240390 + 228408 11 2058 - 24985 - - - - - - - parent - loc - - - 12 - - - 1 - 2 - 1758472 - - - 2 - 3 - 308336 - - - 3 - 4 - 770593 - - - 4 - 11 - 240390 - - - 11 - 2058 - 24985 + 21197 @@ -9784,12 +9669,12 @@ 1 2 - 805 + 739 2 3 - 251 + 317 3 @@ -9798,23 +9683,28 @@ 4 - 9 - 188 + 8 + 126 - 9 - 24 - 161 + 8 + 15 + 162 - 24 - 119 + 15 + 47 + 158 + + + 48 + 11121 155 - 120 - 3102777 - 109 + 16033 + 2947736 + 12 @@ -9830,12 +9720,12 @@ 1 2 - 805 + 739 2 3 - 251 + 317 3 @@ -9844,142 +9734,28 @@ 4 - 9 - 188 + 8 + 126 - 9 - 24 - 161 + 8 + 15 + 162 - 24 - 119 + 15 + 47 + 158 + + + 48 + 11121 155 - 120 - 3102777 - 109 - - - - - - - parent_index - loc - - - 12 - - - 1 - 2 - 805 - - - 2 - 3 - 251 - - - 3 - 4 - 388 - - - 4 - 9 - 188 - - - 9 - 24 - 161 - - - 24 - 119 - 155 - - - 120 - 2116191 - 109 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 3411160 - - - 2 - 3 - 1025095 - - - 3 - 6 - 356559 - - - - - - - loc - parent - - - 12 - - - 1 - 2 - 3411160 - - - 2 - 3 - 1025095 - - - 3 - 6 - 356559 - - - - - - - loc - parent_index - - - 12 - - - 1 - 2 - 4028466 - - - 2 - 3 - 764348 + 16033 + 2947736 + 12 @@ -9989,15 +9765,15 @@ ql_body_def - 70726 + 65826 id - 70726 + 65826 child - 70726 + 65826 @@ -10011,7 +9787,7 @@ 1 2 - 70726 + 65826 @@ -10027,7 +9803,7 @@ 1 2 - 70726 + 65826 @@ -10037,15 +9813,15 @@ ql_bool_def - 5039 + 4274 id - 5039 + 4274 child - 5039 + 4274 @@ -10059,7 +9835,7 @@ 1 2 - 5039 + 4274 @@ -10075,7 +9851,7 @@ 1 2 - 5039 + 4274 @@ -10085,11 +9861,11 @@ ql_call_body_child - 122556 + 99620 ql_call_body - 57429 + 49469 index @@ -10097,7 +9873,7 @@ child - 122556 + 99620 @@ -10111,27 +9887,27 @@ 1 2 - 25731 + 23173 2 3 - 15265 + 13151 3 4 - 8568 + 7473 4 - 5 - 3857 + 6 + 4432 - 5 + 6 16 - 4008 + 1240 @@ -10147,27 +9923,27 @@ 1 2 - 25731 + 23173 2 3 - 15265 + 13151 3 4 - 8568 + 7473 4 - 5 - 3857 + 6 + 4432 - 5 + 6 16 - 4008 + 1240 @@ -10181,73 +9957,78 @@ 12 - 16 - 17 - 2 - - - 18 - 19 + 2 + 3 1 - 42 - 43 + 4 + 5 1 - 91 - 92 + 10 + 11 1 - 184 - 185 + 17 + 18 1 - 450 - 451 + 46 + 47 1 - 760 - 761 + 103 + 104 1 - 1254 - 1255 + 237 + 238 1 - 2292 - 2293 + 342 + 343 1 - 4008 - 4009 + 559 + 560 1 - 7865 - 7866 + 1240 + 1241 1 - 16433 - 16434 + 2478 + 2479 1 - 31698 - 31699 + 5672 + 5673 1 - 57429 - 57430 + 13145 + 13146 + 1 + + + 26296 + 26297 + 1 + + + 49469 + 49470 1 @@ -10262,73 +10043,78 @@ 12 - 16 - 17 - 2 - - - 18 - 19 + 2 + 3 1 - 42 - 43 + 4 + 5 1 - 91 - 92 + 10 + 11 1 - 184 - 185 + 17 + 18 1 - 450 - 451 + 46 + 47 1 - 760 - 761 + 103 + 104 1 - 1254 - 1255 + 237 + 238 1 - 2292 - 2293 + 342 + 343 1 - 4008 - 4009 + 559 + 560 1 - 7865 - 7866 + 1240 + 1241 1 - 16433 - 16434 + 2478 + 2479 1 - 31698 - 31699 + 5672 + 5673 1 - 57429 - 57430 + 13145 + 13146 + 1 + + + 26296 + 26297 + 1 + + + 49469 + 49470 1 @@ -10345,7 +10131,7 @@ 1 2 - 122556 + 99620 @@ -10361,7 +10147,7 @@ 1 2 - 122556 + 99620 @@ -10371,22 +10157,22 @@ ql_call_body_def - 66692 + 57368 id - 66692 + 57368 ql_call_or_unqual_agg_expr_child - 133679 + 115036 ql_call_or_unqual_agg_expr - 66692 + 57368 index @@ -10394,7 +10180,7 @@ child - 133679 + 115036 @@ -10408,12 +10194,12 @@ 2 3 - 66397 + 57068 3 4 - 295 + 300 @@ -10429,12 +10215,12 @@ 2 3 - 66397 + 57068 3 4 - 295 + 300 @@ -10448,13 +10234,13 @@ 12 - 295 - 296 + 300 + 301 1 - 66692 - 66693 + 57368 + 57369 2 @@ -10469,13 +10255,13 @@ 12 - 295 - 296 + 300 + 301 1 - 66692 - 66693 + 57368 + 57369 2 @@ -10492,7 +10278,7 @@ 1 2 - 133679 + 115036 @@ -10508,7 +10294,7 @@ 1 2 - 133679 + 115036 @@ -10518,30 +10304,30 @@ ql_call_or_unqual_agg_expr_def - 66692 + 57368 id - 66692 + 57368 ql_charpred_def - 12588 + 12088 id - 12588 + 12088 body - 12588 + 12088 child - 12588 + 12088 @@ -10555,7 +10341,7 @@ 1 2 - 12588 + 12088 @@ -10571,7 +10357,7 @@ 1 2 - 12588 + 12088 @@ -10587,7 +10373,7 @@ 1 2 - 12588 + 12088 @@ -10603,7 +10389,7 @@ 1 2 - 12588 + 12088 @@ -10619,7 +10405,7 @@ 1 2 - 12588 + 12088 @@ -10635,7 +10421,7 @@ 1 2 - 12588 + 12088 @@ -10645,19 +10431,19 @@ ql_class_member_child - 121852 + 112375 ql_class_member - 84646 + 79133 index - 4 + 5 child - 121852 + 112375 @@ -10671,17 +10457,17 @@ 1 2 - 51616 + 49462 2 3 - 28924 + 26160 3 - 5 - 4106 + 6 + 3511 @@ -10697,17 +10483,17 @@ 1 2 - 51616 + 49462 2 3 - 28924 + 26160 3 - 5 - 4106 + 6 + 3511 @@ -10721,23 +10507,28 @@ 12 - 70 - 71 + 8 + 9 1 - 4106 - 4107 + 52 + 53 1 - 33030 - 33031 + 3511 + 3512 1 - 84646 - 84647 + 29671 + 29672 + 1 + + + 79133 + 79134 1 @@ -10752,23 +10543,28 @@ 12 - 70 - 71 + 8 + 9 1 - 4106 - 4107 + 52 + 53 1 - 33030 - 33031 + 3511 + 3512 1 - 84646 - 84647 + 29671 + 29672 + 1 + + + 79133 + 79134 1 @@ -10785,7 +10581,7 @@ 1 2 - 121852 + 112375 @@ -10801,7 +10597,7 @@ 1 2 - 121852 + 112375 @@ -10811,22 +10607,22 @@ ql_class_member_def - 84646 + 79133 id - 84646 + 79133 ql_classless_predicate_child - 72035 + 63161 ql_classless_predicate - 24640 + 23253 index @@ -10834,7 +10630,7 @@ child - 72035 + 63161 @@ -10848,32 +10644,32 @@ 1 2 - 2612 + 2872 2 3 - 9441 + 9678 3 4 - 6254 + 5651 4 5 - 3291 + 2828 5 7 - 2183 + 1868 7 17 - 859 + 356 @@ -10889,32 +10685,32 @@ 1 2 - 2612 + 2872 2 3 - 9441 + 9678 3 4 - 6254 + 5651 4 5 - 3291 + 2828 5 7 - 2183 + 1868 7 17 - 859 + 356 @@ -10928,9 +10724,19 @@ 12 - 8 - 9 - 2 + 1 + 2 + 1 + + + 2 + 3 + 1 + + + 5 + 6 + 1 9 @@ -10938,68 +10744,63 @@ 1 - 25 - 26 + 22 + 23 1 - 43 - 44 + 37 + 38 1 - 83 - 84 + 63 + 64 1 - 164 - 165 + 103 + 104 1 - 269 - 270 + 177 + 178 1 - 491 - 492 + 356 + 357 1 - 859 - 860 + 773 + 774 1 - 1446 - 1447 + 2224 + 2225 1 - 3042 - 3043 + 5052 + 5053 1 - 6333 - 6334 + 10703 + 10704 1 - 12587 - 12588 + 20381 + 20382 1 - 22028 - 22029 - 1 - - - 24640 - 24641 + 23253 + 23254 1 @@ -11014,9 +10815,19 @@ 12 - 8 - 9 - 2 + 1 + 2 + 1 + + + 2 + 3 + 1 + + + 5 + 6 + 1 9 @@ -11024,68 +10835,63 @@ 1 - 25 - 26 + 22 + 23 1 - 43 - 44 + 37 + 38 1 - 83 - 84 + 63 + 64 1 - 164 - 165 + 103 + 104 1 - 269 - 270 + 177 + 178 1 - 491 - 492 + 356 + 357 1 - 859 - 860 + 773 + 774 1 - 1446 - 1447 + 2224 + 2225 1 - 3042 - 3043 + 5052 + 5053 1 - 6333 - 6334 + 10703 + 10704 1 - 12587 - 12588 + 20381 + 20382 1 - 22028 - 22029 - 1 - - - 24640 - 24641 + 23253 + 23254 1 @@ -11102,7 +10908,7 @@ 1 2 - 72035 + 63161 @@ -11118,7 +10924,7 @@ 1 2 - 72035 + 63161 @@ -11128,19 +10934,19 @@ ql_classless_predicate_def - 24640 + 23253 id - 24640 + 23253 name - 24640 + 23253 return_type - 24640 + 23253 @@ -11154,7 +10960,7 @@ 1 2 - 24640 + 23253 @@ -11170,7 +10976,7 @@ 1 2 - 24640 + 23253 @@ -11186,7 +10992,7 @@ 1 2 - 24640 + 23253 @@ -11202,7 +11008,7 @@ 1 2 - 24640 + 23253 @@ -11218,7 +11024,7 @@ 1 2 - 24640 + 23253 @@ -11234,7 +11040,7 @@ 1 2 - 24640 + 23253 @@ -11244,23 +11050,23 @@ ql_comp_term_def - 138784 + 140334 id - 138784 + 140334 left - 138784 + 140334 right - 138784 + 140334 child - 138784 + 140334 @@ -11274,7 +11080,7 @@ 1 2 - 138784 + 140334 @@ -11290,7 +11096,7 @@ 1 2 - 138784 + 140334 @@ -11306,7 +11112,7 @@ 1 2 - 138784 + 140334 @@ -11322,7 +11128,7 @@ 1 2 - 138784 + 140334 @@ -11338,7 +11144,7 @@ 1 2 - 138784 + 140334 @@ -11354,7 +11160,7 @@ 1 2 - 138784 + 140334 @@ -11370,7 +11176,7 @@ 1 2 - 138784 + 140334 @@ -11386,7 +11192,7 @@ 1 2 - 138784 + 140334 @@ -11402,7 +11208,7 @@ 1 2 - 138784 + 140334 @@ -11418,7 +11224,7 @@ 1 2 - 138784 + 140334 @@ -11434,7 +11240,7 @@ 1 2 - 138784 + 140334 @@ -11450,7 +11256,7 @@ 1 2 - 138784 + 140334 @@ -11460,19 +11266,19 @@ ql_conjunction_def - 80925 + 76308 id - 80925 + 76308 left - 80925 + 76308 right - 80925 + 76308 @@ -11486,7 +11292,7 @@ 1 2 - 80925 + 76308 @@ -11502,7 +11308,7 @@ 1 2 - 80925 + 76308 @@ -11518,7 +11324,7 @@ 1 2 - 80925 + 76308 @@ -11534,7 +11340,7 @@ 1 2 - 80925 + 76308 @@ -11550,7 +11356,7 @@ 1 2 - 80925 + 76308 @@ -11566,7 +11372,7 @@ 1 2 - 80925 + 76308 @@ -11576,19 +11382,19 @@ ql_dataclass_child - 86140 + 80203 ql_dataclass - 21914 + 20603 index - 148 + 160 child - 86140 + 80203 @@ -11602,42 +11408,42 @@ 1 2 - 8719 + 8138 2 3 - 3611 + 3631 3 4 - 2551 + 2206 4 5 - 1653 + 1665 5 6 - 1289 + 1187 6 9 - 1952 + 1851 9 - 20 - 1644 + 22 + 1562 - 20 - 149 - 495 + 22 + 161 + 363 @@ -11653,42 +11459,42 @@ 1 2 - 8719 + 8138 2 3 - 3611 + 3631 3 4 - 2551 + 2206 4 5 - 1653 + 1665 5 6 - 1289 + 1187 6 9 - 1952 + 1851 9 - 20 - 1644 + 22 + 1562 - 20 - 149 - 495 + 22 + 161 + 363 @@ -11703,68 +11509,73 @@ 1 - 4 - 8 + 3 + 12 4 5 - 14 - - - 5 - 7 8 - 7 + 5 + 6 + 17 + + + 6 8 - 21 + 2 8 - 12 - 7 + 9 + 20 - 12 - 18 + 9 + 13 12 - 19 - 25 + 13 + 20 12 - 25 + 20 + 27 + 12 + + + 28 36 12 - 37 - 96 + 38 + 98 12 - 101 - 188 + 102 + 193 12 - 198 - 538 + 203 + 541 12 - 592 - 3240 + 596 + 3777 12 - 4091 - 21915 - 6 + 4963 + 20604 + 5 @@ -11779,68 +11590,73 @@ 1 - 4 - 8 + 3 + 12 4 5 - 14 - - - 5 - 7 8 - 7 + 5 + 6 + 17 + + + 6 8 - 21 + 2 8 - 12 - 7 + 9 + 20 - 12 - 18 + 9 + 13 12 - 19 - 25 + 13 + 20 12 - 25 + 20 + 27 + 12 + + + 28 36 12 - 37 - 96 + 38 + 98 12 - 101 - 188 + 102 + 193 12 - 198 - 538 + 203 + 541 12 - 592 - 3240 + 596 + 3777 12 - 4091 - 21915 - 6 + 4963 + 20604 + 5 @@ -11856,7 +11672,7 @@ 1 2 - 86140 + 80203 @@ -11872,7 +11688,7 @@ 1 2 - 86140 + 80203 @@ -11882,15 +11698,15 @@ ql_dataclass_def - 23834 + 22563 id - 23834 + 22563 name - 23834 + 22563 @@ -11904,7 +11720,7 @@ 1 2 - 23834 + 22563 @@ -11920,7 +11736,7 @@ 1 2 - 23834 + 22563 @@ -11930,11 +11746,11 @@ ql_dataclass_extends - 59928 + 57708 ql_dataclass - 22062 + 21309 index @@ -11942,7 +11758,7 @@ extends - 59928 + 57708 @@ -11956,17 +11772,17 @@ 2 3 - 14722 + 14280 4 5 - 6891 + 6614 6 17 - 449 + 415 @@ -11982,17 +11798,17 @@ 2 3 - 14722 + 14280 4 5 - 6891 + 6614 6 17 - 449 + 415 @@ -12011,38 +11827,38 @@ 2 - 4 - 5 + 3 + 4 2 - 9 - 10 + 6 + 7 2 - 19 - 20 + 15 + 16 2 - 80 - 81 + 76 + 77 2 - 449 - 450 + 415 + 416 2 - 7340 - 7341 + 7029 + 7030 2 - 22062 - 22063 + 21309 + 21310 2 @@ -12062,38 +11878,38 @@ 2 - 4 - 5 + 3 + 4 2 - 9 - 10 + 6 + 7 2 - 19 - 20 + 15 + 16 2 - 80 - 81 + 76 + 77 2 - 449 - 450 + 415 + 416 2 - 7340 - 7341 + 7029 + 7030 2 - 22062 - 22063 + 21309 + 21310 2 @@ -12110,7 +11926,7 @@ 1 2 - 59928 + 57708 @@ -12126,7 +11942,7 @@ 1 2 - 59928 + 57708 @@ -12136,11 +11952,11 @@ ql_dataclass_instanceof - 1584 + 1896 ql_dataclass - 791 + 942 index @@ -12148,7 +11964,7 @@ instanceof - 1584 + 1896 @@ -12162,12 +11978,12 @@ 2 3 - 790 + 936 4 5 - 1 + 6 @@ -12183,12 +11999,12 @@ 2 3 - 790 + 936 4 5 - 1 + 6 @@ -12202,13 +12018,13 @@ 12 - 1 - 2 + 6 + 7 2 - 791 - 792 + 942 + 943 2 @@ -12223,13 +12039,13 @@ 12 - 1 - 2 + 6 + 7 2 - 791 - 792 + 942 + 943 2 @@ -12246,7 +12062,7 @@ 1 2 - 1584 + 1896 @@ -12262,7 +12078,7 @@ 1 2 - 1584 + 1896 @@ -12272,11 +12088,11 @@ ql_datatype_branch_child - 5604 + 4787 ql_datatype_branch - 2323 + 1984 index @@ -12284,7 +12100,7 @@ child - 5604 + 4787 @@ -12298,27 +12114,27 @@ 1 2 - 629 + 517 2 3 - 706 + 600 3 4 - 664 + 563 4 5 - 161 + 180 5 11 - 163 + 124 @@ -12334,27 +12150,27 @@ 1 2 - 629 + 517 2 3 - 706 + 600 3 4 - 664 + 563 4 5 - 161 + 180 5 11 - 163 + 124 @@ -12367,49 +12183,44 @@ 12 + + 2 + 3 + 3 + 8 9 - 2 - - - 16 - 17 1 - 30 - 31 + 27 + 28 1 - 50 - 51 + 124 + 125 1 - 163 - 164 + 304 + 305 1 - 324 - 325 + 867 + 868 1 - 988 - 989 + 1467 + 1468 1 - 1694 - 1695 - 1 - - - 2323 - 2324 + 1984 + 1985 1 @@ -12423,49 +12234,44 @@ 12 + + 2 + 3 + 3 + 8 9 - 2 - - - 16 - 17 1 - 30 - 31 + 27 + 28 1 - 50 - 51 + 124 + 125 1 - 163 - 164 + 304 + 305 1 - 324 - 325 + 867 + 868 1 - 988 - 989 + 1467 + 1468 1 - 1694 - 1695 - 1 - - - 2323 - 2324 + 1984 + 1985 1 @@ -12482,7 +12288,7 @@ 1 2 - 5604 + 4787 @@ -12498,7 +12304,7 @@ 1 2 - 5604 + 4787 @@ -12508,15 +12314,15 @@ ql_datatype_branch_def - 3437 + 2719 id - 3437 + 2719 name - 3437 + 2719 @@ -12530,7 +12336,7 @@ 1 2 - 3437 + 2719 @@ -12546,7 +12352,7 @@ 1 2 - 3437 + 2719 @@ -12556,19 +12362,19 @@ ql_datatype_branches_child - 3437 + 2719 ql_datatype_branches - 809 + 548 index - 231 + 246 child - 3437 + 2719 @@ -12582,37 +12388,37 @@ 1 2 - 163 + 132 2 3 - 348 + 182 3 4 - 104 + 81 4 - 5 - 63 + 6 + 49 - 5 + 6 9 - 65 + 43 9 - 61 - 61 + 15 + 42 - 82 - 232 - 5 + 15 + 247 + 19 @@ -12628,37 +12434,37 @@ 1 2 - 163 + 132 2 3 - 348 + 182 3 4 - 104 + 81 4 - 5 - 63 + 6 + 49 - 5 + 6 9 - 65 + 43 9 - 61 - 61 + 15 + 42 - 82 - 232 - 5 + 15 + 247 + 19 @@ -12674,42 +12480,37 @@ 1 2 - 38 + 51 2 3 - 110 + 111 + + + 3 + 4 + 1 4 5 - 1 + 32 5 - 6 - 22 - - - 6 - 8 - 21 - - - 8 - 14 - 15 - - - 14 - 91 + 11 18 - 109 - 810 - 6 + 11 + 20 + 19 + + + 21 + 549 + 14 @@ -12725,42 +12526,37 @@ 1 2 - 38 + 51 2 3 - 110 + 111 + + + 3 + 4 + 1 4 5 - 1 + 32 5 - 6 - 22 - - - 6 - 8 - 21 - - - 8 - 14 - 15 - - - 14 - 91 + 11 18 - 109 - 810 - 6 + 11 + 20 + 19 + + + 21 + 549 + 14 @@ -12776,7 +12572,7 @@ 1 2 - 3437 + 2719 @@ -12792,7 +12588,7 @@ 1 2 - 3437 + 2719 @@ -12802,30 +12598,30 @@ ql_datatype_branches_def - 809 + 548 id - 809 + 548 ql_datatype_def - 809 + 548 id - 809 + 548 name - 809 + 548 child - 809 + 548 @@ -12839,7 +12635,7 @@ 1 2 - 809 + 548 @@ -12855,7 +12651,7 @@ 1 2 - 809 + 548 @@ -12871,7 +12667,7 @@ 1 2 - 809 + 548 @@ -12887,7 +12683,7 @@ 1 2 - 809 + 548 @@ -12903,7 +12699,7 @@ 1 2 - 809 + 548 @@ -12919,7 +12715,7 @@ 1 2 - 809 + 548 @@ -12929,19 +12725,19 @@ ql_disjunction_def - 40259 + 44890 id - 40259 + 44890 left - 40259 + 44890 right - 40259 + 44890 @@ -12955,7 +12751,7 @@ 1 2 - 40259 + 44890 @@ -12971,7 +12767,7 @@ 1 2 - 40259 + 44890 @@ -12987,7 +12783,7 @@ 1 2 - 40259 + 44890 @@ -13003,7 +12799,7 @@ 1 2 - 40259 + 44890 @@ -13019,7 +12815,7 @@ 1 2 - 40259 + 44890 @@ -13035,7 +12831,7 @@ 1 2 - 40259 + 44890 @@ -13045,15 +12841,15 @@ ql_expr_aggregate_body_def - 1293 + 1216 id - 1293 + 1216 as_exprs - 1293 + 1216 @@ -13067,7 +12863,7 @@ 1 2 - 1293 + 1216 @@ -13083,7 +12879,7 @@ 1 2 - 1293 + 1216 @@ -13141,23 +12937,23 @@ ql_expr_annotation_def - 1328 + 601 id - 1328 + 601 annot_arg - 1328 + 601 name - 1328 + 601 child - 1328 + 601 @@ -13171,7 +12967,7 @@ 1 2 - 1328 + 601 @@ -13187,7 +12983,7 @@ 1 2 - 1328 + 601 @@ -13203,7 +12999,7 @@ 1 2 - 1328 + 601 @@ -13219,7 +13015,7 @@ 1 2 - 1328 + 601 @@ -13235,7 +13031,7 @@ 1 2 - 1328 + 601 @@ -13251,7 +13047,7 @@ 1 2 - 1328 + 601 @@ -13267,7 +13063,7 @@ 1 2 - 1328 + 601 @@ -13283,7 +13079,7 @@ 1 2 - 1328 + 601 @@ -13299,7 +13095,7 @@ 1 2 - 1328 + 601 @@ -13315,7 +13111,7 @@ 1 2 - 1328 + 601 @@ -13331,7 +13127,7 @@ 1 2 - 1328 + 601 @@ -13347,7 +13143,7 @@ 1 2 - 1328 + 601 @@ -13357,15 +13153,15 @@ ql_field_def - 4149 + 3721 id - 4149 + 3721 child - 4149 + 3721 @@ -13379,7 +13175,7 @@ 1 2 - 4149 + 3721 @@ -13395,7 +13191,7 @@ 1 2 - 4149 + 3721 @@ -13405,15 +13201,15 @@ ql_full_aggregate_body_as_exprs - 1309 + 1288 ql_full_aggregate_body - 1309 + 1288 as_exprs - 1309 + 1288 @@ -13427,7 +13223,7 @@ 1 2 - 1309 + 1288 @@ -13443,7 +13239,7 @@ 1 2 - 1309 + 1288 @@ -13453,11 +13249,11 @@ ql_full_aggregate_body_child - 7577 + 7058 ql_full_aggregate_body - 6655 + 6301 index @@ -13465,7 +13261,7 @@ child - 7577 + 7058 @@ -13479,17 +13275,17 @@ 1 2 - 6061 + 5788 2 - 4 - 527 + 5 + 480 - 4 + 5 10 - 67 + 33 @@ -13505,17 +13301,17 @@ 1 2 - 6061 + 5788 2 - 4 - 527 + 5 + 480 - 4 + 5 10 - 67 + 33 @@ -13534,38 +13330,43 @@ 1 - 20 - 21 - 2 - - - 22 - 23 + 13 + 14 1 - 48 - 49 + 14 + 15 1 - 67 - 68 + 18 + 19 1 - 147 - 148 + 33 + 34 1 - 594 - 595 + 51 + 52 1 - 6655 - 6656 + 111 + 112 + 1 + + + 513 + 514 + 1 + + + 6301 + 6302 1 @@ -13585,38 +13386,43 @@ 1 - 20 - 21 - 2 - - - 22 - 23 + 13 + 14 1 - 48 - 49 + 14 + 15 1 - 67 - 68 + 18 + 19 1 - 147 - 148 + 33 + 34 1 - 594 - 595 + 51 + 52 1 - 6655 - 6656 + 111 + 112 + 1 + + + 513 + 514 + 1 + + + 6301 + 6302 1 @@ -13633,7 +13439,7 @@ 1 2 - 7577 + 7058 @@ -13649,7 +13455,7 @@ 1 2 - 7577 + 7058 @@ -13659,26 +13465,26 @@ ql_full_aggregate_body_def - 6714 + 6356 id - 6714 + 6356 ql_full_aggregate_body_guard - 3739 + 3549 ql_full_aggregate_body - 3739 + 3549 guard - 3739 + 3549 @@ -13692,7 +13498,7 @@ 1 2 - 3739 + 3549 @@ -13708,7 +13514,7 @@ 1 2 - 3739 + 3549 @@ -13718,15 +13524,15 @@ ql_full_aggregate_body_order_bys - 449 + 429 ql_full_aggregate_body - 449 + 429 order_bys - 449 + 429 @@ -13740,7 +13546,7 @@ 1 2 - 449 + 429 @@ -13756,7 +13562,7 @@ 1 2 - 449 + 429 @@ -13766,11 +13572,11 @@ ql_higher_order_term_child - 469 + 343 ql_higher_order_term - 105 + 77 index @@ -13778,7 +13584,7 @@ child - 469 + 343 @@ -13792,12 +13598,12 @@ 3 4 - 31 + 24 5 6 - 72 + 51 8 @@ -13818,12 +13624,12 @@ 3 4 - 31 + 24 5 6 - 72 + 51 8 @@ -13847,13 +13653,13 @@ 3 - 74 - 75 + 53 + 54 2 - 105 - 106 + 77 + 78 3 @@ -13873,13 +13679,13 @@ 3 - 74 - 75 + 53 + 54 2 - 105 - 106 + 77 + 78 3 @@ -13896,7 +13702,7 @@ 1 2 - 469 + 343 @@ -13912,7 +13718,7 @@ 1 2 - 469 + 343 @@ -13922,15 +13728,15 @@ ql_higher_order_term_def - 105 + 77 id - 105 + 77 name - 105 + 77 @@ -13944,7 +13750,7 @@ 1 2 - 105 + 77 @@ -13960,7 +13766,7 @@ 1 2 - 105 + 77 @@ -13970,23 +13776,23 @@ ql_if_term_def - 3226 + 2953 id - 3226 + 2953 cond - 3226 + 2953 first - 3226 + 2953 second - 3226 + 2953 @@ -14000,7 +13806,7 @@ 1 2 - 3226 + 2953 @@ -14016,7 +13822,7 @@ 1 2 - 3226 + 2953 @@ -14032,7 +13838,7 @@ 1 2 - 3226 + 2953 @@ -14048,7 +13854,7 @@ 1 2 - 3226 + 2953 @@ -14064,7 +13870,7 @@ 1 2 - 3226 + 2953 @@ -14080,7 +13886,7 @@ 1 2 - 3226 + 2953 @@ -14096,7 +13902,7 @@ 1 2 - 3226 + 2953 @@ -14112,7 +13918,7 @@ 1 2 - 3226 + 2953 @@ -14128,7 +13934,7 @@ 1 2 - 3226 + 2953 @@ -14144,7 +13950,7 @@ 1 2 - 3226 + 2953 @@ -14160,7 +13966,7 @@ 1 2 - 3226 + 2953 @@ -14176,7 +13982,7 @@ 1 2 - 3226 + 2953 @@ -14186,19 +13992,19 @@ ql_implication_def - 87 + 101 id - 87 + 101 left - 87 + 101 right - 87 + 101 @@ -14212,7 +14018,7 @@ 1 2 - 87 + 101 @@ -14228,7 +14034,7 @@ 1 2 - 87 + 101 @@ -14244,7 +14050,7 @@ 1 2 - 87 + 101 @@ -14260,7 +14066,7 @@ 1 2 - 87 + 101 @@ -14276,7 +14082,7 @@ 1 2 - 87 + 101 @@ -14292,7 +14098,7 @@ 1 2 - 87 + 101 @@ -14302,11 +14108,11 @@ ql_import_directive_child - 26183 + 27063 ql_import_directive - 24818 + 25764 index @@ -14314,7 +14120,7 @@ child - 26183 + 27063 @@ -14328,12 +14134,12 @@ 1 2 - 23453 + 24465 2 3 - 1365 + 1299 @@ -14349,12 +14155,12 @@ 1 2 - 23453 + 24465 2 3 - 1365 + 1299 @@ -14368,13 +14174,13 @@ 12 - 1365 - 1366 + 1299 + 1300 1 - 24818 - 24819 + 25764 + 25765 1 @@ -14389,13 +14195,13 @@ 12 - 1365 - 1366 + 1299 + 1300 1 - 24818 - 24819 + 25764 + 25765 1 @@ -14412,7 +14218,7 @@ 1 2 - 26183 + 27063 @@ -14428,7 +14234,7 @@ 1 2 - 26183 + 27063 @@ -14438,26 +14244,26 @@ ql_import_directive_def - 24818 + 25764 id - 24818 + 25764 ql_import_module_expr_def - 24818 + 25764 id - 24818 + 25764 child - 24818 + 25764 @@ -14471,7 +14277,7 @@ 1 2 - 24818 + 25764 @@ -14487,7 +14293,7 @@ 1 2 - 24818 + 25764 @@ -14497,11 +14303,11 @@ ql_import_module_expr_qual_name - 43119 + 44946 ql_import_module_expr - 12715 + 13345 index @@ -14509,7 +14315,7 @@ qual_name - 43119 + 44946 @@ -14523,32 +14329,32 @@ 1 2 - 969 + 972 2 3 - 1837 + 2220 3 4 - 3420 + 3431 4 5 - 4818 + 4933 5 6 - 1222 + 1355 6 9 - 449 + 434 @@ -14564,32 +14370,32 @@ 1 2 - 969 + 972 2 3 - 1837 + 2220 3 4 - 3420 + 3431 4 5 - 4818 + 4933 5 6 - 1222 + 1355 6 9 - 449 + 434 @@ -14603,43 +14409,43 @@ 12 - 30 - 31 + 25 + 26 1 - 110 - 111 + 105 + 106 1 - 449 - 450 + 434 + 435 1 - 1671 - 1672 + 1789 + 1790 1 - 6489 - 6490 + 6722 + 6723 1 - 9909 - 9910 + 10153 + 10154 1 - 11746 - 11747 + 12373 + 12374 1 - 12715 - 12716 + 13345 + 13346 1 @@ -14654,43 +14460,43 @@ 12 - 30 - 31 + 25 + 26 1 - 110 - 111 + 105 + 106 1 - 449 - 450 + 434 + 435 1 - 1671 - 1672 + 1789 + 1790 1 - 6489 - 6490 + 6722 + 6723 1 - 9909 - 9910 + 10153 + 10154 1 - 11746 - 11747 + 12373 + 12374 1 - 12715 - 12716 + 13345 + 13346 1 @@ -14707,7 +14513,7 @@ 1 2 - 43119 + 44946 @@ -14723,7 +14529,7 @@ 1 2 - 43119 + 44946 @@ -14733,19 +14539,19 @@ ql_in_expr_def - 1003 + 1037 id - 1003 + 1037 left - 1003 + 1037 right - 1003 + 1037 @@ -14759,7 +14565,7 @@ 1 2 - 1003 + 1037 @@ -14775,7 +14581,7 @@ 1 2 - 1003 + 1037 @@ -14791,7 +14597,7 @@ 1 2 - 1003 + 1037 @@ -14807,7 +14613,7 @@ 1 2 - 1003 + 1037 @@ -14823,7 +14629,7 @@ 1 2 - 1003 + 1037 @@ -14839,7 +14645,7 @@ 1 2 - 1003 + 1037 @@ -14849,11 +14655,11 @@ ql_instance_of_child - 34256 + 31826 ql_instance_of - 17128 + 15913 index @@ -14861,7 +14667,7 @@ child - 34256 + 31826 @@ -14875,7 +14681,7 @@ 2 3 - 17128 + 15913 @@ -14891,7 +14697,7 @@ 2 3 - 17128 + 15913 @@ -14905,8 +14711,8 @@ 12 - 17128 - 17129 + 15913 + 15914 2 @@ -14921,8 +14727,8 @@ 12 - 17128 - 17129 + 15913 + 15914 2 @@ -14939,7 +14745,7 @@ 1 2 - 34256 + 31826 @@ -14955,7 +14761,7 @@ 1 2 - 34256 + 31826 @@ -14965,26 +14771,26 @@ ql_instance_of_def - 17128 + 15913 id - 17128 + 15913 ql_literal_def - 98847 + 109390 id - 98847 + 109390 child - 98847 + 109390 @@ -14998,7 +14804,7 @@ 1 2 - 98847 + 109390 @@ -15014,7 +14820,7 @@ 1 2 - 98847 + 109390 @@ -15024,19 +14830,19 @@ ql_member_predicate_child - 70661 + 63378 ql_member_predicate - 47549 + 43952 index - 11 + 12 child - 70661 + 63378 @@ -15050,22 +14856,22 @@ 1 2 - 34294 + 32505 2 3 - 7406 + 6417 3 4 - 3503 + 3219 4 - 12 - 2346 + 13 + 1811 @@ -15081,22 +14887,22 @@ 1 2 - 34294 + 32505 2 3 - 7406 + 6417 3 4 - 3503 + 3219 4 - 12 - 2346 + 13 + 1811 @@ -15110,8 +14916,8 @@ 12 - 1 - 2 + 2 + 3 1 @@ -15120,8 +14926,13 @@ 1 - 4 - 5 + 5 + 6 + 1 + + + 6 + 7 1 @@ -15130,38 +14941,38 @@ 1 - 40 - 41 + 39 + 40 1 - 588 - 589 + 420 + 421 1 - 1017 - 1018 + 654 + 655 1 - 2346 - 2347 + 1811 + 1812 1 - 5849 - 5850 + 5030 + 5031 1 - 13255 - 13256 + 11447 + 11448 1 - 47549 - 47550 + 43952 + 43953 1 @@ -15176,8 +14987,8 @@ 12 - 1 - 2 + 2 + 3 1 @@ -15186,8 +14997,13 @@ 1 - 4 - 5 + 5 + 6 + 1 + + + 6 + 7 1 @@ -15196,38 +15012,38 @@ 1 - 40 - 41 + 39 + 40 1 - 588 - 589 + 420 + 421 1 - 1017 - 1018 + 654 + 655 1 - 2346 - 2347 + 1811 + 1812 1 - 5849 - 5850 + 5030 + 5031 1 - 13255 - 13256 + 11447 + 11448 1 - 47549 - 47550 + 43952 + 43953 1 @@ -15244,7 +15060,7 @@ 1 2 - 70661 + 63378 @@ -15260,7 +15076,7 @@ 1 2 - 70661 + 63378 @@ -15270,19 +15086,19 @@ ql_member_predicate_def - 47549 + 43952 id - 47549 + 43952 name - 47549 + 43952 return_type - 47549 + 43952 @@ -15296,7 +15112,7 @@ 1 2 - 47549 + 43952 @@ -15312,7 +15128,7 @@ 1 2 - 47549 + 43952 @@ -15328,7 +15144,7 @@ 1 2 - 47549 + 43952 @@ -15344,7 +15160,7 @@ 1 2 - 47549 + 43952 @@ -15360,7 +15176,7 @@ 1 2 - 47549 + 43952 @@ -15376,7 +15192,7 @@ 1 2 - 47549 + 43952 @@ -15386,15 +15202,15 @@ ql_module_alias_body_def - 725 + 917 id - 725 + 917 child - 725 + 917 @@ -15408,7 +15224,7 @@ 1 2 - 725 + 917 @@ -15424,7 +15240,7 @@ 1 2 - 725 + 917 @@ -15434,19 +15250,19 @@ ql_module_child - 35070 + 33181 ql_module - 3910 + 4556 index - 1248 + 1314 child - 35070 + 33181 @@ -15460,47 +15276,42 @@ 1 2 - 1257 + 1138 2 3 - 624 + 1239 3 4 - 294 + 385 4 5 - 294 + 392 5 8 - 324 + 383 8 - 12 - 311 + 13 + 407 - 12 - 17 - 322 + 13 + 23 + 351 - 17 - 34 - 295 - - - 34 - 1249 - 189 + 23 + 1315 + 261 @@ -15516,47 +15327,42 @@ 1 2 - 1257 + 1138 2 3 - 624 + 1239 3 4 - 294 + 385 4 5 - 294 + 392 5 8 - 324 + 383 8 - 12 - 311 + 13 + 407 - 12 - 17 - 322 + 13 + 23 + 351 - 17 - 34 - 295 - - - 34 - 1249 - 189 + 23 + 1315 + 261 @@ -15572,33 +15378,33 @@ 1 2 - 684 + 718 2 3 - 144 + 180 3 - 4 - 131 + 5 + 114 - 4 - 8 - 109 + 5 + 7 + 102 - 15 - 30 + 7 + 17 + 106 + + + 17 + 4557 94 - - 31 - 3911 - 86 - @@ -15613,33 +15419,33 @@ 1 2 - 684 + 718 2 3 - 144 + 180 3 - 4 - 131 + 5 + 114 - 4 - 8 - 109 + 5 + 7 + 102 - 15 - 30 + 7 + 17 + 106 + + + 17 + 4557 94 - - 31 - 3911 - 86 - @@ -15654,7 +15460,7 @@ 1 2 - 35070 + 33181 @@ -15670,7 +15476,7 @@ 1 2 - 35070 + 33181 @@ -15680,15 +15486,15 @@ ql_module_def - 3916 + 4567 id - 3916 + 4567 name - 3916 + 4567 @@ -15702,7 +15508,7 @@ 1 2 - 3916 + 4567 @@ -15718,7 +15524,7 @@ 1 2 - 3916 + 4567 @@ -15728,15 +15534,15 @@ ql_module_expr_def - 72503 + 76399 id - 72503 + 76399 child - 72503 + 76399 @@ -15750,7 +15556,7 @@ 1 2 - 72503 + 76399 @@ -15766,7 +15572,7 @@ 1 2 - 72503 + 76399 @@ -15776,15 +15582,15 @@ ql_module_expr_name - 4091 + 4773 ql_module_expr - 4091 + 4773 name - 4091 + 4773 @@ -15798,7 +15604,7 @@ 1 2 - 4091 + 4773 @@ -15814,7 +15620,7 @@ 1 2 - 4091 + 4773 @@ -15824,11 +15630,11 @@ ql_module_implements - 759 + 1251 ql_module - 759 + 1251 index @@ -15836,7 +15642,7 @@ implements - 759 + 1251 @@ -15850,7 +15656,7 @@ 1 2 - 759 + 1251 @@ -15866,7 +15672,7 @@ 1 2 - 759 + 1251 @@ -15880,8 +15686,8 @@ 12 - 759 - 760 + 1251 + 1252 1 @@ -15896,8 +15702,8 @@ 12 - 759 - 760 + 1251 + 1252 1 @@ -15914,7 +15720,7 @@ 1 2 - 759 + 1251 @@ -15930,7 +15736,7 @@ 1 2 - 759 + 1251 @@ -15940,19 +15746,19 @@ ql_module_instantiation_child - 1190 + 2192 ql_module_instantiation - 1043 + 1740 index - 6 + 8 child - 1190 + 2192 @@ -15966,12 +15772,17 @@ 1 2 - 966 + 1473 2 - 7 - 77 + 3 + 172 + + + 3 + 9 + 95 @@ -15987,12 +15798,17 @@ 1 2 - 966 + 1473 2 - 7 - 77 + 3 + 172 + + + 3 + 9 + 95 @@ -16008,31 +15824,36 @@ 3 4 + 2 + + + 8 + 9 1 - 5 - 6 + 20 + 21 1 - 26 - 27 + 56 + 57 1 - 36 - 37 + 95 + 96 1 - 77 - 78 + 267 + 268 1 - 1043 - 1044 + 1740 + 1741 1 @@ -16049,31 +15870,36 @@ 3 4 + 2 + + + 8 + 9 1 - 5 - 6 + 20 + 21 1 - 26 - 27 + 56 + 57 1 - 36 - 37 + 95 + 96 1 - 77 - 78 + 267 + 268 1 - 1043 - 1044 + 1740 + 1741 1 @@ -16090,7 +15916,7 @@ 1 2 - 1190 + 2192 @@ -16106,7 +15932,7 @@ 1 2 - 1190 + 2192 @@ -16116,15 +15942,15 @@ ql_module_instantiation_def - 1043 + 1740 id - 1043 + 1740 name - 1043 + 1740 @@ -16138,7 +15964,7 @@ 1 2 - 1043 + 1740 @@ -16154,7 +15980,7 @@ 1 2 - 1043 + 1740 @@ -16164,19 +15990,19 @@ ql_module_member_child - 155140 + 150156 ql_module_member - 119591 + 118178 index - 5 + 6 child - 155140 + 150156 @@ -16190,17 +16016,17 @@ 1 2 - 87424 + 88793 2 3 - 28864 + 26917 3 - 6 - 3303 + 7 + 2468 @@ -16216,17 +16042,17 @@ 1 2 - 87424 + 88793 2 3 - 28864 + 26917 3 - 6 - 3303 + 7 + 2468 @@ -16240,28 +16066,33 @@ 12 - 4 - 5 + 2 + 3 1 - 75 - 76 + 10 + 11 1 - 3303 - 3304 + 113 + 114 1 - 32167 - 32168 + 2468 + 2469 1 - 119591 - 119592 + 29385 + 29386 + 1 + + + 118178 + 118179 1 @@ -16276,28 +16107,33 @@ 12 - 4 - 5 + 2 + 3 1 - 75 - 76 + 10 + 11 1 - 3303 - 3304 + 113 + 114 1 - 32167 - 32168 + 2468 + 2469 1 - 119591 - 119592 + 29385 + 29386 + 1 + + + 118178 + 118179 1 @@ -16314,7 +16150,7 @@ 1 2 - 155140 + 150156 @@ -16330,7 +16166,7 @@ 1 2 - 155140 + 150156 @@ -16340,26 +16176,26 @@ ql_module_member_def - 119591 + 118178 id - 119591 + 118178 ql_module_name_def - 6324 + 7606 id - 6324 + 7606 child - 6324 + 7606 @@ -16373,7 +16209,7 @@ 1 2 - 6324 + 7606 @@ -16389,7 +16225,7 @@ 1 2 - 6324 + 7606 @@ -16399,19 +16235,19 @@ ql_module_param_def - 299 + 266 id - 299 + 266 parameter - 299 + 266 signature - 299 + 266 @@ -16425,7 +16261,7 @@ 1 2 - 299 + 266 @@ -16441,7 +16277,7 @@ 1 2 - 299 + 266 @@ -16457,7 +16293,7 @@ 1 2 - 299 + 266 @@ -16473,7 +16309,7 @@ 1 2 - 299 + 266 @@ -16489,7 +16325,7 @@ 1 2 - 299 + 266 @@ -16505,7 +16341,7 @@ 1 2 - 299 + 266 @@ -16515,19 +16351,19 @@ ql_module_parameter - 299 + 266 ql_module - 214 + 185 index - 6 + 8 parameter - 299 + 266 @@ -16541,17 +16377,22 @@ 1 2 - 183 + 138 2 - 4 - 14 + 3 + 30 - 4 - 7 - 17 + 3 + 6 + 15 + + + 6 + 9 + 2 @@ -16567,17 +16408,22 @@ 1 2 - 183 + 138 2 - 4 - 14 + 3 + 30 - 4 - 7 - 17 + 3 + 6 + 15 + + + 6 + 9 + 2 @@ -16591,8 +16437,18 @@ 12 - 8 - 9 + 1 + 2 + 2 + + + 2 + 3 + 1 + + + 4 + 5 1 @@ -16606,18 +16462,13 @@ 1 - 20 - 21 + 47 + 48 1 - 31 - 32 - 1 - - - 214 - 215 + 185 + 186 1 @@ -16632,8 +16483,18 @@ 12 - 8 - 9 + 1 + 2 + 2 + + + 2 + 3 + 1 + + + 4 + 5 1 @@ -16647,18 +16508,13 @@ 1 - 20 - 21 + 47 + 48 1 - 31 - 32 - 1 - - - 214 - 215 + 185 + 186 1 @@ -16675,7 +16531,7 @@ 1 2 - 299 + 266 @@ -16691,7 +16547,7 @@ 1 2 - 299 + 266 @@ -16701,23 +16557,23 @@ ql_mul_expr_def - 631 + 585 id - 631 + 585 left - 631 + 585 right - 631 + 585 child - 631 + 585 @@ -16731,7 +16587,7 @@ 1 2 - 631 + 585 @@ -16747,7 +16603,7 @@ 1 2 - 631 + 585 @@ -16763,7 +16619,7 @@ 1 2 - 631 + 585 @@ -16779,7 +16635,7 @@ 1 2 - 631 + 585 @@ -16795,7 +16651,7 @@ 1 2 - 631 + 585 @@ -16811,7 +16667,7 @@ 1 2 - 631 + 585 @@ -16827,7 +16683,7 @@ 1 2 - 631 + 585 @@ -16843,7 +16699,7 @@ 1 2 - 631 + 585 @@ -16859,7 +16715,7 @@ 1 2 - 631 + 585 @@ -16875,7 +16731,7 @@ 1 2 - 631 + 585 @@ -16891,7 +16747,7 @@ 1 2 - 631 + 585 @@ -16907,7 +16763,7 @@ 1 2 - 631 + 585 @@ -16917,15 +16773,15 @@ ql_negation_def - 12010 + 11727 id - 12010 + 11727 child - 12010 + 11727 @@ -16939,7 +16795,7 @@ 1 2 - 12010 + 11727 @@ -16955,7 +16811,7 @@ 1 2 - 12010 + 11727 @@ -16965,11 +16821,11 @@ ql_order_by_child - 1298 + 1272 ql_order_by - 1098 + 1067 index @@ -16977,7 +16833,7 @@ child - 1298 + 1272 @@ -16991,12 +16847,12 @@ 1 2 - 898 + 862 2 3 - 200 + 205 @@ -17012,12 +16868,12 @@ 1 2 - 898 + 862 2 3 - 200 + 205 @@ -17031,13 +16887,13 @@ 12 - 200 - 201 + 205 + 206 1 - 1098 - 1099 + 1067 + 1068 1 @@ -17052,13 +16908,13 @@ 12 - 200 - 201 + 205 + 206 1 - 1098 - 1099 + 1067 + 1068 1 @@ -17075,7 +16931,7 @@ 1 2 - 1298 + 1272 @@ -17091,7 +16947,7 @@ 1 2 - 1298 + 1272 @@ -17101,30 +16957,30 @@ ql_order_by_def - 1098 + 1067 id - 1098 + 1067 ql_order_bys_child - 1098 + 1067 ql_order_bys - 674 + 661 index - 9 + 8 child - 1098 + 1067 @@ -17138,22 +16994,22 @@ 1 2 - 488 + 477 2 3 - 100 + 101 3 5 - 43 + 41 5 - 10 - 43 + 9 + 42 @@ -17169,22 +17025,22 @@ 1 2 - 488 + 477 2 3 - 100 + 101 3 5 - 43 + 41 5 - 10 - 43 + 9 + 42 @@ -17198,28 +17054,23 @@ 12 - 3 - 4 + 1 + 2 1 - 6 - 7 + 12 + 13 1 - 15 - 16 + 21 + 22 1 - 22 - 23 - 1 - - - 43 - 44 + 42 + 43 1 @@ -17228,18 +17079,18 @@ 1 - 86 - 87 + 83 + 84 1 - 186 - 187 + 184 + 185 1 - 674 - 675 + 661 + 662 1 @@ -17254,28 +17105,23 @@ 12 - 3 - 4 + 1 + 2 1 - 6 - 7 + 12 + 13 1 - 15 - 16 + 21 + 22 1 - 22 - 23 - 1 - - - 43 - 44 + 42 + 43 1 @@ -17284,18 +17130,18 @@ 1 - 86 - 87 + 83 + 84 1 - 186 - 187 + 184 + 185 1 - 674 - 675 + 661 + 662 1 @@ -17312,7 +17158,7 @@ 1 2 - 1098 + 1067 @@ -17328,7 +17174,7 @@ 1 2 - 1098 + 1067 @@ -17338,26 +17184,26 @@ ql_order_bys_def - 674 + 661 id - 674 + 661 ql_par_expr_def - 6038 + 5799 id - 6038 + 5799 child - 6038 + 5799 @@ -17371,7 +17217,7 @@ 1 2 - 6038 + 5799 @@ -17387,7 +17233,7 @@ 1 2 - 6038 + 5799 @@ -17397,15 +17243,15 @@ ql_predicate_alias_body_def - 329 + 372 id - 329 + 372 child - 329 + 372 @@ -17419,7 +17265,7 @@ 1 2 - 329 + 372 @@ -17435,7 +17281,7 @@ 1 2 - 329 + 372 @@ -17445,11 +17291,11 @@ ql_predicate_expr_child - 1324 + 1478 ql_predicate_expr - 662 + 739 index @@ -17457,7 +17303,7 @@ child - 1324 + 1478 @@ -17471,7 +17317,7 @@ 2 3 - 662 + 739 @@ -17487,7 +17333,7 @@ 2 3 - 662 + 739 @@ -17501,8 +17347,8 @@ 12 - 662 - 663 + 739 + 740 2 @@ -17517,8 +17363,8 @@ 12 - 662 - 663 + 739 + 740 2 @@ -17535,7 +17381,7 @@ 1 2 - 1324 + 1478 @@ -17551,7 +17397,7 @@ 1 2 - 1324 + 1478 @@ -17561,11 +17407,11 @@ ql_predicate_expr_def - 662 + 739 id - 662 + 739 @@ -17675,19 +17521,19 @@ ql_ql_child - 85246 + 85914 ql_ql - 10779 + 11162 index - 326 + 340 child - 85246 + 85914 @@ -17701,47 +17547,52 @@ 1 2 - 134 + 96 2 3 - 2560 + 2238 3 4 - 2291 + 2551 4 5 - 1380 + 1524 5 6 - 1013 + 1041 6 - 8 - 949 + 7 + 730 - 8 - 12 - 954 + 7 + 9 + 829 - 12 - 24 - 827 + 9 + 14 + 913 - 24 - 327 - 671 + 14 + 31 + 844 + + + 31 + 341 + 396 @@ -17757,47 +17608,52 @@ 1 2 - 134 + 96 2 3 - 2560 + 2238 3 4 - 2291 + 2551 4 5 - 1380 + 1524 5 6 - 1013 + 1041 6 - 8 - 949 + 7 + 730 - 8 - 12 - 954 + 7 + 9 + 829 - 12 - 24 - 827 + 9 + 14 + 913 - 24 - 327 - 671 + 14 + 31 + 844 + + + 31 + 341 + 396 @@ -17813,68 +17669,63 @@ 1 2 - 45 + 42 2 - 5 - 17 + 4 + 25 - 5 - 11 - 26 - - - 11 - 13 - 24 - - - 13 - 15 - 30 - - - 15 - 23 - 26 - - - 23 - 30 - 27 - - - 30 - 47 + 4 + 6 28 + + 6 + 10 + 31 + + + 10 + 13 + 28 + + + 13 + 22 + 30 + + + 22 + 29 + 26 + + + 29 + 46 + 27 + 48 - 94 - 25 + 83 + 26 - 96 - 185 - 25 + 84 + 176 + 26 - 187 - 519 - 25 + 179 + 553 + 26 - 548 - 5795 + 584 + 11163 25 - - 8085 - 10780 - 3 - @@ -17889,68 +17740,63 @@ 1 2 - 45 + 42 2 - 5 - 17 + 4 + 25 - 5 - 11 - 26 - - - 11 - 13 - 24 - - - 13 - 15 - 30 - - - 15 - 23 - 26 - - - 23 - 30 - 27 - - - 30 - 47 + 4 + 6 28 + + 6 + 10 + 31 + + + 10 + 13 + 28 + + + 13 + 22 + 30 + + + 22 + 29 + 26 + + + 29 + 46 + 27 + 48 - 94 - 25 + 83 + 26 - 96 - 185 - 25 + 84 + 176 + 26 - 187 - 519 - 25 + 179 + 553 + 26 - 548 - 5795 + 584 + 11163 25 - - 8085 - 10780 - 3 - @@ -17965,7 +17811,7 @@ 1 2 - 85246 + 85914 @@ -17981,7 +17827,7 @@ 1 2 - 85246 + 85914 @@ -17991,22 +17837,22 @@ ql_ql_def - 10785 + 11167 id - 10785 + 11167 ql_qualified_expr_child - 337022 + 330314 ql_qualified_expr - 168511 + 165157 index @@ -18014,7 +17860,7 @@ child - 337022 + 330314 @@ -18028,7 +17874,7 @@ 2 3 - 168511 + 165157 @@ -18044,7 +17890,7 @@ 2 3 - 168511 + 165157 @@ -18058,8 +17904,8 @@ 12 - 168511 - 168512 + 165157 + 165158 2 @@ -18074,8 +17920,8 @@ 12 - 168511 - 168512 + 165157 + 165158 2 @@ -18092,7 +17938,7 @@ 1 2 - 337022 + 330314 @@ -18108,7 +17954,7 @@ 1 2 - 337022 + 330314 @@ -18118,30 +17964,30 @@ ql_qualified_expr_def - 168511 + 165157 id - 168511 + 165157 ql_qualified_rhs_child - 68675 + 68095 ql_qualified_rhs - 52287 + 52354 index - 10 + 11 child - 68675 + 68095 @@ -18155,17 +18001,17 @@ 1 2 - 41503 + 41965 2 3 - 7598 + 7314 3 - 11 - 3186 + 12 + 3075 @@ -18181,17 +18027,17 @@ 1 2 - 41503 + 41965 2 3 - 7598 + 7314 3 - 11 - 3186 + 12 + 3075 @@ -18205,18 +18051,18 @@ 12 - 1 - 2 + 8 + 9 1 - 3 - 4 + 9 + 10 1 - 12 - 13 + 11 + 12 1 @@ -18225,33 +18071,38 @@ 1 - 60 - 61 + 25 + 26 1 - 905 - 906 + 66 + 67 1 - 1417 - 1418 + 802 + 803 1 - 3186 - 3187 + 1336 + 1337 1 - 10784 - 10785 + 3075 + 3076 1 - 52287 - 52288 + 10389 + 10390 + 1 + + + 52354 + 52355 1 @@ -18266,18 +18117,18 @@ 12 - 1 - 2 + 8 + 9 1 - 3 - 4 + 9 + 10 1 - 12 - 13 + 11 + 12 1 @@ -18286,33 +18137,38 @@ 1 - 60 - 61 + 25 + 26 1 - 905 - 906 + 66 + 67 1 - 1417 - 1418 + 802 + 803 1 - 3186 - 3187 + 1336 + 1337 1 - 10784 - 10785 + 3075 + 3076 1 - 52287 - 52288 + 10389 + 10390 + 1 + + + 52354 + 52355 1 @@ -18329,7 +18185,7 @@ 1 2 - 68675 + 68095 @@ -18345,7 +18201,7 @@ 1 2 - 68675 + 68095 @@ -18355,26 +18211,26 @@ ql_qualified_rhs_def - 168511 + 165157 id - 168511 + 165157 ql_qualified_rhs_name - 157179 + 153874 ql_qualified_rhs - 157179 + 153874 name - 157179 + 153874 @@ -18388,7 +18244,7 @@ 1 2 - 157179 + 153874 @@ -18404,7 +18260,7 @@ 1 2 - 157179 + 153874 @@ -18414,11 +18270,11 @@ ql_quantified_child - 57793 + 52811 ql_quantified - 26111 + 24227 index @@ -18426,7 +18282,7 @@ child - 57793 + 52811 @@ -18440,27 +18296,27 @@ 1 2 - 4431 + 4452 2 3 - 15291 + 14178 3 4 - 4044 + 3526 4 6 - 2065 + 1823 6 23 - 280 + 248 @@ -18476,27 +18332,27 @@ 1 2 - 4431 + 4452 2 3 - 15291 + 14178 3 4 - 4044 + 3526 4 6 - 2065 + 1823 6 23 - 280 + 248 @@ -18515,33 +18371,33 @@ 11 - 4 - 12 + 3 + 9 2 - 22 - 47 + 19 + 45 2 - 110 - 281 + 102 + 249 2 - 784 - 2346 + 706 + 2072 2 - 6389 - 21681 + 5597 + 19776 2 - 26111 - 26112 + 24227 + 24228 1 @@ -18561,33 +18417,33 @@ 11 - 4 - 12 + 3 + 9 2 - 22 - 47 + 19 + 45 2 - 110 - 281 + 102 + 249 2 - 784 - 2346 + 706 + 2072 2 - 6389 - 21681 + 5597 + 19776 2 - 26111 - 26112 + 24227 + 24228 1 @@ -18604,7 +18460,7 @@ 1 2 - 57793 + 52811 @@ -18620,7 +18476,7 @@ 1 2 - 57793 + 52811 @@ -18630,26 +18486,26 @@ ql_quantified_def - 26111 + 24227 id - 26111 + 24227 ql_quantified_expr - 4431 + 4452 ql_quantified - 4431 + 4452 expr - 4431 + 4452 @@ -18663,7 +18519,7 @@ 1 2 - 4431 + 4452 @@ -18679,7 +18535,7 @@ 1 2 - 4431 + 4452 @@ -18689,15 +18545,15 @@ ql_quantified_formula - 7682 + 7476 ql_quantified - 7682 + 7476 formula - 7682 + 7476 @@ -18711,7 +18567,7 @@ 1 2 - 7682 + 7476 @@ -18727,7 +18583,7 @@ 1 2 - 7682 + 7476 @@ -18737,15 +18593,15 @@ ql_quantified_range - 21641 + 19737 ql_quantified - 21641 + 19737 range - 21641 + 19737 @@ -18759,7 +18615,7 @@ 1 2 - 21641 + 19737 @@ -18775,7 +18631,7 @@ 1 2 - 21641 + 19737 @@ -18785,19 +18641,19 @@ ql_range_def - 417 + 365 id - 417 + 365 lower - 417 + 365 upper - 417 + 365 @@ -18811,7 +18667,7 @@ 1 2 - 417 + 365 @@ -18827,7 +18683,7 @@ 1 2 - 417 + 365 @@ -18843,7 +18699,7 @@ 1 2 - 417 + 365 @@ -18859,7 +18715,7 @@ 1 2 - 417 + 365 @@ -18875,7 +18731,7 @@ 1 2 - 417 + 365 @@ -18891,7 +18747,7 @@ 1 2 - 417 + 365 @@ -18901,11 +18757,11 @@ ql_select_child - 22594 + 23801 ql_select - 5640 + 5989 index @@ -18913,7 +18769,7 @@ child - 22594 + 23801 @@ -18927,37 +18783,37 @@ 1 2 - 137 + 149 2 3 - 787 + 854 3 4 - 1249 + 1341 4 5 - 1613 + 1821 5 6 - 1087 + 1028 6 7 - 453 + 465 7 21 - 314 + 331 @@ -18973,37 +18829,37 @@ 1 2 - 137 + 149 2 3 - 787 + 854 3 4 - 1249 + 1341 4 5 - 1613 + 1821 5 6 - 1087 + 1028 6 7 - 453 + 465 7 21 - 314 + 331 @@ -19027,18 +18883,23 @@ 2 - 3 - 4 - 2 + 4 + 5 + 1 - 7 - 8 - 2 + 6 + 7 + 1 - 12 - 13 + 11 + 12 + 1 + + + 13 + 14 1 @@ -19047,58 +18908,63 @@ 1 - 25 - 26 + 27 + 28 1 - 37 - 38 + 29 + 30 1 - 64 - 65 + 44 + 45 1 - 150 - 151 + 71 + 72 1 - 314 - 315 + 160 + 161 1 - 767 - 768 + 331 + 332 1 - 1854 - 1855 + 796 + 797 1 - 3467 - 3468 + 1824 + 1825 1 - 4716 - 4717 + 3645 + 3646 1 - 5503 - 5504 + 4986 + 4987 1 - 5640 - 5641 + 5840 + 5841 + 1 + + + 5989 + 5990 1 @@ -19123,18 +18989,23 @@ 2 - 3 - 4 - 2 + 4 + 5 + 1 - 7 - 8 - 2 + 6 + 7 + 1 - 12 - 13 + 11 + 12 + 1 + + + 13 + 14 1 @@ -19143,58 +19014,63 @@ 1 - 25 - 26 + 27 + 28 1 - 37 - 38 + 29 + 30 1 - 64 - 65 + 44 + 45 1 - 150 - 151 + 71 + 72 1 - 314 - 315 + 160 + 161 1 - 767 - 768 + 331 + 332 1 - 1854 - 1855 + 796 + 797 1 - 3467 - 3468 + 1824 + 1825 1 - 4716 - 4717 + 3645 + 3646 1 - 5503 - 5504 + 4986 + 4987 1 - 5640 - 5641 + 5840 + 5841 + 1 + + + 5989 + 5990 1 @@ -19211,7 +19087,7 @@ 1 2 - 22594 + 23801 @@ -19227,7 +19103,7 @@ 1 2 - 22594 + 23801 @@ -19237,22 +19113,22 @@ ql_select_def - 5640 + 5989 id - 5640 + 5989 ql_set_literal_child - 18133 + 20149 ql_set_literal - 3557 + 4014 index @@ -19260,7 +19136,7 @@ child - 18133 + 20149 @@ -19274,37 +19150,37 @@ 1 2 - 5 + 9 2 3 - 2131 + 2354 3 4 - 426 + 506 4 5 - 309 + 351 5 7 - 258 + 291 7 - 14 - 276 + 13 + 315 - 14 + 13 1029 - 152 + 188 @@ -19320,37 +19196,37 @@ 1 2 - 5 + 9 2 3 - 2131 + 2354 3 4 - 426 + 506 4 5 - 309 + 351 5 7 - 258 + 291 7 - 14 - 276 + 13 + 315 - 14 + 13 1029 - 152 + 188 @@ -19375,23 +19251,23 @@ 3 - 6 - 94 + 5 + 63 - 6 - 11 - 84 + 5 + 9 + 90 - 11 - 31 - 79 + 9 + 19 + 83 - 31 - 3558 - 49 + 19 + 4015 + 70 @@ -19416,23 +19292,23 @@ 3 - 6 - 94 + 5 + 63 - 6 - 11 - 84 + 5 + 9 + 90 - 11 - 31 - 79 + 9 + 19 + 83 - 31 - 3558 - 49 + 19 + 4015 + 70 @@ -19448,7 +19324,7 @@ 1 2 - 18133 + 20149 @@ -19464,7 +19340,7 @@ 1 2 - 18133 + 20149 @@ -19474,37 +19350,37 @@ ql_set_literal_def - 3557 + 4014 id - 3557 + 4014 ql_signature_expr_def - 2248 + 3709 id - 2248 + 3709 ql_signature_expr_mod_expr - 92 + 180 ql_signature_expr - 92 + 180 mod_expr - 92 + 180 @@ -19518,7 +19394,7 @@ 1 2 - 92 + 180 @@ -19534,7 +19410,7 @@ 1 2 - 92 + 180 @@ -19544,15 +19420,15 @@ ql_signature_expr_predicate - 149 + 232 ql_signature_expr - 149 + 232 predicate - 149 + 232 @@ -19566,7 +19442,7 @@ 1 2 - 149 + 232 @@ -19582,7 +19458,7 @@ 1 2 - 149 + 232 @@ -19592,15 +19468,15 @@ ql_signature_expr_type_expr - 2007 + 3297 ql_signature_expr - 2007 + 3297 type_expr - 2007 + 3297 @@ -19614,7 +19490,7 @@ 1 2 - 2007 + 3297 @@ -19630,7 +19506,7 @@ 1 2 - 2007 + 3297 @@ -19640,15 +19516,15 @@ ql_special_call_def - 4863 + 4424 id - 4863 + 4424 child - 4863 + 4424 @@ -19662,7 +19538,7 @@ 1 2 - 4863 + 4424 @@ -19678,7 +19554,7 @@ 1 2 - 4863 + 4424 @@ -19688,11 +19564,11 @@ ql_super_ref_child - 3070 + 3530 ql_super_ref - 2444 + 2901 index @@ -19700,7 +19576,7 @@ child - 3070 + 3530 @@ -19714,12 +19590,12 @@ 1 2 - 1818 + 2272 2 3 - 626 + 629 @@ -19735,12 +19611,12 @@ 1 2 - 1818 + 2272 2 3 - 626 + 629 @@ -19754,13 +19630,13 @@ 12 - 626 - 627 + 629 + 630 1 - 2444 - 2445 + 2901 + 2902 1 @@ -19775,13 +19651,13 @@ 12 - 626 - 627 + 629 + 630 1 - 2444 - 2445 + 2901 + 2902 1 @@ -19798,7 +19674,7 @@ 1 2 - 3070 + 3530 @@ -19814,7 +19690,7 @@ 1 2 - 3070 + 3530 @@ -19824,22 +19700,22 @@ ql_super_ref_def - 2444 + 2901 id - 2444 + 2901 ql_tokeninfo - 3697389 + 3524470 id - 3697389 + 3524470 kind @@ -19847,7 +19723,7 @@ value - 145712 + 159352 @@ -19861,7 +19737,7 @@ 1 2 - 3697389 + 3524470 @@ -19877,7 +19753,7 @@ 1 2 - 3697389 + 3524470 @@ -19891,83 +19767,83 @@ 12 - 200 - 297 + 205 + 306 2 - 631 - 1062 + 585 + 993 2 - 1171 - 2124 + 1158 + 1974 2 - 2391 - 2445 + 2234 + 2302 2 - 2648 - 2684 + 2344 + 2902 2 - 3604 - 4864 + 3766 + 4425 2 - 9694 - 14858 + 9053 + 13787 2 - 20351 - 20707 + 17184 + 20889 2 - 20738 - 26112 + 21612 + 24228 2 - 28901 - 49385 + 26200 + 47957 2 - 53091 - 55182 + 50826 + 52494 2 - 56786 - 67460 + 55406 + 58185 2 - 73436 - 75428 + 66480 + 83939 2 - 138784 - 224656 + 140334 + 204254 2 - 229368 - 542287 + 221079 + 512065 2 - 1966059 - 1966060 + 1875319 + 1875320 1 @@ -20003,7 +19879,7 @@ 12 - 19 + 18 2 @@ -20012,28 +19888,28 @@ 2 - 173 - 883 + 635 + 858 2 - 2434 - 11721 + 2472 + 12791 2 - 14851 - 14868 + 15738 + 15845 2 - 18243 - 20539 + 18782 + 21406 2 - 35688 - 41928 + 42941 + 44802 2 @@ -20050,32 +19926,32 @@ 1 2 - 85140 + 96196 2 3 - 21743 + 23735 3 4 - 10555 + 11475 4 7 - 13169 + 13411 7 - 27 - 11024 + 41 + 12004 - 27 - 371333 - 4081 + 41 + 348424 + 2531 @@ -20091,17 +19967,17 @@ 1 2 - 130386 + 142727 2 3 - 14775 + 16072 3 5 - 551 + 553 @@ -20111,15 +19987,15 @@ ql_type_alias_body_def - 1245 + 817 id - 1245 + 817 child - 1245 + 817 @@ -20133,7 +20009,7 @@ 1 2 - 1245 + 817 @@ -20149,7 +20025,7 @@ 1 2 - 1245 + 817 @@ -20159,15 +20035,15 @@ ql_type_expr_child - 52988 + 51722 ql_type_expr - 52988 + 51722 child - 52988 + 51722 @@ -20181,7 +20057,7 @@ 1 2 - 52988 + 51722 @@ -20197,7 +20073,7 @@ 1 2 - 52988 + 51722 @@ -20207,26 +20083,26 @@ ql_type_expr_def - 236975 + 218057 id - 236975 + 218057 ql_type_expr_name - 183987 + 166335 ql_type_expr - 183987 + 166335 name - 183987 + 166335 @@ -20240,7 +20116,7 @@ 1 2 - 183987 + 166335 @@ -20256,7 +20132,7 @@ 1 2 - 183987 + 166335 @@ -20266,15 +20142,15 @@ ql_type_expr_qualifier - 32598 + 34602 ql_type_expr - 32598 + 34602 qualifier - 32598 + 34602 @@ -20288,7 +20164,7 @@ 1 2 - 32598 + 34602 @@ -20304,7 +20180,7 @@ 1 2 - 32598 + 34602 @@ -20314,11 +20190,11 @@ ql_type_union_body_child - 1152 + 1174 ql_type_union_body - 249 + 253 index @@ -20326,7 +20202,7 @@ child - 1152 + 1174 @@ -20340,7 +20216,7 @@ 2 3 - 117 + 121 3 @@ -20350,12 +20226,12 @@ 4 5 - 35 + 32 5 6 - 14 + 17 6 @@ -20381,7 +20257,7 @@ 2 3 - 117 + 121 3 @@ -20391,12 +20267,12 @@ 4 5 - 35 + 32 5 6 - 14 + 17 6 @@ -20422,32 +20298,27 @@ 1 2 - 104 + 98 2 3 - 15 + 21 3 - 4 - 2 - - - 4 5 13 5 - 21 + 18 12 - 23 - 250 - 7 + 19 + 254 + 9 @@ -20463,32 +20334,27 @@ 1 2 - 104 + 98 2 3 - 15 + 21 3 - 4 - 2 - - - 4 5 13 5 - 21 + 18 12 - 23 - 250 - 7 + 19 + 254 + 9 @@ -20504,7 +20370,7 @@ 1 2 - 1152 + 1174 @@ -20520,7 +20386,7 @@ 1 2 - 1152 + 1174 @@ -20530,22 +20396,22 @@ ql_type_union_body_def - 249 + 253 id - 249 + 253 ql_unary_expr_child - 2342 + 2316 ql_unary_expr - 1171 + 1158 index @@ -20553,7 +20419,7 @@ child - 2342 + 2316 @@ -20567,7 +20433,7 @@ 2 3 - 1171 + 1158 @@ -20583,7 +20449,7 @@ 2 3 - 1171 + 1158 @@ -20597,8 +20463,8 @@ 12 - 1171 - 1172 + 1158 + 1159 2 @@ -20613,8 +20479,8 @@ 12 - 1171 - 1172 + 1158 + 1159 2 @@ -20631,7 +20497,7 @@ 1 2 - 2342 + 2316 @@ -20647,7 +20513,7 @@ 1 2 - 2342 + 2316 @@ -20657,11 +20523,11 @@ ql_unary_expr_def - 1171 + 1158 id - 1171 + 1158 @@ -20911,11 +20777,11 @@ ql_var_decl_child - 258882 + 228274 ql_var_decl - 129441 + 114137 index @@ -20923,7 +20789,7 @@ child - 258882 + 228274 @@ -20937,7 +20803,7 @@ 2 3 - 129441 + 114137 @@ -20953,7 +20819,7 @@ 2 3 - 129441 + 114137 @@ -20967,8 +20833,8 @@ 12 - 129441 - 129442 + 114137 + 114138 2 @@ -20983,8 +20849,8 @@ 12 - 129441 - 129442 + 114137 + 114138 2 @@ -21001,7 +20867,7 @@ 1 2 - 258882 + 228274 @@ -21017,7 +20883,7 @@ 1 2 - 258882 + 228274 @@ -21027,26 +20893,26 @@ ql_var_decl_def - 129441 + 114137 id - 129441 + 114137 ql_var_name_def - 415356 + 380908 id - 415356 + 380908 child - 415356 + 380908 @@ -21060,7 +20926,7 @@ 1 2 - 415356 + 380908 @@ -21076,7 +20942,7 @@ 1 2 - 415356 + 380908 @@ -21086,15 +20952,15 @@ ql_variable_def - 393587 + 369462 id - 393587 + 369462 child - 393587 + 369462 @@ -21108,7 +20974,7 @@ 1 2 - 393587 + 369462 @@ -21124,7 +20990,7 @@ 1 2 - 393587 + 369462 @@ -21145,11 +21011,11 @@ yaml - 1348 + 1726 id - 1348 + 1726 kind @@ -21157,7 +21023,7 @@ parent - 304 + 350 idx @@ -21169,7 +21035,7 @@ tostring - 236 + 263 @@ -21183,7 +21049,7 @@ 1 2 - 1348 + 1726 @@ -21199,7 +21065,7 @@ 1 2 - 1348 + 1726 @@ -21215,7 +21081,7 @@ 1 2 - 1348 + 1726 @@ -21231,7 +21097,7 @@ 1 2 - 1348 + 1726 @@ -21247,7 +21113,7 @@ 1 2 - 1348 + 1726 @@ -21261,18 +21127,18 @@ 12 - 52 - 53 + 59 + 60 1 - 160 - 161 + 186 + 187 1 - 1136 - 1137 + 1481 + 1482 1 @@ -21287,18 +21153,18 @@ 12 - 49 - 50 + 56 + 57 1 - 160 - 161 + 186 + 187 1 - 212 - 213 + 245 + 246 1 @@ -21360,18 +21226,18 @@ 12 - 32 - 33 + 33 + 34 1 - 59 - 60 + 68 + 69 1 - 145 - 146 + 162 + 163 1 @@ -21388,37 +21254,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 + 4 + 8 + + + 4 5 - 25 + 26 6 7 - 47 + 26 8 9 - 18 + 30 10 - 15 - 25 + 11 + 16 - 16 + 12 + 13 + 30 + + + 14 21 - 17 + 25 @@ -21434,17 +21310,17 @@ 1 2 - 230 + 262 2 3 - 31 + 39 3 4 - 43 + 49 @@ -21460,37 +21336,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 + 4 + 8 + + + 4 5 - 25 + 26 6 7 - 47 + 26 8 9 - 18 + 30 10 - 15 - 25 + 11 + 16 - 16 + 12 + 13 + 30 + + + 14 21 - 17 + 25 @@ -21506,22 +21392,22 @@ 1 2 - 215 + 245 2 3 - 40 + 15 3 4 - 24 + 41 4 5 - 25 + 49 @@ -21537,47 +21423,47 @@ 1 2 - 104 + 118 2 3 - 68 + 71 3 4 - 19 + 22 4 5 - 29 + 35 5 - 6 - 5 - - - 6 - 7 - 25 + 8 + 10 8 - 11 - 23 + 9 + 29 - 11 + 9 + 12 + 27 + + + 12 17 - 23 + 29 17 19 - 8 + 9 @@ -21596,63 +21482,63 @@ 2 - 10 - 11 + 11 + 12 2 - 17 - 18 + 19 + 20 2 - 20 - 21 + 25 + 26 2 - 31 - 32 + 55 + 56 2 - 42 - 43 + 71 + 72 2 - 60 - 61 + 101 + 102 2 - 107 - 108 + 127 + 128 2 - 126 - 127 + 153 + 154 1 - 132 - 133 + 161 + 162 1 - 144 - 145 + 164 + 165 1 - 160 - 161 + 186 + 187 1 - 200 - 201 + 232 + 233 1 @@ -21698,63 +21584,63 @@ 2 - 10 - 11 + 11 + 12 2 - 17 - 18 + 19 + 20 2 - 20 - 21 + 25 + 26 2 - 31 - 32 + 55 + 56 2 - 42 - 43 + 71 + 72 2 - 60 - 61 + 101 + 102 2 - 107 - 108 + 127 + 128 2 - 126 - 127 + 153 + 154 1 - 132 - 133 + 161 + 162 1 - 144 - 145 + 164 + 165 1 - 160 - 161 + 186 + 187 1 - 200 - 201 + 232 + 233 1 @@ -21778,15 +21664,10 @@ 3 3 - - 3 - 4 - 2 - 4 5 - 4 + 6 5 @@ -21814,20 +21695,10 @@ 3 1 - - 3 - 4 - 2 - 4 5 - 1 - - - 6 - 7 - 1 + 3 7 @@ -21835,8 +21706,8 @@ 1 - 8 - 9 + 9 + 10 2 @@ -21845,18 +21716,18 @@ 1 - 12 - 13 + 14 + 15 1 - 17 - 18 + 16 + 17 1 - 19 - 20 + 20 + 21 1 @@ -21865,8 +21736,13 @@ 2 - 28 - 29 + 27 + 28 + 1 + + + 29 + 30 1 @@ -21875,18 +21751,18 @@ 1 - 49 - 50 + 59 + 60 1 - 71 - 72 + 80 + 81 1 - 72 - 73 + 81 + 82 1 @@ -21905,24 +21781,24 @@ 3 1 - - 52 - 53 - 1 - 59 60 1 - 160 - 161 + 137 + 138 1 - 1075 - 1076 + 186 + 187 + 1 + + + 1342 + 1343 1 @@ -21958,23 +21834,23 @@ 1 - 44 - 45 + 56 + 57 1 - 49 - 50 + 105 + 106 1 - 160 - 161 + 186 + 187 1 - 212 - 213 + 245 + 246 1 @@ -21996,16 +21872,16 @@ 8 9 - 2 + 1 9 10 - 1 + 2 - 18 - 19 + 19 + 20 1 @@ -22030,18 +21906,18 @@ 1 - 32 - 33 + 33 + 34 1 - 59 - 60 + 68 + 69 1 - 142 - 143 + 159 + 160 1 @@ -22058,37 +21934,37 @@ 1 2 - 123 + 141 2 3 - 29 + 28 3 - 5 - 21 + 4 + 16 - 5 - 8 - 15 + 4 + 7 + 22 - 8 + 7 10 - 15 + 18 10 17 - 20 + 21 18 - 104 - 13 + 145 + 17 @@ -22104,7 +21980,7 @@ 1 2 - 236 + 263 @@ -22120,37 +21996,37 @@ 1 2 - 123 + 142 2 3 - 29 + 27 3 - 5 + 4 + 16 + + + 4 + 7 + 22 + + + 7 + 10 21 - 5 - 8 - 19 - - - 8 - 11 + 10 + 19 21 - 11 - 45 - 18 - - - 49 - 84 - 5 + 19 + 106 + 14 @@ -22166,7 +22042,7 @@ 1 2 - 159 + 179 2 @@ -22176,7 +22052,7 @@ 3 4 - 20 + 24 4 @@ -22185,8 +22061,8 @@ 8 - 9 - 2 + 10 + 5 @@ -22202,7 +22078,7 @@ 1 2 - 236 + 263 @@ -22338,15 +22214,15 @@ yaml_locations - 1348 + 1726 locatable - 1348 + 1726 location - 1348 + 1726 @@ -22360,7 +22236,7 @@ 1 2 - 1348 + 1726 @@ -22376,7 +22252,7 @@ 1 2 - 1348 + 1726 @@ -22386,11 +22262,11 @@ yaml_scalars - 1136 + 1481 scalar - 1136 + 1481 style @@ -22398,7 +22274,7 @@ value - 176 + 195 @@ -22412,7 +22288,7 @@ 1 2 - 1136 + 1481 @@ -22428,7 +22304,7 @@ 1 2 - 1136 + 1481 @@ -22442,18 +22318,18 @@ 12 - 3 - 4 + 5 + 6 1 - 40 - 41 + 41 + 42 1 - 1093 - 1094 + 1435 + 1436 1 @@ -22473,13 +22349,13 @@ 1 - 2 - 3 + 3 + 4 1 - 173 - 174 + 192 + 193 1 @@ -22496,37 +22372,42 @@ 1 2 - 89 + 101 2 3 - 17 + 16 3 4 - 13 + 17 4 - 7 - 15 + 8 + 17 - 7 + 8 10 - 14 + 12 10 - 17 - 16 + 15 + 15 - 18 - 104 - 12 + 15 + 106 + 15 + + + 136 + 145 + 2 @@ -22542,7 +22423,12 @@ 1 2 - 176 + 194 + + + 2 + 3 + 1 From ccfbd2956c698fb2bc6617b204f088e7b969c1fa Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 13 Mar 2024 20:58:14 +0100 Subject: [PATCH 133/497] Copy existing `XML.qll` into new a new `codeql/xml` pack --- shared/xml/codeql/xml/Xml.qll | 307 ++++++++++++++++++++++++++++++++++ shared/xml/qlpack.yml | 7 + 2 files changed, 314 insertions(+) create mode 100644 shared/xml/codeql/xml/Xml.qll create mode 100644 shared/xml/qlpack.yml diff --git a/shared/xml/codeql/xml/Xml.qll b/shared/xml/codeql/xml/Xml.qll new file mode 100644 index 00000000000..65bdd7b7cc1 --- /dev/null +++ b/shared/xml/codeql/xml/Xml.qll @@ -0,0 +1,307 @@ +/** + * Provides classes and predicates for working with XML files and their content. + */ + +import semmle.files.FileSystem + +private class TXmlLocatable = + @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; + +/** An XML element that has a location. */ +class XmlLocatable extends @xmllocatable, TXmlLocatable { + /** Gets the source location for this element. */ + Location getLocation() { xmllocations(this, result) } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(File f, Location l | l = this.getLocation() | + locations_default(l, f, startline, startcolumn, endline, endcolumn) and + filepath = f.getAbsolutePath() + ) + } + + /** Gets a textual representation of this element. */ + string toString() { none() } // overridden in subclasses +} + +/** + * An `XmlParent` is either an `XmlElement` or an `XmlFile`, + * both of which can contain other elements. + */ +class XmlParent extends @xmlparent { + XmlParent() { + // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; + // the type `@xmlparent` currently also includes non-XML files + this instanceof @xmlelement or xmlEncoding(this, _) + } + + /** + * Gets a printable representation of this XML parent. + * (Intended to be overridden in subclasses.) + */ + string getName() { none() } // overridden in subclasses + + /** Gets the file to which this XML parent belongs. */ + XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } + + /** Gets the child element at a specified index of this XML parent. */ + XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } + + /** Gets a child element of this XML parent. */ + XmlElement getAChild() { xmlElements(result, _, this, _, _) } + + /** Gets a child element of this XML parent with the given `name`. */ + XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } + + /** Gets a comment that is a child of this XML parent. */ + XmlComment getAComment() { xmlComments(result, _, this, _) } + + /** Gets a character sequence that is a child of this XML parent. */ + XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } + + /** Gets the depth in the tree. (Overridden in XmlElement.) */ + int getDepth() { result = 0 } + + /** Gets the number of child XML elements of this XML parent. */ + int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } + + /** Gets the number of places in the body of this XML parent where text occurs. */ + int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } + + /** + * Gets the result of appending all the character sequences of this XML parent from + * left to right, separated by a space. + */ + string allCharactersString() { + result = + concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + } + + /** Gets the text value contained in this XML parent. */ + string getTextValue() { result = this.allCharactersString() } + + /** Gets a printable representation of this XML parent. */ + string toString() { result = this.getName() } +} + +/** An XML file. */ +class XmlFile extends XmlParent, File { + XmlFile() { xmlEncoding(this, _) } + + /** Gets a printable representation of this XML file. */ + override string toString() { result = this.getName() } + + /** Gets the name of this XML file. */ + override string getName() { result = File.super.getAbsolutePath() } + + /** Gets the encoding of this XML file. */ + string getEncoding() { xmlEncoding(this, result) } + + /** Gets the XML file itself. */ + override XmlFile getFile() { result = this } + + /** Gets a top-most element in an XML file. */ + XmlElement getARootElement() { result = this.getAChild() } + + /** Gets a DTD associated with this XML file. */ + XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } +} + +/** + * An XML document type definition (DTD). + * + * Example: + * + * ``` + * + * + * + * ``` + */ +class XmlDtd extends XmlLocatable, @xmldtd { + /** Gets the name of the root element of this DTD. */ + string getRoot() { xmlDTDs(this, result, _, _, _) } + + /** Gets the public ID of this DTD. */ + string getPublicId() { xmlDTDs(this, _, result, _, _) } + + /** Gets the system ID of this DTD. */ + string getSystemId() { xmlDTDs(this, _, _, result, _) } + + /** Holds if this DTD is public. */ + predicate isPublic() { not xmlDTDs(this, _, "", _, _) } + + /** Gets the parent of this DTD. */ + XmlParent getParent() { xmlDTDs(this, _, _, _, result) } + + override string toString() { + this.isPublic() and + result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" + or + not this.isPublic() and + result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + } +} + +/** + * An XML element in an XML file. + * + * Example: + * + * ``` + * + * + * ``` + */ +class XmlElement extends @xmlelement, XmlParent, XmlLocatable { + /** Holds if this XML element has the given `name`. */ + predicate hasName(string name) { name = this.getName() } + + /** Gets the name of this XML element. */ + override string getName() { xmlElements(this, result, _, _, _) } + + /** Gets the XML file in which this XML element occurs. */ + override XmlFile getFile() { xmlElements(this, _, _, _, result) } + + /** Gets the parent of this XML element. */ + XmlParent getParent() { xmlElements(this, _, result, _, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getIndex() { xmlElements(this, _, _, result, _) } + + /** Holds if this XML element has a namespace. */ + predicate hasNamespace() { xmlHasNs(this, _, _) } + + /** Gets the namespace of this XML element, if any. */ + XmlNamespace getNamespace() { xmlHasNs(this, result, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getElementPositionIndex() { xmlElements(this, _, _, result, _) } + + /** Gets the depth of this element within the XML file tree structure. */ + override int getDepth() { result = this.getParent().getDepth() + 1 } + + /** Gets an XML attribute of this XML element. */ + XmlAttribute getAnAttribute() { result.getElement() = this } + + /** Gets the attribute with the specified `name`, if any. */ + XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } + + /** Holds if this XML element has an attribute with the specified `name`. */ + predicate hasAttribute(string name) { exists(this.getAttribute(name)) } + + /** Gets the value of the attribute with the specified `name`, if any. */ + string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } + + /** Gets a printable representation of this XML element. */ + override string toString() { result = this.getName() } +} + +/** + * An attribute that occurs inside an XML element. + * + * Examples: + * + * ``` + * package="com.example.exampleapp" + * android:versionCode="1" + * ``` + */ +class XmlAttribute extends @xmlattribute, XmlLocatable { + /** Gets the name of this attribute. */ + string getName() { xmlAttrs(this, _, result, _, _, _) } + + /** Gets the XML element to which this attribute belongs. */ + XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } + + /** Holds if this attribute has a namespace. */ + predicate hasNamespace() { xmlHasNs(this, _, _) } + + /** Gets the namespace of this attribute, if any. */ + XmlNamespace getNamespace() { xmlHasNs(this, result, _) } + + /** Gets the value of this attribute. */ + string getValue() { xmlAttrs(this, _, _, result, _, _) } + + /** Gets a printable representation of this XML attribute. */ + override string toString() { result = this.getName() + "=" + this.getValue() } +} + +/** + * A namespace used in an XML file. + * + * Example: + * + * ``` + * xmlns:android="http://schemas.android.com/apk/res/android" + * ``` + */ +class XmlNamespace extends XmlLocatable, @xmlnamespace { + /** Gets the prefix of this namespace. */ + string getPrefix() { xmlNs(this, result, _, _) } + + /** Gets the URI of this namespace. */ + string getUri() { xmlNs(this, _, result, _) } + + /** Holds if this namespace has no prefix. */ + predicate isDefault() { this.getPrefix() = "" } + + override string toString() { + this.isDefault() and result = this.getUri() + or + not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() + } +} + +/** + * A comment in an XML file. + * + * Example: + * + * ``` + * + * ``` + */ +class XmlComment extends @xmlcomment, XmlLocatable { + /** Gets the text content of this XML comment. */ + string getText() { xmlComments(this, result, _, _) } + + /** Gets the parent of this XML comment. */ + XmlParent getParent() { xmlComments(this, _, result, _) } + + /** Gets a printable representation of this XML comment. */ + override string toString() { result = this.getText() } +} + +/** + * A sequence of characters that occurs between opening and + * closing tags of an XML element, excluding other elements. + * + * Example: + * + * ``` + * This is a sequence of characters. + * ``` + */ +class XmlCharacters extends @xmlcharacters, XmlLocatable { + /** Gets the content of this character sequence. */ + string getCharacters() { xmlChars(this, result, _, _, _, _) } + + /** Gets the parent of this character sequence. */ + XmlParent getParent() { xmlChars(this, _, result, _, _, _) } + + /** Holds if this character sequence is CDATA. */ + predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } + + /** Gets a printable representation of this XML character sequence. */ + override string toString() { result = this.getCharacters() } +} diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml new file mode 100644 index 00000000000..d37cec01d2f --- /dev/null +++ b/shared/xml/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/xml +version: 0.0.1-dev +groups: shared +library: true +dependencies: + codeql/util: ${workspace} +warnOnImplicitThis: true From 7055cd823948679007f47ba11c64b6621ccb1593 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:57:34 +0100 Subject: [PATCH 134/497] Make `XML.qll` a parameterized module --- shared/xml/codeql/xml/Xml.qll | 622 +++++++++++++++++++--------------- 1 file changed, 358 insertions(+), 264 deletions(-) diff --git a/shared/xml/codeql/xml/Xml.qll b/shared/xml/codeql/xml/Xml.qll index 65bdd7b7cc1..02d0ffc66fd 100644 --- a/shared/xml/codeql/xml/Xml.qll +++ b/shared/xml/codeql/xml/Xml.qll @@ -2,306 +2,400 @@ * Provides classes and predicates for working with XML files and their content. */ -import semmle.files.FileSystem +private import codeql.util.Location +private import codeql.util.FileSystem -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +/** Provides the input specification of the XML implementation. */ +signature module InputSig { + class XmlLocatableBase; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc); + + class XmlParentBase; + + class XmlNamespaceableBase instanceof XmlLocatableBase; + + class XmlElementBase instanceof XmlParentBase, XmlNamespaceableBase; + + class XmlFileBase extends File instanceof XmlParentBase; + + predicate xmlEncoding_(XmlFileBase f, string enc); + + class XmlDtdBase instanceof XmlLocatableBase; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file); + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file + ); + + class XmlAttributeBase instanceof XmlNamespaceableBase; + + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ); + + class XmlNamespaceBase instanceof XmlLocatableBase; + + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file); + + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file); + + class XmlCommentBase instanceof XmlLocatableBase; + + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file); + + class XmlCharactersBase instanceof XmlLocatableBase; + + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ); +} + +/** Provides a class hierarchy for working with XML files. */ +module Make Input> { + private import Input + + final private class XmlLocatableBaseFinal = XmlLocatableBase; + + /** An XML element that has a location. */ + abstract private class XmlLocatableImpl extends XmlLocatableBaseFinal { + /** Gets the location of this element. */ + Location getLocation() { xmllocations_(this, result) } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + + /** Gets a textual representation of this element. */ + abstract string toString(); + } + + final class XmlLocatable = XmlLocatableImpl; + + final private class XmlParentBaseFinal = XmlParentBase; + + final private class XmlElementBaseFinal = XmlElementBase; /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + * An `XmlParent` is either an `XmlElement` or an `XmlFile`, + * both of which can contain other elements. */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + abstract private class XmlParentImpl extends XmlParentBaseFinal { + XmlParentImpl() { + // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; + // the type `@xmlparent` currently also includes non-XML files + this instanceof XmlElementBaseFinal or xmlEncoding_(this, _) + } + + /** Gets a printable representation of this XML parent. */ + abstract string getName(); + + /** Gets the file to which this XML parent belongs. */ + XmlFile getFile() { result = this or xmlElements_(this, _, _, _, result) } + + /** Gets the child element at a specified index of this XML parent. */ + XmlElement getChild(int index) { xmlElements_(result, _, this, index, _) } + + /** Gets a child element of this XML parent. */ + XmlElement getAChild() { xmlElements_(result, _, this, _, _) } + + /** Gets a child element of this XML parent with the given `name`. */ + XmlElement getAChild(string name) { + xmlElements_(result, _, this, _, _) and result.hasName(name) + } + + /** Gets a comment that is a child of this XML parent. */ + XmlComment getAComment() { xmlComments_(result, _, this, _) } + + /** Gets a character sequence that is a child of this XML parent. */ + XmlCharacters getACharactersSet() { xmlChars_(result, _, this, _, _, _) } + + /** Gets the depth in the tree. (Overridden in XmlElement.) */ + int getDepth() { result = 0 } + + /** Gets the number of child XML elements of this XML parent. */ + int getNumberOfChildren() { result = count(XmlElement e | xmlElements_(e, _, this, _, _)) } + + /** Gets the number of places in the body of this XML parent where text occurs. */ + int getNumberOfCharacterSets() { result = count(int pos | xmlChars_(_, _, this, pos, _, _)) } + + /** + * Gets the result of appending all the character sequences of this XML parent from + * left to right, separated by a space. + */ + string allCharactersString() { + result = + concat(string chars, int pos | + xmlChars_(_, chars, this, pos, _, _) + | + chars, " " order by pos + ) + } + + /** Gets the text value contained in this XML parent. */ + string getTextValue() { result = this.allCharactersString() } + + /** Gets a printable representation of this XML parent. */ + string toString() { result = this.getName() } } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + final class XmlParent = XmlParentImpl; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + final private class XmlFileBaseFinal = XmlFileBase; + + // needed for the `toString` override in `XmlFileImpl` + private class XmlFileBaseMid extends XmlFileBaseFinal { + /** Gets a printable representation of this XML file. */ + string toString() { none() } } + /** An XML file. */ + private class XmlFileImpl extends XmlParentImpl, XmlFileBaseMid { + XmlFileImpl() { xmlEncoding_(this, _) } + + override string toString() { result = this.getName() } + + /** Gets the name of this XML file. */ + override string getName() { result = super.getAbsolutePath() } + + /** Gets the encoding of this XML file. */ + string getEncoding() { xmlEncoding_(this, result) } + + /** Gets the XML file itself. */ + override XmlFile getFile() { result = this } + + /** Gets a top-most element in an XML file. */ + XmlElement getARootElement() { result = this.getAChild() } + + /** Gets a DTD associated with this XML file. */ + XmlDtd getADtd() { xmlDTDs_(result, _, _, _, this) } + } + + final class XmlFile = XmlFileImpl; + + final private class XmlDtdBaseFinal = XmlDtdBase; + /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) + * An XML document type definition (DTD). + * + * Example: + * + * ``` + * + * + * + * ``` */ - string getName() { none() } // overridden in subclasses + private class XmlDtdImpl extends XmlLocatableImpl, XmlDtdBaseFinal { + /** Gets the name of the root element of this DTD. */ + string getRoot() { xmlDTDs_(this, result, _, _, _) } - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } + /** Gets the public ID of this DTD. */ + string getPublicId() { xmlDTDs_(this, _, result, _, _) } - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } + /** Gets the system ID of this DTD. */ + string getSystemId() { xmlDTDs_(this, _, _, result, _) } - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } + /** Holds if this DTD is public. */ + predicate isPublic() { not xmlDTDs_(this, _, "", _, _) } - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } + /** Gets the parent of this DTD. */ + XmlParent getParent() { xmlDTDs_(this, _, _, _, result) } - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } + override string toString() { + this.isPublic() and + result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" + or + not this.isPublic() and + result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + } + } - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } + final class XmlDtd = XmlDtdImpl; /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. + * An XML element in an XML file. + * + * Example: + * + * ``` + * + * + * ``` */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + private class XmlElementImpl extends XmlElementBaseFinal, XmlParentImpl, XmlLocatableImpl { + /** Holds if this XML element has the given `name`. */ + predicate hasName(string name) { name = this.getName() } + + /** Gets the name of this XML element. */ + override string getName() { xmlElements_(this, result, _, _, _) } + + /** Gets the XML file in which this XML element occurs. */ + override XmlFile getFile() { xmlElements_(this, _, _, _, result) } + + /** Gets the parent of this XML element. */ + XmlParent getParent() { xmlElements_(this, _, result, _, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getIndex() { xmlElements_(this, _, _, result, _) } + + /** Holds if this XML element has a namespace. */ + predicate hasNamespace() { xmlHasNs_(this, _, _) } + + /** Gets the namespace of this XML element, if any. */ + XmlNamespace getNamespace() { xmlHasNs_(this, result, _) } + + /** Gets the index of this XML element among its parent's children. */ + int getElementPositionIndex() { xmlElements_(this, _, _, result, _) } + + /** Gets the depth of this element within the XML file tree structure. */ + override int getDepth() { result = this.getParent().getDepth() + 1 } + + /** Gets an XML attribute of this XML element. */ + XmlAttribute getAnAttribute() { result.getElement() = this } + + /** Gets the attribute with the specified `name`, if any. */ + XmlAttribute getAttribute(string name) { + result.getElement() = this and result.getName() = name + } + + /** Holds if this XML element has an attribute with the specified `name`. */ + predicate hasAttribute(string name) { exists(this.getAttribute(name)) } + + /** Gets the value of the attribute with the specified `name`, if any. */ + string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } + + /** Gets a printable representation of this XML element. */ + override string toString() { result = this.getName() } } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + final class XmlElement = XmlElementImpl; - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + final private class XmlAttributeBaseFinal = XmlAttributeBase; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + /** + * An attribute that occurs inside an XML element. + * + * Examples: + * + * ``` + * package="com.example.exampleapp" + * android:versionCode="1" + * ``` + */ + private class XmlAttributeImpl extends XmlAttributeBaseFinal, XmlLocatableImpl { + /** Gets the name of this attribute. */ + string getName() { xmlAttrs_(this, _, result, _, _, _) } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + /** Gets the XML element to which this attribute belongs. */ + XmlElement getElement() { xmlAttrs_(this, result, _, _, _, _) } - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } + /** Holds if this attribute has a namespace. */ + predicate hasNamespace() { xmlHasNs_(this, _, _) } - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } + /** Gets the namespace of this attribute, if any. */ + XmlNamespace getNamespace() { xmlHasNs_(this, result, _) } - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } + /** Gets the value of this attribute. */ + string getValue() { xmlAttrs_(this, _, _, result, _, _) } - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + /** Gets a printable representation of this XML attribute. */ + override string toString() { result = this.getName() + "=" + this.getValue() } } -} -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } + final class XmlAttribute = XmlAttributeImpl; - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } + final private class XmlNamespaceBaseFinal = XmlNamespaceBase; - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } + /** + * A namespace used in an XML file. + * + * Example: + * + * ``` + * xmlns:android="http://schemas.android.com/apk/res/android" + * ``` + */ + private class XmlNamespaceImpl extends XmlLocatableImpl, XmlNamespaceBaseFinal { + /** Gets the prefix of this namespace. */ + string getPrefix() { xmlNs_(this, result, _, _) } - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } + /** Gets the URI of this namespace. */ + string getUri() { xmlNs_(this, _, result, _) } - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } + /** Holds if this namespace has no prefix. */ + predicate isDefault() { this.getPrefix() = "" } - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() + override string toString() { + this.isDefault() and result = this.getUri() + or + not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() + } } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } + + final class XmlNamespace = XmlNamespaceImpl; + + final private class XmlCommentBaseFinal = XmlCommentBase; + + /** + * A comment in an XML file. + * + * Example: + * + * ``` + * + * ``` + */ + private class XmlCommentImpl extends XmlCommentBaseFinal, XmlLocatableImpl { + /** Gets the text content of this XML comment. */ + string getText() { xmlComments_(this, result, _, _) } + + /** Gets the parent of this XML comment. */ + XmlParent getParent() { xmlComments_(this, _, result, _) } + + /** Gets a printable representation of this XML comment. */ + override string toString() { result = this.getText() } + } + + final class XmlComment = XmlCommentImpl; + + final private class XmlCharactersBaseFinal = XmlCharactersBase; + + /** + * A sequence of characters that occurs between opening and + * closing tags of an XML element, excluding other elements. + * + * Example: + * + * ``` + * This is a sequence of characters. + * ``` + */ + private class XmlCharactersImpl extends XmlCharactersBaseFinal, XmlLocatableImpl { + /** Gets the content of this character sequence. */ + string getCharacters() { xmlChars_(this, result, _, _, _, _) } + + /** Gets the parent of this character sequence. */ + XmlParent getParent() { xmlChars_(this, _, result, _, _, _) } + + /** Holds if this character sequence is CDATA. */ + predicate isCDATA() { xmlChars_(this, _, _, _, 1, _) } + + /** Gets a printable representation of this XML character sequence. */ + override string toString() { result = this.getCharacters() } + } + + final class XmlCharacters = XmlCharactersImpl; } From 529e901fb1c56b79bd288094b45427b8ddfb6c92 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:34:26 +0100 Subject: [PATCH 135/497] C#: Switch to shared `XML.qll` implementation --- config/identical-files.json | 1 - csharp/ql/lib/qlpack.yml | 1 + csharp/ql/lib/semmle/code/csharp/XML.qll | 328 ++++------------------- 3 files changed, 46 insertions(+), 284 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index 017fdd11481..f4eb97229d2 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -253,7 +253,6 @@ ], "XML": [ "cpp/ql/lib/semmle/code/cpp/XML.qll", - "csharp/ql/lib/semmle/code/csharp/XML.qll", "java/ql/lib/semmle/code/xml/XML.qll", "python/ql/lib/semmle/python/xml/XML.qll" ], diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d75ea3c6320..eedcf055e85 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -13,6 +13,7 @@ dependencies: codeql/threat-models: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} dataExtensions: - ext/*.model.yml - ext/generated/*.model.yml diff --git a/csharp/ql/lib/semmle/code/csharp/XML.qll b/csharp/ql/lib/semmle/code/csharp/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/csharp/ql/lib/semmle/code/csharp/XML.qll +++ b/csharp/ql/lib/semmle/code/csharp/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } - - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } - - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } - - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make From 754b491d0901d47694a3fac07c9a4a05a87746e5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:36:39 +0100 Subject: [PATCH 136/497] C++: Switch to shared `XML.qll` implementation --- config/identical-files.json | 1 - cpp/ql/lib/qlpack.yml | 1 + cpp/ql/lib/semmle/code/cpp/XML.qll | 328 ++++------------------------- 3 files changed, 46 insertions(+), 284 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index f4eb97229d2..66d5c1457a8 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -252,7 +252,6 @@ "cpp/ql/src/Security/CWE/CWE-020/ir/SafeExternalAPIFunction.qll" ], "XML": [ - "cpp/ql/lib/semmle/code/cpp/XML.qll", "java/ql/lib/semmle/code/xml/XML.qll", "python/ql/lib/semmle/python/xml/XML.qll" ], diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8e201fff594..20adb9bb6b6 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -11,4 +11,5 @@ dependencies: codeql/ssa: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} warnOnImplicitThis: true diff --git a/cpp/ql/lib/semmle/code/cpp/XML.qll b/cpp/ql/lib/semmle/code/cpp/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/cpp/ql/lib/semmle/code/cpp/XML.qll +++ b/cpp/ql/lib/semmle/code/cpp/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } - - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } - - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } - - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make From a6c147134ae1a5793069c5aa4b3e57e1bb72709f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:37:22 +0100 Subject: [PATCH 137/497] Java: Switch to shared `XML.qll` implementation --- config/identical-files.json | 4 - java/ql/lib/qlpack.yml | 1 + .../java/frameworks/spring/SpringBean.qll | 3 +- .../java/frameworks/spring/SpringProperty.qll | 3 +- java/ql/lib/semmle/code/xml/Ant.qll | 2 +- java/ql/lib/semmle/code/xml/XML.qll | 328 +++--------------- 6 files changed, 51 insertions(+), 290 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index 66d5c1457a8..a8b1368f1af 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -251,10 +251,6 @@ "cpp/ql/src/Security/CWE/CWE-020/SafeExternalAPIFunction.qll", "cpp/ql/src/Security/CWE/CWE-020/ir/SafeExternalAPIFunction.qll" ], - "XML": [ - "java/ql/lib/semmle/code/xml/XML.qll", - "python/ql/lib/semmle/python/xml/XML.qll" - ], "DuplicationProblems.inc.qhelp": [ "cpp/ql/src/Metrics/Files/DuplicationProblems.inc.qhelp", "javascript/ql/src/Metrics/DuplicationProblems.inc.qhelp", diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 15b4982d41e..750697a2548 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -14,6 +14,7 @@ dependencies: codeql/tutorial: ${workspace} codeql/typetracking: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} dataExtensions: - ext/*.model.yml - ext/generated/*.model.yml diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll index bbb6adf72f3..a53cbf67090 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll @@ -19,7 +19,8 @@ class SpringBean extends SpringXmlElement { not this.getNamespace().getUri() = "http://camel.apache.org/schema/spring" } - override string toString() { result = this.getBeanIdentifier() } + /** Gets a printable representation of this XML element. */ + string toString() { result = this.getBeanIdentifier() } /** * Holds if this element is a top-level bean definition. diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll index 06d5daefaa1..a83eeed13fa 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll @@ -9,7 +9,8 @@ import semmle.code.java.frameworks.spring.SpringValue class SpringProperty extends SpringXmlElement { SpringProperty() { this.getName() = "property" } - override string toString() { result = this.getPropertyName() } + /** Gets a printable representation of this XML element. */ + string toString() { result = this.getPropertyName() } /** Gets the value of the `name` attribute. */ string getPropertyName() { result = this.getAttributeValue("name") } diff --git a/java/ql/lib/semmle/code/xml/Ant.qll b/java/ql/lib/semmle/code/xml/Ant.qll index 8d4737620a4..59cd2889096 100644 --- a/java/ql/lib/semmle/code/xml/Ant.qll +++ b/java/ql/lib/semmle/code/xml/Ant.qll @@ -9,7 +9,7 @@ class AntTarget extends XmlElement { AntTarget() { super.getName() = "target" } /** Gets the name of this Ant target. */ - override string getName() { result = this.getAttributeValue("name") } + string getName() { result = this.getAttributeValue("name") } /** * Gets a string containing the dependencies of this Ant target, diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } - - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } - - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } - - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make From 61ef9e2e5c36347e62bc9e7846434bc4da572055 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:38:04 +0100 Subject: [PATCH 138/497] JS: Switch to shared `XML.qll` implementation --- javascript/ql/lib/qlpack.yml | 1 + javascript/ql/lib/semmle/javascript/XML.qll | 325 +++--------------- .../javascript/frameworks/ServerLess.qll | 2 +- 3 files changed, 47 insertions(+), 281 deletions(-) diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ef3ca7521ac..26585315877 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -11,6 +11,7 @@ dependencies: codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} codeql/yaml: ${workspace} dataExtensions: - semmle/javascript/frameworks/**/model.yml diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 1a27c9a1ef3..2a351016fd1 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -4,302 +4,67 @@ import semmle.files.FileSystem private import semmle.javascript.internal.Locations +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - DbLocation getLocation() { result = getLocatableLocation(this) } + predicate xmllocations_(XmlLocatableBase e, DbLocation loc) { loc = getLocatableLocation(e) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } - - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } - - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } - - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll b/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll index a88a78fd033..140797dd5db 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ServerLess.qll @@ -5,7 +5,7 @@ */ import javascript -import codeql.serverless.ServerLess +private import codeql.serverless.ServerLess private module YamlImpl implements Input { import semmle.javascript.Files From 2e370e2dedb807656810173682ba4c5c76556d62 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Mar 2024 09:38:40 +0100 Subject: [PATCH 139/497] Python: Switch to shared `XML.qll` implementation --- python/ql/lib/qlpack.yml | 1 + .../semmle/python/frameworks/ServerLess.qll | 2 +- python/ql/lib/semmle/python/xml/XML.qll | 328 +++--------------- 3 files changed, 47 insertions(+), 284 deletions(-) diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index e9f66e205f2..5d624051c40 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -11,6 +11,7 @@ dependencies: codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} + codeql/xml: ${workspace} codeql/yaml: ${workspace} dataExtensions: - semmle/python/frameworks/**/*.model.yml diff --git a/python/ql/lib/semmle/python/frameworks/ServerLess.qll b/python/ql/lib/semmle/python/frameworks/ServerLess.qll index a7d2508b32b..36a4e977c7f 100644 --- a/python/ql/lib/semmle/python/frameworks/ServerLess.qll +++ b/python/ql/lib/semmle/python/frameworks/ServerLess.qll @@ -8,7 +8,7 @@ */ import python -import codeql.serverless.ServerLess +private import codeql.serverless.ServerLess import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.RemoteFlowSources diff --git a/python/ql/lib/semmle/python/xml/XML.qll b/python/ql/lib/semmle/python/xml/XML.qll index 65bdd7b7cc1..54157809260 100644 --- a/python/ql/lib/semmle/python/xml/XML.qll +++ b/python/ql/lib/semmle/python/xml/XML.qll @@ -3,305 +3,67 @@ */ import semmle.files.FileSystem +private import codeql.xml.Xml -private class TXmlLocatable = - @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; +private module Input implements InputSig { + class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; -/** An XML element that has a location. */ -class XmlLocatable extends @xmllocatable, TXmlLocatable { - /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn + class XmlParentBase = @xmlparent; + + class XmlNamespaceableBase = @xmlnamespaceable; + + class XmlElementBase = @xmlelement; + + class XmlFileBase = File; + + predicate xmlEncoding_(XmlFileBase f, string enc) { xmlEncoding(f, enc) } + + class XmlDtdBase = @xmldtd; + + predicate xmlDTDs_(XmlDtdBase e, string root, string publicId, string systemId, XmlFileBase file) { + xmlDTDs(e, root, publicId, systemId, file) + } + + predicate xmlElements_( + XmlElementBase e, string name, XmlParentBase parent, int idx, XmlFileBase file ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + xmlElements(e, name, parent, idx, file) } - /** Gets a textual representation of this element. */ - string toString() { none() } // overridden in subclasses -} + class XmlAttributeBase = @xmlattribute; -/** - * An `XmlParent` is either an `XmlElement` or an `XmlFile`, - * both of which can contain other elements. - */ -class XmlParent extends @xmlparent { - XmlParent() { - // explicitly restrict `this` to be either an `XmlElement` or an `XmlFile`; - // the type `@xmlparent` currently also includes non-XML files - this instanceof @xmlelement or xmlEncoding(this, _) + predicate xmlAttrs_( + XmlAttributeBase e, XmlElementBase elementid, string name, string value, int idx, + XmlFileBase file + ) { + xmlAttrs(e, elementid, name, value, idx, file) } - /** - * Gets a printable representation of this XML parent. - * (Intended to be overridden in subclasses.) - */ - string getName() { none() } // overridden in subclasses + class XmlNamespaceBase = @xmlnamespace; - /** Gets the file to which this XML parent belongs. */ - XmlFile getFile() { result = this or xmlElements(this, _, _, _, result) } - - /** Gets the child element at a specified index of this XML parent. */ - XmlElement getChild(int index) { xmlElements(result, _, this, index, _) } - - /** Gets a child element of this XML parent. */ - XmlElement getAChild() { xmlElements(result, _, this, _, _) } - - /** Gets a child element of this XML parent with the given `name`. */ - XmlElement getAChild(string name) { xmlElements(result, _, this, _, _) and result.hasName(name) } - - /** Gets a comment that is a child of this XML parent. */ - XmlComment getAComment() { xmlComments(result, _, this, _) } - - /** Gets a character sequence that is a child of this XML parent. */ - XmlCharacters getACharactersSet() { xmlChars(result, _, this, _, _, _) } - - /** Gets the depth in the tree. (Overridden in XmlElement.) */ - int getDepth() { result = 0 } - - /** Gets the number of child XML elements of this XML parent. */ - int getNumberOfChildren() { result = count(XmlElement e | xmlElements(e, _, this, _, _)) } - - /** Gets the number of places in the body of this XML parent where text occurs. */ - int getNumberOfCharacterSets() { result = count(int pos | xmlChars(_, _, this, pos, _, _)) } - - /** - * Gets the result of appending all the character sequences of this XML parent from - * left to right, separated by a space. - */ - string allCharactersString() { - result = - concat(string chars, int pos | xmlChars(_, chars, this, pos, _, _) | chars, " " order by pos) + predicate xmlNs_(XmlNamespaceBase e, string prefixName, string uri, XmlFileBase file) { + xmlNs(e, prefixName, uri, file) } - /** Gets the text value contained in this XML parent. */ - string getTextValue() { result = this.allCharactersString() } + predicate xmlHasNs_(XmlNamespaceableBase e, XmlNamespaceBase ns, XmlFileBase file) { + xmlHasNs(e, ns, file) + } - /** Gets a printable representation of this XML parent. */ - string toString() { result = this.getName() } -} + class XmlCommentBase = @xmlcomment; -/** An XML file. */ -class XmlFile extends XmlParent, File { - XmlFile() { xmlEncoding(this, _) } + predicate xmlComments_(XmlCommentBase e, string text, XmlParentBase parent, XmlFileBase file) { + xmlComments(e, text, parent, file) + } - /** Gets a printable representation of this XML file. */ - override string toString() { result = this.getName() } + class XmlCharactersBase = @xmlcharacters; - /** Gets the name of this XML file. */ - override string getName() { result = File.super.getAbsolutePath() } - - /** Gets the encoding of this XML file. */ - string getEncoding() { xmlEncoding(this, result) } - - /** Gets the XML file itself. */ - override XmlFile getFile() { result = this } - - /** Gets a top-most element in an XML file. */ - XmlElement getARootElement() { result = this.getAChild() } - - /** Gets a DTD associated with this XML file. */ - XmlDtd getADtd() { xmlDTDs(result, _, _, _, this) } -} - -/** - * An XML document type definition (DTD). - * - * Example: - * - * ``` - * - * - * - * ``` - */ -class XmlDtd extends XmlLocatable, @xmldtd { - /** Gets the name of the root element of this DTD. */ - string getRoot() { xmlDTDs(this, result, _, _, _) } - - /** Gets the public ID of this DTD. */ - string getPublicId() { xmlDTDs(this, _, result, _, _) } - - /** Gets the system ID of this DTD. */ - string getSystemId() { xmlDTDs(this, _, _, result, _) } - - /** Holds if this DTD is public. */ - predicate isPublic() { not xmlDTDs(this, _, "", _, _) } - - /** Gets the parent of this DTD. */ - XmlParent getParent() { xmlDTDs(this, _, _, _, result) } - - override string toString() { - this.isPublic() and - result = this.getRoot() + " PUBLIC '" + this.getPublicId() + "' '" + this.getSystemId() + "'" - or - not this.isPublic() and - result = this.getRoot() + " SYSTEM '" + this.getSystemId() + "'" + predicate xmlChars_( + XmlCharactersBase e, string text, XmlParentBase parent, int idx, int isCDATA, XmlFileBase file + ) { + xmlChars(e, text, parent, idx, isCDATA, file) } } -/** - * An XML element in an XML file. - * - * Example: - * - * ``` - * - * - * ``` - */ -class XmlElement extends @xmlelement, XmlParent, XmlLocatable { - /** Holds if this XML element has the given `name`. */ - predicate hasName(string name) { name = this.getName() } - - /** Gets the name of this XML element. */ - override string getName() { xmlElements(this, result, _, _, _) } - - /** Gets the XML file in which this XML element occurs. */ - override XmlFile getFile() { xmlElements(this, _, _, _, result) } - - /** Gets the parent of this XML element. */ - XmlParent getParent() { xmlElements(this, _, result, _, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getIndex() { xmlElements(this, _, _, result, _) } - - /** Holds if this XML element has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this XML element, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the index of this XML element among its parent's children. */ - int getElementPositionIndex() { xmlElements(this, _, _, result, _) } - - /** Gets the depth of this element within the XML file tree structure. */ - override int getDepth() { result = this.getParent().getDepth() + 1 } - - /** Gets an XML attribute of this XML element. */ - XmlAttribute getAnAttribute() { result.getElement() = this } - - /** Gets the attribute with the specified `name`, if any. */ - XmlAttribute getAttribute(string name) { result.getElement() = this and result.getName() = name } - - /** Holds if this XML element has an attribute with the specified `name`. */ - predicate hasAttribute(string name) { exists(this.getAttribute(name)) } - - /** Gets the value of the attribute with the specified `name`, if any. */ - string getAttributeValue(string name) { result = this.getAttribute(name).getValue() } - - /** Gets a printable representation of this XML element. */ - override string toString() { result = this.getName() } -} - -/** - * An attribute that occurs inside an XML element. - * - * Examples: - * - * ``` - * package="com.example.exampleapp" - * android:versionCode="1" - * ``` - */ -class XmlAttribute extends @xmlattribute, XmlLocatable { - /** Gets the name of this attribute. */ - string getName() { xmlAttrs(this, _, result, _, _, _) } - - /** Gets the XML element to which this attribute belongs. */ - XmlElement getElement() { xmlAttrs(this, result, _, _, _, _) } - - /** Holds if this attribute has a namespace. */ - predicate hasNamespace() { xmlHasNs(this, _, _) } - - /** Gets the namespace of this attribute, if any. */ - XmlNamespace getNamespace() { xmlHasNs(this, result, _) } - - /** Gets the value of this attribute. */ - string getValue() { xmlAttrs(this, _, _, result, _, _) } - - /** Gets a printable representation of this XML attribute. */ - override string toString() { result = this.getName() + "=" + this.getValue() } -} - -/** - * A namespace used in an XML file. - * - * Example: - * - * ``` - * xmlns:android="http://schemas.android.com/apk/res/android" - * ``` - */ -class XmlNamespace extends XmlLocatable, @xmlnamespace { - /** Gets the prefix of this namespace. */ - string getPrefix() { xmlNs(this, result, _, _) } - - /** Gets the URI of this namespace. */ - string getUri() { xmlNs(this, _, result, _) } - - /** Holds if this namespace has no prefix. */ - predicate isDefault() { this.getPrefix() = "" } - - override string toString() { - this.isDefault() and result = this.getUri() - or - not this.isDefault() and result = this.getPrefix() + ":" + this.getUri() - } -} - -/** - * A comment in an XML file. - * - * Example: - * - * ``` - * - * ``` - */ -class XmlComment extends @xmlcomment, XmlLocatable { - /** Gets the text content of this XML comment. */ - string getText() { xmlComments(this, result, _, _) } - - /** Gets the parent of this XML comment. */ - XmlParent getParent() { xmlComments(this, _, result, _) } - - /** Gets a printable representation of this XML comment. */ - override string toString() { result = this.getText() } -} - -/** - * A sequence of characters that occurs between opening and - * closing tags of an XML element, excluding other elements. - * - * Example: - * - * ``` - * This is a sequence of characters. - * ``` - */ -class XmlCharacters extends @xmlcharacters, XmlLocatable { - /** Gets the content of this character sequence. */ - string getCharacters() { xmlChars(this, result, _, _, _, _) } - - /** Gets the parent of this character sequence. */ - XmlParent getParent() { xmlChars(this, _, result, _, _, _) } - - /** Holds if this character sequence is CDATA. */ - predicate isCDATA() { xmlChars(this, _, _, _, 1, _) } - - /** Gets a printable representation of this XML character sequence. */ - override string toString() { result = this.getCharacters() } -} +import Make From 42c5066cae49b6ff8e9c5aad31c7394d2135180d Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 19 Mar 2024 13:40:45 +0100 Subject: [PATCH 140/497] Upgrade to bazel 7.1 --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index a8907c025d5..a3fcc7121bb 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.0.2 +7.1.0 From 90db9b330f6291aad7ea56b2bdced31ce3909753 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Mar 2024 15:37:03 +0100 Subject: [PATCH 141/497] C#: Add MaD source and sink test query to shared library. --- .../csharp/dataflow/internal/ExternalFlow.qll | 4 +- .../dataflow/internal/FlowSummaryImpl.qll | 8 +- .../dataflow/library/FlowSummaries.ql | 17 +++++ .../dataflow/internal/FlowSummaryImpl.qll | 75 +++++++++++++++++-- 4 files changed, 90 insertions(+), 14 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll index 5c985759b78..7e22351ee66 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -395,14 +395,14 @@ Declaration interpretElement( * A callable where there exists a MaD sink model that applies to it. */ class SinkCallable extends Callable { - SinkCallable() { SourceSinkInterpretationInput::sinkElement(this, _, _) } + SinkCallable() { SourceSinkInterpretationInput::sinkElement(this, _, _, _) } } /** * A callable where there exists a MaD source model that applies to it. */ class SourceCallable extends Callable { - SourceCallable() { SourceSinkInterpretationInput::sourceElement(this, _, _) } + SourceCallable() { SourceSinkInterpretationInput::sourceElement(this, _, _, _) } } cached diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 19972a86ab6..f1113e6e437 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -160,20 +160,20 @@ module SourceSinkInterpretationInput implements class Element = Cs::Element; - predicate sourceElement(Element e, string output, string kind) { + predicate sourceElement(Element e, string output, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } - predicate sinkElement(Element e, string input, string kind) { + predicate sinkElement(Element e, string input, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index ee3ac53742a..76f5c8f8840 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -1,5 +1,6 @@ import shared.FlowSummaries import semmle.code.csharp.dataflow.internal.ExternalFlow +import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private::External private class IncludeAllSummarizedCallable extends IncludeSummarizedCallable { IncludeAllSummarizedCallable() { exists(this) } @@ -9,3 +10,19 @@ private class IncludeNeutralSummarizedCallable extends RelevantNeutralCallable { /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ final override string getCallableCsv() { result = asPartialNeutralModel(this) } } + +module TestSourceSinkInput implements TestSourceSinkInputSig { + class RelevantSourceCallable instanceof SourceCallable { + string getCallableCsv() { result = asPartialModel(this) } + + string toString() { result = super.toString() } + } + + class RelevantSinkCallable instanceof SinkCallable { + string getCallableCsv() { result = asPartialModel(this) } + + string toString() { result = super.toString() } + } +} + +import TestSourceSinkOutput diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index f3e840720ab..19a33ec810a 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1468,13 +1468,13 @@ module Make Input> { * Holds if an external source specification exists for `n` with output specification * `output` and kind `kind`. */ - predicate sourceElement(Element n, string output, string kind); + predicate sourceElement(Element n, string output, string kind, Provenance provenance); /** * Holds if an external sink specification exists for `n` with input specification * `input` and kind `kind`. */ - predicate sinkElement(Element n, string input, string kind); + predicate sinkElement(Element n, string input, string kind, Provenance provenance); class SourceOrSinkElement extends Element; @@ -1529,8 +1529,8 @@ module Make Input> { private import SourceSinkInterpretationInput private predicate sourceSinkSpec(string spec) { - sourceElement(_, spec, _) or - sinkElement(_, spec, _) + sourceElement(_, spec, _, _) or + sinkElement(_, spec, _, _) } private module AccessPath = AccessPathSyntax::AccessPath; @@ -1562,7 +1562,7 @@ module Make Input> { InterpretNode ref, SourceSinkAccessPath output, string kind ) { exists(SourceOrSinkElement e | - sourceElement(e, output, kind) and + sourceElement(e, output, kind, _) and if outputNeedsReferenceExt(output.getToken(0)) then e = ref.getCallTarget() else e = ref.asElement() @@ -1576,7 +1576,7 @@ module Make Input> { private predicate sinkElementRef(InterpretNode ref, SourceSinkAccessPath input, string kind) { exists(SourceOrSinkElement e | - sinkElement(e, input, kind) and + sinkElement(e, input, kind, _) and if inputNeedsReferenceExt(input.getToken(0)) then e = ref.getCallTarget() else e = ref.asElement() @@ -1691,6 +1691,63 @@ module Make Input> { interpretInput(input, input.getNumToken(), ref, node) ) } + + signature module TestSourceSinkInputSig { + /** + * A class or source elements relevant for testing. + */ + class RelevantSourceCallable instanceof SourceOrSinkElement { + /** Gets the string representation of this callable used by `source/1`. */ + string getCallableCsv(); + } + + /** + * A class or sink elements relevant for testing. + */ + class RelevantSinkCallable instanceof SourceOrSinkElement { + /** Gets the string representation of this callable used by `source/1`. */ + string getCallableCsv(); + } + } + + /** Provides query predicates for outputting a set of relevant sources and sinks. */ + module TestSourceSinkOutput { + private import TestSourceSinkInput + + /** + * Holds if there exists a relevant source callable with information roughly corresponding to `csv`. + * Used for testing. + * The syntax is: "namespace;type;overrides;name;signature;ext;outputspec;kind;provenance", + * ext is hardcoded to empty. + */ + query predicate source(string csv) { + exists(RelevantSourceCallable c, string output, string kind, Provenance provenance | + sourceElement(c, output, kind, provenance) and + csv = + c.getCallableCsv() // Callable information + + output + ";" // output + + kind + ";" // kind + + provenance // provenance + ) + } + + /** + * Holds if there exists a relevant sink callable with information roughly corresponding to `csv`. + * Used for testing. + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;kind;provenance", + * ext is hardcoded to empty. + */ + query predicate sink(string csv) { + exists(RelevantSinkCallable c, string input, string kind, Provenance provenance | + sinkElement(c, input, kind, provenance) and + csv = + c.getCallableCsv() // Callable information + + input + ";" // input + + kind + ";" // kind + + provenance // provenance + ) + } + } } } @@ -1746,7 +1803,8 @@ module Make Input> { } /** - * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. + * Holds if there exists a relevant summary callable with information roughly corresponding to `csv`. + * Used for testing. * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind;provenance", * ext is hardcoded to empty. */ @@ -1766,7 +1824,8 @@ module Make Input> { } /** - * Holds if a neutral model `csv` exists (semi-colon separated format). Used for testing purposes. + * Holds if there exists a relevant neutral callable with information roughly corresponding to `csv`. + * Used for testing. * The syntax is: "namespace;type;name;signature;kind;provenance"", */ query predicate neutral(string csv) { From f36b48346eaa4343e4dc143cee73b58dfda77004 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 12:50:43 +0000 Subject: [PATCH 142/497] C++: Accept test changes. --- .../ir/range-analysis/SimpleRangeAnalysis_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..cd392210d47 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 @@ -1014,7 +1014,7 @@ void test_overflow() { if ((x + y) <= 512) { range(x); // $ range===2147483647 range(y); // $ range===256 - range(x + y); // $ range===-2147483393 + range(x + y); // $ range=<=2147483903 overflow=+ } } From a97891cbc131bb7fc94fbede286832a675db2cba Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 12:56:15 +0000 Subject: [PATCH 143/497] C++: Add QLDoc to 'getNumberOfBinaryOperands' (and rename it to 'getNumberOfNestedBinaryOperands'). --- .../ir/implementation/raw/internal/TranslatedElement.qll | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index e96959f5a68..d258056f11f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -40,9 +40,14 @@ IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) { result.getTag() = tag } +/** Gets an operand of `binOp`. */ private Expr getAnOperand(BinaryOperation binOp) { result = binOp.getAnOperand() } -private int getNumberOfBinaryOperands(BinaryOperation binOp) { +/** + * Gets the number of nested operands of `binOp`. For example, + * `getNumberOfNestedBinaryOperands((1 + 2) + 3))` is `3`. + */ +private int getNumberOfNestedBinaryOperands(BinaryOperation binOp) { result = count(getAnOperand*(binOp)) } @@ -60,7 +65,7 @@ predicate isIRConstant(Expr expr) { // But to avoid creating an outrageous amount of IR from very large // constant expressions we fall back to constant folding if the operation // has more than 50 operands (i.e., 1 + 2 + 3 + 4 + ... + 50) - if expr instanceof BinaryOperation then getNumberOfBinaryOperands(expr) > 50 else any() + if expr instanceof BinaryOperation then getNumberOfNestedBinaryOperands(expr) > 50 else any() } // Pulled out for performance. See From a88d8b260d516ca279ef83cee4d4b4becf662026 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 13:17:49 +0000 Subject: [PATCH 144/497] C++: Only ignore constant folding for certain binary operations. --- .../raw/internal/TranslatedElement.qll | 24 +- .../library-tests/ir/ir/PrintAST.expected | 386 +++++++++--------- .../library-tests/ir/ir/aliased_ir.expected | 60 +-- cpp/ql/test/library-tests/ir/ir/ir.cpp | 14 +- .../ir/ir/operand_locations.expected | 30 +- .../test/library-tests/ir/ir/raw_ir.expected | 71 +--- 6 files changed, 268 insertions(+), 317 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index d258056f11f..51e3311a9a2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -40,15 +40,25 @@ IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) { result.getTag() = tag } -/** Gets an operand of `binOp`. */ -private Expr getAnOperand(BinaryOperation binOp) { result = binOp.getAnOperand() } +/** Gets an operand of `op`. */ +private Expr getAnOperand(Operation op) { result = op.getAnOperand() } /** - * Gets the number of nested operands of `binOp`. For example, + * Gets the number of nested operands of `op`. For example, * `getNumberOfNestedBinaryOperands((1 + 2) + 3))` is `3`. */ -private int getNumberOfNestedBinaryOperands(BinaryOperation binOp) { - result = count(getAnOperand*(binOp)) +private int getNumberOfNestedBinaryOperands(Operation op) { result = count(getAnOperand*(op)) } + +/** + * Holds if `op` should not be translated to a `ConstantInstruction` as part of + * IR generation, even if the value of `op` is constant. + */ +private predicate ignoreConstantValue(Operation op) { + op instanceof BitwiseAndExpr + or + op instanceof BitwiseOrExpr + or + op instanceof BitwiseXorExpr } /** @@ -58,14 +68,14 @@ private int getNumberOfNestedBinaryOperands(BinaryOperation binOp) { */ predicate isIRConstant(Expr expr) { exists(expr.getValue()) and - // We avoid constant folding binary operations since it's often useful to + // We avoid constant folding certain operations since it's often useful to // mark one of those as a source in dataflow, and if the operation is // constant folded it's not possible to mark its operands as a source (or // sink). // But to avoid creating an outrageous amount of IR from very large // constant expressions we fall back to constant folding if the operation // has more than 50 operands (i.e., 1 + 2 + 3 + 4 + ... + 50) - if expr instanceof BinaryOperation then getNumberOfNestedBinaryOperands(expr) > 50 else any() + if ignoreConstantValue(expr) then getNumberOfNestedBinaryOperands(expr) > 50 else any() } // Pulled out for performance. See diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 11ca89a3b45..18bce41d0b2 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -18674,45 +18674,45 @@ ir.cpp: # 2381| : # 2381| getEntryPoint(): [BlockStmt] { ... } # 2382| getStmt(0): [ReturnStmt] return ... -# 2382| getExpr(): [AddExpr] ... + ... +# 2382| getExpr(): [BitwiseXorExpr] ... ^ ... # 2382| Type = [IntType] int -# 2382| Value = [AddExpr] 2 +# 2382| Value = [BitwiseXorExpr] 3 # 2382| ValueCategory = prvalue # 2382| getLeftOperand(): [Literal] 1 # 2382| Type = [IntType] int # 2382| Value = [Literal] 1 # 2382| ValueCategory = prvalue -# 2382| getRightOperand(): [Literal] 1 +# 2382| getRightOperand(): [Literal] 2 # 2382| Type = [IntType] int -# 2382| Value = [Literal] 1 +# 2382| Value = [Literal] 2 # 2382| ValueCategory = prvalue # 2392| [TopLevelFunction] int large_operation_should_be_constant_folded() # 2392| : # 2392| getEntryPoint(): [BlockStmt] { ... } # 2393| getStmt(0): [ReturnStmt] return ... -# 2393| getExpr(): [AddExpr] ... + ... +# 2393| getExpr(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 64 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 32 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 16 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18722,9 +18722,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18736,19 +18736,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18758,9 +18758,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18772,31 +18772,31 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18806,9 +18806,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18820,19 +18820,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18842,9 +18842,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18856,43 +18856,43 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 16 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18902,9 +18902,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18916,19 +18916,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18938,9 +18938,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18952,31 +18952,31 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -18986,9 +18986,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19000,19 +19000,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19022,9 +19022,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19036,55 +19036,55 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 16 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 16 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 32 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 16 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19094,9 +19094,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19108,19 +19108,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19130,9 +19130,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19144,31 +19144,31 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19178,9 +19178,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19192,19 +19192,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19214,9 +19214,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19228,43 +19228,43 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 16 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19274,9 +19274,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19288,19 +19288,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19310,9 +19310,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19324,31 +19324,31 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 8 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19358,9 +19358,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19372,19 +19372,19 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 4 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [AddExpr] ... + ... +# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19394,9 +19394,9 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [Literal] 1 # 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [AddExpr] ... + ... +# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... # 2393| Type = [IntType] int -# 2393| Value = [AddExpr] 2 +# 2393| Value = [BitwiseXorExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand(): [Literal] 1 # 2393| Type = [IntType] int @@ -19408,47 +19408,47 @@ ir.cpp: # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 2 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 4 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 8 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 16 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 16 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 32 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 32 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue # 2393| getExpr().getFullyConverted(): [ParenthesisExpr] (...) # 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 64 +# 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) 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 2efc51f1bcd..588aa16238b 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -1457,15 +1457,13 @@ ir.cpp: # 43| m43_3(unknown) = InitializeNonLocal : # 43| m43_4(unknown) = Chi : total:m43_2, partial:m43_3 # 44| r44_1(glval) = VariableAddress[x] : -# 44| r44_2(int) = Constant[5] : -# 44| r44_3(int) = Constant[12] : -# 44| r44_4(int) = Add : r44_2, r44_3 -# 44| m44_5(int) = Store[x] : &:r44_1, r44_4 +# 44| r44_2(int) = Constant[17] : +# 44| m44_3(int) = Store[x] : &:r44_1, r44_2 # 45| r45_1(glval) = VariableAddress[y] : # 45| r45_2(short) = Constant[7] : # 45| m45_3(short) = Store[y] : &:r45_1, r45_2 # 46| r46_1(glval) = VariableAddress[x] : -# 46| r46_2(int) = Load[x] : &:r46_1, m44_5 +# 46| r46_2(int) = Load[x] : &:r46_1, m44_3 # 46| r46_3(glval) = VariableAddress[y] : # 46| r46_4(short) = Load[y] : &:r46_3, m45_3 # 46| r46_5(int) = Convert : r46_4 @@ -1474,7 +1472,7 @@ ir.cpp: # 46| r46_8(glval) = VariableAddress[y] : # 46| m46_9(short) = Store[y] : &:r46_8, r46_7 # 47| r47_1(glval) = VariableAddress[x] : -# 47| r47_2(int) = Load[x] : &:r47_1, m44_5 +# 47| r47_2(int) = Load[x] : &:r47_1, m44_3 # 47| r47_3(glval) = VariableAddress[y] : # 47| r47_4(short) = Load[y] : &:r47_3, m46_9 # 47| r47_5(int) = Convert : r47_4 @@ -6104,30 +6102,14 @@ ir.cpp: # 913| m913_6(int) = InitializeParameter[x] : &:r913_5 # 914| r914_1(glval) = VariableAddress[a] : # 914| r914_2(bool) = Constant[1] : -# 914| v914_3(void) = ConditionalBranch : r914_2 -#-----| False -> Block 4 -#-----| True -> Block 2 - -# 914| Block 1 -# 914| r914_4(glval) = VariableAddress[#temp914:12] : -# 914| r914_5(bool) = Constant[1] : -# 914| m914_6(bool) = Store[#temp914:12] : &:r914_4, r914_5 -# 914| r914_7(glval) = VariableAddress[#temp914:12] : -# 914| r914_8(bool) = Load[#temp914:12] : &:r914_7, m914_6 -# 914| m914_9(bool) = Store[a] : &:r914_1, r914_8 -# 915| r915_1(glval) = VariableAddress[b] : -# 915| r915_2(bool) = Constant[1] : -# 915| v915_3(void) = ConditionalBranch : r915_2 -#-----| False -> Block 4 -#-----| True -> Block 3 - -# 914| Block 2 -# 914| r914_10(bool) = Constant[1] : -# 914| v914_11(void) = ConditionalBranch : r914_10 -#-----| False -> Block 4 +# 914| m914_3(bool) = Store[a] : &:r914_1, r914_2 +# 915| r915_1(glval) = VariableAddress[b] : +# 915| r915_2(bool) = Constant[1] : +# 915| v915_3(void) = ConditionalBranch : r915_2 +#-----| False -> Block 2 #-----| True -> Block 1 -# 915| Block 3 +# 915| Block 1 # 915| r915_4(glval) = VariableAddress[x] : # 915| r915_5(int) = Load[x] : &:r915_4, m913_6 # 915| r915_6(glval) = VariableAddress[#temp915:11] : @@ -6140,7 +6122,7 @@ ir.cpp: # 913| v913_8(void) = AliasedUse : m913_3 # 913| v913_9(void) = ExitFunction : -# 913| Block 4 +# 913| Block 2 # 913| v913_10(void) = Unreached : # 949| void OperatorNew() @@ -7736,17 +7718,15 @@ ir.cpp: # 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, m1214_8 # 1215| r1215_6(int) = Constant[3] : -# 1215| r1215_7(int) = Constant[0] : -# 1215| r1215_8(int) = Add : r1215_6, r1215_7 -# 1215| r1215_9(int) = Constant[2] : -# 1215| r1215_10(int) = Constant[1] : -# 1215| r1215_11(int) = Constant[0] : -# 1215| r1215_12(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_8, 3:r1215_9, 4:r1215_10, 5:r1215_11 -# 1215| m1215_13(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_12 +# 1215| r1215_7(int) = Constant[2] : +# 1215| r1215_8(int) = Constant[1] : +# 1215| r1215_9(int) = Constant[0] : +# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 +# 1215| m1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 # 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, m1214_8 # 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_13 +# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_11 # 1216| r1216_5(__attribute((vector_size(16UL))) int) = Add : r1216_2, r1216_4 # 1216| r1216_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| m1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 @@ -15163,8 +15143,8 @@ ir.cpp: # 2381| m2381_4(unknown) = Chi : total:m2381_2, partial:m2381_3 # 2382| r2382_1(glval) = VariableAddress[#return] : # 2382| r2382_2(int) = Constant[1] : -# 2382| r2382_3(int) = Constant[1] : -# 2382| r2382_4(int) = Add : r2382_2, r2382_3 +# 2382| r2382_3(int) = Constant[2] : +# 2382| r2382_4(int) = BitXor : r2382_2, r2382_3 # 2382| m2382_5(int) = Store[#return] : &:r2382_1, r2382_4 # 2381| r2381_5(glval) = VariableAddress[#return] : # 2381| v2381_6(void) = ReturnValue : &:r2381_5, m2382_5 @@ -15178,7 +15158,7 @@ ir.cpp: # 2392| m2392_3(unknown) = InitializeNonLocal : # 2392| m2392_4(unknown) = Chi : total:m2392_2, partial:m2392_3 # 2393| r2393_1(glval) = VariableAddress[#return] : -# 2393| r2393_2(int) = Constant[64] : +# 2393| r2393_2(int) = Constant[0] : # 2393| m2393_3(int) = Store[#return] : &:r2393_1, r2393_2 # 2392| r2392_5(glval) = VariableAddress[#return] : # 2392| v2392_6(void) = ReturnValue : &:r2392_5, m2393_3 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index a195dcd5aa4..2f51b63dff1 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2379,15 +2379,15 @@ namespace return_routine_type { } int small_operation_should_not_be_constant_folded() { - return 1 + 1; + return 1 ^ 2; } -#define BINOP2(x) (x + x) -#define BINOP4(x) (BINOP2(x) + BINOP2(x)) -#define BINOP8(x) (BINOP4(x) + BINOP4(x)) -#define BINOP16(x) (BINOP8(x) + BINOP8(x)) -#define BINOP32(x) (BINOP16(x) + BINOP16(x)) -#define BINOP64(x) (BINOP32(x) + BINOP32(x)) +#define BINOP2(x) (x ^ x) +#define BINOP4(x) (BINOP2(x) ^ BINOP2(x)) +#define BINOP8(x) (BINOP4(x) ^ BINOP4(x)) +#define BINOP16(x) (BINOP8(x) ^ BINOP8(x)) +#define BINOP32(x) (BINOP16(x) ^ BINOP16(x)) +#define BINOP64(x) (BINOP32(x) ^ BINOP32(x)) int large_operation_should_be_constant_folded() { return BINOP64(1); diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 9b9c4888092..add30395130 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1668,15 +1668,13 @@ | ir.cpp:43:6:43:8 | ChiTotal | total:m43_2 | | ir.cpp:43:6:43:8 | SideEffect | m43_3 | | ir.cpp:44:9:44:9 | Address | &:r44_1 | -| ir.cpp:44:13:44:13 | Left | r44_2 | -| ir.cpp:44:13:44:18 | StoreValue | r44_4 | -| ir.cpp:44:17:44:18 | Right | r44_3 | +| ir.cpp:44:13:44:18 | StoreValue | r44_2 | | ir.cpp:45:11:45:11 | Address | &:r45_1 | | ir.cpp:45:15:45:15 | StoreValue | r45_2 | | ir.cpp:46:5:46:5 | Address | &:r46_8 | | ir.cpp:46:9:46:9 | Address | &:r46_1 | | ir.cpp:46:9:46:9 | Left | r46_2 | -| ir.cpp:46:9:46:9 | Load | m44_5 | +| ir.cpp:46:9:46:9 | Load | m44_3 | | ir.cpp:46:9:46:13 | StoreValue | r46_7 | | ir.cpp:46:9:46:13 | Unary | r46_6 | | ir.cpp:46:13:46:13 | Address | &:r46_3 | @@ -1686,7 +1684,7 @@ | ir.cpp:47:5:47:5 | Address | &:r47_7 | | ir.cpp:47:9:47:9 | Address | &:r47_1 | | ir.cpp:47:9:47:9 | Left | r47_2 | -| ir.cpp:47:9:47:9 | Load | m44_5 | +| ir.cpp:47:9:47:9 | Load | m44_3 | | ir.cpp:47:9:47:13 | StoreValue | r47_6 | | ir.cpp:47:13:47:13 | Address | &:r47_3 | | ir.cpp:47:13:47:13 | Load | m46_9 | @@ -5229,13 +5227,7 @@ | ir.cpp:913:6:913:23 | SideEffect | m913_3 | | ir.cpp:913:29:913:29 | Address | &:r913_5 | | ir.cpp:914:8:914:8 | Address | &:r914_1 | -| ir.cpp:914:12:914:15 | Condition | r914_2 | -| ir.cpp:914:12:914:23 | Address | &:r914_4 | -| ir.cpp:914:12:914:23 | Address | &:r914_7 | -| ir.cpp:914:12:914:23 | Load | m914_6 | -| ir.cpp:914:12:914:23 | StoreValue | r914_5 | -| ir.cpp:914:12:914:23 | StoreValue | r914_8 | -| ir.cpp:914:20:914:23 | Condition | r914_10 | +| ir.cpp:914:12:914:23 | StoreValue | r914_2 | | ir.cpp:915:7:915:7 | Address | &:r915_1 | | ir.cpp:915:11:915:16 | Condition | r915_2 | | ir.cpp:915:11:915:24 | Address | &:r915_6 | @@ -6529,26 +6521,24 @@ | ir.cpp:1214:12:1214:12 | Load | m1213_7 | | ir.cpp:1214:12:1214:12 | StoreValue | r1214_2 | | ir.cpp:1215:18:1215:28 | Address | &:r1215_1 | -| ir.cpp:1215:32:1215:78 | Arg(2) | 2:r1215_8 | -| ir.cpp:1215:32:1215:78 | StoreValue | r1215_12 | +| ir.cpp:1215:32:1215:78 | Arg(2) | 2:r1215_6 | +| ir.cpp:1215:32:1215:78 | StoreValue | r1215_10 | | ir.cpp:1215:56:1215:58 | Address | &:r1215_2 | | ir.cpp:1215:56:1215:58 | Arg(0) | 0:r1215_3 | | ir.cpp:1215:56:1215:58 | Load | m1214_8 | | ir.cpp:1215:61:1215:63 | Address | &:r1215_4 | | ir.cpp:1215:61:1215:63 | Arg(1) | 1:r1215_5 | | ir.cpp:1215:61:1215:63 | Load | m1214_8 | -| ir.cpp:1215:66:1215:66 | Left | r1215_6 | -| ir.cpp:1215:68:1215:68 | Right | r1215_7 | -| ir.cpp:1215:71:1215:71 | Arg(3) | 3:r1215_9 | -| ir.cpp:1215:74:1215:74 | Arg(4) | 4:r1215_10 | -| ir.cpp:1215:77:1215:77 | Arg(5) | 5:r1215_11 | +| ir.cpp:1215:71:1215:71 | Arg(3) | 3:r1215_7 | +| ir.cpp:1215:74:1215:74 | Arg(4) | 4:r1215_8 | +| ir.cpp:1215:77:1215:77 | Arg(5) | 5:r1215_9 | | ir.cpp:1216:3:1216:5 | Address | &:r1216_6 | | ir.cpp:1216:9:1216:11 | Address | &:r1216_1 | | ir.cpp:1216:9:1216:11 | Left | r1216_2 | | ir.cpp:1216:9:1216:11 | Load | m1214_8 | | ir.cpp:1216:9:1216:25 | StoreValue | r1216_5 | | ir.cpp:1216:15:1216:25 | Address | &:r1216_3 | -| ir.cpp:1216:15:1216:25 | Load | m1215_13 | +| ir.cpp:1216:15:1216:25 | Load | m1215_11 | | ir.cpp:1216:15:1216:25 | Right | r1216_4 | | ir.cpp:1221:5:1221:21 | Address | &:r1221_7 | | ir.cpp:1221:5:1221:21 | ChiPartial | partial:m1221_3 | 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 1a4c34b9fc7..b721a11e484 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -1357,10 +1357,8 @@ ir.cpp: # 43| mu43_2(unknown) = AliasedDefinition : # 43| mu43_3(unknown) = InitializeNonLocal : # 44| r44_1(glval) = VariableAddress[x] : -# 44| r44_2(int) = Constant[5] : -# 44| r44_3(int) = Constant[12] : -# 44| r44_4(int) = Add : r44_2, r44_3 -# 44| mu44_5(int) = Store[x] : &:r44_1, r44_4 +# 44| r44_2(int) = Constant[17] : +# 44| mu44_3(int) = Store[x] : &:r44_1, r44_2 # 45| r45_1(glval) = VariableAddress[y] : # 45| r45_2(short) = Constant[7] : # 45| mu45_3(short) = Store[y] : &:r45_1, r45_2 @@ -5749,39 +5747,14 @@ ir.cpp: # 913| mu913_5(int) = InitializeParameter[x] : &:r913_4 # 914| r914_1(glval) = VariableAddress[a] : # 914| r914_2(bool) = Constant[1] : -# 914| v914_3(void) = ConditionalBranch : r914_2 -#-----| False -> Block 1 -#-----| True -> Block 4 +# 914| mu914_3(bool) = Store[a] : &:r914_1, r914_2 +# 915| r915_1(glval) = VariableAddress[b] : +# 915| r915_2(bool) = Constant[1] : +# 915| v915_3(void) = ConditionalBranch : r915_2 +#-----| False -> Block 3 +#-----| True -> Block 2 -# 914| Block 1 -# 914| r914_4(glval) = VariableAddress[#temp914:12] : -# 914| r914_5(bool) = Constant[0] : -# 914| mu914_6(bool) = Store[#temp914:12] : &:r914_4, r914_5 -#-----| Goto -> Block 2 - -# 914| Block 2 -# 914| r914_7(glval) = VariableAddress[#temp914:12] : -# 914| r914_8(bool) = Load[#temp914:12] : &:r914_7, ~m? -# 914| mu914_9(bool) = Store[a] : &:r914_1, r914_8 -# 915| r915_1(glval) = VariableAddress[b] : -# 915| r915_2(bool) = Constant[1] : -# 915| v915_3(void) = ConditionalBranch : r915_2 -#-----| False -> Block 7 -#-----| True -> Block 6 - -# 914| Block 3 -# 914| r914_10(glval) = VariableAddress[#temp914:12] : -# 914| r914_11(bool) = Constant[1] : -# 914| mu914_12(bool) = Store[#temp914:12] : &:r914_10, r914_11 -#-----| Goto -> Block 2 - -# 914| Block 4 -# 914| r914_13(bool) = Constant[1] : -# 914| v914_14(void) = ConditionalBranch : r914_13 -#-----| False -> Block 1 -#-----| True -> Block 3 - -# 915| Block 5 +# 915| Block 1 # 915| r915_4(glval) = VariableAddress[#temp915:11] : # 915| r915_5(int) = Load[#temp915:11] : &:r915_4, ~m? # 915| mu915_6(int) = Store[b] : &:r915_1, r915_5 @@ -5790,19 +5763,19 @@ ir.cpp: # 913| v913_7(void) = AliasedUse : ~m? # 913| v913_8(void) = ExitFunction : -# 915| Block 6 +# 915| Block 2 # 915| r915_7(glval) = VariableAddress[x] : # 915| r915_8(int) = Load[x] : &:r915_7, ~m? # 915| r915_9(glval) = VariableAddress[#temp915:11] : # 915| mu915_10(int) = Store[#temp915:11] : &:r915_9, r915_8 -#-----| Goto -> Block 5 +#-----| Goto -> Block 1 -# 915| Block 7 +# 915| Block 3 # 915| r915_11(glval) = VariableAddress[x] : # 915| r915_12(int) = Load[x] : &:r915_11, ~m? # 915| r915_13(glval) = VariableAddress[#temp915:11] : # 915| mu915_14(int) = Store[#temp915:11] : &:r915_13, r915_12 -#-----| Goto -> Block 5 +#-----| Goto -> Block 1 # 949| void OperatorNew() # 949| Block 0 @@ -7293,13 +7266,11 @@ ir.cpp: # 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, ~m? # 1215| r1215_6(int) = Constant[3] : -# 1215| r1215_7(int) = Constant[0] : -# 1215| r1215_8(int) = Add : r1215_6, r1215_7 -# 1215| r1215_9(int) = Constant[2] : -# 1215| r1215_10(int) = Constant[1] : -# 1215| r1215_11(int) = Constant[0] : -# 1215| r1215_12(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_8, 3:r1215_9, 4:r1215_10, 5:r1215_11 -# 1215| mu1215_13(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_12 +# 1215| r1215_7(int) = Constant[2] : +# 1215| r1215_8(int) = Constant[1] : +# 1215| r1215_9(int) = Constant[0] : +# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 +# 1215| mu1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 # 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : # 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, ~m? # 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : @@ -14013,8 +13984,8 @@ ir.cpp: # 2381| mu2381_3(unknown) = InitializeNonLocal : # 2382| r2382_1(glval) = VariableAddress[#return] : # 2382| r2382_2(int) = Constant[1] : -# 2382| r2382_3(int) = Constant[1] : -# 2382| r2382_4(int) = Add : r2382_2, r2382_3 +# 2382| r2382_3(int) = Constant[2] : +# 2382| r2382_4(int) = BitXor : r2382_2, r2382_3 # 2382| mu2382_5(int) = Store[#return] : &:r2382_1, r2382_4 # 2381| r2381_4(glval) = VariableAddress[#return] : # 2381| v2381_5(void) = ReturnValue : &:r2381_4, ~m? @@ -14027,7 +13998,7 @@ ir.cpp: # 2392| mu2392_2(unknown) = AliasedDefinition : # 2392| mu2392_3(unknown) = InitializeNonLocal : # 2393| r2393_1(glval) = VariableAddress[#return] : -# 2393| r2393_2(int) = Constant[64] : +# 2393| r2393_2(int) = Constant[0] : # 2393| mu2393_3(int) = Store[#return] : &:r2393_1, r2393_2 # 2392| r2392_4(glval) = VariableAddress[#return] : # 2392| v2392_5(void) = ReturnValue : &:r2392_4, ~m? From 54262a53c30a952ebebdd1be7a3028807db7faa2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 13:18:01 +0000 Subject: [PATCH 145/497] Revert "C++: Accept test changes." This reverts commit f36b48346eaa4343e4dc143cee73b58dfda77004. --- .../ir/range-analysis/SimpleRangeAnalysis_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cd392210d47..7b359a046d8 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 @@ -1014,7 +1014,7 @@ void test_overflow() { if ((x + y) <= 512) { range(x); // $ range===2147483647 range(y); // $ range===256 - range(x + y); // $ range=<=2147483903 overflow=+ + range(x + y); // $ range===-2147483393 } } From 5b37ee4ec79ee9df2fc53d86712e218d2a634982 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Mar 2024 11:37:53 +0100 Subject: [PATCH 146/497] Re-factor TestOutput into a param module. --- .../dataflow/library/FlowSummaries.ql | 17 ++-- .../dataflow/library/FlowSummariesFiltered.ql | 12 ++- .../EntityFramework/FlowSummaries.ql | 8 +- csharp/ql/test/shared/FlowSummaries.qll | 7 +- .../dataflow/internal/FlowSummaryImpl.qll | 77 ++++++++++++------- 5 files changed, 80 insertions(+), 41 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index 76f5c8f8840..b09721b4f3f 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -1,14 +1,17 @@ import shared.FlowSummaries import semmle.code.csharp.dataflow.internal.ExternalFlow -import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private::External +import External -private class IncludeAllSummarizedCallable extends IncludeSummarizedCallable { - IncludeAllSummarizedCallable() { exists(this) } +module TestSummaryInput implements TestSummaryInputSig { + class RelevantSummarizedCallable = IncludeSummarizedCallable; } -private class IncludeNeutralSummarizedCallable extends RelevantNeutralCallable { - /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ - final override string getCallableCsv() { result = asPartialNeutralModel(this) } +module TestNeutralInput implements TestNeutralInputSig { + class RelevantNeutralCallable instanceof NeutralCallable { + final string getCallableCsv() { result = asPartialNeutralModel(this) } + + string toString() { result = super.toString() } + } } module TestSourceSinkInput implements TestSourceSinkInputSig { @@ -25,4 +28,6 @@ module TestSourceSinkInput implements TestSourceSinkInputSig { } } +import TestSummaryOutput +import TestNeutralOutput import TestSourceSinkOutput diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql index c3584afcbc3..fe3a931b451 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql @@ -1,9 +1,13 @@ import shared.FlowSummaries private import semmle.code.csharp.dataflow.internal.ExternalFlow -class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { - IncludeFilteredSummarizedCallable() { exists(this) } +module TestSummaryInput implements TestSummaryInputSig { + class RelevantSummarizedCallable = IncludeSummarizedCallable; +} +import TestSummaryOutput + +class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable { /** * Holds if flow is propagated between `input` and `output` and * if there is no summary for a callable in a `base` class or interface @@ -12,10 +16,10 @@ class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { override predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - super.propagatesFlow(input, output, preservesValue) and + this.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and not exists(IncludeSummarizedCallable rsc | isBaseCallableOrPrototype(rsc) and - rsc.propagatesFlow(input, output, preservesValue) and + rsc.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and this.(UnboundCallable).overridesOrImplementsUnbound(rsc) ) } diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql index bef72ca30a1..b5f0aa90ed4 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql @@ -3,8 +3,12 @@ import shared.FlowSummaries import semmle.code.csharp.frameworks.EntityFramework::EntityFramework import semmle.code.csharp.dataflow.internal.ExternalFlow as ExternalFlow -private class IncludeEFSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable -{ } +module TestSummaryInput implements TestSummaryInputSig { + class RelevantSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable + { } +} + +import TestSummaryOutput query predicate sourceNode(DataFlow::Node node, string kind) { ExternalFlow::sourceNode(node, kind) diff --git a/csharp/ql/test/shared/FlowSummaries.qll b/csharp/ql/test/shared/FlowSummaries.qll index 83a1530b028..39028ef2df7 100644 --- a/csharp/ql/test/shared/FlowSummaries.qll +++ b/csharp/ql/test/shared/FlowSummaries.qll @@ -1,13 +1,14 @@ import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Public -import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private::TestOutput private import semmle.code.csharp.dataflow.internal.ExternalFlow -abstract class IncludeSummarizedCallable extends RelevantSummarizedCallable { +class IncludeSummarizedCallable instanceof SummarizedCallableImpl { IncludeSummarizedCallable() { [this.(Modifiable), this.(Accessor).getDeclaration()].isEffectivelyPublic() } /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ - final override string getCallableCsv() { result = asPartialModel(this) } + final string getCallableCsv() { result = asPartialModel(this) } + + string toString() { result = super.toString() } } diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 19a33ec810a..9d059366513 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1751,32 +1751,31 @@ module Make Input> { } } - /** Provides a query predicate for outputting a set of relevant flow summaries. */ - module TestOutput { - final private class SummarizedCallableImplFinal = SummarizedCallableImpl; - - /** A flow summary to include in the `summary/1` query predicate. */ - abstract class RelevantSummarizedCallable extends SummarizedCallableImplFinal { + signature module TestSummaryInputSig { + /** + * A class of callables where the flow summary should be included + * in the `summary/1` query predicate. + */ + class RelevantSummarizedCallable instanceof SummarizedCallableImpl { /** Gets the string representation of this callable used by `summary/1`. */ - abstract string getCallableCsv(); + string getCallableCsv(); + } + } + /** Provides a query predicate for outputting a set of relevant flow summaries. */ + module TestSummaryOutput { + private import TestInput + + final class RelevantSummarizedCallableFinal = TestInput::RelevantSummarizedCallable; + + class RelevantSummarizedCallable extends RelevantSummarizedCallableFinal instanceof SummarizedCallableImpl + { /** Holds if flow is propagated between `input` and `output`. */ predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { super.propagatesFlow(input, output, preservesValue) } - } - - /** A model to include in the `neutral/1` query predicate. */ - abstract class RelevantNeutralCallable instanceof NeutralCallable { - /** Gets the string representation of this callable used by `neutral/1`. */ - abstract string getCallableCsv(); - - /** - * Gets the kind of the neutral. - */ - string getKind() { result = super.getKind() } string toString() { result = super.toString() } } @@ -1795,13 +1794,6 @@ module Make Input> { c.hasProvenance(result) } - private string renderProvenanceNeutral(NeutralCallable c) { - exists(Provenance p | p.isManual() and c.hasProvenance(p) and result = p.toString()) - or - not c.hasManualModel() and - c.hasProvenance(result) - } - /** * Holds if there exists a relevant summary callable with information roughly corresponding to `csv`. * Used for testing. @@ -1822,6 +1814,39 @@ module Make Input> { + renderProvenance(c) // provenance ) } + } + + signature module TestNeutralInputSig { + /** + * A class of callables where the neutral model should be included + * in the `neutral/1` query predicate. + */ + class RelevantNeutralCallable instanceof NeutralCallable { + /** Gets the string representation of this callable used by `neutral/1`. */ + string getCallableCsv(); + } + } + + module TestNeutralOutput { + private import TestInput + + final class RelevantNeutralCallableFinal = TestInput::RelevantNeutralCallable; + + class RelevantNeutralCallable extends RelevantNeutralCallableFinal instanceof NeutralCallable { + /** + * Gets the kind of the neutral. + */ + string getKind() { result = super.getKind() } + + string toString() { result = super.toString() } + } + + private string renderProvenance(NeutralCallable c) { + exists(Provenance p | p.isManual() and c.hasProvenance(p) and result = p.toString()) + or + not c.hasManualModel() and + c.hasProvenance(result) + } /** * Holds if there exists a relevant neutral callable with information roughly corresponding to `csv`. @@ -1833,7 +1858,7 @@ module Make Input> { csv = c.getCallableCsv() // Callable information + c.getKind() + ";" // kind - + renderProvenanceNeutral(c) // provenance + + renderProvenance(c) // provenance ) } } From e32902ad47df61966fd0888c380dae5010afc255 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Mar 2024 15:39:45 +0100 Subject: [PATCH 147/497] C#: Update source expected test output. --- .../dataflow/library/FlowSummaries.expected | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index fc02c1916a8..af6a55c64f7 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1,3 +1,80 @@ +source +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;ReturnValue;environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;ReturnValue;environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];environment;manual | +| Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;ReturnValue;environment;manual | +| Microsoft.Win32;Registry;false;GetValue;(System.String,System.String,System.Object);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetSubKeyNames;();;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String,System.Object);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValue;(System.String,System.Object,Microsoft.Win32.RegistryValueOptions);;ReturnValue;windows-registry;manual | +| Microsoft.Win32;RegistryKey;false;GetValueNames;();;ReturnValue;windows-registry;manual | +| System.IO;File;false;AppendText;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String,System.Int32);;ReturnValue;file-write;manual | +| System.IO;File;false;Create;(System.String,System.Int32,System.IO.FileOptions);;ReturnValue;file-write;manual | +| System.IO;File;false;CreateText;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;File;false;OpenWrite;(System.String);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;AppendText;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Create;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;CreateText;();;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;OpenWrite;();;ReturnValue;file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[this];file;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.IO;FileStream;false;FileStream;(System.String,System.IO.FileStreamOptions);;Argument[this];file;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean,System.Text.Encoding);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Boolean,System.Text.Encoding,System.Int32);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.IO;StreamWriter;false;StreamWriter;(System.String,System.Text.Encoding,System.IO.FileStreamOptions);;Argument[this];file-write;manual | +| System.Net.Sockets;TcpClient;false;GetStream;();;ReturnValue;remote;manual | +| System;Console;false;Read;();;ReturnValue;local;manual | +| System;Console;false;ReadKey;();;ReturnValue;local;manual | +| System;Console;false;ReadKey;(System.Boolean);;ReturnValue;local;manual | +| System;Console;false;ReadLine;();;ReturnValue;local;manual | +| System;Environment;false;ExpandEnvironmentVariables;(System.String);;ReturnValue;environment;manual | +| System;Environment;false;GetCommandLineArgs;();;ReturnValue;commandargs;manual | +| System;Environment;false;GetEnvironmentVariable;(System.String);;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariable;(System.String,System.EnvironmentVariableTarget);;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariables;();;ReturnValue;environment;manual | +| System;Environment;false;GetEnvironmentVariables;(System.EnvironmentVariableTarget);;ReturnValue;environment;manual | +| System;Environment;false;get_CommandLine;();;ReturnValue;commandargs;manual | summary | Dapper;CustomPropertyTypeMap;false;CustomPropertyTypeMap;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;DynamicParameters;false;Output;(T,System.Linq.Expressions.Expression>,System.Nullable,System.Nullable);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | From b39842501adfea160697dfe6dab99aa0861740ef Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Mar 2024 15:50:01 +0100 Subject: [PATCH 148/497] C#: Update sink test expected output. --- .../dataflow/library/FlowSummaries.expected | 533 ++++++++++++++++++ 1 file changed, 533 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index af6a55c64f7..30396dbf410 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -75,6 +75,539 @@ source | System;Environment;false;GetEnvironmentVariables;();;ReturnValue;environment;manual | | System;Environment;false;GetEnvironmentVariables;(System.EnvironmentVariableTarget);;ReturnValue;environment;manual | | System;Environment;false;get_CommandLine;();;ReturnValue;commandargs;manual | +sink +| Dapper;SqlMapper;false;Execute;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[2];sql-injection;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRaw;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalDatabaseFacadeExtensions;false;ExecuteSqlRawAsync;(Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| Microsoft.EntityFrameworkCore;RelationalQueryableExtensions;false;FromSqlRaw;(Microsoft.EntityFrameworkCore.DbSet,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;BackgroundMqClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;InMemoryMessageQueueClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageProducer;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack.Messaging;RedisMessageQueueClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;IUntypedSqlExpression;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Column;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnDistinct;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ColumnLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Dictionary;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;ExecuteNonQuery;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Exists;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Lookup;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Scalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Select;(System.Data.IDbConnection,System.Type,System.String,System.Object);;Argument[2];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SelectLazy;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SelectNonDefaults;(System.Data.IDbConnection,System.String,T);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;Single;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlColumn;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Action);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlList;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApi;false;SqlScalar;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ColumnDistinctAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;DictionaryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExecuteNonQueryAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ExistsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;KeyValuePairsAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;LookupAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;ScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SelectNonDefaultsAsync;(System.Data.IDbConnection,System.String,T,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlColumnAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Action,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlListAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadApiAsync;false;SqlScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Collections.Generic.IEnumerable);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApi;false;RowCount;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteReadExpressionsApiAsync;false;RowCountAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Collections.Generic.Dictionary);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApi;false;ExecuteSql;(System.Data.IDbConnection,System.String,System.Object);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Object,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;OrmLiteWriteApiAsync;false;ExecuteSqlAsync;(System.Data.IDbConnection,System.String,System.Threading.CancellationToken);;Argument[1];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeGroupBy;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeHaving;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeOrderBy;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeSelect;(System.String,System.Boolean);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;SqlExpression;true;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeAnd;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeFrom;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeOr;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeSelect;(System.String);;Argument[0];sql-injection;manual | +| ServiceStack.OrmLite;UntypedSqlExpressionProxy;false;UnsafeWhere;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| ServiceStack.Redis;IRedisClient;true;Custom;(System.Object[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLua;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsInt;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsList;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;ExecLuaAsString;(System.String,System.String[],System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClient;true;LoadLuaScript;(System.String);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;CustomAsync;(System.Object[],System.Threading.CancellationToken);;Argument[0].Element;code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsIntAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsListAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsStringAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[]);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;ExecLuaAsync;(System.String,System.String[],System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Redis;IRedisClientAsync;true;LoadLuaScriptAsync;(System.String,System.Threading.CancellationToken);;Argument[0];code-injection;manual | +| ServiceStack.Testing;MockRestGateway;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack.Testing;MockRestGateway;false;Send;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;CachedServiceClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;EncryptedServiceClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IOneWayClient;true;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClient;true;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientAsync;true;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestClientSync;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGateway;true;Send;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IRestGatewayAsync;true;SendAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGateway;true;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGateway;true;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;IServiceGatewayAsync;true;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;InProcessServiceGateway;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;JsonApiClient;false;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;DownloadBytes;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;DownloadBytesAsync;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;Publish;(ServiceStack.Messaging.IMessage);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;Publish;(T);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,ServiceStack.IReturnVoid);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,ServiceStack.IReturn);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethod;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.Object,System.Threading.CancellationToken);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;CustomMethodAsync;(System.String,System.String,System.Object,System.Threading.CancellationToken);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Delete;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;DeleteAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Get;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;GetAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Head;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Head;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Patch;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PatchAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Post;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PostAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(ServiceStack.IReturnVoid);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(ServiceStack.IReturn);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Put;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(ServiceStack.IReturnVoid,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(ServiceStack.IReturn,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;PutAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;Send;(System.String,System.String,System.Object);;Argument[2];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAllOneWay;(System.Collections.Generic.IEnumerable);;Argument[1].Element;file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendOneWay;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceClientBase;true;SendOneWay;(System.String,System.Object);;Argument[1];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;Publish;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;PublishAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;Send;(System.Object);;Argument[0];file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAll;(System.Collections.Generic.IEnumerable);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAllAsync;(System.Collections.Generic.IEnumerable,System.Threading.CancellationToken);;Argument[0].Element;file-content-store;manual | +| ServiceStack;ServiceGatewayFactoryBase;false;SendAsync;(System.Object,System.Threading.CancellationToken);;Argument[0];file-content-store;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommand;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommand;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.Data.Entity.TransactionalBehavior,System.String,System.Threading.CancellationToken,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;ExecuteSqlCommandAsync;(System.String,System.Threading.CancellationToken,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;Database;false;SqlQuery;(System.Type,System.String,System.Object[]);;Argument[1];sql-injection;manual | +| System.Data.Entity;Database;false;SqlQuery;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.Entity;DbSet;true;SqlQuery;(System.String,System.Object[]);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlCommand;false;SqlCommand;(System.String,System.Data.SqlClient.SqlConnection,System.Data.SqlClient.SqlTransaction);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.Data.SqlClient.SqlCommand);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.Data.SqlClient.SqlConnection);;Argument[0];sql-injection;manual | +| System.Data.SqlClient;SqlDataAdapter;false;SqlDataAdapter;(System.String,System.String);;Argument[0];sql-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.Net.Http.Headers.MediaTypeHeaderValue);;Argument[0];js-injection;manual | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.String);;Argument[0];js-injection;df-generated | +| System.Net.Http;StringContent;false;StringContent;(System.String,System.Text.Encoding,System.String);;Argument[0];js-injection;manual | +| System.Security.Cryptography;AesCng;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCng;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesCng;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCng;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesCng;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;AesCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;AesManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;AesManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;AesManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;DES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;DES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;DESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;RC2CryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;RijndaelManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;RijndaelManaged;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;SymmetricAlgorithm;true;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;SymmetricAlgorithm;true;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;TripleDES;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDESCng;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCng;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;TripleDESCng;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCng;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;TripleDESCng;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;();;Argument[this];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateDecryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-decryptor;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;();;Argument[this];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;CreateEncryptor;(System.Byte[],System.Byte[]);;Argument[0];encryption-encryptor;manual | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;df-generated | +| System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0];encryption-keyprop;manual | +| System.Web;HttpResponse;false;Write;(System.Object);;Argument[0];html-injection;manual | +| System.Web;HttpResponse;false;Write;(System.String);;Argument[0];html-injection;manual | +| System.Web;HttpResponse;false;WriteFile;(System.String);;Argument[0];html-injection;manual | summary | Dapper;CustomPropertyTypeMap;false;CustomPropertyTypeMap;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;DynamicParameters;false;Output;(T,System.Linq.Expressions.Expression>,System.Nullable,System.Nullable);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | From d24f032d976778c25cee1ea74efb5ebbf9acc54d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 18 Mar 2024 12:54:04 +0100 Subject: [PATCH 149/497] C#: Update other tests. --- .../dataflow/library/FlowSummariesFiltered.expected | 2 -- .../frameworks/EntityFramework/FlowSummaries.expected | 1 - 2 files changed, 3 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 4dec1bdd7d1..cf17fed3269 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -1,4 +1,3 @@ -summary | Dapper;CustomPropertyTypeMap;false;CustomPropertyTypeMap;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;DynamicParameters;false;Output;(T,System.Linq.Expressions.Expression>,System.Nullable,System.Nullable);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;GridReader;(System.Data.IDbCommand,System.Data.Common.DbDataReader,Dapper.SqlMapper+Identity,System.Action,System.Object,System.Boolean,System.Threading.CancellationToken);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -16125,4 +16124,3 @@ summary | System;ValueTuple;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System;ValueTuple;false;ValueTuple;(T1);;Argument[0];Argument[this].Field[System.ValueTuple`1.Item1];value;manual | | System;ValueTuple;false;get_Item;(System.Int32);;Argument[this].Field[System.ValueTuple`1.Item1];ReturnValue;value;manual | -neutral diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected index 8522487dff7..db1bacefb33 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected @@ -170,7 +170,6 @@ summary | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | -neutral sourceNode sinkNode | EntityFrameworkCore.cs:72:36:72:40 | "sql" | sql-injection | From 70c674494409c4d29563d35a34fbbc6c01abedaa Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 18 Mar 2024 13:04:45 +0100 Subject: [PATCH 150/497] Java/Go/Swift: Sync changes. --- go/ql/lib/semmle/go/dataflow/ExternalFlow.qll | 4 ++-- .../semmle/go/dataflow/internal/FlowSummaryImpl.qll | 12 ++++++++---- .../code/java/dataflow/internal/FlowSummaryImpl.qll | 8 ++++---- .../modeleditor/FrameworkModeEndpointsQuery.qll | 4 ++-- .../swift/dataflow/internal/FlowSummaryImpl.qll | 12 ++++++++---- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index cacad869509..ba5270483fc 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -299,8 +299,8 @@ predicate hasExternalSpecification(Function f) { f = any(SummarizedCallable sc).asFunction() or exists(SourceSinkInterpretationInput::SourceOrSinkElement e | f = e.asEntity() | - SourceSinkInterpretationInput::sourceElement(e, _, _) or - SourceSinkInterpretationInput::sinkElement(e, _, _) + SourceSinkInterpretationInput::sourceElement(e, _, _, _) or + SourceSinkInterpretationInput::sinkElement(e, _, _, _) ) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index cbf33afff25..1c7ef2e362c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -103,11 +103,13 @@ module SourceSinkInterpretationInput implements * Holds if an external source specification exists for `e` with output specification * `output`, kind `kind`, and provenance `provenance`. */ - predicate sourceElement(SourceOrSinkElement e, string output, string kind) { + predicate sourceElement( + SourceOrSinkElement e, string output, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(package, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } @@ -116,11 +118,13 @@ module SourceSinkInterpretationInput implements * Holds if an external sink specification exists for `e` with input specification * `input`, kind `kind` and provenance `provenance`. */ - predicate sinkElement(SourceOrSinkElement e, string input, string kind) { + predicate sinkElement( + SourceOrSinkElement e, string input, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index d5364567d88..0fbe7c3a1d1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -192,12 +192,12 @@ module SourceSinkInterpretationInput implements class Element = J::Element; - predicate sourceElement(Element e, string output, string kind) { + predicate sourceElement(Element e, string output, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, SourceOrSinkElement baseSource, string originalOutput | - sourceModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, originalOutput, kind, provenance) and baseSource = interpretElement(namespace, type, subtypes, name, signature, ext) and ( e = baseSource and output = originalOutput @@ -207,12 +207,12 @@ module SourceSinkInterpretationInput implements ) } - predicate sinkElement(Element e, string input, string kind) { + predicate sinkElement(Element e, string input, string kind, Public::Provenance provenance) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext, SourceOrSinkElement baseSink, string originalInput | - sinkModel(namespace, type, subtypes, name, signature, ext, originalInput, kind, _) and + sinkModel(namespace, type, subtypes, name, signature, ext, originalInput, kind, provenance) and baseSink = interpretElement(namespace, type, subtypes, name, signature, ext) and ( e = baseSink and originalInput = input diff --git a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll index d8af480c6d3..76c727a4bf5 100644 --- a/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll +++ b/java/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll @@ -8,7 +8,7 @@ private import ModelEditor * A class of effectively public callables from source code. */ class PublicEndpointFromSource extends Endpoint, ModelApi { - override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _) } + override predicate isSource() { SourceSinkInterpretationInput::sourceElement(this, _, _, _) } - override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _) } + override predicate isSink() { SourceSinkInterpretationInput::sinkElement(this, _, _, _) } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 1151a7aeec8..0a8c8605472 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -119,11 +119,13 @@ module SourceSinkInterpretationInput implements * Holds if an external source specification exists for `e` with output specification * `output`, kind `kind`, and provenance `provenance`. */ - predicate sourceElement(SourceOrSinkElement e, string output, string kind) { + predicate sourceElement( + SourceOrSinkElement e, string output, string kind, Public::Provenance provenance + ) { exists( string namespace, string type, boolean subtypes, string name, string signature, string ext | - sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, _) and + sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance) and e = interpretElement(namespace, type, subtypes, name, signature, ext) ) } @@ -132,11 +134,13 @@ module SourceSinkInterpretationInput implements * Holds if an external sink specification exists for `e` with input specification * `input`, kind `kind` and provenance `provenance`. */ - predicate sinkElement(SourceOrSinkElement e, string input, string kind) { + predicate sinkElement( + SourceOrSinkElement e, string input, string kind, Public::Provenance provenance + ) { exists( string package, string type, boolean subtypes, string name, string signature, string ext | - sinkModel(package, type, subtypes, name, signature, ext, input, kind, _) and + sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance) and e = interpretElement(package, type, subtypes, name, signature, ext) ) } From 7371f5e508451ee8044500eeb92e9d7101ac33db Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 19 Mar 2024 13:33:49 +0000 Subject: [PATCH 151/497] Provenance should be "df-manual" --- java/ql/lib/ext/java.lang.model.yml | 2 +- java/ql/lib/ext/java.util.model.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 92f0a7a0805..8bcfa7d242d 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -114,7 +114,7 @@ extensions: - ["java.lang", "String", False, "indent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "intern", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "join", "", "", "Argument[0..1]", "ReturnValue", "taint", "manual"] - - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue.Element", "taint", "df-generated"] + - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue.Element", "taint", "df-manual"] - ["java.lang", "String", False, "repeat", "(int)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.lang", "String", False, "replace", "", "", "Argument[1]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index fe4958856d3..e2617815008 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -527,11 +527,11 @@ extensions: - ["java.util", "Optional", "isPresent", "()", "summary", "manual"] - ["java.util", "Random", "nextInt", "(int)", "summary", "manual"] - ["java.util", "ResourceBundle", "getBundle", "", "summary", "df-manual"] - - ["java.util", "Scanner", "delimiter", "()", "summary", "df-generated"] - - ["java.util", "Scanner", "hasNext", "(Pattern)", "summary", "df-generated"] - - ["java.util", "Scanner", "hasNext", "(String)", "summary", "df-generated"] - - ["java.util", "Scanner", "ioException", "()", "summary", "df-generated"] - - ["java.util", "Scanner", "locale", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "delimiter", "()", "summary", "df-manual"] + - ["java.util", "Scanner", "hasNext", "(Pattern)", "summary", "df-manual"] + - ["java.util", "Scanner", "hasNext", "(String)", "summary", "df-manual"] + - ["java.util", "Scanner", "ioException", "()", "summary", "df-manual"] + - ["java.util", "Scanner", "locale", "()", "summary", "df-manual"] - ["java.util", "Set", "contains", "(Object)", "summary", "manual"] - ["java.util", "Set", "isEmpty", "()", "summary", "manual"] - ["java.util", "Set", "size", "()", "summary", "manual"] From ee3e38f0eb57fe121b1ad358f3f86d93e6b60afe Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Mar 2024 14:35:00 +0100 Subject: [PATCH 152/497] Simplify test interface in `FlowSummaryImpl.qll` --- .../dataflow/library/FlowSummaries.ql | 34 ++---- .../dataflow/library/FlowSummariesFiltered.ql | 12 +-- csharp/ql/test/shared/FlowSummaries.qll | 10 +- .../dataflow/internal/FlowSummaryImpl.qll | 101 +++++------------- 4 files changed, 51 insertions(+), 106 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index b09721b4f3f..856ea6d99e9 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -2,32 +2,20 @@ import shared.FlowSummaries import semmle.code.csharp.dataflow.internal.ExternalFlow import External -module TestSummaryInput implements TestSummaryInputSig { - class RelevantSummarizedCallable = IncludeSummarizedCallable; +final private class NeutralCallableFinal = NeutralCallable; + +class RelevantNeutralCallable extends NeutralCallableFinal { + final string getCallableCsv() { result = asPartialNeutralModel(this) } } -module TestNeutralInput implements TestNeutralInputSig { - class RelevantNeutralCallable instanceof NeutralCallable { - final string getCallableCsv() { result = asPartialNeutralModel(this) } - - string toString() { result = super.toString() } - } +class RelevantSourceCallable extends SourceCallable { + string getCallableCsv() { result = asPartialModel(this) } } -module TestSourceSinkInput implements TestSourceSinkInputSig { - class RelevantSourceCallable instanceof SourceCallable { - string getCallableCsv() { result = asPartialModel(this) } - - string toString() { result = super.toString() } - } - - class RelevantSinkCallable instanceof SinkCallable { - string getCallableCsv() { result = asPartialModel(this) } - - string toString() { result = super.toString() } - } +class RelevantSinkCallable extends SinkCallable { + string getCallableCsv() { result = asPartialModel(this) } } -import TestSummaryOutput -import TestNeutralOutput -import TestSourceSinkOutput +import TestSummaryOutput +import TestNeutralOutput +import TestSourceSinkOutput diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql index fe3a931b451..5bbb7ec0c6f 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql @@ -1,13 +1,7 @@ import shared.FlowSummaries private import semmle.code.csharp.dataflow.internal.ExternalFlow -module TestSummaryInput implements TestSummaryInputSig { - class RelevantSummarizedCallable = IncludeSummarizedCallable; -} - -import TestSummaryOutput - -class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable { +class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { /** * Holds if flow is propagated between `input` and `output` and * if there is no summary for a callable in a `base` class or interface @@ -16,7 +10,7 @@ class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable { override predicate relevantSummary( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - this.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and + this.propagatesFlow(input, output, preservesValue) and not exists(IncludeSummarizedCallable rsc | isBaseCallableOrPrototype(rsc) and rsc.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and @@ -24,3 +18,5 @@ class IncludeFilteredSummarizedCallable extends RelevantSummarizedCallable { ) } } + +import TestSummaryOutput diff --git a/csharp/ql/test/shared/FlowSummaries.qll b/csharp/ql/test/shared/FlowSummaries.qll index 39028ef2df7..b68966afa34 100644 --- a/csharp/ql/test/shared/FlowSummaries.qll +++ b/csharp/ql/test/shared/FlowSummaries.qll @@ -2,7 +2,9 @@ import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Public private import semmle.code.csharp.dataflow.internal.ExternalFlow -class IncludeSummarizedCallable instanceof SummarizedCallableImpl { +final private class SummarizedCallableImplFinal = SummarizedCallableImpl; + +class IncludeSummarizedCallable extends SummarizedCallableImplFinal { IncludeSummarizedCallable() { [this.(Modifiable), this.(Accessor).getDeclaration()].isEffectivelyPublic() } @@ -10,5 +12,11 @@ class IncludeSummarizedCallable instanceof SummarizedCallableImpl { /** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */ final string getCallableCsv() { result = asPartialModel(this) } + predicate relevantSummary( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + this.propagatesFlow(input, output, preservesValue) + } + string toString() { result = super.toString() } } diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 9d059366513..48a56890e78 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1692,28 +1692,16 @@ module Make Input> { ) } - signature module TestSourceSinkInputSig { - /** - * A class or source elements relevant for testing. - */ - class RelevantSourceCallable instanceof SourceOrSinkElement { - /** Gets the string representation of this callable used by `source/1`. */ - string getCallableCsv(); - } - - /** - * A class or sink elements relevant for testing. - */ - class RelevantSinkCallable instanceof SourceOrSinkElement { - /** Gets the string representation of this callable used by `source/1`. */ - string getCallableCsv(); - } + /** A source or sink relevant for testing. */ + signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement { + /** Gets the string representation of this callable used by `source/1` or `sink/1`. */ + string getCallableCsv(); } /** Provides query predicates for outputting a set of relevant sources and sinks. */ - module TestSourceSinkOutput { - private import TestSourceSinkInput - + module TestSourceSinkOutput< + RelevantSourceOrSinkElementSig RelevantSource, RelevantSourceOrSinkElementSig RelevantSink> + { /** * Holds if there exists a relevant source callable with information roughly corresponding to `csv`. * Used for testing. @@ -1721,10 +1709,10 @@ module Make Input> { * ext is hardcoded to empty. */ query predicate source(string csv) { - exists(RelevantSourceCallable c, string output, string kind, Provenance provenance | - sourceElement(c, output, kind, provenance) and + exists(RelevantSource s, string output, string kind, Provenance provenance | + sourceElement(s, output, kind, provenance) and csv = - c.getCallableCsv() // Callable information + s.getCallableCsv() // Callable information + output + ";" // output + kind + ";" // kind + provenance // provenance @@ -1738,10 +1726,10 @@ module Make Input> { * ext is hardcoded to empty. */ query predicate sink(string csv) { - exists(RelevantSinkCallable c, string input, string kind, Provenance provenance | - sinkElement(c, input, kind, provenance) and + exists(RelevantSink s, string input, string kind, Provenance provenance | + sinkElement(s, input, kind, provenance) and csv = - c.getCallableCsv() // Callable information + s.getCallableCsv() // Callable information + input + ";" // input + kind + ";" // kind + provenance // provenance @@ -1751,35 +1739,18 @@ module Make Input> { } } - signature module TestSummaryInputSig { - /** - * A class of callables where the flow summary should be included - * in the `summary/1` query predicate. - */ - class RelevantSummarizedCallable instanceof SummarizedCallableImpl { - /** Gets the string representation of this callable used by `summary/1`. */ - string getCallableCsv(); - } + /** A summarized callable relevant for testing. */ + signature class RelevantSummarizedCallableSig extends SummarizedCallableImpl { + /** Gets the string representation of this callable used by `summary/1`. */ + string getCallableCsv(); + + predicate relevantSummary( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ); } /** Provides a query predicate for outputting a set of relevant flow summaries. */ - module TestSummaryOutput { - private import TestInput - - final class RelevantSummarizedCallableFinal = TestInput::RelevantSummarizedCallable; - - class RelevantSummarizedCallable extends RelevantSummarizedCallableFinal instanceof SummarizedCallableImpl - { - /** Holds if flow is propagated between `input` and `output`. */ - predicate relevantSummary( - SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue - ) { - super.propagatesFlow(input, output, preservesValue) - } - - string toString() { result = super.toString() } - } - + module TestSummaryOutput { /** Render the kind in the format used in flow summaries. */ private string renderKind(boolean preservesValue) { preservesValue = true and result = "value" @@ -1816,31 +1787,13 @@ module Make Input> { } } - signature module TestNeutralInputSig { - /** - * A class of callables where the neutral model should be included - * in the `neutral/1` query predicate. - */ - class RelevantNeutralCallable instanceof NeutralCallable { - /** Gets the string representation of this callable used by `neutral/1`. */ - string getCallableCsv(); - } + /** A summarized callable relevant for testing. */ + signature class RelevantNeutralCallableSig extends NeutralCallable { + /** Gets the string representation of this callable used by `neutral/1`. */ + string getCallableCsv(); } - module TestNeutralOutput { - private import TestInput - - final class RelevantNeutralCallableFinal = TestInput::RelevantNeutralCallable; - - class RelevantNeutralCallable extends RelevantNeutralCallableFinal instanceof NeutralCallable { - /** - * Gets the kind of the neutral. - */ - string getKind() { result = super.getKind() } - - string toString() { result = super.toString() } - } - + module TestNeutralOutput { private string renderProvenance(NeutralCallable c) { exists(Provenance p | p.isManual() and c.hasProvenance(p) and result = p.toString()) or From 7e479e3c8ee7a0246c50a63b3a069259ec08448f Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 19 Mar 2024 13:47:45 +0000 Subject: [PATCH 153/497] Ruby: Fix Hash#keys flow summary --- .../lib/codeql/ruby/frameworks/core/Hash.qll | 4 +- .../dataflow/hash-flow/hash-flow.expected | 49 +++++++------------ .../dataflow/hash-flow/hash-flow.ql | 2 +- .../dataflow/hash-flow/hash_flow.rb | 9 ++-- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 7583498ed08..38a9a70f0d3 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -530,8 +530,8 @@ private class KeysSummary extends SimpleSummarizedCallable { KeysSummary() { this = "keys" } override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[self].Element[any]" and + input = "Argument[self]" and output = "ReturnValue.Element[?]" and - preservesValue = true + preservesValue = false } } diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected index 23027a7d73f..68cb5a53dc2 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected @@ -1089,19 +1089,13 @@ edges | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | | hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | | hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | -| hash_flow.rb:1006:5:1006:5 | [post] h [element] | hash_flow.rb:1007:12:1007:12 | h [element] | provenance | | -| hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1006:5:1006:5 | [post] h [element] | provenance | | -| hash_flow.rb:1007:5:1007:8 | keys [element] | hash_flow.rb:1008:10:1008:13 | keys [element] | provenance | | -| hash_flow.rb:1007:12:1007:12 | h [element] | hash_flow.rb:1007:12:1007:17 | call to keys [element] | provenance | | -| hash_flow.rb:1007:12:1007:17 | call to keys [element] | hash_flow.rb:1007:5:1007:8 | keys [element] | provenance | | -| hash_flow.rb:1008:10:1008:13 | keys [element] | hash_flow.rb:1008:10:1008:17 | ...[...] | provenance | | -| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1013:5:1013:5 | h [element :a] | provenance | | -| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | -| hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | provenance | | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:15:1013:15 | k | provenance | | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:18:1013:18 | v | provenance | | -| hash_flow.rb:1013:15:1013:15 | k | hash_flow.rb:1015:14:1015:14 | k | provenance | | -| hash_flow.rb:1013:18:1013:18 | v | hash_flow.rb:1014:14:1014:14 | v | provenance | | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | hash_flow.rb:1011:5:1011:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:15:1012:15 | k | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:18:1012:18 | v | provenance | | +| hash_flow.rb:1012:15:1012:15 | k | hash_flow.rb:1014:14:1014:14 | k | provenance | | +| hash_flow.rb:1012:18:1012:18 | v | hash_flow.rb:1013:14:1013:14 | v | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -2264,21 +2258,14 @@ nodes | hash_flow.rb:996:14:996:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:998:14:998:15 | h2 [element :b] | semmle.label | h2 [element :b] | | hash_flow.rb:998:14:998:18 | ...[...] | semmle.label | ...[...] | -| hash_flow.rb:1006:5:1006:5 | [post] h [element] | semmle.label | [post] h [element] | -| hash_flow.rb:1006:14:1006:24 | call to taint | semmle.label | call to taint | -| hash_flow.rb:1007:5:1007:8 | keys [element] | semmle.label | keys [element] | -| hash_flow.rb:1007:12:1007:12 | h [element] | semmle.label | h [element] | -| hash_flow.rb:1007:12:1007:17 | call to keys [element] | semmle.label | call to keys [element] | -| hash_flow.rb:1008:10:1008:13 | keys [element] | semmle.label | keys [element] | -| hash_flow.rb:1008:10:1008:17 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:1011:14:1011:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:1012:5:1012:5 | h [element :a] | semmle.label | h [element :a] | -| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | -| hash_flow.rb:1012:14:1012:24 | call to taint | semmle.label | call to taint | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | semmle.label | h [element :a] | -| hash_flow.rb:1013:15:1013:15 | k | semmle.label | k | -| hash_flow.rb:1013:18:1013:18 | v | semmle.label | v | -| hash_flow.rb:1014:14:1014:14 | v | semmle.label | v | -| hash_flow.rb:1015:14:1015:14 | k | semmle.label | k | +| hash_flow.rb:1012:15:1012:15 | k | semmle.label | k | +| hash_flow.rb:1012:18:1012:18 | v | semmle.label | v | +| hash_flow.rb:1013:14:1013:14 | v | semmle.label | v | +| hash_flow.rb:1014:14:1014:14 | k | semmle.label | k | subpaths hashLiteral | hash_flow.rb:10:12:21:5 | call to [] | @@ -2352,8 +2339,7 @@ hashLiteral | hash_flow.rb:946:13:950:5 | call to [] | | hash_flow.rb:971:9:971:38 | ...[...] | | hash_flow.rb:994:14:994:47 | ...[...] | -| hash_flow.rb:1005:9:1005:10 | call to [] | -| hash_flow.rb:1012:9:1012:45 | call to [] | +| hash_flow.rb:1011:9:1011:45 | call to [] | #select | hash_flow.rb:22:10:22:17 | ...[...] | hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:22:10:22:17 | ...[...] | $@ | hash_flow.rb:11:15:11:24 | call to taint | call to taint | | hash_flow.rb:24:10:24:17 | ...[...] | hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:24:10:24:17 | ...[...] | $@ | hash_flow.rb:13:12:13:21 | call to taint | call to taint | @@ -2599,6 +2585,5 @@ hashLiteral | hash_flow.rb:975:10:975:13 | ...[...] | hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:975:10:975:13 | ...[...] | $@ | hash_flow.rb:971:23:971:31 | call to taint | call to taint | | hash_flow.rb:996:14:996:19 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:996:14:996:19 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | | hash_flow.rb:998:14:998:18 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:998:14:998:18 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | -| hash_flow.rb:1008:10:1008:17 | ...[...] | hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1008:10:1008:17 | ...[...] | $@ | hash_flow.rb:1006:14:1006:24 | call to taint | call to taint | -| hash_flow.rb:1014:14:1014:14 | v | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1014:14:1014:14 | v | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | -| hash_flow.rb:1015:14:1015:14 | k | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1015:14:1015:14 | k | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | +| hash_flow.rb:1013:14:1013:14 | v | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1013:14:1013:14 | v | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | +| hash_flow.rb:1014:14:1014:14 | k | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1014:14:1014:14 | k | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql index e3b694d3e75..5ec8ec0a0d6 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql @@ -5,7 +5,7 @@ import codeql.ruby.AST import codeql.ruby.CFG import TestUtilities.InlineFlowTest -import ValueFlowTest +import DefaultFlowTest import ValueFlow::PathGraph query predicate hashLiteral(CfgNodes::ExprNodes::HashLiteralCfgNode n) { any() } diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb index b88f8c3a4d4..edc1e325b09 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb @@ -59,7 +59,7 @@ def m3() x = {a: taint(3.2), b: 1} hash2 = Hash[x] sink(hash2[:a]) # $ hasValueFlow=3.2 - sink(hash2[:b]) + sink(hash2[:b]) # $ hasTaintFlow=3.2 hash3 = Hash[[[:a, taint(3.3)], [:b, 1]]] sink(hash3[:a]) # $ hasValueFlow=3.3 @@ -75,7 +75,7 @@ def m3() hash6 = Hash[{"a" => taint(3.6), "b" => 1}] sink(hash6["a"]) # $ hasValueFlow=3.6 - sink(hash6["b"]) + sink(hash6["b"]) # $ hasTaintFlow=3.6 end m3() @@ -1002,10 +1002,9 @@ end M54.new.m54(:b) def m55 - h = {} - h[f()] = taint(55.1) + h = taint(55.1) keys = h.keys - sink(keys[:a]) # $ hasValueFlow=55.1 + sink(keys[f()]) # $ hasTaintFlow=55.1 end def m56 From 6ce3f35ef5ad81b2896b65a8de683276e52ce436 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 14:43:10 +0000 Subject: [PATCH 154/497] C++: Fix API for guards. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 42 ++++++++----------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index ab67d77f5cd..83999cff947 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -138,9 +138,9 @@ class GuardCondition extends Expr { cached predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { none() } - /** Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + /** Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression evaluates to `value`. */ cached - predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { none() } + predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { none() } /** * Holds if (determined by this guard) `e == k` must be `areEqual` in `block`. @@ -196,17 +196,18 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { ) } - override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { - exists(boolean partIsTrue, GuardCondition part | - this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) + override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + exists(BooleanValue partValue, GuardCondition part | + this.(BinaryLogicalOperation) + .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) | - part.comparesEq(e, k, areEqual, partIsTrue) + part.comparesEq(e, k, areEqual, partValue) ) } override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { - exists(boolean testIsTrue | - this.comparesEq(e, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) + exists(AbstractValue value | + this.comparesEq(e, k, areEqual, value) and this.valueControls(block, value) ) } } @@ -270,18 +271,18 @@ private class GuardConditionFromIR extends GuardCondition { ) } - override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { + override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and - ir.comparesEq(i.getAUse(), k, areEqual, testIsTrue) + ir.comparesEq(i.getAUse(), k, areEqual, value) ) } override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { - exists(Instruction i, boolean testIsTrue | + exists(Instruction i, AbstractValue value | i.getUnconvertedResultExpression() = e and - ir.comparesEq(i.getAUse(), k, areEqual, testIsTrue) and - this.controls(block, testIsTrue) + ir.comparesEq(i.getAUse(), k, areEqual, value) and + this.valueControls(block, value) ) } @@ -492,19 +493,10 @@ class IRGuardCondition extends Instruction { ) } - /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `value`. */ cached - predicate comparesEq(Operand op, int k, boolean areEqual, boolean testIsTrue) { - exists(MatchValue mv | - compares_eq(this, op, k, areEqual, mv) and - // A match value cannot be dualized, so `testIsTrue` is always true - testIsTrue = true - ) - or - exists(BooleanValue bv | - compares_eq(this, op, k, areEqual, bv) and - bv.getValue() = testIsTrue - ) + predicate comparesEq(Operand op, int k, boolean areEqual, AbstractValue value) { + compares_eq(this, op, k, areEqual, value) } /** From c640bd67e934de2efcbbb3c26abe4bc77afdcd45 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 14:35:53 +0000 Subject: [PATCH 155/497] C++: Fix tests for guards. --- .../controlflow/guards-ir/tests.ql | 40 ++++++++++--------- .../controlflow/guards/GuardsCompare.expected | 6 +-- .../controlflow/guards/GuardsCompare.ql | 17 ++++---- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index 263c30c2fec..6016f864822 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -4,8 +4,8 @@ import semmle.code.cpp.controlflow.IRGuards query predicate astGuards(GuardCondition guard) { any() } query predicate astGuardsCompare(int startLine, string msg) { - exists(GuardCondition guard, Expr left, int k, string which, string op | - exists(boolean sense | + exists(GuardCondition guard, Expr left, int k, string op | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" @@ -21,14 +21,16 @@ query predicate astGuardsCompare(int startLine, string msg) { | msg = left + op + right + "+" + k + " when " + guard + " is " + which ) + ) + or + exists(AbstractValue value | + guard.comparesEq(left, k, true, value) and op = " == " or - ( - guard.comparesEq(left, k, true, sense) and op = " == " - or - guard.comparesEq(left, k, false, sense) and op = " != " - ) and - msg = left + op + k + " when " + guard + " is " + which - ) and + guard.comparesEq(left, k, false, value) and op = " != " + | + msg = left + op + k + " when " + guard + " is " + value + ) + | startLine = guard.getLocation().getStartLine() ) } @@ -71,8 +73,8 @@ query predicate astGuardsEnsure_const( query predicate irGuards(IRGuardCondition guard) { any() } query predicate irGuardsCompare(int startLine, string msg) { - exists(IRGuardCondition guard, Operand left, int k, string which, string op | - exists(boolean sense | + exists(IRGuardCondition guard, Operand left, int k, string op | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" @@ -91,16 +93,18 @@ query predicate irGuardsCompare(int startLine, string msg) { right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + which ) + ) + or + exists(AbstractValue value | + guard.comparesEq(left, k, true, value) and op = " == " or - ( - guard.comparesEq(left, k, true, sense) and op = " == " - or - guard.comparesEq(left, k, false, sense) and op = " != " - ) and + guard.comparesEq(left, k, false, value) and op = " != " + | msg = left.getAnyDef().getUnconvertedResultExpression() + op + k + " when " + guard + " is " + - which - ) and + value + ) + | startLine = guard.getLocation().getStartLine() ) } diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 1057e8e1046..398c7f1558f 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -55,9 +55,9 @@ | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | -| 61 | i == 0 when i is true | -| 61 | i == 1 when i is true | -| 61 | i == 2 when i is true | +| 61 | i == 0 when i is Case[0] | +| 61 | i == 1 when i is Case[1] | +| 61 | i == 2 when i is Case[2] | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | x != 0 when ... == ... is false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index 17d4fcaae94..5db52cd4a6e 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -7,9 +7,9 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, Expr left, int k, string which, string op, string msg +from GuardCondition guard, Expr left, int k, string op, string msg where - exists(boolean sense | + exists(boolean sense, string which | sense = true and which = "true" or sense = false and which = "false" @@ -25,12 +25,13 @@ where | msg = left + op + right + "+" + k + " when " + guard + " is " + which ) + ) + or + exists(AbstractValue value | + guard.comparesEq(left, k, true, value) and op = " == " or - ( - guard.comparesEq(left, k, true, sense) and op = " == " - or - guard.comparesEq(left, k, false, sense) and op = " != " - ) and - msg = left + op + k + " when " + guard + " is " + which + guard.comparesEq(left, k, false, value) and op = " != " + | + msg = left + op + k + " when " + guard + " is " + value ) select guard.getLocation().getStartLine(), msg From d3aa2eed646c9b8b623fcdf0c055123d4b849f40 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Mar 2024 16:30:24 +0100 Subject: [PATCH 156/497] C#: Fix test. --- .../ql/test/library-tests/dataflow/library/FlowSummaries.ql | 3 +-- .../frameworks/EntityFramework/FlowSummaries.ql | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql index 856ea6d99e9..6b117c03ac0 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.ql @@ -1,6 +1,5 @@ import shared.FlowSummaries import semmle.code.csharp.dataflow.internal.ExternalFlow -import External final private class NeutralCallableFinal = NeutralCallable; @@ -18,4 +17,4 @@ class RelevantSinkCallable extends SinkCallable { import TestSummaryOutput import TestNeutralOutput -import TestSourceSinkOutput +import External::TestSourceSinkOutput diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql index b5f0aa90ed4..55cd03ede10 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.ql @@ -3,12 +3,10 @@ import shared.FlowSummaries import semmle.code.csharp.frameworks.EntityFramework::EntityFramework import semmle.code.csharp.dataflow.internal.ExternalFlow as ExternalFlow -module TestSummaryInput implements TestSummaryInputSig { - class RelevantSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable - { } +class RelevantSummarizedCallable extends IncludeSummarizedCallable instanceof EFSummarizedCallable { } -import TestSummaryOutput +import TestSummaryOutput query predicate sourceNode(DataFlow::Node node, string kind) { ExternalFlow::sourceNode(node, kind) From ba10ea812153d792436ae6acb6bce2c567bc7021 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Fri, 8 Mar 2024 21:54:27 +0000 Subject: [PATCH 157/497] C++: ReuseExpr IR translation --- .../raw/internal/TranslatedExpr.qll | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 51111c24572..831f7310d8d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2769,6 +2769,43 @@ class TranslatedTemporaryObjectExpr extends TranslatedNonConstantExpr, final override Instruction getResult() { result = this.getTargetAddress() } } +class TranslatedReuseExpr extends TranslatedNonConstantExpr { + override ReuseExpr expr; + + override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(OnlyInstructionTag()) and + kind instanceof GotoEdge + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::CopyValue and + tag instanceof OnlyInstructionTag and + resultType = this.getResultType() + } + + override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } + + override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = OnlyInstructionTag() and + kind instanceof GotoEdge and + result = this.getParent().getChildSuccessor(this, kind) + } + + override TranslatedElement getChildInternal(int id) { none() } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(OnlyInstructionTag()) + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = OnlyInstructionTag() and + operandTag instanceof UnaryOperandTag and + if getTranslatedExpr(expr.getReusedExpr()) instanceof TranslatedLoad + then result = getTranslatedExpr(expr.getReusedExpr()).(TranslatedLoad).getOperand().getResult() + else result = getTranslatedExpr(expr.getReusedExpr()).getResult() + } +} + /** * IR translation of a `throw` expression. */ From 3d4f7d880dd95f5cd691b5741f762a30b04c9e4d Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 18 Mar 2024 20:03:06 +0000 Subject: [PATCH 158/497] C++: unsuppress destructoion of temporaries with extended lifetimes --- .../raw/internal/TranslatedElement.qll | 5 - .../raw/internal/TranslatedStmt.qll | 20 +--- .../library-tests/ir/ir/aliased_ir.expected | 92 +++++++++++++------ .../ir/ir/operand_locations.expected | 52 ++++++++++- .../test/library-tests/ir/ir/raw_ir.expected | 62 +++++++++---- 5 files changed, 156 insertions(+), 75 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 81c704edb8b..a9d4b6e1095 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -99,11 +99,6 @@ private predicate ignoreExprAndDescendants(Expr expr) { or // suppress destructors of temporary variables until proper support is added for them. exists(Expr parent | parent.getAnImplicitDestructorCall() = expr) - or - exists(Stmt parent | - parent.getAnImplicitDestructorCall() = expr and - expr.(DestructorCall).getQualifier() instanceof ReuseExpr - ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 247b15ed4c4..d8ec66a2ee7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -248,19 +248,9 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { final override TranslatedElement getChild(int id) { result = this.getChildInternal(id) or - exists(int destructorIndex, int tempDestructorCount | + exists(int destructorIndex | result.(TranslatedExpr).getExpr() = stmt.getImplicitDestructorCall(destructorIndex) and - id = this.getFirstDestructorCallIndex() + destructorIndex - tempDestructorCount and - // suppress destructors of temporary variables until proper support is added for them. - tempDestructorCount = - count(DestructorCall call, int tempIndex | - stmt.getImplicitDestructorCall(tempIndex) = call and - tempIndex < destructorIndex and - call.getQualifier() instanceof ReuseExpr - | - call - ) and - not stmt.getImplicitDestructorCall(destructorIndex).getQualifier() instanceof ReuseExpr + id = this.getFirstDestructorCallIndex() + destructorIndex ) } @@ -271,11 +261,7 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { } final override predicate hasAnImplicitDestructorCall() { - exists(stmt.getAnImplicitDestructorCall()) and - // suppress destructors of temporary variables until proper support is added for them. - exists(Expr expr | stmt.getAnImplicitDestructorCall().getQualifier() = expr | - not expr instanceof ReuseExpr - ) + exists(stmt.getAnImplicitDestructorCall()) } final override string toString() { result = stmt.toString() } 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 a5a09578750..a0571d22eef 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -891,24 +891,32 @@ destructors_for_temps.cpp: # 29| void temp_test3() # 29| Block 0 -# 29| v29_1(void) = EnterFunction : -# 29| m29_2(unknown) = AliasedDefinition : -# 29| m29_3(unknown) = InitializeNonLocal : -# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 -# 30| r30_1(glval) = VariableAddress[rs] : -# 30| r30_2(glval) = VariableAddress[#temp30:38] : -# 30| r30_3(glval) = FunctionAddress[returnValue] : -# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 -# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 -# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 -# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 -# 30| r30_8(glval) = Convert : r30_2 -# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 -# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 -# 31| v31_1(void) = NoOp : -# 29| v29_5(void) = ReturnVoid : -# 29| v29_6(void) = AliasedUse : ~m30_6 -# 29| v29_7(void) = ExitFunction : +# 29| v29_1(void) = EnterFunction : +# 29| m29_2(unknown) = AliasedDefinition : +# 29| m29_3(unknown) = InitializeNonLocal : +# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 +# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 +# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_8(glval) = Convert : r30_2 +# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 +# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| m31_5(unknown) = ^CallSideEffect : ~m30_6 +# 31| m31_6(unknown) = Chi : total:m30_6, partial:m31_5 +# 31| v31_7(void) = ^IndirectReadSideEffect[-1] : &:r31_2, m30_7 +# 31| m31_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 31| m31_9(ClassWithDestructor2) = Chi : total:m30_7, partial:m31_8 +# 29| v29_5(void) = ReturnVoid : +# 29| v29_6(void) = AliasedUse : ~m31_6 +# 29| v29_7(void) = ExitFunction : # 33| void temp_test4() # 33| Block 0 @@ -935,16 +943,24 @@ destructors_for_temps.cpp: # 35| r35_9(ClassWithDestructor2 &) = CopyValue : r35_8 # 35| m35_10(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_9 # 36| v36_1(void) = NoOp : -# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_2(glval) = CopyValue : r35_2 # 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 # 36| m36_5(unknown) = ^CallSideEffect : ~m35_6 # 36| m36_6(unknown) = Chi : total:m35_6, partial:m36_5 -# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m34_8 +# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m35_7 # 36| m36_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 -# 36| m36_9(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_8 +# 36| m36_9(ClassWithDestructor2) = Chi : total:m35_7, partial:m36_8 +# 36| r36_10(glval) = VariableAddress[c] : +# 36| r36_11(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_12(void) = Call[~ClassWithDestructor2] : func:r36_11, this:r36_10 +# 36| m36_13(unknown) = ^CallSideEffect : ~m36_6 +# 36| m36_14(unknown) = Chi : total:m36_6, partial:m36_13 +# 36| v36_15(void) = ^IndirectReadSideEffect[-1] : &:r36_10, m34_8 +# 36| m36_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_10 +# 36| m36_17(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_16 # 33| v33_5(void) = ReturnVoid : -# 33| v33_6(void) = AliasedUse : ~m36_6 +# 33| v33_6(void) = AliasedUse : ~m36_14 # 33| v33_7(void) = ExitFunction : # 38| void temp_test5(bool) @@ -8882,16 +8898,24 @@ ir.cpp: # 1425| m1425_5(unknown) = Chi : total:m1423_11, partial:m1425_4 # 1425| m1425_6(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 # 1426| v1426_1(void) = NoOp : -# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_2(glval) = CopyValue : r1416_2 # 1426| r1426_3(glval) = FunctionAddress[~String] : # 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 # 1426| m1426_5(unknown) = ^CallSideEffect : ~m1425_5 # 1426| m1426_6(unknown) = Chi : total:m1425_5, partial:m1426_5 -# 1426| v1426_7(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, m1415_6 +# 1426| v1426_7(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, m1416_7 # 1426| m1426_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 -# 1426| m1426_9(String) = Chi : total:m1415_6, partial:m1426_8 +# 1426| m1426_9(String) = Chi : total:m1416_7, partial:m1426_8 +# 1426| r1426_10(glval) = VariableAddress[s] : +# 1426| r1426_11(glval) = FunctionAddress[~String] : +# 1426| v1426_12(void) = Call[~String] : func:r1426_11, this:r1426_10 +# 1426| m1426_13(unknown) = ^CallSideEffect : ~m1426_6 +# 1426| m1426_14(unknown) = Chi : total:m1426_6, partial:m1426_13 +# 1426| v1426_15(void) = ^IndirectReadSideEffect[-1] : &:r1426_10, m1415_6 +# 1426| m1426_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_10 +# 1426| m1426_17(String) = Chi : total:m1415_6, partial:m1426_16 # 1414| v1414_5(void) = ReturnVoid : -# 1414| v1414_6(void) = AliasedUse : ~m1426_6 +# 1414| v1414_6(void) = AliasedUse : ~m1426_14 # 1414| v1414_7(void) = ExitFunction : # 1428| void temporary_destructor_only() @@ -8973,16 +8997,24 @@ ir.cpp: # 1438| v1438_7(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, m1431_2 # 1438| m1438_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 # 1438| m1438_9(destructor_only) = Chi : total:m1431_2, partial:m1438_8 -# 1438| r1438_10(glval) = VariableAddress[d] : +# 1438| r1438_10(glval) = CopyValue : r1430_2 # 1438| r1438_11(glval) = FunctionAddress[~destructor_only] : # 1438| v1438_12(void) = Call[~destructor_only] : func:r1438_11, this:r1438_10 # 1438| m1438_13(unknown) = ^CallSideEffect : ~m1438_6 # 1438| m1438_14(unknown) = Chi : total:m1438_6, partial:m1438_13 -# 1438| v1438_15(void) = ^IndirectReadSideEffect[-1] : &:r1438_10, m1429_6 +# 1438| v1438_15(void) = ^IndirectReadSideEffect[-1] : &:r1438_10, m1430_7 # 1438| m1438_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_10 -# 1438| m1438_17(destructor_only) = Chi : total:m1429_6, partial:m1438_16 +# 1438| m1438_17(destructor_only) = Chi : total:m1430_7, partial:m1438_16 +# 1438| r1438_18(glval) = VariableAddress[d] : +# 1438| r1438_19(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_20(void) = Call[~destructor_only] : func:r1438_19, this:r1438_18 +# 1438| m1438_21(unknown) = ^CallSideEffect : ~m1438_14 +# 1438| m1438_22(unknown) = Chi : total:m1438_14, partial:m1438_21 +# 1438| v1438_23(void) = ^IndirectReadSideEffect[-1] : &:r1438_18, m1429_6 +# 1438| m1438_24(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_18 +# 1438| m1438_25(destructor_only) = Chi : total:m1429_6, partial:m1438_24 # 1428| v1428_5(void) = ReturnVoid : -# 1428| v1428_6(void) = AliasedUse : ~m1438_14 +# 1428| v1428_6(void) = AliasedUse : ~m1438_22 # 1428| v1428_7(void) = ExitFunction : # 1440| void temporary_copy_constructor() diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index ad4cfdb1e7c..01032ccce8e 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -805,7 +805,7 @@ | destructors_for_temps.cpp:23:68:23:72 | Unary | r23_27 | | destructors_for_temps.cpp:29:6:29:15 | ChiPartial | partial:m29_3 | | destructors_for_temps.cpp:29:6:29:15 | ChiTotal | total:m29_2 | -| destructors_for_temps.cpp:29:6:29:15 | SideEffect | ~m30_6 | +| destructors_for_temps.cpp:29:6:29:15 | SideEffect | ~m31_6 | | destructors_for_temps.cpp:30:33:30:34 | Address | &:r30_1 | | destructors_for_temps.cpp:30:38:30:70 | CallTarget | func:r30_3 | | destructors_for_temps.cpp:30:38:30:70 | ChiPartial | partial:m30_5 | @@ -815,10 +815,21 @@ | destructors_for_temps.cpp:30:38:30:72 | Address | &:r30_2 | | destructors_for_temps.cpp:30:38:30:72 | StoreValue | r30_9 | | destructors_for_temps.cpp:30:38:30:72 | Unary | r30_2 | +| destructors_for_temps.cpp:30:38:30:72 | Unary | r30_2 | | destructors_for_temps.cpp:30:38:30:72 | Unary | r30_8 | +| destructors_for_temps.cpp:31:1:31:1 | Address | &:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | Address | &:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | Arg(this) | this:r31_2 | +| destructors_for_temps.cpp:31:1:31:1 | CallTarget | func:r31_3 | +| destructors_for_temps.cpp:31:1:31:1 | ChiPartial | partial:m31_5 | +| destructors_for_temps.cpp:31:1:31:1 | ChiPartial | partial:m31_8 | +| destructors_for_temps.cpp:31:1:31:1 | ChiTotal | total:m30_6 | +| destructors_for_temps.cpp:31:1:31:1 | ChiTotal | total:m30_7 | +| destructors_for_temps.cpp:31:1:31:1 | SideEffect | m30_7 | +| destructors_for_temps.cpp:31:1:31:1 | SideEffect | ~m30_6 | | destructors_for_temps.cpp:33:6:33:15 | ChiPartial | partial:m33_3 | | destructors_for_temps.cpp:33:6:33:15 | ChiTotal | total:m33_2 | -| destructors_for_temps.cpp:33:6:33:15 | SideEffect | ~m36_6 | +| destructors_for_temps.cpp:33:6:33:15 | SideEffect | ~m36_14 | | destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | | destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | | destructors_for_temps.cpp:34:26:34:26 | Arg(this) | this:r34_1 | @@ -837,17 +848,28 @@ | destructors_for_temps.cpp:35:39:35:73 | Address | &:r35_2 | | destructors_for_temps.cpp:35:39:35:73 | StoreValue | r35_9 | | destructors_for_temps.cpp:35:39:35:73 | Unary | r35_2 | +| destructors_for_temps.cpp:35:39:35:73 | Unary | r35_2 | | destructors_for_temps.cpp:35:39:35:73 | Unary | r35_8 | | destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | | destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_10 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_10 | | destructors_for_temps.cpp:36:1:36:1 | Arg(this) | this:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Arg(this) | this:r36_10 | | destructors_for_temps.cpp:36:1:36:1 | CallTarget | func:r36_3 | +| destructors_for_temps.cpp:36:1:36:1 | CallTarget | func:r36_11 | | destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_5 | | destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_8 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_13 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_16 | | destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m34_8 | | destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m35_6 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m35_7 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m36_6 | | destructors_for_temps.cpp:36:1:36:1 | SideEffect | m34_8 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | m35_7 | | destructors_for_temps.cpp:36:1:36:1 | SideEffect | ~m35_6 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | ~m36_6 | | destructors_for_temps.cpp:38:6:38:15 | ChiPartial | partial:m38_3 | | destructors_for_temps.cpp:38:6:38:15 | ChiTotal | total:m38_2 | | destructors_for_temps.cpp:38:6:38:15 | SideEffect | ~m39_5 | @@ -7257,7 +7279,7 @@ | ir.cpp:1376:5:1376:15 | StoreValue | r1376_2 | | ir.cpp:1414:6:1414:21 | ChiPartial | partial:m1414_3 | | ir.cpp:1414:6:1414:21 | ChiTotal | total:m1414_2 | -| ir.cpp:1414:6:1414:21 | SideEffect | ~m1426_6 | +| ir.cpp:1414:6:1414:21 | SideEffect | ~m1426_14 | | ir.cpp:1415:12:1415:12 | Address | &:r1415_1 | | ir.cpp:1415:16:1415:34 | CallTarget | func:r1415_2 | | ir.cpp:1415:16:1415:34 | ChiPartial | partial:m1415_4 | @@ -7273,6 +7295,7 @@ | ir.cpp:1416:24:1416:44 | Address | &:r1416_2 | | ir.cpp:1416:24:1416:44 | StoreValue | r1416_9 | | ir.cpp:1416:24:1416:44 | Unary | r1416_2 | +| ir.cpp:1416:24:1416:44 | Unary | r1416_2 | | ir.cpp:1416:24:1416:44 | Unary | r1416_8 | | ir.cpp:1418:5:1418:13 | CallTarget | func:r1418_1 | | ir.cpp:1418:5:1418:13 | ChiPartial | partial:m1418_6 | @@ -7384,17 +7407,27 @@ | ir.cpp:1425:5:1425:30 | Address | &:r1425_1 | | ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | | ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_10 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_10 | | ir.cpp:1426:1:1426:1 | Arg(this) | this:r1426_2 | +| ir.cpp:1426:1:1426:1 | Arg(this) | this:r1426_10 | | ir.cpp:1426:1:1426:1 | CallTarget | func:r1426_3 | +| ir.cpp:1426:1:1426:1 | CallTarget | func:r1426_11 | | ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_5 | | ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_8 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_13 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_16 | | ir.cpp:1426:1:1426:1 | ChiTotal | total:m1415_6 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1416_7 | | ir.cpp:1426:1:1426:1 | ChiTotal | total:m1425_5 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1426_6 | | ir.cpp:1426:1:1426:1 | SideEffect | m1415_6 | +| ir.cpp:1426:1:1426:1 | SideEffect | m1416_7 | | ir.cpp:1426:1:1426:1 | SideEffect | ~m1425_5 | +| ir.cpp:1426:1:1426:1 | SideEffect | ~m1426_6 | | ir.cpp:1428:6:1428:30 | ChiPartial | partial:m1428_3 | | ir.cpp:1428:6:1428:30 | ChiTotal | total:m1428_2 | -| ir.cpp:1428:6:1428:30 | SideEffect | ~m1438_14 | +| ir.cpp:1428:6:1428:30 | SideEffect | ~m1438_22 | | ir.cpp:1429:21:1429:21 | Address | &:r1429_1 | | ir.cpp:1429:25:1429:52 | CallTarget | func:r1429_2 | | ir.cpp:1429:25:1429:52 | ChiPartial | partial:m1429_4 | @@ -7410,6 +7443,7 @@ | ir.cpp:1430:33:1430:62 | Address | &:r1430_2 | | ir.cpp:1430:33:1430:62 | StoreValue | r1430_9 | | ir.cpp:1430:33:1430:62 | Unary | r1430_2 | +| ir.cpp:1430:33:1430:62 | Unary | r1430_2 | | ir.cpp:1430:33:1430:62 | Unary | r1430_8 | | ir.cpp:1431:21:1431:22 | Address | &:r1431_1 | | ir.cpp:1432:5:1432:13 | CallTarget | func:r1432_1 | @@ -7470,22 +7504,32 @@ | ir.cpp:1438:1:1438:1 | Address | &:r1438_2 | | ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | | ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_18 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_18 | | ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_2 | | ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_10 | +| ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_18 | | ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_3 | | ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_11 | +| ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_19 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_5 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_8 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_13 | | ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_16 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_21 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_24 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1429_6 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1430_7 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1431_2 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1437_5 | | ir.cpp:1438:1:1438:1 | ChiTotal | total:m1438_6 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1438_14 | | ir.cpp:1438:1:1438:1 | SideEffect | m1429_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | m1430_7 | | ir.cpp:1438:1:1438:1 | SideEffect | m1431_2 | | ir.cpp:1438:1:1438:1 | SideEffect | ~m1437_5 | | ir.cpp:1438:1:1438:1 | SideEffect | ~m1438_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | ~m1438_14 | | ir.cpp:1440:6:1440:31 | ChiPartial | partial:m1440_3 | | ir.cpp:1440:6:1440:31 | ChiTotal | total:m1440_2 | | ir.cpp:1440:6:1440:31 | SideEffect | ~m1450_6 | 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 0c42f3d2af6..189ff886416 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -849,22 +849,28 @@ destructors_for_temps.cpp: # 29| void temp_test3() # 29| Block 0 -# 29| v29_1(void) = EnterFunction : -# 29| mu29_2(unknown) = AliasedDefinition : -# 29| mu29_3(unknown) = InitializeNonLocal : -# 30| r30_1(glval) = VariableAddress[rs] : -# 30| r30_2(glval) = VariableAddress[#temp30:38] : -# 30| r30_3(glval) = FunctionAddress[returnValue] : -# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 -# 30| mu30_5(unknown) = ^CallSideEffect : ~m? -# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 -# 30| r30_7(glval) = Convert : r30_2 -# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 -# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 -# 31| v31_1(void) = NoOp : -# 29| v29_4(void) = ReturnVoid : -# 29| v29_5(void) = AliasedUse : ~m? -# 29| v29_6(void) = ExitFunction : +# 29| v29_1(void) = EnterFunction : +# 29| mu29_2(unknown) = AliasedDefinition : +# 29| mu29_3(unknown) = InitializeNonLocal : +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| mu30_5(unknown) = ^CallSideEffect : ~m? +# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_7(glval) = Convert : r30_2 +# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 +# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 +# 31| v31_1(void) = NoOp : +# 31| r31_2(glval) = CopyValue : r30_2 +# 31| r31_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 31| v31_4(void) = Call[~ClassWithDestructor2] : func:r31_3, this:r31_2 +# 31| mu31_5(unknown) = ^CallSideEffect : ~m? +# 31| v31_6(void) = ^IndirectReadSideEffect[-1] : &:r31_2, ~m? +# 31| mu31_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r31_2 +# 29| v29_4(void) = ReturnVoid : +# 29| v29_5(void) = AliasedUse : ~m? +# 29| v29_6(void) = ExitFunction : # 33| void temp_test4() # 33| Block 0 @@ -887,12 +893,18 @@ destructors_for_temps.cpp: # 35| r35_8(ClassWithDestructor2 &) = CopyValue : r35_7 # 35| mu35_9(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_8 # 36| v36_1(void) = NoOp : -# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_2(glval) = CopyValue : r35_2 # 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : # 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 # 36| mu36_5(unknown) = ^CallSideEffect : ~m? # 36| v36_6(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m? # 36| mu36_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| r36_8(glval) = VariableAddress[c] : +# 36| r36_9(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_10(void) = Call[~ClassWithDestructor2] : func:r36_9, this:r36_8 +# 36| mu36_11(unknown) = ^CallSideEffect : ~m? +# 36| v36_12(void) = ^IndirectReadSideEffect[-1] : &:r36_8, ~m? +# 36| mu36_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_8 # 33| v33_4(void) = ReturnVoid : # 33| v33_5(void) = AliasedUse : ~m? # 33| v33_6(void) = ExitFunction : @@ -8321,12 +8333,18 @@ ir.cpp: # 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? # 1425| mu1425_5(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 # 1426| v1426_1(void) = NoOp : -# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_2(glval) = CopyValue : r1416_2 # 1426| r1426_3(glval) = FunctionAddress[~String] : # 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 # 1426| mu1426_5(unknown) = ^CallSideEffect : ~m? # 1426| v1426_6(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, ~m? # 1426| mu1426_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 +# 1426| r1426_8(glval) = VariableAddress[s] : +# 1426| r1426_9(glval) = FunctionAddress[~String] : +# 1426| v1426_10(void) = Call[~String] : func:r1426_9, this:r1426_8 +# 1426| mu1426_11(unknown) = ^CallSideEffect : ~m? +# 1426| v1426_12(void) = ^IndirectReadSideEffect[-1] : &:r1426_8, ~m? +# 1426| mu1426_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_8 # 1414| v1414_4(void) = ReturnVoid : # 1414| v1414_5(void) = AliasedUse : ~m? # 1414| v1414_6(void) = ExitFunction : @@ -8397,12 +8415,18 @@ ir.cpp: # 1438| mu1438_5(unknown) = ^CallSideEffect : ~m? # 1438| v1438_6(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, ~m? # 1438| mu1438_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 -# 1438| r1438_8(glval) = VariableAddress[d] : +# 1438| r1438_8(glval) = CopyValue : r1430_2 # 1438| r1438_9(glval) = FunctionAddress[~destructor_only] : # 1438| v1438_10(void) = Call[~destructor_only] : func:r1438_9, this:r1438_8 # 1438| mu1438_11(unknown) = ^CallSideEffect : ~m? # 1438| v1438_12(void) = ^IndirectReadSideEffect[-1] : &:r1438_8, ~m? # 1438| mu1438_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_8 +# 1438| r1438_14(glval) = VariableAddress[d] : +# 1438| r1438_15(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_16(void) = Call[~destructor_only] : func:r1438_15, this:r1438_14 +# 1438| mu1438_17(unknown) = ^CallSideEffect : ~m? +# 1438| v1438_18(void) = ^IndirectReadSideEffect[-1] : &:r1438_14, ~m? +# 1438| mu1438_19(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_14 # 1428| v1428_4(void) = ReturnVoid : # 1428| v1428_5(void) = AliasedUse : ~m? # 1428| v1428_6(void) = ExitFunction : From 5a30ad162ad7a3500b5a20e6b188c6f6b7adbc1c Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 19 Mar 2024 14:50:47 +0000 Subject: [PATCH 159/497] C++: Add a comment for ReusedExpr IR translation --- .../ir/implementation/raw/internal/TranslatedExpr.qll | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 831f7310d8d..8684f4e5606 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2769,6 +2769,13 @@ class TranslatedTemporaryObjectExpr extends TranslatedNonConstantExpr, final override Instruction getResult() { result = this.getTargetAddress() } } +/** + * IR translation of a `ReuseExpr`. + * + * This translation produces a copy of the glvalue instruction holding the (unconverted) result + * of the reused expression. In the case where the original expression was a prvalue, the + * result will be a copy of the glvalue operand of a `TranslatedLoad`. + */ class TranslatedReuseExpr extends TranslatedNonConstantExpr { override ReuseExpr expr; @@ -2797,7 +2804,7 @@ class TranslatedReuseExpr extends TranslatedNonConstantExpr { result = this.getInstruction(OnlyInstructionTag()) } - override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { tag = OnlyInstructionTag() and operandTag instanceof UnaryOperandTag and if getTranslatedExpr(expr.getReusedExpr()) instanceof TranslatedLoad From 467f4e11a1405517c587b55bcae824a5ea6306e4 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 19 Mar 2024 15:55:36 +0000 Subject: [PATCH 160/497] C++: Change note for IR translation of destruction of temporaries with extended lifetimes --- .../change-notes/2024-03-19-ir-temp-extended-destructors.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md diff --git a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md new file mode 100644 index 00000000000..6def8303336 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. \ No newline at end of file From 458ee13345a93021f1da581d4cc9ccc36b2918ce Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 16:23:57 +0000 Subject: [PATCH 161/497] C++: Add constant analysis for bitwise operations now that these are no longer constant folded by IR construction. --- .../implementation/raw/constant/ConstantAnalysis.qll | 6 ++++++ .../semmle/code/cpp/ir/internal/IntegerPartial.qll | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll index 0e24f283b17..33681dde0d4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll @@ -89,6 +89,18 @@ int compareLE(int a, int b) { if a <= b then result = 1 else result = 0 } bindingset[a, b] int compareGE(int a, int b) { if a >= b then result = 1 else result = 0 } +/** Returns `a >= b`. */ +bindingset[a, b] +int bitOr(int a, int b) { result = a.bitOr(b) } + +/** Returns `a >= b`. */ +bindingset[a, b] +int bitAnd(int a, int b) { result = a.bitAnd(b) } + +/** Returns `a >= b`. */ +bindingset[a, b] +int bitXor(int a, int b) { result = a.bitXor(b) } + /** * Returns `-a`. If the negation would overflow, there is no result. */ From 357a2ba733ea4ffea451b455d5ac57588cd69154 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 16:24:11 +0000 Subject: [PATCH 162/497] C++: Sync identical files. --- .../aliased_ssa/constant/ConstantAnalysis.qll | 6 ++++++ .../unaliased_ssa/constant/ConstantAnalysis.qll | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll index 47b744b3f7c..f65799f9a61 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll @@ -38,6 +38,12 @@ private int getBinaryInstructionValue(BinaryInstruction instr) { or instr instanceof DivInstruction and result = div(left, right) or + instr instanceof BitOrInstruction and result = bitOr(left, right) + or + instr instanceof BitAndInstruction and result = bitAnd(left, right) + or + instr instanceof BitXorInstruction and result = bitXor(left, right) + or instr instanceof CompareEQInstruction and result = compareEQ(left, right) or instr instanceof CompareNEInstruction and result = compareNE(left, right) From be027e217e9b55c4ea1120a14f40f0a62bd686c5 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 19 Mar 2024 16:26:06 +0000 Subject: [PATCH 163/497] Go: Emit diagnostic for invalid toolchain versions --- .../cli/go-autobuilder/go-autobuilder.go | 2 +- go/extractor/diagnostics/diagnostics.go | 15 ++++++++++ go/extractor/project/project.go | 28 +++++++++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder.go b/go/extractor/cli/go-autobuilder/go-autobuilder.go index 91291c77144..33c0b0e0461 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder.go +++ b/go/extractor/cli/go-autobuilder/go-autobuilder.go @@ -475,7 +475,7 @@ func installDependencies(workspace project.GoWorkspace) { } else { if workspace.Modules == nil { project.InitGoModForLegacyProject(workspace.BaseDir) - workspace.Modules = project.LoadGoModules([]string{filepath.Join(workspace.BaseDir, "go.mod")}) + workspace.Modules = project.LoadGoModules(true, []string{filepath.Join(workspace.BaseDir, "go.mod")}) } // get dependencies for all modules diff --git a/go/extractor/diagnostics/diagnostics.go b/go/extractor/diagnostics/diagnostics.go index c02af8afb92..197d838a121 100644 --- a/go/extractor/diagnostics/diagnostics.go +++ b/go/extractor/diagnostics/diagnostics.go @@ -508,3 +508,18 @@ func EmitExtractionFailedForProjects(path []string) { noLocation, ) } + +func EmitInvalidToolchainVersion(goModPath string, version string) { + emitDiagnostic( + "go/autobuilder/invalid-go-toolchain-version", + fmt.Sprintf("`%s` is not a valid Go toolchain version", version), + strings.Join([]string{ + "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://tip.golang.org/doc/toolchain#version).", + fmt.Sprintf("`%s` in `%s` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", version, goModPath), + }, + "\n\n"), + severityWarning, + fullVisibility, + &locationStruct{File: goModPath}, + ) +} diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index 187389ecd55..580be07eceb 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -176,10 +176,13 @@ func findGoModFiles(root string) []string { return util.FindAllFilesWithName(root, "go.mod", "vendor") } +// A regular expression for the Go toolchain version syntax. +var toolchainVersionRe *regexp.Regexp = regexp.MustCompile(`(?m)^([0-9]+\.[0-9]+\.[0-9]+)$`) + // Given a list of `go.mod` file paths, try to parse them all. The resulting array of `GoModule` objects // will be the same length as the input array and the objects will contain at least the `go.mod` path. // If parsing the corresponding file is successful, then the parsed contents will also be available. -func LoadGoModules(goModFilePaths []string) []*GoModule { +func LoadGoModules(emitDiagnostics bool, goModFilePaths []string) []*GoModule { results := make([]*GoModule, len(goModFilePaths)) for i, goModFilePath := range goModFilePaths { @@ -201,6 +204,15 @@ func LoadGoModules(goModFilePaths []string) []*GoModule { } results[i].Module = modFile + + // If this `go.mod` file specifies a Go language version, that version is `1.21` or greater, and + // there is no `toolchain` directive, check that it is a valid Go toolchain version. Otherwise, + // `go` commands which try to download the right version of the Go toolchain will fail. We detect + // this situation and emit a diagnostic. + if modFile.Toolchain == nil && modFile.Go != nil && + !toolchainVersionRe.Match([]byte(modFile.Go.Version)) && semver.Compare("v"+modFile.Go.Version, "v1.21.0") >= 0 { + diagnostics.EmitInvalidToolchainVersion(goModFilePath, modFile.Go.Version) + } } return results @@ -209,7 +221,7 @@ func LoadGoModules(goModFilePaths []string) []*GoModule { // Given a path to a `go.work` file, this function attempts to parse the `go.work` file. If unsuccessful, // we attempt to discover `go.mod` files within subdirectories of the directory containing the `go.work` // file ourselves. -func discoverWorkspace(workFilePath string) GoWorkspace { +func discoverWorkspace(emitDiagnostics bool, workFilePath string) GoWorkspace { log.Printf("Loading %s...\n", workFilePath) baseDir := filepath.Dir(workFilePath) workFileSrc, err := os.ReadFile(workFilePath) @@ -223,7 +235,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, baseDir), } @@ -240,7 +252,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, baseDir), } @@ -263,7 +275,7 @@ func discoverWorkspace(workFilePath string) GoWorkspace { return GoWorkspace{ BaseDir: baseDir, WorkspaceFile: workFile, - Modules: LoadGoModules(goModFilePaths), + Modules: LoadGoModules(emitDiagnostics, goModFilePaths), DepMode: GoGetWithModules, ModMode: ModReadonly, // Workspaces only support "readonly" } @@ -286,7 +298,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { for i, goModFile := range goModFiles { results[i] = GoWorkspace{ BaseDir: filepath.Dir(goModFile), - Modules: LoadGoModules([]string{goModFile}), + Modules: LoadGoModules(emitDiagnostics, []string{goModFile}), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), } @@ -303,7 +315,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { results := make([]GoWorkspace, len(goWorkFiles)) for i, workFilePath := range goWorkFiles { - results[i] = discoverWorkspace(workFilePath) + results[i] = discoverWorkspace(emitDiagnostics, workFilePath) } // Add all stray `go.mod` files (i.e. those not referenced by `go.work` files) @@ -335,7 +347,7 @@ func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { log.Printf("Module %s is not referenced by any go.work file; adding it separately.\n", goModFile) results = append(results, GoWorkspace{ BaseDir: filepath.Dir(goModFile), - Modules: LoadGoModules([]string{goModFile}), + Modules: LoadGoModules(emitDiagnostics, []string{goModFile}), DepMode: GoGetWithModules, ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), }) From 6bf1611f10a24d6c7ec3117153987241a0839bdd Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 16:26:37 +0000 Subject: [PATCH 164/497] C++: Fix comments. --- cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll index 33681dde0d4..923ee7293f9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll @@ -89,15 +89,15 @@ int compareLE(int a, int b) { if a <= b then result = 1 else result = 0 } bindingset[a, b] int compareGE(int a, int b) { if a >= b then result = 1 else result = 0 } -/** Returns `a >= b`. */ +/** Returns `a | b`. */ bindingset[a, b] int bitOr(int a, int b) { result = a.bitOr(b) } -/** Returns `a >= b`. */ +/** Returns `a & b`. */ bindingset[a, b] int bitAnd(int a, int b) { result = a.bitAnd(b) } -/** Returns `a >= b`. */ +/** Returns `a ^ b`. */ bindingset[a, b] int bitXor(int a, int b) { result = a.bitXor(b) } From 8b85735cdcfa0d6240b7691d5dcbc5764dcc9cc7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 17:03:59 +0000 Subject: [PATCH 165/497] C++: Generalize predicates from booleans to abstract values. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 83999cff947..8232ffe7190 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -456,7 +456,10 @@ class IRGuardCondition extends Instruction { /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ cached predicate comparesLt(Operand left, Operand right, int k, boolean isLessThan, boolean testIsTrue) { - compares_lt(this, left, right, k, isLessThan, testIsTrue) + exists(BooleanValue value | + compares_lt(this, left, right, k, isLessThan, value) and + value.getValue() = testIsTrue + ) } /** @@ -465,8 +468,8 @@ class IRGuardCondition extends Instruction { */ cached predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean isLessThan) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) + exists(AbstractValue value | + compares_lt(this, left, right, k, isLessThan, value) and this.valueControls(block, value) ) } @@ -478,9 +481,9 @@ class IRGuardCondition extends Instruction { predicate ensuresLtEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean isLessThan ) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) + exists(AbstractValue value | + compares_lt(this, left, right, k, isLessThan, value) and + this.valueControlsEdge(pred, succ, value) ) } @@ -746,31 +749,28 @@ private predicate complex_eq( /** Holds if `left < right + k` evaluates to `isLt` given that test is `testIsTrue`. */ private predicate compares_lt( - Instruction test, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { /* In the simple case, the test is the comparison, so isLt = testIsTrue */ - simple_comparison_lt(test, left, right, k) and isLt = true and testIsTrue = true + simple_comparison_lt(test, left, right, k) and + value.(BooleanValue).getValue() = isLt or - simple_comparison_lt(test, left, right, k) and isLt = false and testIsTrue = false - or - complex_lt(test, left, right, k, isLt, testIsTrue) + complex_lt(test, left, right, k, isLt, value) or /* (not (left < right + k)) => (left >= right + k) */ - exists(boolean isGe | isLt = isGe.booleanNot() | - compares_ge(test, left, right, k, isGe, testIsTrue) - ) + exists(boolean isGe | isLt = isGe.booleanNot() | compares_ge(test, left, right, k, isGe, value)) or /* (x is true => (left < right + k)) => (!x is false => (left < right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_lt(test.(LogicalNotInstruction).getUnary(), left, right, k, isLt, isFalse) + exists(AbstractValue dual | value = dual.getDualValue() | + compares_lt(test.(LogicalNotInstruction).getUnary(), left, right, k, isLt, dual) ) } /** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */ private predicate compares_ge( - Instruction test, Operand left, Operand right, int k, boolean isGe, boolean testIsTrue + Instruction test, Operand left, Operand right, int k, boolean isGe, AbstractValue value ) { - exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, testIsTrue)) + exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, value)) } /** Rearrange various simple comparisons into `left < right + k` form. */ @@ -797,41 +797,41 @@ private predicate simple_comparison_lt(CompareInstruction cmp, Operand left, Ope } private predicate complex_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { - sub_lt(cmp, left, right, k, isLt, testIsTrue) + sub_lt(cmp, left, right, k, isLt, value) or - add_lt(cmp, left, right, k, isLt, testIsTrue) + add_lt(cmp, left, right, k, isLt, value) } // left - x < right + c => left < right + (c+x) // left < (right - x) + c => left < right + (c-x) private predicate sub_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { exists(SubInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(SubInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x @@ -841,10 +841,10 @@ private predicate sub_lt( // left + x < right + c => left < right + (c-x) // left < (right + x) + c => left < right + (c+x) private predicate add_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { exists(AddInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -854,7 +854,7 @@ private predicate add_lt( ) or exists(AddInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -864,7 +864,7 @@ private predicate add_lt( ) or exists(PointerAddInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and + compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -874,7 +874,7 @@ private predicate add_lt( ) or exists(PointerAddInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and + compares_lt(cmp, left, rhs.getAUse(), c, isLt, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or From a78080cc0ecfbbbfdef88b1e22f39d8933f70012 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 17:06:26 +0000 Subject: [PATCH 166/497] C++: Implement less-than logic for guard conditions when comparing to constants. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 8232ffe7190..1416fb2cd8a 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -125,6 +125,20 @@ class GuardCondition extends Expr { cached predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { none() } + /** + * Holds if (determined by this guard) `e < k` evaluates to `isLessThan` if + * this expression evaluates to `value`. + */ + cached + predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { none() } + + /** + * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. + * If `isLessThan = false` then this implies `left >= k`. + */ + cached + predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { none() } + /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ cached predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { @@ -176,12 +190,27 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { ) } + override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + exists(BooleanValue partValue, GuardCondition part | + this.(BinaryLogicalOperation) + .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) + | + part.comparesLt(e, k, isLessThan, partValue) + ) + } + override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { exists(boolean testIsTrue | this.comparesLt(left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) ) } + override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { + exists(AbstractValue value | + this.comparesLt(e, k, isLessThan, value) and this.valueControls(block, value) + ) + } + override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { exists(boolean partIsTrue, GuardCondition part | this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) @@ -236,6 +265,17 @@ private class GuardConditionFromIR extends GuardCondition { ) } + /** + * Holds if (determined by this guard) `e < k` evaluates to `isLessThan` if + * this expression evaluates to `value`. + */ + override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value) + ) + } + /** * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. * If `isLessThan = false` then this implies `left >= right + k`. @@ -249,6 +289,18 @@ private class GuardConditionFromIR extends GuardCondition { ) } + /** + * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. + * If `isLessThan = false` then this implies `e >= k`. + */ + override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { + exists(Instruction i, AbstractValue value | + i.getUnconvertedResultExpression() = e and + ir.comparesLt(i.getAUse(), k, isLessThan, value) and + this.valueControls(block, value) + ) + } + /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { exists(Instruction li, Instruction ri | @@ -462,6 +514,15 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op < k` evaluates to `isLessThan` if + * this expression evaluates to `value`. + */ + cached + predicate comparesLt(Operand op, int k, boolean isLessThan, AbstractValue value) { + compares_lt(this, op, k, isLessThan, value) + } + /** * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. * If `isLessThan = false` then this implies `left >= right + k`. @@ -473,6 +534,17 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op < k` must be `isLessThan` in `block`. + * If `isLessThan = false` then this implies `op >= k`. + */ + cached + predicate ensuresLt(Operand op, int k, IRBlock block, boolean isLessThan) { + exists(AbstractValue value | + compares_lt(this, op, k, isLessThan, value) and this.valueControls(block, value) + ) + } + /** * Holds if (determined by this guard) `left < right + k` must be `isLessThan` on the edge from * `pred` to `succ`. If `isLessThan = false` then this implies `left >= right + k`. @@ -487,6 +559,18 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op < k` must be `isLessThan` on the edge from + * `pred` to `succ`. If `isLessThan = false` then this implies `op >= k`. + */ + cached + predicate ensuresLtEdge(Operand left, int k, IRBlock pred, IRBlock succ, boolean isLessThan) { + exists(AbstractValue value | + compares_lt(this, left, k, isLessThan, value) and + this.valueControlsEdge(pred, succ, value) + ) + } + /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ cached predicate comparesEq(Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue) { @@ -766,6 +850,24 @@ private predicate compares_lt( ) } +/** Holds if `op < k` evaluates to `isLt` given that `test` evaluates to `value`. */ +private predicate compares_lt(Instruction test, Operand op, int k, boolean isLt, AbstractValue value) { + simple_comparison_lt(test, op, k, isLt, value) + or + complex_lt(test, op, k, isLt, value) + or + /* (x is true => (op < k)) => (!x is false => (op < k)) */ + exists(AbstractValue dual | value = dual.getDualValue() | + compares_lt(test.(LogicalNotInstruction).getUnary(), op, k, isLt, dual) + ) + or + exists(int k1, int k2, ConstantInstruction const | + compares_lt(test, op, const.getAUse(), k2, isLt, value) and + int_value(const) = k1 and + k = k1 + k2 + ) +} + /** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */ private predicate compares_ge( Instruction test, Operand left, Operand right, int k, boolean isGe, AbstractValue value @@ -796,6 +898,26 @@ private predicate simple_comparison_lt(CompareInstruction cmp, Operand left, Ope k = 1 } +/** Rearrange various simple comparisons into `op < k` form. */ +private predicate simple_comparison_lt( + Instruction test, Operand op, int k, boolean isLt, AbstractValue value +) { + exists(SwitchInstruction switch, CaseEdge case | + test = switch.getExpression() and + op.getDef() = test and + case = value.(MatchValue).getCase() and + exists(switch.getSuccessor(case)) and + case.getMaxValue() > case.getMinValue() + | + // op <= k => op < k - 1 + isLt = true and + case.getMaxValue().toInt() = k - 1 + or + isLt = false and + case.getMinValue().toInt() = k + ) +} + private predicate complex_lt( CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value ) { @@ -804,6 +926,14 @@ private predicate complex_lt( add_lt(cmp, left, right, k, isLt, value) } +private predicate complex_lt( + Instruction test, Operand left, int k, boolean isLt, AbstractValue value +) { + sub_lt(test, left, k, isLt, value) + or + add_lt(test, left, k, isLt, value) +} + // left - x < right + c => left < right + (c+x) // left < (right - x) + c => left < right + (c-x) private predicate sub_lt( @@ -838,6 +968,22 @@ private predicate sub_lt( ) } +private predicate sub_lt(Instruction test, Operand left, int k, boolean isLt, AbstractValue value) { + exists(SubInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + left = lhs.getLeftOperand() and + x = int_value(lhs.getRight()) and + k = c + x + ) + or + exists(PointerSubInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + left = lhs.getLeftOperand() and + x = int_value(lhs.getRight()) and + k = c + x + ) +} + // left + x < right + c => left < right + (c-x) // left < (right + x) + c => left < right + (c+x) private predicate add_lt( @@ -884,6 +1030,28 @@ private predicate add_lt( ) } +private predicate add_lt(Instruction test, Operand left, int k, boolean isLt, AbstractValue value) { + exists(AddInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) + or + exists(PointerAddInstruction lhs, int c, int x | + compares_lt(test, lhs.getAUse(), c, isLt, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) +} + // left - x == right + c => left == right + (c+x) // left == (right - x) + c => left == right + (c-x) private predicate sub_eq( From 1411ee5b26ed8d372eec2e9090ada0d8b21ec77c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 17:09:22 +0000 Subject: [PATCH 167/497] C++: Extend tests to also test the new predicates and accept test changes. --- .../controlflow/guards-ir/tests.ql | 8 +++++ .../controlflow/guards/GuardsCompare.expected | 30 +++++++++++++++++++ .../controlflow/guards/GuardsCompare.ql | 4 +++ 3 files changed, 42 insertions(+) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index 6016f864822..0f147f9ea8d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -96,6 +96,10 @@ query predicate irGuardsCompare(int startLine, string msg) { ) or exists(AbstractValue value | + guard.comparesLt(left, k, true, value) and op = " < " + or + guard.comparesLt(left, k, false, value) and op = " >= " + or guard.comparesEq(left, k, true, value) and op = " == " or guard.comparesEq(left, k, false, value) and op = " != " @@ -138,6 +142,10 @@ query predicate irGuardsEnsure_const( IRGuardCondition guard, Instruction left, string op, int k, int start, int end ) { exists(IRBlock block, Operand leftOp | + guard.ensuresLt(leftOp, k, block, true) and op = "<" + or + guard.ensuresLt(leftOp, k, block, false) and op = ">=" + or guard.ensuresEq(leftOp, k, block, true) and op = "==" or guard.ensuresEq(leftOp, k, block, false) and op = "!=" diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 398c7f1558f..b88856d90cf 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -1,23 +1,33 @@ | 7 | 0 < x+0 when ... > ... is true | | 7 | 0 >= x+0 when ... > ... is false | | 7 | x < 0+1 when ... > ... is false | +| 7 | x < 1 when ... > ... is false | | 7 | x >= 0+1 when ... > ... is true | +| 7 | x >= 1 when ... > ... is true | | 17 | 0 < x+1 when ... < ... is false | | 17 | 0 >= x+1 when ... && ... is true | | 17 | 0 >= x+1 when ... < ... is true | | 17 | 1 < y+0 when ... && ... is true | | 17 | 1 < y+0 when ... > ... is true | | 17 | 1 >= y+0 when ... > ... is false | +| 17 | x < 0 when ... && ... is true | +| 17 | x < 0 when ... < ... is true | | 17 | x < 0+0 when ... && ... is true | | 17 | x < 0+0 when ... < ... is true | +| 17 | x >= 0 when ... < ... is false | | 17 | x >= 0+0 when ... < ... is false | | 17 | y < 1+1 when ... > ... is false | +| 17 | y < 2 when ... > ... is false | | 17 | y >= 1+1 when ... && ... is true | | 17 | y >= 1+1 when ... > ... is true | +| 17 | y >= 2 when ... && ... is true | +| 17 | y >= 2 when ... > ... is true | | 26 | 0 < x+0 when ... > ... is true | | 26 | 0 >= x+0 when ... > ... is false | | 26 | x < 0+1 when ... > ... is false | +| 26 | x < 1 when ... > ... is false | | 26 | x >= 0+1 when ... > ... is true | +| 26 | x >= 1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | | 31 | x != -1 when ... == ... is false | @@ -26,20 +36,28 @@ | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | +| 34 | j < 10 when ... < ... is true | | 34 | j < 10+0 when ... < ... is true | +| 34 | j >= 10 when ... < ... is false | | 34 | j >= 10+0 when ... < ... is false | | 42 | 10 < j+1 when ... < ... is false | | 42 | 10 >= j+1 when ... < ... is true | +| 42 | j < 10 when ... < ... is true | | 42 | j < 10+0 when ... < ... is true | +| 42 | j >= 10 when ... < ... is false | | 42 | j >= 10+0 when ... < ... is false | | 44 | 0 < z+0 when ... > ... is true | | 44 | 0 >= z+0 when ... > ... is false | | 44 | z < 0+1 when ... > ... is false | +| 44 | z < 1 when ... > ... is false | | 44 | z >= 0+1 when ... > ... is true | +| 44 | z >= 1 when ... > ... is true | | 45 | 0 < y+0 when ... > ... is true | | 45 | 0 >= y+0 when ... > ... is false | | 45 | y < 0+1 when ... > ... is false | +| 45 | y < 1 when ... > ... is false | | 45 | y >= 0+1 when ... > ... is true | +| 45 | y >= 1 when ... > ... is true | | 58 | 0 != x+0 when ... == ... is false | | 58 | 0 != x+0 when ... \|\| ... is false | | 58 | 0 < y+1 when ... < ... is false | @@ -52,12 +70,19 @@ | 58 | x != 0+0 when ... \|\| ... is false | | 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | +| 58 | y < 0 when ... < ... is true | | 58 | y < 0+0 when ... < ... is true | +| 58 | y >= 0 when ... < ... is false | +| 58 | y >= 0 when ... \|\| ... is false | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | | 61 | i == 0 when i is Case[0] | | 61 | i == 1 when i is Case[1] | | 61 | i == 2 when i is Case[2] | +| 74 | i < 11 when i is Case[0..10] | +| 74 | i < 21 when i is Case[11..20] | +| 74 | i >= 0 when i is Case[0..10] | +| 74 | i >= 11 when i is Case[11..20] | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | x != 0 when ... == ... is false | @@ -90,7 +115,9 @@ | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | +| 102 | j < 10 when ... < ... is true | | 102 | j < 10+0 when ... < ... is true | +| 102 | j >= 10 when ... < ... is false | | 102 | j >= 10+0 when ... < ... is false | | 109 | 0 != x+0 when ... == ... is false | | 109 | 0 != x+0 when ... \|\| ... is false | @@ -104,6 +131,9 @@ | 109 | x != 0+0 when ... \|\| ... is false | | 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | +| 109 | y < 0 when ... < ... is true | | 109 | y < 0+0 when ... < ... is true | +| 109 | y >= 0 when ... < ... is false | +| 109 | y >= 0 when ... \|\| ... is false | | 109 | y >= 0+0 when ... < ... is false | | 109 | y >= 0+0 when ... \|\| ... is false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index 5db52cd4a6e..b05f5b95d00 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -28,6 +28,10 @@ where ) or exists(AbstractValue value | + guard.comparesLt(left, k, true, value) and op = " < " + or + guard.comparesLt(left, k, false, value) and op = " >= " + or guard.comparesEq(left, k, true, value) and op = " == " or guard.comparesEq(left, k, false, value) and op = " != " From cdc879ee8925c99f8ffaef1620ad572d19d06846 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 29 Feb 2024 12:22:59 +0000 Subject: [PATCH 168/497] Python: Fix up some bazel references --- python/extractor/tsg-python/BUILD.bazel | 2 +- python/extractor/tsg-python/Cargo.Bazel.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel index 8e1425e3f3e..6835f8e6689 100644 --- a/python/extractor/tsg-python/BUILD.bazel +++ b/python/extractor/tsg-python/BUILD.bazel @@ -12,5 +12,5 @@ codeql_rust_binary( visibility = ["//visibility:public"], deps = all_crate_deps( normal = True, - ) + ["//extractor-python/tsg-python/tree-sitter-python"], + ) + ["//python/extractor/tsg-python/tree-sitter-python"], ) diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock index fbbd661c9e4..b8a4d822653 100644 --- a/python/extractor/tsg-python/Cargo.Bazel.lock +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "54f1095f5a2e74da736682bc8d355b3dbce47558983feba04faba84cf3abfaca", + "checksum": "5ea5454a42d65412a64a48233e83f21d17461b20f8c283260a3de1d964645868", "crates": { "ahash 0.4.7": { "name": "ahash", @@ -2152,8 +2152,8 @@ }, "binary_crates": [], "workspace_members": { - "tree-sitter-python 0.19.0": "extractor-python/tsg-python/tree-sitter-python", - "tsg-python 0.1.0": "extractor-python/tsg-python" + "tree-sitter-python 0.19.0": "python/extractor/tsg-python/tree-sitter-python", + "tsg-python 0.1.0": "python/extractor/tsg-python" }, "conditions": { "aarch64-apple-darwin": [ From 016aedab0aba50e6a7007e537de7f2a10e3b0d11 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 7 Mar 2024 13:33:58 +0000 Subject: [PATCH 169/497] Python: Move Python language pack tooling to external repo This is essentially the contents of `language-packs/python/tools` with some minor modifications to account for the changed location. Of note: we explicitly exclude the `recorded-call-graph-metrics` director that was already present in `python/tools`. When we revisit this directory for some cleanup (e.g. to get rid of the `lgtm` references), we'll probably want to switch to an explicit list of sources to include. --- python/tools/BUILD.bazel | 11 +++++++++++ python/tools/autobuild.cmd | 8 ++++++++ python/tools/autobuild.sh | 18 ++++++++++++++++++ python/tools/lgtm-scripts/index.cmd | 3 +++ python/tools/lgtm-scripts/index.sh | 5 +++++ python/tools/lgtm-scripts/python_setup.cmd | 3 +++ python/tools/lgtm-scripts/python_setup.sh | 5 +++++ python/tools/pre-finalize.cmd | 11 +++++++++++ python/tools/pre-finalize.sh | 11 +++++++++++ 9 files changed, 75 insertions(+) create mode 100644 python/tools/BUILD.bazel create mode 100644 python/tools/autobuild.cmd create mode 100755 python/tools/autobuild.sh create mode 100644 python/tools/lgtm-scripts/index.cmd create mode 100755 python/tools/lgtm-scripts/index.sh create mode 100644 python/tools/lgtm-scripts/python_setup.cmd create mode 100755 python/tools/lgtm-scripts/python_setup.sh create mode 100644 python/tools/pre-finalize.cmd create mode 100755 python/tools/pre-finalize.sh diff --git a/python/tools/BUILD.bazel b/python/tools/BUILD.bazel new file mode 100644 index 00000000000..81762c150fb --- /dev/null +++ b/python/tools/BUILD.bazel @@ -0,0 +1,11 @@ +load("@semmle_code//:dist.bzl", "pack_zip") + +pack_zip( + name = "tools", + srcs = glob(["**/*"]), + excludes = [ + "BUILD.bazel", + ] + glob(["recorded-call-graph-metrics/**"]), + prefix = "tools", + visibility = ["//visibility:public"], +) diff --git a/python/tools/autobuild.cmd b/python/tools/autobuild.cmd new file mode 100644 index 00000000000..051d119f9ec --- /dev/null +++ b/python/tools/autobuild.cmd @@ -0,0 +1,8 @@ +@echo off + +rem Legacy environment variables for the autobuild infrastructure. +set LGTM_SRC=%CD% +set LGTM_WORKSPACE=%CODEQL_EXTRACTOR_PYTHON_SCRATCH_DIR% + +type NUL && python "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\index.py" +exit /b %ERRORLEVEL% diff --git a/python/tools/autobuild.sh b/python/tools/autobuild.sh new file mode 100755 index 00000000000..88134d120fd --- /dev/null +++ b/python/tools/autobuild.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -eu + +# Legacy environment variables for the autobuild infrastructure. +LGTM_SRC="$(pwd)" +LGTM_WORKSPACE="$CODEQL_EXTRACTOR_PYTHON_SCRATCH_DIR" +export LGTM_SRC +export LGTM_WORKSPACE + +if which python3 >/dev/null; then + exec python3 "$CODEQL_EXTRACTOR_PYTHON_ROOT/tools/index.py" +elif which python >/dev/null; then + exec python "$CODEQL_EXTRACTOR_PYTHON_ROOT/tools/index.py" +else + echo "ERROR: Could not find a valid Python distribution. It should be available when running 'which python' or 'which python3' in your shell. Python 2 is no longer supported." + exit 1 +fi diff --git a/python/tools/lgtm-scripts/index.cmd b/python/tools/lgtm-scripts/index.cmd new file mode 100644 index 00000000000..254f4472262 --- /dev/null +++ b/python/tools/lgtm-scripts/index.cmd @@ -0,0 +1,3 @@ +@echo off + +py "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\index.py" diff --git a/python/tools/lgtm-scripts/index.sh b/python/tools/lgtm-scripts/index.sh new file mode 100755 index 00000000000..f57637260b0 --- /dev/null +++ b/python/tools/lgtm-scripts/index.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +set -eu + +python "${CODEQL_EXTRACTOR_PYTHON_ROOT}/tools/index.py" diff --git a/python/tools/lgtm-scripts/python_setup.cmd b/python/tools/lgtm-scripts/python_setup.cmd new file mode 100644 index 00000000000..0abc4c21dcf --- /dev/null +++ b/python/tools/lgtm-scripts/python_setup.cmd @@ -0,0 +1,3 @@ +@echo off + +py "%CODEQL_EXTRACTOR_PYTHON_ROOT%\tools\setup.py" || EXIT /B 0 diff --git a/python/tools/lgtm-scripts/python_setup.sh b/python/tools/lgtm-scripts/python_setup.sh new file mode 100755 index 00000000000..9e398d11bd3 --- /dev/null +++ b/python/tools/lgtm-scripts/python_setup.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +set -eu + +python "${CODEQL_EXTRACTOR_PYTHON_ROOT}/tools/setup.py" || true diff --git a/python/tools/pre-finalize.cmd b/python/tools/pre-finalize.cmd new file mode 100644 index 00000000000..07454671062 --- /dev/null +++ b/python/tools/pre-finalize.cmd @@ -0,0 +1,11 @@ +@echo off + +type NUL && "%CODEQL_DIST%\codeql" database index-files ^ + --include-extension=.yaml ^ + --include-extension=.yml ^ + --size-limit=5m ^ + --language yaml ^ + -- ^ + "%CODEQL_EXTRACTOR_PYTHON_WIP_DATABASE%" + +exit /b %ERRORLEVEL% diff --git a/python/tools/pre-finalize.sh b/python/tools/pre-finalize.sh new file mode 100755 index 00000000000..9fe5200a38f --- /dev/null +++ b/python/tools/pre-finalize.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -eu + +"$CODEQL_DIST/codeql" database index-files \ + --include-extension=.yaml \ + --include-extension=.yml \ + --size-limit=5m \ + --language yaml \ + -- \ + "$CODEQL_EXTRACTOR_PYTHON_WIP_DATABASE" From 5fed8bc57bd1b7024f7809582d121636d97d87f8 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 7 Mar 2024 13:40:04 +0000 Subject: [PATCH 170/497] Python: Add `codeql-extractor.yml` --- python/codeql-extractor.yml | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 python/codeql-extractor.yml diff --git a/python/codeql-extractor.yml b/python/codeql-extractor.yml new file mode 100644 index 00000000000..97a9e1f2cf2 --- /dev/null +++ b/python/codeql-extractor.yml @@ -0,0 +1,46 @@ +name: "python" +display_name: "Python" +version: 1.22.1 +column_kind: utf32 +build_modes: + - none +github_api_languages: + - Python +scc_languages: + - Python +file_types: + - name: python + display_name: Python sources + extensions: + - .py +legacy_qltest_extraction: true +options: + logging: + title: Options pertaining to logging. + type: object + properties: + verbosity: + title: Python extractor logging verbosity level. + description: > + Controls the level of verbosity of the CodeQL Python extractor. + + The supported levels are (in order of increasing verbosity): + + - off + - errors + - warnings + - info or progress + - debug or progress+ + - trace or progress++ + - progress+++ + type: string + pattern: "^(off|errors|warnings|(info|progress)|(debug|progress\\+)|(trace|progress\\+\\+)|progress\\+\\+\\+)$" + python_executable_name: + title: Controls the name of the Python executable used by the Python extractor. + description: > + The Python extractor uses platform-dependent heuristics to determine the name of the Python executable to use. + Specifying a value for this option overrides the name of the Python executable used by the extractor. + Accepted values are py, python and python3. + Use this setting with caution, the Python extractor requires Python 3 to run. + type: string + pattern: "^(py|python|python3)$" From 0550c46766de05bc689cda3ad0bf50e5c49b3fb6 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 7 Mar 2024 13:41:35 +0000 Subject: [PATCH 171/497] Python: Fix Bazel build --- python/BUILD.bazel | 33 ++++++++++++++++++++++++- python/extractor/BUILD.bazel | 4 +-- python/extractor/tsg-python/BUILD.bazel | 2 +- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/python/BUILD.bazel b/python/BUILD.bazel index e6d1387e4c2..481dbbd0dd8 100644 --- a/python/BUILD.bazel +++ b/python/BUILD.bazel @@ -1,4 +1,6 @@ -load("@rules_pkg//:mappings.bzl", "pkg_filegroup", "pkg_files") +load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files") +load("@semmle_code//:dist.bzl", "dist", "pack_zip") +load("//:defs.bzl", "codeql_platform") package(default_visibility = ["//visibility:public"]) @@ -28,3 +30,32 @@ pkg_filegroup( "//python/downgrades", ], ) + +pkg_files( + name = "codeql-extractor-yml", + srcs = ["codeql-extractor.yml"], + strip_prefix = None, +) + +dist( + name = "extractor-generic", + srcs = [ + ":codeql-extractor-yml", + ":dbscheme-group", + "//python/downgrades", + "//python/extractor", + "//python/tools", + ], + prefix = "python", + visibility = ["//visibility:public"], +) + +pack_zip( + name = "extractor-arch", + srcs = [ + "//python/extractor/tsg-python", + ], + package_file_name = "extractor-" + codeql_platform + ".zip", + prefix = "python/tools/" + codeql_platform, + visibility = ["//visibility:public"], +) diff --git a/python/extractor/BUILD.bazel b/python/extractor/BUILD.bazel index 4e93f539bde..3b5a5b3a617 100644 --- a/python/extractor/BUILD.bazel +++ b/python/extractor/BUILD.bazel @@ -1,4 +1,4 @@ -load("//:dist.bzl", "pack_zip") +load("@semmle_code//:dist.bzl", "pack_zip") py_binary( name = "make-zips-py", @@ -33,7 +33,7 @@ genrule( ) pack_zip( - name = "extractor-python", + name = "extractor", srcs = [ "LICENSE-PSF.md", # because we distribute imp.py "convert_setup.py", diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel index 6835f8e6689..55dbdd97855 100644 --- a/python/extractor/tsg-python/BUILD.bazel +++ b/python/extractor/tsg-python/BUILD.bazel @@ -1,5 +1,5 @@ load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") -load("//:common.bzl", "codeql_rust_binary") +load("@semmle_code//:common.bzl", "codeql_rust_binary") codeql_rust_binary( name = "tsg-python", From cac5a8236ea5d57c93a05a71d444c2ace4a65a1d Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 7 Mar 2024 13:43:08 +0000 Subject: [PATCH 172/497] Python: Fix CLI integration tests Two issues: - Tests relying on existing query machinery (i.e. `import python`) were not resolving correctly due to a bad `qlpack.yml` file. - The diagnostics output tests needed an updated import to account for their new location. --- codeql-workspace.yml | 1 + .../writing-diagnostics/test_diagnostics_output.py | 2 +- python/extractor/qlpack.yml | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/codeql-workspace.yml b/codeql-workspace.yml index 5d8b300c8f4..7078818d1f3 100644 --- a/codeql-workspace.yml +++ b/codeql-workspace.yml @@ -6,6 +6,7 @@ provide: - "*/ql/consistency-queries/qlpack.yml" - "*/ql/automodel/src/qlpack.yml" - "*/ql/automodel/test/qlpack.yml" + - "python/extractor/qlpack.yml" - "shared/**/qlpack.yml" - "cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml" - "go/ql/config/legacy-support/qlpack.yml" diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py index 39982596fc5..0dce022a0f9 100644 --- a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py +++ b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py @@ -1,6 +1,6 @@ import os import sys -sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "integration-tests")) +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..", "..", "integration-tests")) import diagnostics_test_utils test_db = "db" diff --git a/python/extractor/qlpack.yml b/python/extractor/qlpack.yml index 783c301abbb..88164c64ee8 100644 --- a/python/extractor/qlpack.yml +++ b/python/extractor/qlpack.yml @@ -1,6 +1,6 @@ name: extractor-python dependencies: - codeql/python-all: "*" - codeql/python-queries: "*" + codeql/python-all: ${workspace} + codeql/python-queries: ${workspace} extractor: python warnOnImplicitThis: true From 04c9ed37a7017646e3ab3cd6ab4b4235ca125308 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 8 Mar 2024 13:26:04 +0000 Subject: [PATCH 173/497] Python: Fix reference in unit test The referenced file lives in the internal repo, so this is perhaps a bit of a hack, but I think it should be fine in the short run. --- python/extractor/tests/test_patterns.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/extractor/tests/test_patterns.py b/python/extractor/tests/test_patterns.py index f218e7a4907..eb05d91c1a5 100644 --- a/python/extractor/tests/test_patterns.py +++ b/python/extractor/tests/test_patterns.py @@ -12,7 +12,7 @@ class ExtractorPatternsTest(test_utils.ExtractorTest): def test(self): repo_dir = subprocess.Popen(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE).communicate()[0].rstrip().decode("utf-8") - test_file_path = os.path.abspath(os.path.join(repo_dir, "unit-tests", "files", "pattern-matching", "patterns.json")) + test_file_path = os.path.abspath(os.path.join(repo_dir, "..", "unit-tests", "files", "pattern-matching", "patterns.json")) with open(test_file_path) as test_file: test_patterns = json.load(test_file) for test_pattern in test_patterns: From 6f388acdd805ac1caa24b9868e274918a37eb907 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 8 Mar 2024 15:23:44 +0000 Subject: [PATCH 174/497] Python: Rename `tsg_python_crate_index` to `py_deps` This aligns us a bit more with Ruby. --- python/extractor/tsg-python/BUILD.bazel | 2 +- python/extractor/tsg-python/Cargo.Bazel.lock | 2 +- python/extractor/tsg-python/Cargo.toml | 2 +- python/extractor/tsg-python/tree-sitter-python/BUILD.bazel | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel index 55dbdd97855..cf95619c5a1 100644 --- a/python/extractor/tsg-python/BUILD.bazel +++ b/python/extractor/tsg-python/BUILD.bazel @@ -1,4 +1,4 @@ -load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") +load("@py_deps//:defs.bzl", "aliases", "all_crate_deps") load("@semmle_code//:common.bzl", "codeql_rust_binary") codeql_rust_binary( diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock index b8a4d822653..3b777f1e5a4 100644 --- a/python/extractor/tsg-python/Cargo.Bazel.lock +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "5ea5454a42d65412a64a48233e83f21d17461b20f8c283260a3de1d964645868", + "checksum": "1bc1ce89845efff4ebef4861d3b9e4e8efeb1ba5b27565db4c6fd18175e1ee59", "crates": { "ahash 0.4.7": { "name": "ahash", diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml index b88adbc42d9..71c5b498bae 100644 --- a/python/extractor/tsg-python/Cargo.toml +++ b/python/extractor/tsg-python/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" # When changing/updating these, the `Cargo.Bazel.lock` file has to be regenerated. # Check out the documentation at https://bazelbuild.github.io/rules_rust/crate_universe.html#repinning--updating-dependencies -# for how to do so. The bazel repository for the tsg-python project is called `tsg_python_crate_index`, +# for how to do so. The bazel repository for the tsg-python project is called `py_deps`, # and instead of calling `bazel sync`, `./build --bazel sync` should be used instead, to always use the correct bazel version. [dependencies] anyhow = "1.0" diff --git a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel index 98b636c0d79..101fdad2100 100644 --- a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel +++ b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel @@ -1,6 +1,6 @@ load("@rules_rust//cargo:defs.bzl", "cargo_build_script") load("@rules_rust//rust:defs.bzl", "rust_library") -load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") +load("@py_deps//:defs.bzl", "aliases", "all_crate_deps") package(default_visibility = ["//visibility:public"]) From 38169a981d295229474f1136fa8a8c3562fd157d Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 19 Mar 2024 15:07:02 +0000 Subject: [PATCH 175/497] Python: Shorten `tree-sitter-python` directory name The current name results in a path that is more than 260 characters long, and this causes issues for the build on Windows. --- python/extractor/tsg-python/Cargo.toml | 2 +- .../extractor/tsg-python/{tree-sitter-python => tsp}/.gitignore | 0 .../extractor/tsg-python/{tree-sitter-python => tsp}/.npmignore | 0 .../tsg-python/{tree-sitter-python => tsp}/BUILD.bazel | 0 .../extractor/tsg-python/{tree-sitter-python => tsp}/Cargo.toml | 0 python/extractor/tsg-python/{tree-sitter-python => tsp}/LICENSE | 0 .../extractor/tsg-python/{tree-sitter-python => tsp}/README.md | 0 .../tsg-python/{tree-sitter-python => tsp}/binding.gyp | 0 .../{tree-sitter-python => tsp}/bindings/node/binding.cc | 0 .../{tree-sitter-python => tsp}/bindings/node/index.js | 0 .../{tree-sitter-python => tsp}/bindings/rust/README.md | 0 .../{tree-sitter-python => tsp}/bindings/rust/build.rs | 0 .../tsg-python/{tree-sitter-python => tsp}/bindings/rust/lib.rs | 0 .../extractor/tsg-python/{tree-sitter-python => tsp}/grammar.js | 0 .../extractor/tsg-python/{tree-sitter-python => tsp}/log.html | 0 .../tsg-python/{tree-sitter-python => tsp}/package.json | 0 .../{tree-sitter-python => tsp}/queries/highlights.scm | 0 .../tsg-python/{tree-sitter-python => tsp}/queries/tags.scm | 0 .../tsg-python/{tree-sitter-python => tsp}/src/grammar.json | 0 .../tsg-python/{tree-sitter-python => tsp}/src/node-types.json | 0 .../tsg-python/{tree-sitter-python => tsp}/src/parser.c | 0 .../tsg-python/{tree-sitter-python => tsp}/src/scanner.cc | 0 .../{tree-sitter-python => tsp}/src/tree_sitter/parser.h | 0 23 files changed, 1 insertion(+), 1 deletion(-) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/.gitignore (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/.npmignore (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/BUILD.bazel (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/Cargo.toml (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/LICENSE (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/README.md (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/binding.gyp (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/bindings/node/binding.cc (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/bindings/node/index.js (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/bindings/rust/README.md (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/bindings/rust/build.rs (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/bindings/rust/lib.rs (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/grammar.js (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/log.html (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/package.json (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/queries/highlights.scm (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/queries/tags.scm (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/src/grammar.json (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/src/node-types.json (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/src/parser.c (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/src/scanner.cc (100%) rename python/extractor/tsg-python/{tree-sitter-python => tsp}/src/tree_sitter/parser.h (100%) diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml index 71c5b498bae..b183aa83dcf 100644 --- a/python/extractor/tsg-python/Cargo.toml +++ b/python/extractor/tsg-python/Cargo.toml @@ -17,7 +17,7 @@ smallvec = { version="1.6", features=["union"] } thiserror = "1.0" tree-sitter = "0.20.4" tree-sitter-graph = "0.7.0" -tree-sitter-python = {path = "tree-sitter-python"} +tree-sitter-python = {path = "tsp"} clap = "2.32" [dependencies.string-interner] diff --git a/python/extractor/tsg-python/tree-sitter-python/.gitignore b/python/extractor/tsg-python/tsp/.gitignore similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/.gitignore rename to python/extractor/tsg-python/tsp/.gitignore diff --git a/python/extractor/tsg-python/tree-sitter-python/.npmignore b/python/extractor/tsg-python/tsp/.npmignore similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/.npmignore rename to python/extractor/tsg-python/tsp/.npmignore diff --git a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel b/python/extractor/tsg-python/tsp/BUILD.bazel similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/BUILD.bazel rename to python/extractor/tsg-python/tsp/BUILD.bazel diff --git a/python/extractor/tsg-python/tree-sitter-python/Cargo.toml b/python/extractor/tsg-python/tsp/Cargo.toml similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/Cargo.toml rename to python/extractor/tsg-python/tsp/Cargo.toml diff --git a/python/extractor/tsg-python/tree-sitter-python/LICENSE b/python/extractor/tsg-python/tsp/LICENSE similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/LICENSE rename to python/extractor/tsg-python/tsp/LICENSE diff --git a/python/extractor/tsg-python/tree-sitter-python/README.md b/python/extractor/tsg-python/tsp/README.md similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/README.md rename to python/extractor/tsg-python/tsp/README.md diff --git a/python/extractor/tsg-python/tree-sitter-python/binding.gyp b/python/extractor/tsg-python/tsp/binding.gyp similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/binding.gyp rename to python/extractor/tsg-python/tsp/binding.gyp diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc b/python/extractor/tsg-python/tsp/bindings/node/binding.cc similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc rename to python/extractor/tsg-python/tsp/bindings/node/binding.cc diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js b/python/extractor/tsg-python/tsp/bindings/node/index.js similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js rename to python/extractor/tsg-python/tsp/bindings/node/index.js diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md b/python/extractor/tsg-python/tsp/bindings/rust/README.md similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md rename to python/extractor/tsg-python/tsp/bindings/rust/README.md diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs b/python/extractor/tsg-python/tsp/bindings/rust/build.rs similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs rename to python/extractor/tsg-python/tsp/bindings/rust/build.rs diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs b/python/extractor/tsg-python/tsp/bindings/rust/lib.rs similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs rename to python/extractor/tsg-python/tsp/bindings/rust/lib.rs diff --git a/python/extractor/tsg-python/tree-sitter-python/grammar.js b/python/extractor/tsg-python/tsp/grammar.js similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/grammar.js rename to python/extractor/tsg-python/tsp/grammar.js diff --git a/python/extractor/tsg-python/tree-sitter-python/log.html b/python/extractor/tsg-python/tsp/log.html similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/log.html rename to python/extractor/tsg-python/tsp/log.html diff --git a/python/extractor/tsg-python/tree-sitter-python/package.json b/python/extractor/tsg-python/tsp/package.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/package.json rename to python/extractor/tsg-python/tsp/package.json diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm b/python/extractor/tsg-python/tsp/queries/highlights.scm similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm rename to python/extractor/tsg-python/tsp/queries/highlights.scm diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm b/python/extractor/tsg-python/tsp/queries/tags.scm similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/queries/tags.scm rename to python/extractor/tsg-python/tsp/queries/tags.scm diff --git a/python/extractor/tsg-python/tree-sitter-python/src/grammar.json b/python/extractor/tsg-python/tsp/src/grammar.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/grammar.json rename to python/extractor/tsg-python/tsp/src/grammar.json diff --git a/python/extractor/tsg-python/tree-sitter-python/src/node-types.json b/python/extractor/tsg-python/tsp/src/node-types.json similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/node-types.json rename to python/extractor/tsg-python/tsp/src/node-types.json diff --git a/python/extractor/tsg-python/tree-sitter-python/src/parser.c b/python/extractor/tsg-python/tsp/src/parser.c similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/parser.c rename to python/extractor/tsg-python/tsp/src/parser.c diff --git a/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc b/python/extractor/tsg-python/tsp/src/scanner.cc similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/scanner.cc rename to python/extractor/tsg-python/tsp/src/scanner.cc diff --git a/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h b/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h similarity index 100% rename from python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h rename to python/extractor/tsg-python/tsp/src/tree_sitter/parser.h From d12ac1e7ce083f4a8cd55f5ace07f33cf81e806a Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 19 Mar 2024 15:34:48 +0000 Subject: [PATCH 176/497] Python: Use `tsp` instead of `tree-sitter-python` --- python/extractor/tsg-python/BUILD.bazel | 2 +- python/extractor/tsg-python/Cargo.Bazel.lock | 212 +++++++++---------- python/extractor/tsg-python/Cargo.lock | 18 +- python/extractor/tsg-python/Cargo.toml | 2 +- python/extractor/tsg-python/src/main.rs | 2 +- python/extractor/tsg-python/tsp/BUILD.bazel | 6 +- python/extractor/tsg-python/tsp/Cargo.toml | 2 +- 7 files changed, 122 insertions(+), 122 deletions(-) diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel index cf95619c5a1..204bd89475a 100644 --- a/python/extractor/tsg-python/BUILD.bazel +++ b/python/extractor/tsg-python/BUILD.bazel @@ -12,5 +12,5 @@ codeql_rust_binary( visibility = ["//visibility:public"], deps = all_crate_deps( normal = True, - ) + ["//python/extractor/tsg-python/tree-sitter-python"], + ) + ["//python/extractor/tsg-python/tsp"], ) diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock index 3b777f1e5a4..e3b5a249e4f 100644 --- a/python/extractor/tsg-python/Cargo.Bazel.lock +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "1bc1ce89845efff4ebef4861d3b9e4e8efeb1ba5b27565db4c6fd18175e1ee59", + "checksum": "35a1ce4b6c4f997c496c11d3a8fcfaadc5833dfd41bebb022941687d73dde159", "crates": { "ahash 0.4.7": { "name": "ahash", @@ -7,7 +7,7 @@ "package_url": "https://github.com/tkaitchuck/ahash", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ahash/0.4.7/download", + "url": "https://static.crates.io/crates/ahash/0.4.7/download", "sha256": "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" } }, @@ -43,7 +43,7 @@ "package_url": "https://github.com/BurntSushi/aho-corasick", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download", + "url": "https://static.crates.io/crates/aho-corasick/0.7.18/download", "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" } }, @@ -95,7 +95,7 @@ "package_url": "https://github.com/ogham/rust-ansi-term", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ansi_term/0.11.0/download", + "url": "https://static.crates.io/crates/ansi_term/0.11.0/download", "sha256": "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" } }, @@ -141,7 +141,7 @@ "package_url": "https://github.com/dtolnay/anyhow", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/anyhow/1.0.44/download", + "url": "https://static.crates.io/crates/anyhow/1.0.44/download", "sha256": "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" } }, @@ -207,7 +207,7 @@ "package_url": "https://github.com/softprops/atty", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/atty/0.2.14/download", + "url": "https://static.crates.io/crates/atty/0.2.14/download", "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" } }, @@ -265,7 +265,7 @@ "package_url": "https://github.com/bitflags/bitflags", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "url": "https://static.crates.io/crates/bitflags/1.3.2/download", "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" } }, @@ -307,7 +307,7 @@ "package_url": "https://github.com/alexcrichton/cc-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cc/1.0.70/download", + "url": "https://static.crates.io/crates/cc/1.0.70/download", "sha256": "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" } }, @@ -343,7 +343,7 @@ "package_url": "https://github.com/alexcrichton/cfg-if", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "url": "https://static.crates.io/crates/cfg-if/1.0.0/download", "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" } }, @@ -379,7 +379,7 @@ "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/clap/2.33.3/download", + "url": "https://static.crates.io/crates/clap/2.33.3/download", "sha256": "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" } }, @@ -462,7 +462,7 @@ "package_url": "https://github.com/rust-lang/hashbrown", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hashbrown/0.9.1/download", + "url": "https://static.crates.io/crates/hashbrown/0.9.1/download", "sha256": "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" } }, @@ -514,7 +514,7 @@ "package_url": "https://github.com/hermitcore/libhermit-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download", + "url": "https://static.crates.io/crates/hermit-abi/0.1.19/download", "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" } }, @@ -559,7 +559,7 @@ "package_url": "https://github.com/dtolnay/itoa", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download", + "url": "https://static.crates.io/crates/itoa/1.0.1/download", "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" } }, @@ -595,7 +595,7 @@ "package_url": "https://github.com/rust-lang/libc", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/libc/0.2.101/download", + "url": "https://static.crates.io/crates/libc/0.2.101/download", "sha256": "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" } }, @@ -654,7 +654,7 @@ "package_url": "https://github.com/rust-lang/log", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/log/0.4.14/download", + "url": "https://static.crates.io/crates/log/0.4.14/download", "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" } }, @@ -717,7 +717,7 @@ "package_url": "https://github.com/BurntSushi/memchr", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download", + "url": "https://static.crates.io/crates/memchr/2.4.1/download", "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" } }, @@ -783,7 +783,7 @@ "package_url": "https://github.com/alexcrichton/proc-macro2", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.29/download", + "url": "https://static.crates.io/crates/proc-macro2/1.0.29/download", "sha256": "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" } }, @@ -853,7 +853,7 @@ "package_url": "https://github.com/dtolnay/quote", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/quote/1.0.9/download", + "url": "https://static.crates.io/crates/quote/1.0.9/download", "sha256": "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" } }, @@ -905,7 +905,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex/1.5.5/download", + "url": "https://static.crates.io/crates/regex/1.5.5/download", "sha256": "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" } }, @@ -980,7 +980,7 @@ "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download", + "url": "https://static.crates.io/crates/regex-syntax/0.6.25/download", "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" } }, @@ -1030,7 +1030,7 @@ "package_url": "https://github.com/dtolnay/ryu", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download", + "url": "https://static.crates.io/crates/ryu/1.0.9/download", "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" } }, @@ -1066,7 +1066,7 @@ "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde/1.0.136/download", + "url": "https://static.crates.io/crates/serde/1.0.136/download", "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" } }, @@ -1132,7 +1132,7 @@ "package_url": "https://github.com/serde-rs/json", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download", + "url": "https://static.crates.io/crates/serde_json/1.0.79/download", "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" } }, @@ -1210,7 +1210,7 @@ "package_url": "https://github.com/servo/rust-smallvec", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/smallvec/1.6.1/download", + "url": "https://static.crates.io/crates/smallvec/1.6.1/download", "sha256": "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" } }, @@ -1252,7 +1252,7 @@ "package_url": "https://github.com/robbepop/string-interner", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/string-interner/0.12.2/download", + "url": "https://static.crates.io/crates/string-interner/0.12.2/download", "sha256": "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" } }, @@ -1309,7 +1309,7 @@ "package_url": "https://github.com/dguo/strsim-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download", + "url": "https://static.crates.io/crates/strsim/0.8.0/download", "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" } }, @@ -1344,7 +1344,7 @@ "package_url": "https://github.com/dtolnay/syn", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/syn/1.0.76/download", + "url": "https://static.crates.io/crates/syn/1.0.76/download", "sha256": "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" } }, @@ -1427,7 +1427,7 @@ "package_url": "https://github.com/mgeisler/textwrap", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download", + "url": "https://static.crates.io/crates/textwrap/0.11.0/download", "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" } }, @@ -1471,7 +1471,7 @@ "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thiserror/1.0.29/download", + "url": "https://static.crates.io/crates/thiserror/1.0.29/download", "sha256": "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" } }, @@ -1516,7 +1516,7 @@ "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/thiserror-impl/1.0.29/download", + "url": "https://static.crates.io/crates/thiserror-impl/1.0.29/download", "sha256": "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" } }, @@ -1569,7 +1569,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.4/download", + "url": "https://static.crates.io/crates/tree-sitter/0.20.4/download", "sha256": "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" } }, @@ -1640,7 +1640,7 @@ "package_url": "https://github.com/tree-sitter/tree-sitter-graph/", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/tree-sitter-graph/0.7.0/download", + "url": "https://static.crates.io/crates/tree-sitter-graph/0.7.0/download", "sha256": "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" } }, @@ -1707,72 +1707,6 @@ ], "license_file": null }, - "tree-sitter-python 0.19.0": { - "name": "tree-sitter-python", - "version": "0.19.0", - "package_url": "https://github.com/tree-sitter/tree-sitter-python", - "repository": null, - "targets": [ - { - "Library": { - "crate_name": "tree_sitter_python", - "crate_root": "bindings/rust/lib.rs", - "srcs": [ - "**/*.rs" - ] - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "bindings/rust/build.rs", - "srcs": [ - "**/*.rs" - ] - } - } - ], - "library_target_name": "tree_sitter_python", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "tree-sitter 0.20.4", - "target": "tree_sitter" - }, - { - "id": "tree-sitter-python 0.19.0", - "target": "build_script_build" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.19.0" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "cc 1.0.70", - "target": "cc" - } - ], - "selects": {} - } - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": null - }, "tsg-python 0.1.0": { "name": "tsg-python", "version": "0.1.0", @@ -1828,13 +1762,79 @@ "license_ids": [], "license_file": null }, + "tsp 0.19.0": { + "name": "tsp", + "version": "0.19.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-python", + "repository": null, + "targets": [ + { + "Library": { + "crate_name": "tsp", + "crate_root": "bindings/rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "bindings/rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tsp", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tsp 0.19.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.19.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, "unicode-width 0.1.8": { "name": "unicode-width", "version": "0.1.8", "package_url": "https://github.com/unicode-rs/unicode-width", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-width/0.1.8/download", + "url": "https://static.crates.io/crates/unicode-width/0.1.8/download", "sha256": "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" } }, @@ -1876,7 +1876,7 @@ "package_url": "https://github.com/unicode-rs/unicode-xid", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download", + "url": "https://static.crates.io/crates/unicode-xid/0.2.2/download", "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" } }, @@ -1918,7 +1918,7 @@ "package_url": "https://github.com/contain-rs/vec-map", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download", + "url": "https://static.crates.io/crates/vec_map/0.8.2/download", "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" } }, @@ -1954,7 +1954,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "url": "https://static.crates.io/crates/winapi/0.3.9/download", "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" } }, @@ -2037,7 +2037,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download", "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" } }, @@ -2096,7 +2096,7 @@ "package_url": "https://github.com/retep998/winapi-rs", "repository": { "Http": { - "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" } }, @@ -2152,8 +2152,8 @@ }, "binary_crates": [], "workspace_members": { - "tree-sitter-python 0.19.0": "python/extractor/tsg-python/tree-sitter-python", - "tsg-python 0.1.0": "python/extractor/tsg-python" + "tsg-python 0.1.0": "python/extractor/tsg-python", + "tsp 0.19.0": "python/extractor/tsg-python/tsp" }, "conditions": { "aarch64-apple-darwin": [ diff --git a/python/extractor/tsg-python/Cargo.lock b/python/extractor/tsg-python/Cargo.lock index 9ee8840bde1..c179dd3036f 100644 --- a/python/extractor/tsg-python/Cargo.lock +++ b/python/extractor/tsg-python/Cargo.lock @@ -267,14 +267,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-python" -version = "0.19.0" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tsg-python" version = "0.1.0" @@ -287,7 +279,15 @@ dependencies = [ "thiserror", "tree-sitter", "tree-sitter-graph", - "tree-sitter-python", + "tsp", +] + +[[package]] +name = "tsp" +version = "0.19.0" +dependencies = [ + "cc", + "tree-sitter", ] [[package]] diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml index b183aa83dcf..feecd254159 100644 --- a/python/extractor/tsg-python/Cargo.toml +++ b/python/extractor/tsg-python/Cargo.toml @@ -17,7 +17,7 @@ smallvec = { version="1.6", features=["union"] } thiserror = "1.0" tree-sitter = "0.20.4" tree-sitter-graph = "0.7.0" -tree-sitter-python = {path = "tsp"} +tsp = {path = "tsp"} clap = "2.32" [dependencies.string-interner] diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs index fa528d8138d..ebfcd01a74e 100644 --- a/python/extractor/tsg-python/src/main.rs +++ b/python/extractor/tsg-python/src/main.rs @@ -488,7 +488,7 @@ fn main() -> Result<()> { "bundled `python.tsg`".to_owned() }; let source_path = Path::new(matches.value_of("source").unwrap()); - let language = tree_sitter_python::language(); + let language = tsp::language(); let mut parser = Parser::new(); parser.set_language(language)?; // Statically include `python.tsg`: diff --git a/python/extractor/tsg-python/tsp/BUILD.bazel b/python/extractor/tsg-python/tsp/BUILD.bazel index 101fdad2100..71319e894f6 100644 --- a/python/extractor/tsg-python/tsp/BUILD.bazel +++ b/python/extractor/tsg-python/tsp/BUILD.bazel @@ -7,7 +7,7 @@ package(default_visibility = ["//visibility:public"]) # This will run the build script from the root of the workspace, and # collect the outputs. cargo_build_script( - name = "tsg-build-script", + name = "tsg-build", srcs = ["bindings/rust/build.rs"], data = glob([ "src/**", @@ -18,7 +18,7 @@ cargo_build_script( ) rust_library( - name = "tree-sitter-python", + name = "tsp", srcs = [ "bindings/rust/lib.rs", ], @@ -32,7 +32,7 @@ rust_library( proc_macro_deps = all_crate_deps( proc_macro = True, ), - deps = [":tsg-build-script"] + all_crate_deps( + deps = [":tsg-build"] + all_crate_deps( normal = True, ), ) diff --git a/python/extractor/tsg-python/tsp/Cargo.toml b/python/extractor/tsg-python/tsp/Cargo.toml index 4c863753b93..995f39a3bd9 100644 --- a/python/extractor/tsg-python/tsp/Cargo.toml +++ b/python/extractor/tsg-python/tsp/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "tree-sitter-python" +name = "tsp" description = "Python grammar for the tree-sitter parsing library" version = "0.19.0" authors = [ From 88bfb81b1f508da2b9346c403bc6347809c573bc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 17:14:07 +0000 Subject: [PATCH 177/497] C++: Add change note. --- .../2024-03-19-predicates-for-switches-as-guards-2.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md new file mode 100644 index 00000000000..88b4048f8cd --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. \ No newline at end of file From 97aa301ac9d234254a10ec6ffdb93c808460aa20 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Mar 2024 17:33:23 +0000 Subject: [PATCH 178/497] C++: Accept more test changes. --- .../controlflow/guards-ir/tests.expected | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index 2eb749580b4..cc29559d5d3 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -530,19 +530,27 @@ irGuardsCompare | 7 | 0 < x+0 when CompareGT: ... > ... is true | | 7 | 0 >= x+0 when CompareGT: ... > ... is false | | 7 | x < 0+1 when CompareGT: ... > ... is false | +| 7 | x < 1 when CompareGT: ... > ... is false | | 7 | x >= 0+1 when CompareGT: ... > ... is true | +| 7 | x >= 1 when CompareGT: ... > ... is true | | 17 | 0 < x+1 when CompareLT: ... < ... is false | | 17 | 0 >= x+1 when CompareLT: ... < ... is true | | 17 | 1 < y+0 when CompareGT: ... > ... is true | | 17 | 1 >= y+0 when CompareGT: ... > ... is false | +| 17 | x < 0 when CompareLT: ... < ... is true | | 17 | x < 0+0 when CompareLT: ... < ... is true | +| 17 | x >= 0 when CompareLT: ... < ... is false | | 17 | x >= 0+0 when CompareLT: ... < ... is false | | 17 | y < 1+1 when CompareGT: ... > ... is false | +| 17 | y < 2 when CompareGT: ... > ... is false | | 17 | y >= 1+1 when CompareGT: ... > ... is true | +| 17 | y >= 2 when CompareGT: ... > ... is true | | 26 | 0 < x+0 when CompareGT: ... > ... is true | | 26 | 0 >= x+0 when CompareGT: ... > ... is false | | 26 | x < 0+1 when CompareGT: ... > ... is false | +| 26 | x < 1 when CompareGT: ... > ... is false | | 26 | x >= 0+1 when CompareGT: ... > ... is true | +| 26 | x >= 1 when CompareGT: ... > ... is true | | 31 | - ... != x+0 when CompareEQ: ... == ... is false | | 31 | - ... == x+0 when CompareEQ: ... == ... is true | | 31 | x != -1 when CompareEQ: ... == ... is false | @@ -551,20 +559,28 @@ irGuardsCompare | 31 | x == - ...+0 when CompareEQ: ... == ... is true | | 34 | 10 < j+1 when CompareLT: ... < ... is false | | 34 | 10 >= j+1 when CompareLT: ... < ... is true | +| 34 | j < 10 when CompareLT: ... < ... is true | | 34 | j < 10+0 when CompareLT: ... < ... is true | +| 34 | j >= 10 when CompareLT: ... < ... is false | | 34 | j >= 10+0 when CompareLT: ... < ... is false | | 42 | 10 < j+1 when CompareLT: ... < ... is false | | 42 | 10 >= j+1 when CompareLT: ... < ... is true | +| 42 | j < 10 when CompareLT: ... < ... is true | | 42 | j < 10+0 when CompareLT: ... < ... is true | +| 42 | j >= 10 when CompareLT: ... < ... is false | | 42 | j >= 10+0 when CompareLT: ... < ... is false | | 44 | 0 < z+0 when CompareGT: ... > ... is true | | 44 | 0 >= z+0 when CompareGT: ... > ... is false | | 44 | z < 0+1 when CompareGT: ... > ... is false | +| 44 | z < 1 when CompareGT: ... > ... is false | | 44 | z >= 0+1 when CompareGT: ... > ... is true | +| 44 | z >= 1 when CompareGT: ... > ... is true | | 45 | 0 < y+0 when CompareGT: ... > ... is true | | 45 | 0 >= y+0 when CompareGT: ... > ... is false | | 45 | y < 0+1 when CompareGT: ... > ... is false | +| 45 | y < 1 when CompareGT: ... > ... is false | | 45 | y >= 0+1 when CompareGT: ... > ... is true | +| 45 | y >= 1 when CompareGT: ... > ... is true | | 58 | 0 != x+0 when CompareEQ: ... == ... is false | | 58 | 0 < y+1 when CompareLT: ... < ... is false | | 58 | 0 == x+0 when CompareEQ: ... == ... is true | @@ -573,7 +589,9 @@ irGuardsCompare | 58 | x != 0+0 when CompareEQ: ... == ... is false | | 58 | x == 0 when CompareEQ: ... == ... is true | | 58 | x == 0+0 when CompareEQ: ... == ... is true | +| 58 | y < 0 when CompareLT: ... < ... is true | | 58 | y < 0+0 when CompareLT: ... < ... is true | +| 58 | y >= 0 when CompareLT: ... < ... is false | | 58 | y >= 0+0 when CompareLT: ... < ... is false | | 75 | 0 != x+0 when CompareEQ: ... == ... is false | | 75 | 0 == x+0 when CompareEQ: ... == ... is true | @@ -601,7 +619,9 @@ irGuardsCompare | 94 | x == 0+0 when CompareNE: ... != ... is false | | 102 | 10 < j+1 when CompareLT: ... < ... is false | | 102 | 10 >= j+1 when CompareLT: ... < ... is true | +| 102 | j < 10 when CompareLT: ... < ... is true | | 102 | j < 10+0 when CompareLT: ... < ... is true | +| 102 | j >= 10 when CompareLT: ... < ... is false | | 102 | j >= 10+0 when CompareLT: ... < ... is false | | 109 | 0 != x+0 when CompareEQ: ... == ... is false | | 109 | 0 < y+1 when CompareLT: ... < ... is false | @@ -611,7 +631,9 @@ irGuardsCompare | 109 | x != 0+0 when CompareEQ: ... == ... is false | | 109 | x == 0 when CompareEQ: ... == ... is true | | 109 | x == 0+0 when CompareEQ: ... == ... is true | +| 109 | y < 0 when CompareLT: ... < ... is true | | 109 | y < 0+0 when CompareLT: ... < ... is true | +| 109 | y >= 0 when CompareLT: ... < ... is false | | 109 | y >= 0+0 when CompareLT: ... < ... is false | | 156 | ... + ... != x+0 when CompareEQ: ... == ... is false | | 156 | ... + ... == x+0 when CompareEQ: ... == ... is true | @@ -906,8 +928,49 @@ irGuardsEnsure | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 32 | 32 | irGuardsEnsure_const +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | < | 1 | 11 | 11 | +| test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | >= | 1 | 8 | 8 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 17 | 17 | +| test.c:17:8:17:12 | CompareLT: ... < ... | test.c:17:8:17:8 | Load: x | < | 0 | 18 | 18 | +| test.c:17:17:17:21 | CompareGT: ... > ... | test.c:17:17:17:17 | Load: y | >= | 2 | 18 | 18 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 2 | 2 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 31 | 31 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 34 | 34 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 35 | 35 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 39 | 39 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 42 | 42 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 43 | 43 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 45 | 45 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 46 | 46 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 52 | 52 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 56 | 56 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 58 | 58 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 59 | 59 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | < | 1 | 62 | 62 | +| test.c:26:11:26:15 | CompareGT: ... > ... | test.c:26:11:26:11 | Load: x | >= | 1 | 27 | 27 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | < | 10 | 35 | 35 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 2 | 2 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 39 | 39 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 42 | 42 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 43 | 43 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 45 | 45 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 46 | 46 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 52 | 52 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 56 | 56 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 58 | 58 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 59 | 59 | +| test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:16 | Load: j | >= | 10 | 62 | 62 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 43 | 43 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 45 | 45 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 46 | 46 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | 1 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 45 | 45 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | 1 | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | +| test.c:58:19:58:23 | CompareLT: ... < ... | test.c:58:19:58:19 | Load: y | >= | 0 | 62 | 62 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | != | 0 | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 76 | 76 | | test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 85 | 85 | @@ -922,8 +985,15 @@ irGuardsEnsure_const | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 109 | 109 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 110 | 110 | | test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 113 | 113 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | < | 10 | 103 | 103 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 70 | 70 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 107 | 107 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 109 | 109 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 110 | 110 | +| test.c:102:16:102:21 | CompareLT: ... < ... | test.c:102:16:102:16 | Load: j | >= | 10 | 113 | 113 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 109 | 109 | | test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 113 | 113 | +| test.c:109:19:109:23 | CompareLT: ... < ... | test.c:109:19:109:19 | Load: y | >= | 0 | 113 | 113 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | From f6f707352060095d9021c2d89b45e66554dfab8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 00:15:31 +0000 Subject: [PATCH 179/497] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 6 +++--- java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index ad4f7bdd07f..03d97bcb9d8 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -76,13 +76,13 @@ jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,51,1,45,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,43,2 -java.lang,38,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 +java.io,51,1,47,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,45,2 +java.lang,38,3,102,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,59,43 java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,524,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,478 +java.util,47,2,529,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,49,480 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index a37dc0a71ef..ce93e37f09a 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,738,239,80,,9,,,25 + Java Standard Library,``java.*``,10,746,239,80,,9,,,25 Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,481,118,5,,28,14,,35 Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,209 - Totals,,308,18954,2559,338,16,128,33,1,409 + Totals,,308,18962,2559,338,16,128,33,1,409 From 10efcc2bb449726a4bdcddcfe31e46c10b13cefa Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 19 Mar 2024 11:52:19 +0100 Subject: [PATCH 180/497] Swift: add `-headerpad_max_install_names` to link options --- swift/extractor/BUILD.bazel | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/swift/extractor/BUILD.bazel b/swift/extractor/BUILD.bazel index f711b3b9d2b..42c1105053c 100644 --- a/swift/extractor/BUILD.bazel +++ b/swift/extractor/BUILD.bazel @@ -17,6 +17,10 @@ swift_cc_binary( "//swift/third_party/swift-llvm-support", "@absl//absl/strings", ], + linkopts = select({ + "@platforms//os:macos": ["-headerpad_max_install_names"], + "//conditions:default": [], + }), ) sh_binary( From 589a5039c84c318d20b16d794343276fa46dd3ad Mon Sep 17 00:00:00 2001 From: Alex Denisov Date: Wed, 20 Mar 2024 09:23:12 +0100 Subject: [PATCH 181/497] Swift: update Swift 5.10 dependencies --- swift/third_party/load.bzl | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/swift/third_party/load.bzl b/swift/third_party/load.bzl index 6f876f333f2..7e55ef50601 100644 --- a/swift/third_party/load.bzl +++ b/swift/third_party/load.bzl @@ -1,11 +1,11 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -_swift_prebuilt_version = "swift-5.9.2-RELEASE.299" +_swift_prebuilt_version = "swift-5.10-RELEASE.316" _swift_sha_map = { - "Linux-X64": "19e8150251601e7b27e76d1a405a72c459f9a3e2949a1e360fde15ebb4d87409", - "macOS-ARM64": "4aaec59489c1607be0bd9ea522c1772f9368e7e29197167d3db73e0eb4fa605f", - "macOS-X64": "16f3a248269a06b00c6a40567ca06d5494d9a0ce24e7dd7cb8534828639418e8", + "Linux-X64": "8c6769a39ec94517ed56a9bf437ffe391ab8d76268f7ece1464deb6cf414ef40", + "macOS-ARM64": "8541653cd3d78fd14a67150f12c96b9f522b2b51231b5d3085e356ed5f5f0a6b", + "macOS-X64": "69fafb0c93029e1824bc70e9d3b05d6359077da41d61eed014a4c82a35e9b56c", } _swift_arch_map = { @@ -20,13 +20,13 @@ _toolchain_info = { platform = "ubuntu2004", suffix = "ubuntu20.04", extension = "tar.gz", - sha = "93477b80db16f3e5085738ade05478ed435793e39864418e737a10ac306cbd8c", + sha = "935d0b68757d9b1aceb6410fe0b126a28a07e362553ebba0c4bcd1c9a55d0bc5", ), "macos": struct( platform = "xcode", suffix = "osx", extension = "pkg", - sha = "68951c313b4b559878fc5be27e460c877f98d14e161f755220b063123919e896", + sha = "ef9bb6b38711324e1b1c89de44a27d9519d0711924c57f4df541734b04aaf6cc", ), } @@ -124,14 +124,6 @@ def load_dependencies(module_ctx = None, repository_name = "codeql"): ), build_file = _build(repository_name, "swift-llvm-support"), sha256 = sha256, - patch_args = ["-p1"], - patches = [ - "@%s//swift/third_party/swift-llvm-support:patches/%s.patch" % (repository_name, patch_name) - for patch_name in ( - "remove-redundant-operators", - "add-constructor-to-Compilation", - ) - ], ) _toolchains(repository_name) From 1cfde49297fe27f60e27c516cdb4773d4c98b8d9 Mon Sep 17 00:00:00 2001 From: Alex Denisov Date: Wed, 20 Mar 2024 09:24:25 +0100 Subject: [PATCH 182/497] Swift: remove unused patches --- .../add-constructor-to-Compilation.patch | 17 ------------- .../patches/remove-redundant-operators.patch | 24 ------------------- 2 files changed, 41 deletions(-) delete mode 100644 swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch delete mode 100644 swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch diff --git a/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch b/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch deleted file mode 100644 index a663e6db42a..00000000000 --- a/swift/third_party/swift-llvm-support/patches/add-constructor-to-Compilation.patch +++ /dev/null @@ -1,17 +0,0 @@ -In C++20 aggregate initialization on classes with user-declared constructor is not -available, while in C++11-C++17 it was available if they were defaulted or deleted. - -diff --git a/include/swift/Driver/Compilation.h b/include/swift/Driver/Compilation.h -index ee76f92e0de..bd987157593 100644 ---- a/include/swift/Driver/Compilation.h -+++ b/include/swift/Driver/Compilation.h -@@ -89,6 +89,9 @@ public: - /// This data is used for cross-module module dependencies. - fine_grained_dependencies::ModuleDepGraph depGraph; - -+ Result(bool hadAbnormalExit = false, int exitCode = 0, fine_grained_dependencies::ModuleDepGraph depGraph = {}) -+ : hadAbnormalExit{hadAbnormalExit}, exitCode{exitCode}, depGraph{std::move(depGraph)} {} -+ - Result(const Result &) = delete; - Result &operator=(const Result &) = delete; - diff --git a/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch b/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch deleted file mode 100644 index 03f1c0ff08c..00000000000 --- a/swift/third_party/swift-llvm-support/patches/remove-redundant-operators.patch +++ /dev/null @@ -1,24 +0,0 @@ -In C++20 the removed operators are available via operator rewriting and -implicit constructors, providing them leads to ambiguity. - -diff --git a/include/swift/SIL/SILValue.h b/include/swift/SIL/SILValue.h -index 378ca039c7e..37c119c50c1 100644 ---- a/include/swift/SIL/SILValue.h -+++ b/include/swift/SIL/SILValue.h -@@ -271,16 +271,6 @@ struct ValueOwnershipKind { - - explicit operator bool() const { return value != OwnershipKind::Any; } - -- bool operator==(ValueOwnershipKind other) const { -- return value == other.value; -- } -- bool operator!=(ValueOwnershipKind other) const { -- return !(value == other.value); -- } -- -- bool operator==(innerty other) const { return value == other; } -- bool operator!=(innerty other) const { return !(value == other); } -- - /// We merge by moving down the lattice. - ValueOwnershipKind merge(ValueOwnershipKind rhs) const { - return value.meet(rhs.value); From 0f0acc0428fd1e7fc16ce5223939c5a305c121a2 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 20 Mar 2024 08:52:14 +0100 Subject: [PATCH 183/497] Ruby: Add barrier guard flow tests --- .../barrier-guards/barrier-flow.expected | 47 +++++++++++ .../dataflow/barrier-guards/barrier-flow.ql | 23 ++++++ .../barrier-guards/barrier-guards.expected | 28 +++++++ .../dataflow/barrier-guards/barrier_flow.rb | 79 +++++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected create mode 100644 ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql create mode 100644 ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected new file mode 100644 index 00000000000..d3d53177f66 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected @@ -0,0 +1,47 @@ +testFailures +edges +| barrier_flow.rb:2:5:2:5 | x | barrier_flow.rb:4:10:4:10 | x | provenance | | +| barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:2:5:2:5 | x | provenance | | +| barrier_flow.rb:8:5:8:5 | x | barrier_flow.rb:11:14:11:14 | x | provenance | | +| barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:8:5:8:5 | x | provenance | | +| barrier_flow.rb:24:5:24:5 | x | barrier_flow.rb:26:10:26:10 | x | provenance | | +| barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:24:5:24:5 | x | provenance | | +| barrier_flow.rb:36:5:36:5 | x | barrier_flow.rb:42:10:42:10 | x | provenance | | +| barrier_flow.rb:36:9:36:17 | call to source | barrier_flow.rb:36:5:36:5 | x | provenance | | +| barrier_flow.rb:46:5:46:5 | x | barrier_flow.rb:50:10:50:10 | x | provenance | | +| barrier_flow.rb:46:9:46:17 | call to source | barrier_flow.rb:46:5:46:5 | x | provenance | | +| barrier_flow.rb:54:5:54:5 | x | barrier_flow.rb:62:10:62:10 | x | provenance | | +| barrier_flow.rb:54:9:54:17 | call to source | barrier_flow.rb:54:5:54:5 | x | provenance | | +| barrier_flow.rb:66:5:66:5 | x | barrier_flow.rb:78:10:78:10 | x | provenance | | +| barrier_flow.rb:66:9:66:17 | call to source | barrier_flow.rb:66:5:66:5 | x | provenance | | +nodes +| barrier_flow.rb:2:5:2:5 | x | semmle.label | x | +| barrier_flow.rb:2:9:2:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:4:10:4:10 | x | semmle.label | x | +| barrier_flow.rb:8:5:8:5 | x | semmle.label | x | +| barrier_flow.rb:8:9:8:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:11:14:11:14 | x | semmle.label | x | +| barrier_flow.rb:24:5:24:5 | x | semmle.label | x | +| barrier_flow.rb:24:9:24:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:26:10:26:10 | x | semmle.label | x | +| barrier_flow.rb:36:5:36:5 | x | semmle.label | x | +| barrier_flow.rb:36:9:36:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:42:10:42:10 | x | semmle.label | x | +| barrier_flow.rb:46:5:46:5 | x | semmle.label | x | +| barrier_flow.rb:46:9:46:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:50:10:50:10 | x | semmle.label | x | +| barrier_flow.rb:54:5:54:5 | x | semmle.label | x | +| barrier_flow.rb:54:9:54:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:62:10:62:10 | x | semmle.label | x | +| barrier_flow.rb:66:5:66:5 | x | semmle.label | x | +| barrier_flow.rb:66:9:66:17 | call to source | semmle.label | call to source | +| barrier_flow.rb:78:10:78:10 | x | semmle.label | x | +subpaths +#select +| barrier_flow.rb:4:10:4:10 | x | barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:4:10:4:10 | x | $@ | barrier_flow.rb:2:9:2:17 | call to source | call to source | +| barrier_flow.rb:11:14:11:14 | x | barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:11:14:11:14 | x | $@ | barrier_flow.rb:8:9:8:17 | call to source | call to source | +| barrier_flow.rb:26:10:26:10 | x | barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:26:10:26:10 | x | $@ | barrier_flow.rb:24:9:24:17 | call to source | call to source | +| barrier_flow.rb:42:10:42:10 | x | barrier_flow.rb:36:9:36:17 | call to source | barrier_flow.rb:42:10:42:10 | x | $@ | barrier_flow.rb:36:9:36:17 | call to source | call to source | +| barrier_flow.rb:50:10:50:10 | x | barrier_flow.rb:46:9:46:17 | call to source | barrier_flow.rb:50:10:50:10 | x | $@ | barrier_flow.rb:46:9:46:17 | call to source | call to source | +| barrier_flow.rb:62:10:62:10 | x | barrier_flow.rb:54:9:54:17 | call to source | barrier_flow.rb:62:10:62:10 | x | $@ | barrier_flow.rb:54:9:54:17 | call to source | call to source | +| barrier_flow.rb:78:10:78:10 | x | barrier_flow.rb:66:9:66:17 | call to source | barrier_flow.rb:78:10:78:10 | x | $@ | barrier_flow.rb:66:9:66:17 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql new file mode 100644 index 00000000000..55bc8c9e529 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql @@ -0,0 +1,23 @@ +/** + * @kind path-problem + */ + +import codeql.ruby.AST +import codeql.ruby.CFG +import TestUtilities.InlineFlowTest +import codeql.ruby.dataflow.BarrierGuards +import PathGraph + +module FlowConfig implements DataFlow::ConfigSig { + predicate isSource = DefaultFlowConfig::isSource/1; + + predicate isSink = DefaultFlowConfig::isSink/1; + + predicate isBarrier(DataFlow::Node n) { n instanceof StringConstCompareBarrier } +} + +import ValueFlowTest + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected index 798f7c3e3a3..cc96a29852c 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected @@ -36,6 +36,8 @@ newStyleBarrierGuards | barrier-guards.rb:276:5:276:7 | foo | | barrier-guards.rb:282:5:282:7 | foo | | barrier-guards.rb:292:5:292:7 | foo | +| barrier_flow.rb:19:14:19:14 | x | +| barrier_flow.rb:32:10:32:10 | x | controls | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:4:5:4:7 | foo | true | | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:6:5:6:7 | foo | false | @@ -331,3 +333,29 @@ controls | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:291:1:292:19 | [no-match] when ... | no-match | | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:292:5:292:7 | foo | match | | barrier-guards.rb:291:6:291:6 | g | barrier-guards.rb:294:5:294:7 | foo | no-match | +| barrier_flow.rb:10:8:10:18 | ... != ... | barrier_flow.rb:11:9:11:14 | self | true | +| barrier_flow.rb:18:8:18:18 | ... == ... | barrier_flow.rb:19:9:19:14 | self | true | +| barrier_flow.rb:26:19:26:29 | ... == ... | barrier_flow.rb:26:5:26:10 | self | false | +| barrier_flow.rb:32:19:32:29 | ... != ... | barrier_flow.rb:32:5:32:10 | self | false | +| barrier_flow.rb:38:8:38:18 | ... != ... | barrier_flow.rb:39:9:39:9 | x | true | +| barrier_flow.rb:48:23:48:33 | ... == ... | barrier_flow.rb:48:5:48:5 | x | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:9:57:14 | return | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:9:57:34 | ... unless ... | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:57:23:57:23 | x | true | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:9:59:14 | return | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:9:59:34 | ... unless ... | false | +| barrier_flow.rb:56:8:56:8 | b | barrier_flow.rb:59:23:59:23 | x | false | +| barrier_flow.rb:57:23:57:34 | ... == ... | barrier_flow.rb:57:9:57:14 | return | false | +| barrier_flow.rb:57:23:57:34 | ... == ... | barrier_flow.rb:57:9:57:34 | ... unless ... | true | +| barrier_flow.rb:59:23:59:34 | ... == ... | barrier_flow.rb:59:9:59:14 | return | false | +| barrier_flow.rb:59:23:59:34 | ... == ... | barrier_flow.rb:59:9:59:34 | ... unless ... | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:69:9:71:11 | if ... | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:69:12:69:12 | x | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:70:13:70:18 | return | true | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:73:9:75:11 | if ... | false | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:73:12:73:12 | x | false | +| barrier_flow.rb:68:8:68:8 | b | barrier_flow.rb:74:13:74:18 | return | false | +| barrier_flow.rb:69:12:69:23 | ... != ... | barrier_flow.rb:69:9:71:11 | if ... | false | +| barrier_flow.rb:69:12:69:23 | ... != ... | barrier_flow.rb:70:13:70:18 | return | true | +| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:73:9:75:11 | if ... | false | +| barrier_flow.rb:73:12:73:23 | ... != ... | barrier_flow.rb:74:13:74:18 | return | true | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb new file mode 100644 index 00000000000..afd23176bda --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb @@ -0,0 +1,79 @@ +def m1 + x = source(1) + + sink x # $ hasValueFlow=1 +end + +def m2 + x = source(2) + + if x != "safe" then + sink x # $ hasValueFlow=2 + end +end + +def m3 + x = source(3) + + if x == "safe" then + sink x # $ guarded + end +end + +def m4 + x = source(4) + + sink x unless x == "safe" # $ hasValueFlow=4 +end + +def m5 + x = source(5) + + sink x unless x != "safe" # $ guarded +end + +def m6 + x = source(6) + + if x != "safe" then + x = "safe" + end + + sink x # $ SPURIOUS hasValueFlow=6 +end + +def m7 + x = source(7) + + x = "safe" unless x == "safe" + + sink x # $ SPURIOUS hasValueFlow=7 +end + +def m8(b) + x = source(8) + + if b then + return unless x == "safe1" + else + return unless x == "safe2" + end + + sink x # $ SPURIOUS hasValueFlow=8 +end + +def m9(b) + x = source(9) + + if b then + if x != "safe1" then + return + end + else + if x != "safe2" then + return + end + end + + sink x # $ SPURIOUS hasValueFlow=9 +end From 90779f4413631559f7f316d39af79a6856a42646 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 20 Mar 2024 08:52:20 +0100 Subject: [PATCH 184/497] Ruby: Extend barrier guards to handle phi inputs --- .../dataflow/internal/DataFlowPrivate.qll | 109 ++- .../ruby/dataflow/internal/DataFlowPublic.qll | 32 +- .../codeql/ruby/dataflow/internal/SsaImpl.qll | 8 +- .../barrier-guards/barrier-flow.expected | 24 - .../barrier-guards/barrier-guards.expected | 8 + .../dataflow/barrier-guards/barrier-guards.ql | 2 + .../dataflow/barrier-guards/barrier_flow.rb | 8 +- .../dataflow/local/DataflowStep.expected | 884 +++++++++++++----- .../dataflow/local/TaintStep.expected | 884 +++++++++++++----- shared/ssa/codeql/ssa/Ssa.qll | 50 +- 10 files changed, 1527 insertions(+), 482 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 3b97ebcf4c8..0aa58d7d18a 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -72,47 +72,51 @@ CfgNodes::ExprCfgNode getAPostUpdateNodeForArg(Argument arg) { not exists(getALastEvalNode(result)) } -/** Provides predicates related to local data flow. */ -module LocalFlow { - private import codeql.ruby.dataflow.internal.SsaImpl - - /** An SSA definition into which another SSA definition may flow. */ - private class SsaInputDefinitionExtNode extends SsaDefinitionExtNode { - SsaInputDefinitionExtNode() { - def instanceof Ssa::PhiNode - or - def instanceof SsaImpl::PhiReadNode - } +/** An SSA definition into which another SSA definition may flow. */ +class SsaInputDefinitionExt extends SsaImpl::DefinitionExt { + SsaInputDefinitionExt() { + this instanceof Ssa::PhiNode + or + this instanceof SsaImpl::PhiReadNode } + predicate hasInputFromBlock(SsaImpl::DefinitionExt def, BasicBlock bb, int i, BasicBlock input) { + SsaImpl::lastRefBeforeRedefExt(def, bb, i, input, this) + } +} + +/** Provides predicates related to local data flow. */ +module LocalFlow { /** * Holds if `nodeFrom` is a node for SSA definition `def`, which can reach `next`. */ pragma[nomagic] private predicate localFlowSsaInputFromDef( - SsaDefinitionExtNode nodeFrom, SsaImpl::DefinitionExt def, SsaInputDefinitionExtNode next + SsaDefinitionExtNode nodeFrom, SsaImpl::DefinitionExt def, SsaInputNode nodeTo ) { - exists(BasicBlock bb, int i | - lastRefBeforeRedefExt(def, bb, i, next.getDefinitionExt()) and + exists(BasicBlock bb, int i, BasicBlock input, SsaInputDefinitionExt next | + next.hasInputFromBlock(def, bb, i, input) and def = nodeFrom.getDefinitionExt() and def.definesAt(_, bb, i, _) and - nodeFrom != next + nodeTo = TSsaInputNode(next, input) ) } /** * Holds if `nodeFrom` is a last read of SSA definition `def`, which - * can reach `next`. + * can reach `nodeTo`. */ pragma[nomagic] - predicate localFlowSsaInputFromRead( - SsaImpl::DefinitionExt def, Node nodeFrom, SsaInputDefinitionExtNode next - ) { - exists(BasicBlock bb, int i, CfgNodes::ExprCfgNode exprFrom | - SsaImpl::lastRefBeforeRedefExt(def, bb, i, next.getDefinitionExt()) and + predicate localFlowSsaInputFromRead(SsaImpl::DefinitionExt def, Node nodeFrom, SsaInputNode nodeTo) { + exists( + BasicBlock bb, int i, CfgNodes::ExprCfgNode exprFrom, BasicBlock input, + SsaInputDefinitionExt next + | + next.hasInputFromBlock(def, bb, i, input) and exprFrom = bb.getNode(i) and exprFrom.getExpr() instanceof VariableReadAccess and - exprFrom = [nodeFrom.asExpr(), nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode().asExpr()] + exprFrom = [nodeFrom.asExpr(), nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode().asExpr()] and + nodeTo = TSsaInputNode(next, input) ) } @@ -181,7 +185,7 @@ module LocalFlow { or // Flow from SSA definition to first read def = nodeFrom.(SsaDefinitionExtNode).getDefinitionExt() and - firstReadExt(def, nodeTo.asExpr()) + SsaImpl::firstReadExt(def, nodeTo.asExpr()) or // Flow from post-update read to next read localSsaFlowStepUseUse(def, nodeFrom.(PostUpdateNodeImpl).getPreUpdateNode(), nodeTo) @@ -189,6 +193,9 @@ module LocalFlow { // Flow into phi (read) SSA definition node from def localFlowSsaInputFromDef(nodeFrom, def, nodeTo) or + nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def and + def = nodeFrom.(SsaInputNode).getDefinitionExt() + or localFlowSsaParamInput(nodeFrom, nodeTo) and def = nodeTo.(SsaDefinitionExtNode).getDefinitionExt() } @@ -530,6 +537,9 @@ private module Cached { TExprNode(CfgNodes::ExprCfgNode n) or TReturningNode(CfgNodes::ReturningCfgNode n) { exists(n.getReturnedValueNode()) } or TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) or + TSsaInputNode(SsaInputDefinitionExt def, BasicBlock input) { + def.hasInputFromBlock(_, _, _, input) + } or TCapturedVariableNode(VariableCapture::CapturedVariable v) or TNormalParameterNode(Parameter p) { p instanceof SimpleParameter or @@ -802,6 +812,8 @@ import Cached predicate nodeIsHidden(Node n) { n.(SsaDefinitionExtNode).isHidden() or + n instanceof SsaInputNode + or n = LocalFlow::getParameterDefNode(_) or exists(AstNode desug | @@ -863,6 +875,57 @@ class SsaDefinitionExtNode extends NodeImpl, TSsaDefinitionExtNode { override string toStringImpl() { result = def.toString() } } +/** + * A node that represents an input to an SSA phi (read) definition. + * + * This allows for barrier guards to filter input to phi nodes. For example, in + * + * ```rb + * x = taint + * if x != "safe" then + * x = "safe" + * end + * sink x + * ``` + * + * the `false` edge out of `x != "safe"` guards the input from `x = taint` into the + * `phi` node after the condition. + * + * It is also relevant to filter input into phi read nodes: + * + * ```rb + * x = taint + * if b then + * if x != "safe1" then + * return + * end + * else + * if x != "safe2" then + * return + * end + * end + * + * sink x + * ``` + * + * both inputs into the phi read node after the outer condition are guarded. + */ +class SsaInputNode extends NodeImpl, TSsaInputNode { + SsaImpl::DefinitionExt def; + BasicBlock input; + + SsaInputNode() { this = TSsaInputNode(def, input) } + + /** Gets the underlying SSA definition. */ + SsaImpl::DefinitionExt getDefinitionExt() { result = def } + + override CfgScope getCfgScope() { result = input.getScope() } + + override Location getLocationImpl() { result = input.getLastNode().getLocation() } + + override string toStringImpl() { result = "[input] " + def } +} + /** An SSA definition for a `self` variable. */ class SsaSelfDefinitionNode extends SsaDefinitionExtNode { private SelfVariable self; diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index c1c625a2316..7443f24f038 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -856,24 +856,52 @@ private predicate sameSourceVariable(Ssa::Definition def1, Ssa::Definition def2) * in data flow and taint tracking. */ module BarrierGuard { + private import SsaImpl as SsaImpl + pragma[nomagic] private predicate guardChecksSsaDef(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def) { guardChecks(g, def.getARead(), branch) } pragma[nomagic] - private predicate guardControlsSsaDef( + private predicate guardControlsSsaRead( CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, Node n ) { def.getARead() = n.asExpr() and guardControlsBlock(g, n.asExpr().getBasicBlock(), branch) } + pragma[nomagic] + private predicate guardControlsPhiInput( + CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input, + SsaInputDefinitionExt phi + ) { + phi.hasInputFromBlock(def, _, _, input) and + ( + guardControlsBlock(g, input, branch) + or + exists(SuccessorTypes::ConditionalSuccessor s | + g = input.getLastNode() and + s.getValue() = branch and + input.getASuccessor(s) = phi.getBasicBlock() + ) + ) + } + /** Gets a node that is safely guarded by the given guard check. */ Node getABarrierNode() { exists(CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def | guardChecksSsaDef(g, branch, def) and - guardControlsSsaDef(g, branch, def, result) + guardControlsSsaRead(g, branch, def, result) + ) + or + exists( + CfgNodes::AstCfgNode g, boolean branch, Ssa::Definition def, BasicBlock input, + SsaInputDefinitionExt phi + | + guardChecksSsaDef(g, branch, def) and + guardControlsPhiInput(g, branch, def, input, phi) and + result = TSsaInputNode(phi, input) ) or result.asExpr() = getAMaybeGuardedCapturedDef().getARead() diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index 8839c30b949..1490a8c7ca3 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -459,14 +459,16 @@ private module Cached { * The reference is either a read of `def` or `def` itself. */ cached - predicate lastRefBeforeRedefExt(DefinitionExt def, Cfg::BasicBlock bb, int i, DefinitionExt next) { + predicate lastRefBeforeRedefExt( + DefinitionExt def, Cfg::BasicBlock bb, int i, Cfg::BasicBlock input, DefinitionExt next + ) { exists(LocalVariable v | - Impl::lastRefRedefExt(def, v, bb, i, next) and + Impl::lastRefRedefExt(def, v, bb, i, input, next) and not SsaInput::variableRead(bb, i, v, false) ) or exists(SsaInput::BasicBlock bb0, int i0 | - Impl::lastRefRedefExt(def, _, bb0, i0, next) and + Impl::lastRefRedefExt(def, _, bb0, i0, input, next) and adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0) ) } diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected index d3d53177f66..4a1732c3612 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.expected @@ -6,14 +6,6 @@ edges | barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:8:5:8:5 | x | provenance | | | barrier_flow.rb:24:5:24:5 | x | barrier_flow.rb:26:10:26:10 | x | provenance | | | barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:24:5:24:5 | x | provenance | | -| barrier_flow.rb:36:5:36:5 | x | barrier_flow.rb:42:10:42:10 | x | provenance | | -| barrier_flow.rb:36:9:36:17 | call to source | barrier_flow.rb:36:5:36:5 | x | provenance | | -| barrier_flow.rb:46:5:46:5 | x | barrier_flow.rb:50:10:50:10 | x | provenance | | -| barrier_flow.rb:46:9:46:17 | call to source | barrier_flow.rb:46:5:46:5 | x | provenance | | -| barrier_flow.rb:54:5:54:5 | x | barrier_flow.rb:62:10:62:10 | x | provenance | | -| barrier_flow.rb:54:9:54:17 | call to source | barrier_flow.rb:54:5:54:5 | x | provenance | | -| barrier_flow.rb:66:5:66:5 | x | barrier_flow.rb:78:10:78:10 | x | provenance | | -| barrier_flow.rb:66:9:66:17 | call to source | barrier_flow.rb:66:5:66:5 | x | provenance | | nodes | barrier_flow.rb:2:5:2:5 | x | semmle.label | x | | barrier_flow.rb:2:9:2:17 | call to source | semmle.label | call to source | @@ -24,24 +16,8 @@ nodes | barrier_flow.rb:24:5:24:5 | x | semmle.label | x | | barrier_flow.rb:24:9:24:17 | call to source | semmle.label | call to source | | barrier_flow.rb:26:10:26:10 | x | semmle.label | x | -| barrier_flow.rb:36:5:36:5 | x | semmle.label | x | -| barrier_flow.rb:36:9:36:17 | call to source | semmle.label | call to source | -| barrier_flow.rb:42:10:42:10 | x | semmle.label | x | -| barrier_flow.rb:46:5:46:5 | x | semmle.label | x | -| barrier_flow.rb:46:9:46:17 | call to source | semmle.label | call to source | -| barrier_flow.rb:50:10:50:10 | x | semmle.label | x | -| barrier_flow.rb:54:5:54:5 | x | semmle.label | x | -| barrier_flow.rb:54:9:54:17 | call to source | semmle.label | call to source | -| barrier_flow.rb:62:10:62:10 | x | semmle.label | x | -| barrier_flow.rb:66:5:66:5 | x | semmle.label | x | -| barrier_flow.rb:66:9:66:17 | call to source | semmle.label | call to source | -| barrier_flow.rb:78:10:78:10 | x | semmle.label | x | subpaths #select | barrier_flow.rb:4:10:4:10 | x | barrier_flow.rb:2:9:2:17 | call to source | barrier_flow.rb:4:10:4:10 | x | $@ | barrier_flow.rb:2:9:2:17 | call to source | call to source | | barrier_flow.rb:11:14:11:14 | x | barrier_flow.rb:8:9:8:17 | call to source | barrier_flow.rb:11:14:11:14 | x | $@ | barrier_flow.rb:8:9:8:17 | call to source | call to source | | barrier_flow.rb:26:10:26:10 | x | barrier_flow.rb:24:9:24:17 | call to source | barrier_flow.rb:26:10:26:10 | x | $@ | barrier_flow.rb:24:9:24:17 | call to source | call to source | -| barrier_flow.rb:42:10:42:10 | x | barrier_flow.rb:36:9:36:17 | call to source | barrier_flow.rb:42:10:42:10 | x | $@ | barrier_flow.rb:36:9:36:17 | call to source | call to source | -| barrier_flow.rb:50:10:50:10 | x | barrier_flow.rb:46:9:46:17 | call to source | barrier_flow.rb:50:10:50:10 | x | $@ | barrier_flow.rb:46:9:46:17 | call to source | call to source | -| barrier_flow.rb:62:10:62:10 | x | barrier_flow.rb:54:9:54:17 | call to source | barrier_flow.rb:62:10:62:10 | x | $@ | barrier_flow.rb:54:9:54:17 | call to source | call to source | -| barrier_flow.rb:78:10:78:10 | x | barrier_flow.rb:66:9:66:17 | call to source | barrier_flow.rb:78:10:78:10 | x | $@ | barrier_flow.rb:66:9:66:17 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected index cc96a29852c..21d697c86e9 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.expected @@ -1,6 +1,7 @@ testFailures failures newStyleBarrierGuards +| barrier-guards.rb:3:16:4:19 | [input] SSA phi read(foo) | | barrier-guards.rb:4:5:4:7 | foo | | barrier-guards.rb:10:5:10:7 | foo | | barrier-guards.rb:18:5:18:7 | foo | @@ -8,6 +9,7 @@ newStyleBarrierGuards | barrier-guards.rb:28:5:28:7 | foo | | barrier-guards.rb:38:5:38:7 | foo | | barrier-guards.rb:45:9:45:11 | foo | +| barrier-guards.rb:70:22:71:19 | [input] SSA phi read(foo) | | barrier-guards.rb:71:5:71:7 | foo | | barrier-guards.rb:83:5:83:7 | foo | | barrier-guards.rb:91:5:91:7 | foo | @@ -38,6 +40,12 @@ newStyleBarrierGuards | barrier-guards.rb:292:5:292:7 | foo | | barrier_flow.rb:19:14:19:14 | x | | barrier_flow.rb:32:10:32:10 | x | +| barrier_flow.rb:38:8:38:18 | [input] phi | +| barrier_flow.rb:48:23:48:33 | [input] phi | +| barrier_flow.rb:56:10:57:34 | [input] SSA phi read(x) | +| barrier_flow.rb:58:5:59:34 | [input] SSA phi read(x) | +| barrier_flow.rb:68:10:71:11 | [input] SSA phi read(x) | +| barrier_flow.rb:72:5:75:11 | [input] SSA phi read(x) | controls | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:4:5:4:7 | foo | true | | barrier-guards.rb:3:4:3:15 | ... == ... | barrier-guards.rb:6:5:6:7 | foo | false | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql index f872dd89aee..4bcb358acfd 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql @@ -1,3 +1,4 @@ +import codeql.ruby.dataflow.internal.DataFlowPrivate import codeql.ruby.dataflow.internal.DataFlowPublic import codeql.ruby.dataflow.BarrierGuards import codeql.ruby.controlflow.CfgNodes @@ -25,6 +26,7 @@ module BarrierGuardTest implements TestSig { tag = "guarded" and exists(DataFlow::Node n | newStyleBarrierGuards(n) and + not n instanceof SsaInputNode and location = n.getLocation() and element = n.toString() and value = "" diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb index afd23176bda..d4c2d49eb36 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier_flow.rb @@ -39,7 +39,7 @@ def m6 x = "safe" end - sink x # $ SPURIOUS hasValueFlow=6 + sink x end def m7 @@ -47,7 +47,7 @@ def m7 x = "safe" unless x == "safe" - sink x # $ SPURIOUS hasValueFlow=7 + sink x end def m8(b) @@ -59,7 +59,7 @@ def m8(b) return unless x == "safe2" end - sink x # $ SPURIOUS hasValueFlow=8 + sink x end def m9(b) @@ -75,5 +75,5 @@ def m9(b) end end - sink x # $ SPURIOUS hasValueFlow=9 + sink x end diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 1f773f7d1a4..904e48d397c 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -1,6 +1,6 @@ | UseUseExplosion.rb:18:5:22:7 | self (m) | UseUseExplosion.rb:20:13:20:17 | self | | UseUseExplosion.rb:18:5:22:7 | self in m | UseUseExplosion.rb:18:5:22:7 | self (m) | -| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | +| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2111:20:2111 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2127:20:2127 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2143:20:2143 | x | @@ -210,9 +210,11 @@ | UseUseExplosion.rb:20:13:20:17 | self | UseUseExplosion.rb:20:3691:20:3696 | self | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [false] ( ... ) | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [true] ( ... ) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:26:20:3684 | then ... | UseUseExplosion.rb:20:9:20:3700 | if ... | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:31:20:3684 | if ... | UseUseExplosion.rb:20:26:20:3684 | then ... | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:56:20:60 | self | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:3675:20:3680 | self | @@ -220,9 +222,11 @@ | UseUseExplosion.rb:20:35:20:39 | self | UseUseExplosion.rb:20:3675:20:3680 | self | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [false] ( ... ) | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [true] ( ... ) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:47:20:3668 | then ... | UseUseExplosion.rb:20:31:20:3684 | if ... | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:52:20:3668 | if ... | UseUseExplosion.rb:20:47:20:3668 | then ... | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:77:20:81 | self | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:3659:20:3664 | self | @@ -230,9 +234,11 @@ | UseUseExplosion.rb:20:56:20:60 | self | UseUseExplosion.rb:20:3659:20:3664 | self | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [false] ( ... ) | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [true] ( ... ) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:68:20:3652 | then ... | UseUseExplosion.rb:20:52:20:3668 | if ... | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:73:20:3652 | if ... | UseUseExplosion.rb:20:68:20:3652 | then ... | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:98:20:102 | self | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:3643:20:3648 | self | @@ -240,9 +246,11 @@ | UseUseExplosion.rb:20:77:20:81 | self | UseUseExplosion.rb:20:3643:20:3648 | self | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [false] ( ... ) | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [true] ( ... ) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:89:20:3636 | then ... | UseUseExplosion.rb:20:73:20:3652 | if ... | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:94:20:3636 | if ... | UseUseExplosion.rb:20:89:20:3636 | then ... | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:119:20:123 | self | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:3627:20:3632 | self | @@ -250,9 +258,11 @@ | UseUseExplosion.rb:20:98:20:102 | self | UseUseExplosion.rb:20:3627:20:3632 | self | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [false] ( ... ) | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [true] ( ... ) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:110:20:3620 | then ... | UseUseExplosion.rb:20:94:20:3636 | if ... | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:115:20:3620 | if ... | UseUseExplosion.rb:20:110:20:3620 | then ... | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:140:20:144 | self | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:3611:20:3616 | self | @@ -260,9 +270,11 @@ | UseUseExplosion.rb:20:119:20:123 | self | UseUseExplosion.rb:20:3611:20:3616 | self | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [false] ( ... ) | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [true] ( ... ) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:131:20:3604 | then ... | UseUseExplosion.rb:20:115:20:3620 | if ... | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:136:20:3604 | if ... | UseUseExplosion.rb:20:131:20:3604 | then ... | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:161:20:165 | self | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:3595:20:3600 | self | @@ -270,9 +282,11 @@ | UseUseExplosion.rb:20:140:20:144 | self | UseUseExplosion.rb:20:3595:20:3600 | self | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [false] ( ... ) | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [true] ( ... ) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:152:20:3588 | then ... | UseUseExplosion.rb:20:136:20:3604 | if ... | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:157:20:3588 | if ... | UseUseExplosion.rb:20:152:20:3588 | then ... | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:182:20:186 | self | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:3579:20:3584 | self | @@ -280,9 +294,11 @@ | UseUseExplosion.rb:20:161:20:165 | self | UseUseExplosion.rb:20:3579:20:3584 | self | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [false] ( ... ) | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [true] ( ... ) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:173:20:3572 | then ... | UseUseExplosion.rb:20:157:20:3588 | if ... | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:178:20:3572 | if ... | UseUseExplosion.rb:20:173:20:3572 | then ... | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:203:20:207 | self | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:3563:20:3568 | self | @@ -290,9 +306,11 @@ | UseUseExplosion.rb:20:182:20:186 | self | UseUseExplosion.rb:20:3563:20:3568 | self | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [false] ( ... ) | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [true] ( ... ) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:194:20:3556 | then ... | UseUseExplosion.rb:20:178:20:3572 | if ... | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:199:20:3556 | if ... | UseUseExplosion.rb:20:194:20:3556 | then ... | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:224:20:228 | self | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:3547:20:3552 | self | @@ -300,9 +318,11 @@ | UseUseExplosion.rb:20:203:20:207 | self | UseUseExplosion.rb:20:3547:20:3552 | self | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [false] ( ... ) | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [true] ( ... ) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:215:20:3540 | then ... | UseUseExplosion.rb:20:199:20:3556 | if ... | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:220:20:3540 | if ... | UseUseExplosion.rb:20:215:20:3540 | then ... | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:245:20:249 | self | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:3531:20:3536 | self | @@ -310,9 +330,11 @@ | UseUseExplosion.rb:20:224:20:228 | self | UseUseExplosion.rb:20:3531:20:3536 | self | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [false] ( ... ) | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [true] ( ... ) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:236:20:3524 | then ... | UseUseExplosion.rb:20:220:20:3540 | if ... | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:241:20:3524 | if ... | UseUseExplosion.rb:20:236:20:3524 | then ... | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:266:20:270 | self | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:3515:20:3520 | self | @@ -320,9 +342,11 @@ | UseUseExplosion.rb:20:245:20:249 | self | UseUseExplosion.rb:20:3515:20:3520 | self | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [false] ( ... ) | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [true] ( ... ) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:257:20:3508 | then ... | UseUseExplosion.rb:20:241:20:3524 | if ... | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:262:20:3508 | if ... | UseUseExplosion.rb:20:257:20:3508 | then ... | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:287:20:291 | self | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:3499:20:3504 | self | @@ -330,9 +354,11 @@ | UseUseExplosion.rb:20:266:20:270 | self | UseUseExplosion.rb:20:3499:20:3504 | self | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [false] ( ... ) | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [true] ( ... ) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:278:20:3492 | then ... | UseUseExplosion.rb:20:262:20:3508 | if ... | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:283:20:3492 | if ... | UseUseExplosion.rb:20:278:20:3492 | then ... | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:308:20:312 | self | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:3483:20:3488 | self | @@ -340,9 +366,11 @@ | UseUseExplosion.rb:20:287:20:291 | self | UseUseExplosion.rb:20:3483:20:3488 | self | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [false] ( ... ) | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [true] ( ... ) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:299:20:3476 | then ... | UseUseExplosion.rb:20:283:20:3492 | if ... | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:304:20:3476 | if ... | UseUseExplosion.rb:20:299:20:3476 | then ... | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:329:20:333 | self | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:3467:20:3472 | self | @@ -350,9 +378,11 @@ | UseUseExplosion.rb:20:308:20:312 | self | UseUseExplosion.rb:20:3467:20:3472 | self | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [false] ( ... ) | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [true] ( ... ) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:320:20:3460 | then ... | UseUseExplosion.rb:20:304:20:3476 | if ... | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:325:20:3460 | if ... | UseUseExplosion.rb:20:320:20:3460 | then ... | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:350:20:354 | self | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:3451:20:3456 | self | @@ -360,9 +390,11 @@ | UseUseExplosion.rb:20:329:20:333 | self | UseUseExplosion.rb:20:3451:20:3456 | self | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [false] ( ... ) | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [true] ( ... ) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:341:20:3444 | then ... | UseUseExplosion.rb:20:325:20:3460 | if ... | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:346:20:3444 | if ... | UseUseExplosion.rb:20:341:20:3444 | then ... | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:371:20:375 | self | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:3435:20:3440 | self | @@ -370,9 +402,11 @@ | UseUseExplosion.rb:20:350:20:354 | self | UseUseExplosion.rb:20:3435:20:3440 | self | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [false] ( ... ) | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [true] ( ... ) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:362:20:3428 | then ... | UseUseExplosion.rb:20:346:20:3444 | if ... | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:367:20:3428 | if ... | UseUseExplosion.rb:20:362:20:3428 | then ... | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:392:20:396 | self | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:3419:20:3424 | self | @@ -380,9 +414,11 @@ | UseUseExplosion.rb:20:371:20:375 | self | UseUseExplosion.rb:20:3419:20:3424 | self | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [false] ( ... ) | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [true] ( ... ) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:383:20:3412 | then ... | UseUseExplosion.rb:20:367:20:3428 | if ... | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:388:20:3412 | if ... | UseUseExplosion.rb:20:383:20:3412 | then ... | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:413:20:417 | self | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:3403:20:3408 | self | @@ -390,9 +426,11 @@ | UseUseExplosion.rb:20:392:20:396 | self | UseUseExplosion.rb:20:3403:20:3408 | self | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [false] ( ... ) | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [true] ( ... ) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:404:20:3396 | then ... | UseUseExplosion.rb:20:388:20:3412 | if ... | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:409:20:3396 | if ... | UseUseExplosion.rb:20:404:20:3396 | then ... | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:434:20:438 | self | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:3387:20:3392 | self | @@ -400,9 +438,11 @@ | UseUseExplosion.rb:20:413:20:417 | self | UseUseExplosion.rb:20:3387:20:3392 | self | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [false] ( ... ) | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [true] ( ... ) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:425:20:3380 | then ... | UseUseExplosion.rb:20:409:20:3396 | if ... | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:430:20:3380 | if ... | UseUseExplosion.rb:20:425:20:3380 | then ... | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:455:20:459 | self | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:3371:20:3376 | self | @@ -410,9 +450,11 @@ | UseUseExplosion.rb:20:434:20:438 | self | UseUseExplosion.rb:20:3371:20:3376 | self | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [false] ( ... ) | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [true] ( ... ) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:446:20:3364 | then ... | UseUseExplosion.rb:20:430:20:3380 | if ... | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:451:20:3364 | if ... | UseUseExplosion.rb:20:446:20:3364 | then ... | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:476:20:480 | self | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:3355:20:3360 | self | @@ -420,9 +462,11 @@ | UseUseExplosion.rb:20:455:20:459 | self | UseUseExplosion.rb:20:3355:20:3360 | self | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [false] ( ... ) | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [true] ( ... ) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:467:20:3348 | then ... | UseUseExplosion.rb:20:451:20:3364 | if ... | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:472:20:3348 | if ... | UseUseExplosion.rb:20:467:20:3348 | then ... | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:497:20:501 | self | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:3339:20:3344 | self | @@ -430,9 +474,11 @@ | UseUseExplosion.rb:20:476:20:480 | self | UseUseExplosion.rb:20:3339:20:3344 | self | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [false] ( ... ) | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [true] ( ... ) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:488:20:3332 | then ... | UseUseExplosion.rb:20:472:20:3348 | if ... | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:493:20:3332 | if ... | UseUseExplosion.rb:20:488:20:3332 | then ... | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:518:20:522 | self | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:3323:20:3328 | self | @@ -440,9 +486,11 @@ | UseUseExplosion.rb:20:497:20:501 | self | UseUseExplosion.rb:20:3323:20:3328 | self | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [false] ( ... ) | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [true] ( ... ) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:509:20:3316 | then ... | UseUseExplosion.rb:20:493:20:3332 | if ... | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:514:20:3316 | if ... | UseUseExplosion.rb:20:509:20:3316 | then ... | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:539:20:543 | self | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:3307:20:3312 | self | @@ -450,9 +498,11 @@ | UseUseExplosion.rb:20:518:20:522 | self | UseUseExplosion.rb:20:3307:20:3312 | self | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [false] ( ... ) | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [true] ( ... ) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:530:20:3300 | then ... | UseUseExplosion.rb:20:514:20:3316 | if ... | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:535:20:3300 | if ... | UseUseExplosion.rb:20:530:20:3300 | then ... | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:560:20:564 | self | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:3291:20:3296 | self | @@ -460,9 +510,11 @@ | UseUseExplosion.rb:20:539:20:543 | self | UseUseExplosion.rb:20:3291:20:3296 | self | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [false] ( ... ) | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [true] ( ... ) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:551:20:3284 | then ... | UseUseExplosion.rb:20:535:20:3300 | if ... | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:556:20:3284 | if ... | UseUseExplosion.rb:20:551:20:3284 | then ... | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:581:20:585 | self | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:3275:20:3280 | self | @@ -470,9 +522,11 @@ | UseUseExplosion.rb:20:560:20:564 | self | UseUseExplosion.rb:20:3275:20:3280 | self | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [false] ( ... ) | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [true] ( ... ) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:572:20:3268 | then ... | UseUseExplosion.rb:20:556:20:3284 | if ... | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:577:20:3268 | if ... | UseUseExplosion.rb:20:572:20:3268 | then ... | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:602:20:606 | self | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:3259:20:3264 | self | @@ -480,9 +534,11 @@ | UseUseExplosion.rb:20:581:20:585 | self | UseUseExplosion.rb:20:3259:20:3264 | self | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [false] ( ... ) | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [true] ( ... ) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:593:20:3252 | then ... | UseUseExplosion.rb:20:577:20:3268 | if ... | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:598:20:3252 | if ... | UseUseExplosion.rb:20:593:20:3252 | then ... | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:623:20:627 | self | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:3243:20:3248 | self | @@ -490,9 +546,11 @@ | UseUseExplosion.rb:20:602:20:606 | self | UseUseExplosion.rb:20:3243:20:3248 | self | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [false] ( ... ) | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [true] ( ... ) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:614:20:3236 | then ... | UseUseExplosion.rb:20:598:20:3252 | if ... | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:619:20:3236 | if ... | UseUseExplosion.rb:20:614:20:3236 | then ... | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:644:20:648 | self | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:3227:20:3232 | self | @@ -500,9 +558,11 @@ | UseUseExplosion.rb:20:623:20:627 | self | UseUseExplosion.rb:20:3227:20:3232 | self | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [false] ( ... ) | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [true] ( ... ) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:635:20:3220 | then ... | UseUseExplosion.rb:20:619:20:3236 | if ... | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:640:20:3220 | if ... | UseUseExplosion.rb:20:635:20:3220 | then ... | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:665:20:669 | self | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:3211:20:3216 | self | @@ -510,9 +570,11 @@ | UseUseExplosion.rb:20:644:20:648 | self | UseUseExplosion.rb:20:3211:20:3216 | self | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [false] ( ... ) | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [true] ( ... ) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:656:20:3204 | then ... | UseUseExplosion.rb:20:640:20:3220 | if ... | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:661:20:3204 | if ... | UseUseExplosion.rb:20:656:20:3204 | then ... | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:686:20:690 | self | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:3195:20:3200 | self | @@ -520,9 +582,11 @@ | UseUseExplosion.rb:20:665:20:669 | self | UseUseExplosion.rb:20:3195:20:3200 | self | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [false] ( ... ) | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [true] ( ... ) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:677:20:3188 | then ... | UseUseExplosion.rb:20:661:20:3204 | if ... | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:682:20:3188 | if ... | UseUseExplosion.rb:20:677:20:3188 | then ... | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:707:20:711 | self | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:3179:20:3184 | self | @@ -530,9 +594,11 @@ | UseUseExplosion.rb:20:686:20:690 | self | UseUseExplosion.rb:20:3179:20:3184 | self | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [false] ( ... ) | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [true] ( ... ) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:698:20:3172 | then ... | UseUseExplosion.rb:20:682:20:3188 | if ... | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:703:20:3172 | if ... | UseUseExplosion.rb:20:698:20:3172 | then ... | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:728:20:732 | self | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:3163:20:3168 | self | @@ -540,9 +606,11 @@ | UseUseExplosion.rb:20:707:20:711 | self | UseUseExplosion.rb:20:3163:20:3168 | self | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [false] ( ... ) | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [true] ( ... ) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:719:20:3156 | then ... | UseUseExplosion.rb:20:703:20:3172 | if ... | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:724:20:3156 | if ... | UseUseExplosion.rb:20:719:20:3156 | then ... | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:749:20:753 | self | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:3147:20:3152 | self | @@ -550,9 +618,11 @@ | UseUseExplosion.rb:20:728:20:732 | self | UseUseExplosion.rb:20:3147:20:3152 | self | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [false] ( ... ) | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [true] ( ... ) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:740:20:3140 | then ... | UseUseExplosion.rb:20:724:20:3156 | if ... | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:745:20:3140 | if ... | UseUseExplosion.rb:20:740:20:3140 | then ... | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:770:20:774 | self | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:3131:20:3136 | self | @@ -560,9 +630,11 @@ | UseUseExplosion.rb:20:749:20:753 | self | UseUseExplosion.rb:20:3131:20:3136 | self | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [false] ( ... ) | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [true] ( ... ) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:761:20:3124 | then ... | UseUseExplosion.rb:20:745:20:3140 | if ... | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:766:20:3124 | if ... | UseUseExplosion.rb:20:761:20:3124 | then ... | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:791:20:795 | self | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:3115:20:3120 | self | @@ -570,9 +642,11 @@ | UseUseExplosion.rb:20:770:20:774 | self | UseUseExplosion.rb:20:3115:20:3120 | self | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [false] ( ... ) | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [true] ( ... ) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:782:20:3108 | then ... | UseUseExplosion.rb:20:766:20:3124 | if ... | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:787:20:3108 | if ... | UseUseExplosion.rb:20:782:20:3108 | then ... | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:812:20:816 | self | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:3099:20:3104 | self | @@ -580,9 +654,11 @@ | UseUseExplosion.rb:20:791:20:795 | self | UseUseExplosion.rb:20:3099:20:3104 | self | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [false] ( ... ) | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [true] ( ... ) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:803:20:3092 | then ... | UseUseExplosion.rb:20:787:20:3108 | if ... | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:808:20:3092 | if ... | UseUseExplosion.rb:20:803:20:3092 | then ... | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:833:20:837 | self | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:3083:20:3088 | self | @@ -590,9 +666,11 @@ | UseUseExplosion.rb:20:812:20:816 | self | UseUseExplosion.rb:20:3083:20:3088 | self | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [false] ( ... ) | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [true] ( ... ) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:824:20:3076 | then ... | UseUseExplosion.rb:20:808:20:3092 | if ... | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:829:20:3076 | if ... | UseUseExplosion.rb:20:824:20:3076 | then ... | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:854:20:858 | self | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:3067:20:3072 | self | @@ -600,9 +678,11 @@ | UseUseExplosion.rb:20:833:20:837 | self | UseUseExplosion.rb:20:3067:20:3072 | self | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [false] ( ... ) | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [true] ( ... ) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:845:20:3060 | then ... | UseUseExplosion.rb:20:829:20:3076 | if ... | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:850:20:3060 | if ... | UseUseExplosion.rb:20:845:20:3060 | then ... | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:875:20:879 | self | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:3051:20:3056 | self | @@ -610,9 +690,11 @@ | UseUseExplosion.rb:20:854:20:858 | self | UseUseExplosion.rb:20:3051:20:3056 | self | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [false] ( ... ) | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [true] ( ... ) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:866:20:3044 | then ... | UseUseExplosion.rb:20:850:20:3060 | if ... | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:871:20:3044 | if ... | UseUseExplosion.rb:20:866:20:3044 | then ... | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:896:20:900 | self | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:3035:20:3040 | self | @@ -620,9 +702,11 @@ | UseUseExplosion.rb:20:875:20:879 | self | UseUseExplosion.rb:20:3035:20:3040 | self | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [false] ( ... ) | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [true] ( ... ) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:887:20:3028 | then ... | UseUseExplosion.rb:20:871:20:3044 | if ... | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:892:20:3028 | if ... | UseUseExplosion.rb:20:887:20:3028 | then ... | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:917:20:921 | self | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:3019:20:3024 | self | @@ -630,9 +714,11 @@ | UseUseExplosion.rb:20:896:20:900 | self | UseUseExplosion.rb:20:3019:20:3024 | self | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [false] ( ... ) | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [true] ( ... ) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:908:20:3012 | then ... | UseUseExplosion.rb:20:892:20:3028 | if ... | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:913:20:3012 | if ... | UseUseExplosion.rb:20:908:20:3012 | then ... | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:938:20:942 | self | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:3003:20:3008 | self | @@ -640,9 +726,11 @@ | UseUseExplosion.rb:20:917:20:921 | self | UseUseExplosion.rb:20:3003:20:3008 | self | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [false] ( ... ) | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [true] ( ... ) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:929:20:2996 | then ... | UseUseExplosion.rb:20:913:20:3012 | if ... | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:934:20:2996 | if ... | UseUseExplosion.rb:20:929:20:2996 | then ... | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:959:20:963 | self | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:2987:20:2992 | self | @@ -650,9 +738,11 @@ | UseUseExplosion.rb:20:938:20:942 | self | UseUseExplosion.rb:20:2987:20:2992 | self | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [false] ( ... ) | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [true] ( ... ) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:950:20:2980 | then ... | UseUseExplosion.rb:20:934:20:2996 | if ... | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:955:20:2980 | if ... | UseUseExplosion.rb:20:950:20:2980 | then ... | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:980:20:984 | self | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:2971:20:2976 | self | @@ -660,9 +750,11 @@ | UseUseExplosion.rb:20:959:20:963 | self | UseUseExplosion.rb:20:2971:20:2976 | self | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [false] ( ... ) | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [true] ( ... ) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:971:20:2964 | then ... | UseUseExplosion.rb:20:955:20:2980 | if ... | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:976:20:2964 | if ... | UseUseExplosion.rb:20:971:20:2964 | then ... | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:1001:20:1005 | self | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:2955:20:2960 | self | @@ -670,9 +762,11 @@ | UseUseExplosion.rb:20:980:20:984 | self | UseUseExplosion.rb:20:2955:20:2960 | self | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [false] ( ... ) | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [true] ( ... ) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:992:20:2948 | then ... | UseUseExplosion.rb:20:976:20:2964 | if ... | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:997:20:2948 | if ... | UseUseExplosion.rb:20:992:20:2948 | then ... | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:1022:20:1026 | self | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:2939:20:2944 | self | @@ -680,9 +774,11 @@ | UseUseExplosion.rb:20:1001:20:1005 | self | UseUseExplosion.rb:20:2939:20:2944 | self | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [false] ( ... ) | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [true] ( ... ) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:1013:20:2932 | then ... | UseUseExplosion.rb:20:997:20:2948 | if ... | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1018:20:2932 | if ... | UseUseExplosion.rb:20:1013:20:2932 | then ... | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:1043:20:1047 | self | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:2923:20:2928 | self | @@ -690,9 +786,11 @@ | UseUseExplosion.rb:20:1022:20:1026 | self | UseUseExplosion.rb:20:2923:20:2928 | self | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [false] ( ... ) | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [true] ( ... ) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:1034:20:2916 | then ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1039:20:2916 | if ... | UseUseExplosion.rb:20:1034:20:2916 | then ... | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:1064:20:1068 | self | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:2907:20:2912 | self | @@ -700,9 +798,11 @@ | UseUseExplosion.rb:20:1043:20:1047 | self | UseUseExplosion.rb:20:2907:20:2912 | self | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [false] ( ... ) | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [true] ( ... ) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:1055:20:2900 | then ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1060:20:2900 | if ... | UseUseExplosion.rb:20:1055:20:2900 | then ... | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:1085:20:1089 | self | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:2891:20:2896 | self | @@ -710,9 +810,11 @@ | UseUseExplosion.rb:20:1064:20:1068 | self | UseUseExplosion.rb:20:2891:20:2896 | self | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [false] ( ... ) | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [true] ( ... ) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:1076:20:2884 | then ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1081:20:2884 | if ... | UseUseExplosion.rb:20:1076:20:2884 | then ... | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:1106:20:1110 | self | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:2875:20:2880 | self | @@ -720,9 +822,11 @@ | UseUseExplosion.rb:20:1085:20:1089 | self | UseUseExplosion.rb:20:2875:20:2880 | self | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [false] ( ... ) | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [true] ( ... ) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:1097:20:2868 | then ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1102:20:2868 | if ... | UseUseExplosion.rb:20:1097:20:2868 | then ... | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:1127:20:1131 | self | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:2859:20:2864 | self | @@ -730,9 +834,11 @@ | UseUseExplosion.rb:20:1106:20:1110 | self | UseUseExplosion.rb:20:2859:20:2864 | self | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [false] ( ... ) | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [true] ( ... ) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:1118:20:2852 | then ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1123:20:2852 | if ... | UseUseExplosion.rb:20:1118:20:2852 | then ... | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:1148:20:1152 | self | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:2843:20:2848 | self | @@ -740,9 +846,11 @@ | UseUseExplosion.rb:20:1127:20:1131 | self | UseUseExplosion.rb:20:2843:20:2848 | self | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [false] ( ... ) | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [true] ( ... ) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:1139:20:2836 | then ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1144:20:2836 | if ... | UseUseExplosion.rb:20:1139:20:2836 | then ... | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:1169:20:1173 | self | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:2827:20:2832 | self | @@ -750,9 +858,11 @@ | UseUseExplosion.rb:20:1148:20:1152 | self | UseUseExplosion.rb:20:2827:20:2832 | self | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [false] ( ... ) | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [true] ( ... ) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:1160:20:2820 | then ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1165:20:2820 | if ... | UseUseExplosion.rb:20:1160:20:2820 | then ... | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:1190:20:1194 | self | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:2811:20:2816 | self | @@ -760,9 +870,11 @@ | UseUseExplosion.rb:20:1169:20:1173 | self | UseUseExplosion.rb:20:2811:20:2816 | self | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [false] ( ... ) | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [true] ( ... ) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:1181:20:2804 | then ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1186:20:2804 | if ... | UseUseExplosion.rb:20:1181:20:2804 | then ... | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:1211:20:1215 | self | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:2795:20:2800 | self | @@ -770,9 +882,11 @@ | UseUseExplosion.rb:20:1190:20:1194 | self | UseUseExplosion.rb:20:2795:20:2800 | self | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [false] ( ... ) | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [true] ( ... ) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:1202:20:2788 | then ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1207:20:2788 | if ... | UseUseExplosion.rb:20:1202:20:2788 | then ... | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:1232:20:1236 | self | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:2779:20:2784 | self | @@ -780,9 +894,11 @@ | UseUseExplosion.rb:20:1211:20:1215 | self | UseUseExplosion.rb:20:2779:20:2784 | self | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [false] ( ... ) | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [true] ( ... ) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:1223:20:2772 | then ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1228:20:2772 | if ... | UseUseExplosion.rb:20:1223:20:2772 | then ... | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:1253:20:1257 | self | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:2763:20:2768 | self | @@ -790,9 +906,11 @@ | UseUseExplosion.rb:20:1232:20:1236 | self | UseUseExplosion.rb:20:2763:20:2768 | self | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [false] ( ... ) | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [true] ( ... ) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:1244:20:2756 | then ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1249:20:2756 | if ... | UseUseExplosion.rb:20:1244:20:2756 | then ... | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:1274:20:1278 | self | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:2747:20:2752 | self | @@ -800,9 +918,11 @@ | UseUseExplosion.rb:20:1253:20:1257 | self | UseUseExplosion.rb:20:2747:20:2752 | self | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [false] ( ... ) | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [true] ( ... ) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:1265:20:2740 | then ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1270:20:2740 | if ... | UseUseExplosion.rb:20:1265:20:2740 | then ... | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:1295:20:1299 | self | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:2731:20:2736 | self | @@ -810,9 +930,11 @@ | UseUseExplosion.rb:20:1274:20:1278 | self | UseUseExplosion.rb:20:2731:20:2736 | self | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [false] ( ... ) | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [true] ( ... ) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:1286:20:2724 | then ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1291:20:2724 | if ... | UseUseExplosion.rb:20:1286:20:2724 | then ... | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:1316:20:1320 | self | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:2715:20:2720 | self | @@ -820,9 +942,11 @@ | UseUseExplosion.rb:20:1295:20:1299 | self | UseUseExplosion.rb:20:2715:20:2720 | self | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [false] ( ... ) | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [true] ( ... ) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:1307:20:2708 | then ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1312:20:2708 | if ... | UseUseExplosion.rb:20:1307:20:2708 | then ... | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:1337:20:1341 | self | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:2699:20:2704 | self | @@ -830,9 +954,11 @@ | UseUseExplosion.rb:20:1316:20:1320 | self | UseUseExplosion.rb:20:2699:20:2704 | self | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [false] ( ... ) | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [true] ( ... ) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:1328:20:2692 | then ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1333:20:2692 | if ... | UseUseExplosion.rb:20:1328:20:2692 | then ... | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:1358:20:1362 | self | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:2683:20:2688 | self | @@ -840,9 +966,11 @@ | UseUseExplosion.rb:20:1337:20:1341 | self | UseUseExplosion.rb:20:2683:20:2688 | self | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [false] ( ... ) | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [true] ( ... ) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:1349:20:2676 | then ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1354:20:2676 | if ... | UseUseExplosion.rb:20:1349:20:2676 | then ... | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:1379:20:1383 | self | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:2667:20:2672 | self | @@ -850,9 +978,11 @@ | UseUseExplosion.rb:20:1358:20:1362 | self | UseUseExplosion.rb:20:2667:20:2672 | self | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [false] ( ... ) | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [true] ( ... ) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:1370:20:2660 | then ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1375:20:2660 | if ... | UseUseExplosion.rb:20:1370:20:2660 | then ... | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:1400:20:1404 | self | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:2651:20:2656 | self | @@ -860,9 +990,11 @@ | UseUseExplosion.rb:20:1379:20:1383 | self | UseUseExplosion.rb:20:2651:20:2656 | self | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [false] ( ... ) | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [true] ( ... ) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:1391:20:2644 | then ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1396:20:2644 | if ... | UseUseExplosion.rb:20:1391:20:2644 | then ... | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:1421:20:1425 | self | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:2635:20:2640 | self | @@ -870,9 +1002,11 @@ | UseUseExplosion.rb:20:1400:20:1404 | self | UseUseExplosion.rb:20:2635:20:2640 | self | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [false] ( ... ) | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [true] ( ... ) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:1412:20:2628 | then ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1417:20:2628 | if ... | UseUseExplosion.rb:20:1412:20:2628 | then ... | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:1442:20:1446 | self | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:2619:20:2624 | self | @@ -880,9 +1014,11 @@ | UseUseExplosion.rb:20:1421:20:1425 | self | UseUseExplosion.rb:20:2619:20:2624 | self | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [false] ( ... ) | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [true] ( ... ) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:1433:20:2612 | then ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1438:20:2612 | if ... | UseUseExplosion.rb:20:1433:20:2612 | then ... | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:1463:20:1467 | self | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:2603:20:2608 | self | @@ -890,9 +1026,11 @@ | UseUseExplosion.rb:20:1442:20:1446 | self | UseUseExplosion.rb:20:2603:20:2608 | self | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [false] ( ... ) | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [true] ( ... ) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:1454:20:2596 | then ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1459:20:2596 | if ... | UseUseExplosion.rb:20:1454:20:2596 | then ... | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:1484:20:1488 | self | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:2587:20:2592 | self | @@ -900,9 +1038,11 @@ | UseUseExplosion.rb:20:1463:20:1467 | self | UseUseExplosion.rb:20:2587:20:2592 | self | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [false] ( ... ) | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [true] ( ... ) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:1475:20:2580 | then ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1480:20:2580 | if ... | UseUseExplosion.rb:20:1475:20:2580 | then ... | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:1505:20:1509 | self | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:2571:20:2576 | self | @@ -910,9 +1050,11 @@ | UseUseExplosion.rb:20:1484:20:1488 | self | UseUseExplosion.rb:20:2571:20:2576 | self | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [false] ( ... ) | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [true] ( ... ) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:1496:20:2564 | then ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1501:20:2564 | if ... | UseUseExplosion.rb:20:1496:20:2564 | then ... | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:1526:20:1530 | self | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:2555:20:2560 | self | @@ -920,9 +1062,11 @@ | UseUseExplosion.rb:20:1505:20:1509 | self | UseUseExplosion.rb:20:2555:20:2560 | self | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [false] ( ... ) | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [true] ( ... ) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:1517:20:2548 | then ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1522:20:2548 | if ... | UseUseExplosion.rb:20:1517:20:2548 | then ... | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:1547:20:1551 | self | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:2539:20:2544 | self | @@ -930,9 +1074,11 @@ | UseUseExplosion.rb:20:1526:20:1530 | self | UseUseExplosion.rb:20:2539:20:2544 | self | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [false] ( ... ) | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [true] ( ... ) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:1538:20:2532 | then ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1543:20:2532 | if ... | UseUseExplosion.rb:20:1538:20:2532 | then ... | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:1568:20:1572 | self | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:2523:20:2528 | self | @@ -940,9 +1086,11 @@ | UseUseExplosion.rb:20:1547:20:1551 | self | UseUseExplosion.rb:20:2523:20:2528 | self | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [false] ( ... ) | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [true] ( ... ) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:1559:20:2516 | then ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1564:20:2516 | if ... | UseUseExplosion.rb:20:1559:20:2516 | then ... | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:1589:20:1593 | self | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:2507:20:2512 | self | @@ -950,9 +1098,11 @@ | UseUseExplosion.rb:20:1568:20:1572 | self | UseUseExplosion.rb:20:2507:20:2512 | self | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [false] ( ... ) | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [true] ( ... ) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:1580:20:2500 | then ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1585:20:2500 | if ... | UseUseExplosion.rb:20:1580:20:2500 | then ... | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:1610:20:1614 | self | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:2491:20:2496 | self | @@ -960,9 +1110,11 @@ | UseUseExplosion.rb:20:1589:20:1593 | self | UseUseExplosion.rb:20:2491:20:2496 | self | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [false] ( ... ) | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [true] ( ... ) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:1601:20:2484 | then ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1606:20:2484 | if ... | UseUseExplosion.rb:20:1601:20:2484 | then ... | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:1631:20:1635 | self | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:2475:20:2480 | self | @@ -970,9 +1122,11 @@ | UseUseExplosion.rb:20:1610:20:1614 | self | UseUseExplosion.rb:20:2475:20:2480 | self | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [false] ( ... ) | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [true] ( ... ) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:1622:20:2468 | then ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1627:20:2468 | if ... | UseUseExplosion.rb:20:1622:20:2468 | then ... | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:1652:20:1656 | self | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:2459:20:2464 | self | @@ -980,9 +1134,11 @@ | UseUseExplosion.rb:20:1631:20:1635 | self | UseUseExplosion.rb:20:2459:20:2464 | self | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [false] ( ... ) | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [true] ( ... ) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:1643:20:2452 | then ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1648:20:2452 | if ... | UseUseExplosion.rb:20:1643:20:2452 | then ... | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:1673:20:1677 | self | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:2443:20:2448 | self | @@ -990,9 +1146,11 @@ | UseUseExplosion.rb:20:1652:20:1656 | self | UseUseExplosion.rb:20:2443:20:2448 | self | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [false] ( ... ) | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [true] ( ... ) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:1664:20:2436 | then ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1669:20:2436 | if ... | UseUseExplosion.rb:20:1664:20:2436 | then ... | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:1694:20:1698 | self | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:2427:20:2432 | self | @@ -1000,9 +1158,11 @@ | UseUseExplosion.rb:20:1673:20:1677 | self | UseUseExplosion.rb:20:2427:20:2432 | self | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [false] ( ... ) | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [true] ( ... ) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:1685:20:2420 | then ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1690:20:2420 | if ... | UseUseExplosion.rb:20:1685:20:2420 | then ... | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:1715:20:1719 | self | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:2411:20:2416 | self | @@ -1010,9 +1170,11 @@ | UseUseExplosion.rb:20:1694:20:1698 | self | UseUseExplosion.rb:20:2411:20:2416 | self | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [false] ( ... ) | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [true] ( ... ) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:1706:20:2404 | then ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1711:20:2404 | if ... | UseUseExplosion.rb:20:1706:20:2404 | then ... | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:1736:20:1740 | self | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:2395:20:2400 | self | @@ -1020,9 +1182,11 @@ | UseUseExplosion.rb:20:1715:20:1719 | self | UseUseExplosion.rb:20:2395:20:2400 | self | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [false] ( ... ) | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [true] ( ... ) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:1727:20:2388 | then ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1732:20:2388 | if ... | UseUseExplosion.rb:20:1727:20:2388 | then ... | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:1757:20:1761 | self | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:2379:20:2384 | self | @@ -1030,9 +1194,11 @@ | UseUseExplosion.rb:20:1736:20:1740 | self | UseUseExplosion.rb:20:2379:20:2384 | self | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [false] ( ... ) | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [true] ( ... ) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:1748:20:2372 | then ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1753:20:2372 | if ... | UseUseExplosion.rb:20:1748:20:2372 | then ... | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:1778:20:1782 | self | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:2363:20:2368 | self | @@ -1040,9 +1206,11 @@ | UseUseExplosion.rb:20:1757:20:1761 | self | UseUseExplosion.rb:20:2363:20:2368 | self | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [false] ( ... ) | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [true] ( ... ) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:1769:20:2356 | then ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1774:20:2356 | if ... | UseUseExplosion.rb:20:1769:20:2356 | then ... | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:1799:20:1803 | self | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:2347:20:2352 | self | @@ -1050,9 +1218,11 @@ | UseUseExplosion.rb:20:1778:20:1782 | self | UseUseExplosion.rb:20:2347:20:2352 | self | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [false] ( ... ) | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [true] ( ... ) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:1790:20:2340 | then ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1795:20:2340 | if ... | UseUseExplosion.rb:20:1790:20:2340 | then ... | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:1820:20:1824 | self | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:2331:20:2336 | self | @@ -1060,9 +1230,11 @@ | UseUseExplosion.rb:20:1799:20:1803 | self | UseUseExplosion.rb:20:2331:20:2336 | self | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [false] ( ... ) | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [true] ( ... ) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:1811:20:2324 | then ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1816:20:2324 | if ... | UseUseExplosion.rb:20:1811:20:2324 | then ... | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:1841:20:1845 | self | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:2315:20:2320 | self | @@ -1070,9 +1242,11 @@ | UseUseExplosion.rb:20:1820:20:1824 | self | UseUseExplosion.rb:20:2315:20:2320 | self | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [false] ( ... ) | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [true] ( ... ) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:1832:20:2308 | then ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1837:20:2308 | if ... | UseUseExplosion.rb:20:1832:20:2308 | then ... | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:1862:20:1866 | self | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:2299:20:2304 | self | @@ -1080,9 +1254,11 @@ | UseUseExplosion.rb:20:1841:20:1845 | self | UseUseExplosion.rb:20:2299:20:2304 | self | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [false] ( ... ) | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [true] ( ... ) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:1853:20:2292 | then ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1858:20:2292 | if ... | UseUseExplosion.rb:20:1853:20:2292 | then ... | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:1883:20:1887 | self | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:2283:20:2288 | self | @@ -1090,9 +1266,11 @@ | UseUseExplosion.rb:20:1862:20:1866 | self | UseUseExplosion.rb:20:2283:20:2288 | self | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [false] ( ... ) | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [true] ( ... ) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:1874:20:2276 | then ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1879:20:2276 | if ... | UseUseExplosion.rb:20:1874:20:2276 | then ... | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:1904:20:1908 | self | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:2267:20:2272 | self | @@ -1100,9 +1278,11 @@ | UseUseExplosion.rb:20:1883:20:1887 | self | UseUseExplosion.rb:20:2267:20:2272 | self | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [false] ( ... ) | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [true] ( ... ) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:1895:20:2260 | then ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1900:20:2260 | if ... | UseUseExplosion.rb:20:1895:20:2260 | then ... | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:1925:20:1929 | self | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:2251:20:2256 | self | @@ -1110,9 +1290,11 @@ | UseUseExplosion.rb:20:1904:20:1908 | self | UseUseExplosion.rb:20:2251:20:2256 | self | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [false] ( ... ) | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [true] ( ... ) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:1916:20:2244 | then ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1921:20:2244 | if ... | UseUseExplosion.rb:20:1916:20:2244 | then ... | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:1945:20:1949 | self | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:2235:20:2240 | self | @@ -1120,9 +1302,11 @@ | UseUseExplosion.rb:20:1925:20:1929 | self | UseUseExplosion.rb:20:2235:20:2240 | self | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [false] ( ... ) | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [true] ( ... ) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:1936:20:2228 | then ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1941:20:2228 | if ... | UseUseExplosion.rb:20:1936:20:2228 | then ... | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:1965:20:1969 | self | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:2219:20:2224 | self | @@ -1130,9 +1314,11 @@ | UseUseExplosion.rb:20:1945:20:1949 | self | UseUseExplosion.rb:20:2219:20:2224 | self | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [false] ( ... ) | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [true] ( ... ) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:1956:20:2212 | then ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1961:20:2212 | if ... | UseUseExplosion.rb:20:1956:20:2212 | then ... | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:1985:20:1989 | self | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:2203:20:2208 | self | @@ -1140,9 +1326,11 @@ | UseUseExplosion.rb:20:1965:20:1969 | self | UseUseExplosion.rb:20:2203:20:2208 | self | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [false] ( ... ) | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [true] ( ... ) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:1976:20:2196 | then ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1981:20:2196 | if ... | UseUseExplosion.rb:20:1976:20:2196 | then ... | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2005:20:2009 | self | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2187:20:2192 | self | @@ -1150,9 +1338,11 @@ | UseUseExplosion.rb:20:1985:20:1989 | self | UseUseExplosion.rb:20:2187:20:2192 | self | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [false] ( ... ) | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [true] ( ... ) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:1996:20:2180 | then ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2001:20:2180 | if ... | UseUseExplosion.rb:20:1996:20:2180 | then ... | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2025:20:2029 | self | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2171:20:2176 | self | @@ -1160,9 +1350,11 @@ | UseUseExplosion.rb:20:2005:20:2009 | self | UseUseExplosion.rb:20:2171:20:2176 | self | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [false] ( ... ) | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [true] ( ... ) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2016:20:2164 | then ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2021:20:2164 | if ... | UseUseExplosion.rb:20:2016:20:2164 | then ... | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2045:20:2049 | self | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2155:20:2160 | self | @@ -1170,9 +1362,11 @@ | UseUseExplosion.rb:20:2025:20:2029 | self | UseUseExplosion.rb:20:2155:20:2160 | self | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [false] ( ... ) | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [true] ( ... ) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2036:20:2148 | then ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2041:20:2148 | if ... | UseUseExplosion.rb:20:2036:20:2148 | then ... | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2065:20:2069 | self | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2139:20:2144 | self | @@ -1180,9 +1374,11 @@ | UseUseExplosion.rb:20:2045:20:2049 | self | UseUseExplosion.rb:20:2139:20:2144 | self | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [false] ( ... ) | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [true] ( ... ) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2056:20:2132 | then ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2061:20:2132 | if ... | UseUseExplosion.rb:20:2056:20:2132 | then ... | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2085:20:2089 | self | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2123:20:2128 | self | @@ -1190,213 +1386,417 @@ | UseUseExplosion.rb:20:2065:20:2069 | self | UseUseExplosion.rb:20:2123:20:2128 | self | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [false] ( ... ) | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [true] ( ... ) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2076:20:2116 | then ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2081:20:2116 | if ... | UseUseExplosion.rb:20:2076:20:2116 | then ... | | UseUseExplosion.rb:20:2085:20:2089 | [post] self | UseUseExplosion.rb:20:2107:20:2112 | self | | UseUseExplosion.rb:20:2085:20:2089 | self | UseUseExplosion.rb:20:2107:20:2112 | self | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [false] ( ... ) | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [true] ( ... ) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2096:20:2099 | then ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2102:20:2112 | else ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | | UseUseExplosion.rb:20:2107:20:2112 | call to use | UseUseExplosion.rb:20:2102:20:2112 | else ... | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2118:20:2128 | else ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | | UseUseExplosion.rb:20:2123:20:2128 | call to use | UseUseExplosion.rb:20:2118:20:2128 | else ... | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2134:20:2144 | else ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | | UseUseExplosion.rb:20:2139:20:2144 | call to use | UseUseExplosion.rb:20:2134:20:2144 | else ... | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2150:20:2160 | else ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | | UseUseExplosion.rb:20:2155:20:2160 | call to use | UseUseExplosion.rb:20:2150:20:2160 | else ... | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2166:20:2176 | else ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | | UseUseExplosion.rb:20:2171:20:2176 | call to use | UseUseExplosion.rb:20:2166:20:2176 | else ... | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:2182:20:2192 | else ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | | UseUseExplosion.rb:20:2187:20:2192 | call to use | UseUseExplosion.rb:20:2182:20:2192 | else ... | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:2198:20:2208 | else ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | | UseUseExplosion.rb:20:2203:20:2208 | call to use | UseUseExplosion.rb:20:2198:20:2208 | else ... | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:2214:20:2224 | else ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | | UseUseExplosion.rb:20:2219:20:2224 | call to use | UseUseExplosion.rb:20:2214:20:2224 | else ... | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:2230:20:2240 | else ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | | UseUseExplosion.rb:20:2235:20:2240 | call to use | UseUseExplosion.rb:20:2230:20:2240 | else ... | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:2246:20:2256 | else ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | | UseUseExplosion.rb:20:2251:20:2256 | call to use | UseUseExplosion.rb:20:2246:20:2256 | else ... | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:2262:20:2272 | else ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | | UseUseExplosion.rb:20:2267:20:2272 | call to use | UseUseExplosion.rb:20:2262:20:2272 | else ... | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:2278:20:2288 | else ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | | UseUseExplosion.rb:20:2283:20:2288 | call to use | UseUseExplosion.rb:20:2278:20:2288 | else ... | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:2294:20:2304 | else ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | | UseUseExplosion.rb:20:2299:20:2304 | call to use | UseUseExplosion.rb:20:2294:20:2304 | else ... | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:2310:20:2320 | else ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | | UseUseExplosion.rb:20:2315:20:2320 | call to use | UseUseExplosion.rb:20:2310:20:2320 | else ... | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:2326:20:2336 | else ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | | UseUseExplosion.rb:20:2331:20:2336 | call to use | UseUseExplosion.rb:20:2326:20:2336 | else ... | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:2342:20:2352 | else ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | | UseUseExplosion.rb:20:2347:20:2352 | call to use | UseUseExplosion.rb:20:2342:20:2352 | else ... | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:2358:20:2368 | else ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | | UseUseExplosion.rb:20:2363:20:2368 | call to use | UseUseExplosion.rb:20:2358:20:2368 | else ... | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:2374:20:2384 | else ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | | UseUseExplosion.rb:20:2379:20:2384 | call to use | UseUseExplosion.rb:20:2374:20:2384 | else ... | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:2390:20:2400 | else ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | | UseUseExplosion.rb:20:2395:20:2400 | call to use | UseUseExplosion.rb:20:2390:20:2400 | else ... | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:2406:20:2416 | else ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | | UseUseExplosion.rb:20:2411:20:2416 | call to use | UseUseExplosion.rb:20:2406:20:2416 | else ... | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:2422:20:2432 | else ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | | UseUseExplosion.rb:20:2427:20:2432 | call to use | UseUseExplosion.rb:20:2422:20:2432 | else ... | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:2438:20:2448 | else ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | | UseUseExplosion.rb:20:2443:20:2448 | call to use | UseUseExplosion.rb:20:2438:20:2448 | else ... | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:2454:20:2464 | else ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | | UseUseExplosion.rb:20:2459:20:2464 | call to use | UseUseExplosion.rb:20:2454:20:2464 | else ... | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:2470:20:2480 | else ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | | UseUseExplosion.rb:20:2475:20:2480 | call to use | UseUseExplosion.rb:20:2470:20:2480 | else ... | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:2486:20:2496 | else ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | | UseUseExplosion.rb:20:2491:20:2496 | call to use | UseUseExplosion.rb:20:2486:20:2496 | else ... | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:2502:20:2512 | else ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | | UseUseExplosion.rb:20:2507:20:2512 | call to use | UseUseExplosion.rb:20:2502:20:2512 | else ... | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:2518:20:2528 | else ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | | UseUseExplosion.rb:20:2523:20:2528 | call to use | UseUseExplosion.rb:20:2518:20:2528 | else ... | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:2534:20:2544 | else ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | | UseUseExplosion.rb:20:2539:20:2544 | call to use | UseUseExplosion.rb:20:2534:20:2544 | else ... | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:2550:20:2560 | else ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | | UseUseExplosion.rb:20:2555:20:2560 | call to use | UseUseExplosion.rb:20:2550:20:2560 | else ... | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:2566:20:2576 | else ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | | UseUseExplosion.rb:20:2571:20:2576 | call to use | UseUseExplosion.rb:20:2566:20:2576 | else ... | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:2582:20:2592 | else ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | | UseUseExplosion.rb:20:2587:20:2592 | call to use | UseUseExplosion.rb:20:2582:20:2592 | else ... | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:2598:20:2608 | else ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | | UseUseExplosion.rb:20:2603:20:2608 | call to use | UseUseExplosion.rb:20:2598:20:2608 | else ... | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:2614:20:2624 | else ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | | UseUseExplosion.rb:20:2619:20:2624 | call to use | UseUseExplosion.rb:20:2614:20:2624 | else ... | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:2630:20:2640 | else ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | | UseUseExplosion.rb:20:2635:20:2640 | call to use | UseUseExplosion.rb:20:2630:20:2640 | else ... | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:2646:20:2656 | else ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | | UseUseExplosion.rb:20:2651:20:2656 | call to use | UseUseExplosion.rb:20:2646:20:2656 | else ... | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:2662:20:2672 | else ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | | UseUseExplosion.rb:20:2667:20:2672 | call to use | UseUseExplosion.rb:20:2662:20:2672 | else ... | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:2678:20:2688 | else ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | | UseUseExplosion.rb:20:2683:20:2688 | call to use | UseUseExplosion.rb:20:2678:20:2688 | else ... | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:2694:20:2704 | else ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | | UseUseExplosion.rb:20:2699:20:2704 | call to use | UseUseExplosion.rb:20:2694:20:2704 | else ... | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:2710:20:2720 | else ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | | UseUseExplosion.rb:20:2715:20:2720 | call to use | UseUseExplosion.rb:20:2710:20:2720 | else ... | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:2726:20:2736 | else ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | | UseUseExplosion.rb:20:2731:20:2736 | call to use | UseUseExplosion.rb:20:2726:20:2736 | else ... | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:2742:20:2752 | else ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | | UseUseExplosion.rb:20:2747:20:2752 | call to use | UseUseExplosion.rb:20:2742:20:2752 | else ... | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:2758:20:2768 | else ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | | UseUseExplosion.rb:20:2763:20:2768 | call to use | UseUseExplosion.rb:20:2758:20:2768 | else ... | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:2774:20:2784 | else ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | | UseUseExplosion.rb:20:2779:20:2784 | call to use | UseUseExplosion.rb:20:2774:20:2784 | else ... | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:2790:20:2800 | else ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | | UseUseExplosion.rb:20:2795:20:2800 | call to use | UseUseExplosion.rb:20:2790:20:2800 | else ... | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:2806:20:2816 | else ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | | UseUseExplosion.rb:20:2811:20:2816 | call to use | UseUseExplosion.rb:20:2806:20:2816 | else ... | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:2822:20:2832 | else ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | | UseUseExplosion.rb:20:2827:20:2832 | call to use | UseUseExplosion.rb:20:2822:20:2832 | else ... | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:2838:20:2848 | else ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | | UseUseExplosion.rb:20:2843:20:2848 | call to use | UseUseExplosion.rb:20:2838:20:2848 | else ... | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:2854:20:2864 | else ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | | UseUseExplosion.rb:20:2859:20:2864 | call to use | UseUseExplosion.rb:20:2854:20:2864 | else ... | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:2870:20:2880 | else ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | | UseUseExplosion.rb:20:2875:20:2880 | call to use | UseUseExplosion.rb:20:2870:20:2880 | else ... | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:2886:20:2896 | else ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | | UseUseExplosion.rb:20:2891:20:2896 | call to use | UseUseExplosion.rb:20:2886:20:2896 | else ... | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:2902:20:2912 | else ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | | UseUseExplosion.rb:20:2907:20:2912 | call to use | UseUseExplosion.rb:20:2902:20:2912 | else ... | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:2918:20:2928 | else ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | | UseUseExplosion.rb:20:2923:20:2928 | call to use | UseUseExplosion.rb:20:2918:20:2928 | else ... | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:2934:20:2944 | else ... | UseUseExplosion.rb:20:997:20:2948 | if ... | | UseUseExplosion.rb:20:2939:20:2944 | call to use | UseUseExplosion.rb:20:2934:20:2944 | else ... | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:2950:20:2960 | else ... | UseUseExplosion.rb:20:976:20:2964 | if ... | | UseUseExplosion.rb:20:2955:20:2960 | call to use | UseUseExplosion.rb:20:2950:20:2960 | else ... | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:2966:20:2976 | else ... | UseUseExplosion.rb:20:955:20:2980 | if ... | | UseUseExplosion.rb:20:2971:20:2976 | call to use | UseUseExplosion.rb:20:2966:20:2976 | else ... | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:2982:20:2992 | else ... | UseUseExplosion.rb:20:934:20:2996 | if ... | | UseUseExplosion.rb:20:2987:20:2992 | call to use | UseUseExplosion.rb:20:2982:20:2992 | else ... | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:2998:20:3008 | else ... | UseUseExplosion.rb:20:913:20:3012 | if ... | | UseUseExplosion.rb:20:3003:20:3008 | call to use | UseUseExplosion.rb:20:2998:20:3008 | else ... | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:3014:20:3024 | else ... | UseUseExplosion.rb:20:892:20:3028 | if ... | | UseUseExplosion.rb:20:3019:20:3024 | call to use | UseUseExplosion.rb:20:3014:20:3024 | else ... | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:3030:20:3040 | else ... | UseUseExplosion.rb:20:871:20:3044 | if ... | | UseUseExplosion.rb:20:3035:20:3040 | call to use | UseUseExplosion.rb:20:3030:20:3040 | else ... | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:3046:20:3056 | else ... | UseUseExplosion.rb:20:850:20:3060 | if ... | | UseUseExplosion.rb:20:3051:20:3056 | call to use | UseUseExplosion.rb:20:3046:20:3056 | else ... | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:3062:20:3072 | else ... | UseUseExplosion.rb:20:829:20:3076 | if ... | | UseUseExplosion.rb:20:3067:20:3072 | call to use | UseUseExplosion.rb:20:3062:20:3072 | else ... | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:3078:20:3088 | else ... | UseUseExplosion.rb:20:808:20:3092 | if ... | | UseUseExplosion.rb:20:3083:20:3088 | call to use | UseUseExplosion.rb:20:3078:20:3088 | else ... | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:3094:20:3104 | else ... | UseUseExplosion.rb:20:787:20:3108 | if ... | | UseUseExplosion.rb:20:3099:20:3104 | call to use | UseUseExplosion.rb:20:3094:20:3104 | else ... | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:3110:20:3120 | else ... | UseUseExplosion.rb:20:766:20:3124 | if ... | | UseUseExplosion.rb:20:3115:20:3120 | call to use | UseUseExplosion.rb:20:3110:20:3120 | else ... | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:3126:20:3136 | else ... | UseUseExplosion.rb:20:745:20:3140 | if ... | | UseUseExplosion.rb:20:3131:20:3136 | call to use | UseUseExplosion.rb:20:3126:20:3136 | else ... | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:3142:20:3152 | else ... | UseUseExplosion.rb:20:724:20:3156 | if ... | | UseUseExplosion.rb:20:3147:20:3152 | call to use | UseUseExplosion.rb:20:3142:20:3152 | else ... | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:3158:20:3168 | else ... | UseUseExplosion.rb:20:703:20:3172 | if ... | | UseUseExplosion.rb:20:3163:20:3168 | call to use | UseUseExplosion.rb:20:3158:20:3168 | else ... | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:3174:20:3184 | else ... | UseUseExplosion.rb:20:682:20:3188 | if ... | | UseUseExplosion.rb:20:3179:20:3184 | call to use | UseUseExplosion.rb:20:3174:20:3184 | else ... | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:3190:20:3200 | else ... | UseUseExplosion.rb:20:661:20:3204 | if ... | | UseUseExplosion.rb:20:3195:20:3200 | call to use | UseUseExplosion.rb:20:3190:20:3200 | else ... | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:3206:20:3216 | else ... | UseUseExplosion.rb:20:640:20:3220 | if ... | | UseUseExplosion.rb:20:3211:20:3216 | call to use | UseUseExplosion.rb:20:3206:20:3216 | else ... | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:3222:20:3232 | else ... | UseUseExplosion.rb:20:619:20:3236 | if ... | | UseUseExplosion.rb:20:3227:20:3232 | call to use | UseUseExplosion.rb:20:3222:20:3232 | else ... | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:3238:20:3248 | else ... | UseUseExplosion.rb:20:598:20:3252 | if ... | | UseUseExplosion.rb:20:3243:20:3248 | call to use | UseUseExplosion.rb:20:3238:20:3248 | else ... | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:3254:20:3264 | else ... | UseUseExplosion.rb:20:577:20:3268 | if ... | | UseUseExplosion.rb:20:3259:20:3264 | call to use | UseUseExplosion.rb:20:3254:20:3264 | else ... | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:3270:20:3280 | else ... | UseUseExplosion.rb:20:556:20:3284 | if ... | | UseUseExplosion.rb:20:3275:20:3280 | call to use | UseUseExplosion.rb:20:3270:20:3280 | else ... | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:3286:20:3296 | else ... | UseUseExplosion.rb:20:535:20:3300 | if ... | | UseUseExplosion.rb:20:3291:20:3296 | call to use | UseUseExplosion.rb:20:3286:20:3296 | else ... | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:3302:20:3312 | else ... | UseUseExplosion.rb:20:514:20:3316 | if ... | | UseUseExplosion.rb:20:3307:20:3312 | call to use | UseUseExplosion.rb:20:3302:20:3312 | else ... | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:3318:20:3328 | else ... | UseUseExplosion.rb:20:493:20:3332 | if ... | | UseUseExplosion.rb:20:3323:20:3328 | call to use | UseUseExplosion.rb:20:3318:20:3328 | else ... | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:3334:20:3344 | else ... | UseUseExplosion.rb:20:472:20:3348 | if ... | | UseUseExplosion.rb:20:3339:20:3344 | call to use | UseUseExplosion.rb:20:3334:20:3344 | else ... | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:3350:20:3360 | else ... | UseUseExplosion.rb:20:451:20:3364 | if ... | | UseUseExplosion.rb:20:3355:20:3360 | call to use | UseUseExplosion.rb:20:3350:20:3360 | else ... | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:3366:20:3376 | else ... | UseUseExplosion.rb:20:430:20:3380 | if ... | | UseUseExplosion.rb:20:3371:20:3376 | call to use | UseUseExplosion.rb:20:3366:20:3376 | else ... | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:3382:20:3392 | else ... | UseUseExplosion.rb:20:409:20:3396 | if ... | | UseUseExplosion.rb:20:3387:20:3392 | call to use | UseUseExplosion.rb:20:3382:20:3392 | else ... | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:3398:20:3408 | else ... | UseUseExplosion.rb:20:388:20:3412 | if ... | | UseUseExplosion.rb:20:3403:20:3408 | call to use | UseUseExplosion.rb:20:3398:20:3408 | else ... | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:3414:20:3424 | else ... | UseUseExplosion.rb:20:367:20:3428 | if ... | | UseUseExplosion.rb:20:3419:20:3424 | call to use | UseUseExplosion.rb:20:3414:20:3424 | else ... | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:3430:20:3440 | else ... | UseUseExplosion.rb:20:346:20:3444 | if ... | | UseUseExplosion.rb:20:3435:20:3440 | call to use | UseUseExplosion.rb:20:3430:20:3440 | else ... | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:3446:20:3456 | else ... | UseUseExplosion.rb:20:325:20:3460 | if ... | | UseUseExplosion.rb:20:3451:20:3456 | call to use | UseUseExplosion.rb:20:3446:20:3456 | else ... | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:3462:20:3472 | else ... | UseUseExplosion.rb:20:304:20:3476 | if ... | | UseUseExplosion.rb:20:3467:20:3472 | call to use | UseUseExplosion.rb:20:3462:20:3472 | else ... | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:3478:20:3488 | else ... | UseUseExplosion.rb:20:283:20:3492 | if ... | | UseUseExplosion.rb:20:3483:20:3488 | call to use | UseUseExplosion.rb:20:3478:20:3488 | else ... | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:3494:20:3504 | else ... | UseUseExplosion.rb:20:262:20:3508 | if ... | | UseUseExplosion.rb:20:3499:20:3504 | call to use | UseUseExplosion.rb:20:3494:20:3504 | else ... | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:3510:20:3520 | else ... | UseUseExplosion.rb:20:241:20:3524 | if ... | | UseUseExplosion.rb:20:3515:20:3520 | call to use | UseUseExplosion.rb:20:3510:20:3520 | else ... | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:3526:20:3536 | else ... | UseUseExplosion.rb:20:220:20:3540 | if ... | | UseUseExplosion.rb:20:3531:20:3536 | call to use | UseUseExplosion.rb:20:3526:20:3536 | else ... | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:3542:20:3552 | else ... | UseUseExplosion.rb:20:199:20:3556 | if ... | | UseUseExplosion.rb:20:3547:20:3552 | call to use | UseUseExplosion.rb:20:3542:20:3552 | else ... | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:3558:20:3568 | else ... | UseUseExplosion.rb:20:178:20:3572 | if ... | | UseUseExplosion.rb:20:3563:20:3568 | call to use | UseUseExplosion.rb:20:3558:20:3568 | else ... | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:3574:20:3584 | else ... | UseUseExplosion.rb:20:157:20:3588 | if ... | | UseUseExplosion.rb:20:3579:20:3584 | call to use | UseUseExplosion.rb:20:3574:20:3584 | else ... | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:3590:20:3600 | else ... | UseUseExplosion.rb:20:136:20:3604 | if ... | | UseUseExplosion.rb:20:3595:20:3600 | call to use | UseUseExplosion.rb:20:3590:20:3600 | else ... | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:3606:20:3616 | else ... | UseUseExplosion.rb:20:115:20:3620 | if ... | | UseUseExplosion.rb:20:3611:20:3616 | call to use | UseUseExplosion.rb:20:3606:20:3616 | else ... | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:3622:20:3632 | else ... | UseUseExplosion.rb:20:94:20:3636 | if ... | | UseUseExplosion.rb:20:3627:20:3632 | call to use | UseUseExplosion.rb:20:3622:20:3632 | else ... | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:3638:20:3648 | else ... | UseUseExplosion.rb:20:73:20:3652 | if ... | | UseUseExplosion.rb:20:3643:20:3648 | call to use | UseUseExplosion.rb:20:3638:20:3648 | else ... | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:3654:20:3664 | else ... | UseUseExplosion.rb:20:52:20:3668 | if ... | | UseUseExplosion.rb:20:3659:20:3664 | call to use | UseUseExplosion.rb:20:3654:20:3664 | else ... | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:3670:20:3680 | else ... | UseUseExplosion.rb:20:31:20:3684 | if ... | | UseUseExplosion.rb:20:3675:20:3680 | call to use | UseUseExplosion.rb:20:3670:20:3680 | else ... | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:3686:20:3696 | else ... | UseUseExplosion.rb:20:9:20:3700 | if ... | | UseUseExplosion.rb:20:3691:20:3696 | call to use | UseUseExplosion.rb:20:3686:20:3696 | else ... | | UseUseExplosion.rb:21:13:21:17 | [post] self | UseUseExplosion.rb:21:35:21:39 | self | @@ -2436,9 +2836,11 @@ | local_dataflow.rb:10:5:13:3 | __synth__0__1 | local_dataflow.rb:10:9:10:9 | x | | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | | local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | -| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | [input] phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | @@ -2451,9 +2853,11 @@ | local_dataflow.rb:15:1:17:3 | __synth__0__1 | local_dataflow.rb:15:5:15:5 | x | | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | | local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | -| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | [input] phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | @@ -2463,9 +2867,11 @@ | local_dataflow.rb:19:1:21:3 | __synth__0__1 | local_dataflow.rb:19:5:19:5 | x | | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | | local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | -| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | [input] phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:24:2:24:8 | break | local_dataflow.rb:23:1:25:3 | while ... | | local_dataflow.rb:24:8:24:8 | 5 | local_dataflow.rb:24:2:24:8 | break | @@ -2499,12 +2905,16 @@ | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:63:15:63:15 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:65:6:65:6 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:67:5:67:5 | x | +| local_dataflow.rb:62:10:62:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:62:10:62:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:62:15:62:15 | 3 | local_dataflow.rb:62:10:62:15 | then ... | +| local_dataflow.rb:63:10:63:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:63:10:63:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:63:15:63:15 | x | local_dataflow.rb:63:10:63:15 | then ... | +| local_dataflow.rb:64:9:65:6 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:64:9:65:6 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:65:6:65:6 | x | local_dataflow.rb:64:9:65:6 | then ... | +| local_dataflow.rb:66:3:67:5 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:66:3:67:5 | else ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:67:5:67:5 | x | local_dataflow.rb:66:3:67:5 | else ... | | local_dataflow.rb:69:7:76:5 | case ... | local_dataflow.rb:69:3:76:5 | ... = ... | @@ -2538,16 +2948,19 @@ | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:28:86:34 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:20:87:26 | self | | local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | +| local_dataflow.rb:79:15:79:45 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:79:15:79:45 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:79:20:79:26 | call to sink | local_dataflow.rb:79:15:79:45 | then ... | | local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:13:80:13 | a | | local_dataflow.rb:80:13:80:13 | [post] a | local_dataflow.rb:80:29:80:29 | a | | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:29:80:29 | a | +| local_dataflow.rb:80:19:80:49 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:80:19:80:49 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:80:24:80:30 | call to sink | local_dataflow.rb:80:19:80:49 | then ... | | local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | | local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | | local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | +| local_dataflow.rb:81:20:84:33 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:81:20:84:33 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:81:25:84:14 | call to [] | local_dataflow.rb:81:20:84:33 | then ... | | local_dataflow.rb:81:25:84:14 | synthetic splat argument | local_dataflow.rb:81:25:84:14 | call to [] | @@ -2556,12 +2969,15 @@ | local_dataflow.rb:83:7:83:13 | [post] self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | +| local_dataflow.rb:85:17:85:47 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:85:17:85:47 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:85:22:85:28 | call to sink | local_dataflow.rb:85:17:85:47 | then ... | | local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | +| local_dataflow.rb:86:23:86:53 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:86:23:86:53 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:86:28:86:34 | call to sink | local_dataflow.rb:86:23:86:53 | then ... | | local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | +| local_dataflow.rb:87:15:87:48 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:87:15:87:48 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:87:25:87:25 | [post] x | local_dataflow.rb:87:29:87:29 | x | | local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:29:87:29 | x | @@ -2569,42 +2985,50 @@ | local_dataflow.rb:92:1:109:3 | self (and_or) | local_dataflow.rb:93:7:93:15 | self | | local_dataflow.rb:92:1:109:3 | self in and_or | local_dataflow.rb:92:1:109:3 | self (and_or) | | local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | +| local_dataflow.rb:93:7:93:15 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:7:93:15 | [post] self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:93:7:93:15 | self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:3 | a | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:28 | ... = ... | | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | local_dataflow.rb:94:3:94:9 | self | +| local_dataflow.rb:93:20:93:28 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:94:3:94:9 | [post] self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:94:3:94:9 | self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:3 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:30 | ... = ... | +| local_dataflow.rb:95:8:95:16 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:8:95:16 | [post] self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:95:8:95:16 | self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:29 | ... or ... | local_dataflow.rb:95:7:95:30 | ( ... ) | | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | local_dataflow.rb:96:3:96:9 | self | +| local_dataflow.rb:95:21:95:29 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:96:3:96:9 | [post] self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:96:3:96:9 | self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | +| local_dataflow.rb:98:7:98:15 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:7:98:15 | [post] self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:15 | self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:3 | a | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:28 | ... = ... | | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | local_dataflow.rb:99:3:99:9 | self | +| local_dataflow.rb:98:20:98:28 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:7:98:28 | ... && ... | | local_dataflow.rb:99:3:99:9 | [post] self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:99:3:99:9 | self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:3 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:31 | ... = ... | +| local_dataflow.rb:100:8:100:16 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:8:100:16 | [post] self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:16 | self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:30 | ... and ... | local_dataflow.rb:100:7:100:31 | ( ... ) | | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | local_dataflow.rb:101:3:101:9 | self | +| local_dataflow.rb:100:22:100:30 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:8:100:30 | ... and ... | | local_dataflow.rb:101:3:101:9 | [post] self | local_dataflow.rb:103:7:103:15 | self | | local_dataflow.rb:101:3:101:9 | self | local_dataflow.rb:103:7:103:15 | self | @@ -2613,11 +3037,13 @@ | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:15 | ... = ... | | local_dataflow.rb:103:7:103:15 | self | local_dataflow.rb:104:9:104:17 | self | +| local_dataflow.rb:104:3:104:3 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:3 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:17 | ... = ... | | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | local_dataflow.rb:105:3:105:9 | self | +| local_dataflow.rb:104:9:104:17 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:105:3:105:9 | [post] self | local_dataflow.rb:106:7:106:15 | self | | local_dataflow.rb:105:3:105:9 | self | local_dataflow.rb:106:7:106:15 | self | @@ -2626,10 +3052,12 @@ | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:3 | b | | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:15 | ... = ... | | local_dataflow.rb:106:7:106:15 | self | local_dataflow.rb:107:9:107:17 | self | +| local_dataflow.rb:107:3:107:3 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:3 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:17 | ... = ... | | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | local_dataflow.rb:108:3:108:9 | self | +| local_dataflow.rb:107:9:107:17 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:5:107:7 | ... && ... | | local_dataflow.rb:111:1:114:3 | self (object_dup) | local_dataflow.rb:112:3:112:21 | self | | local_dataflow.rb:111:1:114:3 | self in object_dup | local_dataflow.rb:111:1:114:3 | self (object_dup) | @@ -2681,6 +3109,8 @@ | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | local_dataflow.rb:141:13:141:13 | x | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:8:133:13 | [post] self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | @@ -2689,43 +3119,63 @@ | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | | local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | -| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | -| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | | local_dataflow.rb:137:7:138:9 | if ... | local_dataflow.rb:135:5:138:9 | else ... | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:10:137:15 | [post] self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | -| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | -| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | | local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | local_dataflow.rb:147:5:147:10 | self | | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | local_dataflow.rb:147:9:147:9 | x | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:8:141:14 | [true] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | -| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | | local_dataflow.rb:141:9:141:14 | [post] self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:9:141:14 | self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:20:141:25 | [post] self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:25 | self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | @@ -2735,22 +3185,36 @@ | local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:141:38:142:9 | then ... | local_dataflow.rb:141:5:145:7 | if ... | | local_dataflow.rb:142:7:142:9 | nil | local_dataflow.rb:141:38:142:9 | then ... | -| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:143:5:144:16 | elsif ... | local_dataflow.rb:141:5:145:7 | if ... | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:11:143:16 | [post] self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:27:144:16 | then ... | local_dataflow.rb:143:5:144:16 | elsif ... | | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index a462aebeba9..2c189c76939 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -1,6 +1,6 @@ | UseUseExplosion.rb:18:5:22:7 | self (m) | UseUseExplosion.rb:20:13:20:17 | self | | UseUseExplosion.rb:18:5:22:7 | self in m | UseUseExplosion.rb:18:5:22:7 | self (m) | -| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | +| UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2111:20:2111 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2127:20:2127 | x | | UseUseExplosion.rb:19:9:19:9 | x | UseUseExplosion.rb:20:2143:20:2143 | x | @@ -212,9 +212,11 @@ | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [false] ( ... ) | | UseUseExplosion.rb:20:13:20:23 | ... > ... | UseUseExplosion.rb:20:12:20:24 | [true] ( ... ) | | UseUseExplosion.rb:20:21:20:23 | 100 | UseUseExplosion.rb:20:13:20:23 | ... > ... | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:26:20:3684 | then ... | UseUseExplosion.rb:20:9:20:3700 | if ... | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | -| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | UseUseExplosion.rb:20:26:20:3684 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:31:20:3684 | if ... | UseUseExplosion.rb:20:26:20:3684 | then ... | | UseUseExplosion.rb:20:35:20:39 | @prop | UseUseExplosion.rb:20:35:20:44 | ... > ... | | UseUseExplosion.rb:20:35:20:39 | [post] self | UseUseExplosion.rb:20:56:20:60 | self | @@ -224,9 +226,11 @@ | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [false] ( ... ) | | UseUseExplosion.rb:20:35:20:44 | ... > ... | UseUseExplosion.rb:20:34:20:45 | [true] ( ... ) | | UseUseExplosion.rb:20:43:20:44 | 99 | UseUseExplosion.rb:20:35:20:44 | ... > ... | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:47:20:3668 | then ... | UseUseExplosion.rb:20:31:20:3684 | if ... | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | -| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | UseUseExplosion.rb:20:47:20:3668 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:52:20:3668 | if ... | UseUseExplosion.rb:20:47:20:3668 | then ... | | UseUseExplosion.rb:20:56:20:60 | @prop | UseUseExplosion.rb:20:56:20:65 | ... > ... | | UseUseExplosion.rb:20:56:20:60 | [post] self | UseUseExplosion.rb:20:77:20:81 | self | @@ -236,9 +240,11 @@ | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [false] ( ... ) | | UseUseExplosion.rb:20:56:20:65 | ... > ... | UseUseExplosion.rb:20:55:20:66 | [true] ( ... ) | | UseUseExplosion.rb:20:64:20:65 | 98 | UseUseExplosion.rb:20:56:20:65 | ... > ... | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:68:20:3652 | then ... | UseUseExplosion.rb:20:52:20:3668 | if ... | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | -| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | UseUseExplosion.rb:20:68:20:3652 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:73:20:3652 | if ... | UseUseExplosion.rb:20:68:20:3652 | then ... | | UseUseExplosion.rb:20:77:20:81 | @prop | UseUseExplosion.rb:20:77:20:86 | ... > ... | | UseUseExplosion.rb:20:77:20:81 | [post] self | UseUseExplosion.rb:20:98:20:102 | self | @@ -248,9 +254,11 @@ | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [false] ( ... ) | | UseUseExplosion.rb:20:77:20:86 | ... > ... | UseUseExplosion.rb:20:76:20:87 | [true] ( ... ) | | UseUseExplosion.rb:20:85:20:86 | 97 | UseUseExplosion.rb:20:77:20:86 | ... > ... | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:89:20:3636 | then ... | UseUseExplosion.rb:20:73:20:3652 | if ... | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | -| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | UseUseExplosion.rb:20:89:20:3636 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:94:20:3636 | if ... | UseUseExplosion.rb:20:89:20:3636 | then ... | | UseUseExplosion.rb:20:98:20:102 | @prop | UseUseExplosion.rb:20:98:20:107 | ... > ... | | UseUseExplosion.rb:20:98:20:102 | [post] self | UseUseExplosion.rb:20:119:20:123 | self | @@ -260,9 +268,11 @@ | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [false] ( ... ) | | UseUseExplosion.rb:20:98:20:107 | ... > ... | UseUseExplosion.rb:20:97:20:108 | [true] ( ... ) | | UseUseExplosion.rb:20:106:20:107 | 96 | UseUseExplosion.rb:20:98:20:107 | ... > ... | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:110:20:3620 | then ... | UseUseExplosion.rb:20:94:20:3636 | if ... | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | -| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | UseUseExplosion.rb:20:110:20:3620 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:115:20:3620 | if ... | UseUseExplosion.rb:20:110:20:3620 | then ... | | UseUseExplosion.rb:20:119:20:123 | @prop | UseUseExplosion.rb:20:119:20:128 | ... > ... | | UseUseExplosion.rb:20:119:20:123 | [post] self | UseUseExplosion.rb:20:140:20:144 | self | @@ -272,9 +282,11 @@ | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [false] ( ... ) | | UseUseExplosion.rb:20:119:20:128 | ... > ... | UseUseExplosion.rb:20:118:20:129 | [true] ( ... ) | | UseUseExplosion.rb:20:127:20:128 | 95 | UseUseExplosion.rb:20:119:20:128 | ... > ... | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:131:20:3604 | then ... | UseUseExplosion.rb:20:115:20:3620 | if ... | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | -| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | UseUseExplosion.rb:20:131:20:3604 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:136:20:3604 | if ... | UseUseExplosion.rb:20:131:20:3604 | then ... | | UseUseExplosion.rb:20:140:20:144 | @prop | UseUseExplosion.rb:20:140:20:149 | ... > ... | | UseUseExplosion.rb:20:140:20:144 | [post] self | UseUseExplosion.rb:20:161:20:165 | self | @@ -284,9 +296,11 @@ | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [false] ( ... ) | | UseUseExplosion.rb:20:140:20:149 | ... > ... | UseUseExplosion.rb:20:139:20:150 | [true] ( ... ) | | UseUseExplosion.rb:20:148:20:149 | 94 | UseUseExplosion.rb:20:140:20:149 | ... > ... | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:152:20:3588 | then ... | UseUseExplosion.rb:20:136:20:3604 | if ... | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | -| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | UseUseExplosion.rb:20:152:20:3588 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:157:20:3588 | if ... | UseUseExplosion.rb:20:152:20:3588 | then ... | | UseUseExplosion.rb:20:161:20:165 | @prop | UseUseExplosion.rb:20:161:20:170 | ... > ... | | UseUseExplosion.rb:20:161:20:165 | [post] self | UseUseExplosion.rb:20:182:20:186 | self | @@ -296,9 +310,11 @@ | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [false] ( ... ) | | UseUseExplosion.rb:20:161:20:170 | ... > ... | UseUseExplosion.rb:20:160:20:171 | [true] ( ... ) | | UseUseExplosion.rb:20:169:20:170 | 93 | UseUseExplosion.rb:20:161:20:170 | ... > ... | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:173:20:3572 | then ... | UseUseExplosion.rb:20:157:20:3588 | if ... | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | -| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | UseUseExplosion.rb:20:173:20:3572 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:178:20:3572 | if ... | UseUseExplosion.rb:20:173:20:3572 | then ... | | UseUseExplosion.rb:20:182:20:186 | @prop | UseUseExplosion.rb:20:182:20:191 | ... > ... | | UseUseExplosion.rb:20:182:20:186 | [post] self | UseUseExplosion.rb:20:203:20:207 | self | @@ -308,9 +324,11 @@ | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [false] ( ... ) | | UseUseExplosion.rb:20:182:20:191 | ... > ... | UseUseExplosion.rb:20:181:20:192 | [true] ( ... ) | | UseUseExplosion.rb:20:190:20:191 | 92 | UseUseExplosion.rb:20:182:20:191 | ... > ... | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:194:20:3556 | then ... | UseUseExplosion.rb:20:178:20:3572 | if ... | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | -| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | UseUseExplosion.rb:20:194:20:3556 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:199:20:3556 | if ... | UseUseExplosion.rb:20:194:20:3556 | then ... | | UseUseExplosion.rb:20:203:20:207 | @prop | UseUseExplosion.rb:20:203:20:212 | ... > ... | | UseUseExplosion.rb:20:203:20:207 | [post] self | UseUseExplosion.rb:20:224:20:228 | self | @@ -320,9 +338,11 @@ | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [false] ( ... ) | | UseUseExplosion.rb:20:203:20:212 | ... > ... | UseUseExplosion.rb:20:202:20:213 | [true] ( ... ) | | UseUseExplosion.rb:20:211:20:212 | 91 | UseUseExplosion.rb:20:203:20:212 | ... > ... | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:215:20:3540 | then ... | UseUseExplosion.rb:20:199:20:3556 | if ... | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | -| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | UseUseExplosion.rb:20:215:20:3540 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:220:20:3540 | if ... | UseUseExplosion.rb:20:215:20:3540 | then ... | | UseUseExplosion.rb:20:224:20:228 | @prop | UseUseExplosion.rb:20:224:20:233 | ... > ... | | UseUseExplosion.rb:20:224:20:228 | [post] self | UseUseExplosion.rb:20:245:20:249 | self | @@ -332,9 +352,11 @@ | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [false] ( ... ) | | UseUseExplosion.rb:20:224:20:233 | ... > ... | UseUseExplosion.rb:20:223:20:234 | [true] ( ... ) | | UseUseExplosion.rb:20:232:20:233 | 90 | UseUseExplosion.rb:20:224:20:233 | ... > ... | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:236:20:3524 | then ... | UseUseExplosion.rb:20:220:20:3540 | if ... | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | -| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | UseUseExplosion.rb:20:236:20:3524 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:241:20:3524 | if ... | UseUseExplosion.rb:20:236:20:3524 | then ... | | UseUseExplosion.rb:20:245:20:249 | @prop | UseUseExplosion.rb:20:245:20:254 | ... > ... | | UseUseExplosion.rb:20:245:20:249 | [post] self | UseUseExplosion.rb:20:266:20:270 | self | @@ -344,9 +366,11 @@ | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [false] ( ... ) | | UseUseExplosion.rb:20:245:20:254 | ... > ... | UseUseExplosion.rb:20:244:20:255 | [true] ( ... ) | | UseUseExplosion.rb:20:253:20:254 | 89 | UseUseExplosion.rb:20:245:20:254 | ... > ... | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:257:20:3508 | then ... | UseUseExplosion.rb:20:241:20:3524 | if ... | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | -| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | UseUseExplosion.rb:20:257:20:3508 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:262:20:3508 | if ... | UseUseExplosion.rb:20:257:20:3508 | then ... | | UseUseExplosion.rb:20:266:20:270 | @prop | UseUseExplosion.rb:20:266:20:275 | ... > ... | | UseUseExplosion.rb:20:266:20:270 | [post] self | UseUseExplosion.rb:20:287:20:291 | self | @@ -356,9 +380,11 @@ | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [false] ( ... ) | | UseUseExplosion.rb:20:266:20:275 | ... > ... | UseUseExplosion.rb:20:265:20:276 | [true] ( ... ) | | UseUseExplosion.rb:20:274:20:275 | 88 | UseUseExplosion.rb:20:266:20:275 | ... > ... | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:278:20:3492 | then ... | UseUseExplosion.rb:20:262:20:3508 | if ... | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | -| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | UseUseExplosion.rb:20:278:20:3492 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:283:20:3492 | if ... | UseUseExplosion.rb:20:278:20:3492 | then ... | | UseUseExplosion.rb:20:287:20:291 | @prop | UseUseExplosion.rb:20:287:20:296 | ... > ... | | UseUseExplosion.rb:20:287:20:291 | [post] self | UseUseExplosion.rb:20:308:20:312 | self | @@ -368,9 +394,11 @@ | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [false] ( ... ) | | UseUseExplosion.rb:20:287:20:296 | ... > ... | UseUseExplosion.rb:20:286:20:297 | [true] ( ... ) | | UseUseExplosion.rb:20:295:20:296 | 87 | UseUseExplosion.rb:20:287:20:296 | ... > ... | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:299:20:3476 | then ... | UseUseExplosion.rb:20:283:20:3492 | if ... | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | -| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | UseUseExplosion.rb:20:299:20:3476 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:304:20:3476 | if ... | UseUseExplosion.rb:20:299:20:3476 | then ... | | UseUseExplosion.rb:20:308:20:312 | @prop | UseUseExplosion.rb:20:308:20:317 | ... > ... | | UseUseExplosion.rb:20:308:20:312 | [post] self | UseUseExplosion.rb:20:329:20:333 | self | @@ -380,9 +408,11 @@ | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [false] ( ... ) | | UseUseExplosion.rb:20:308:20:317 | ... > ... | UseUseExplosion.rb:20:307:20:318 | [true] ( ... ) | | UseUseExplosion.rb:20:316:20:317 | 86 | UseUseExplosion.rb:20:308:20:317 | ... > ... | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:320:20:3460 | then ... | UseUseExplosion.rb:20:304:20:3476 | if ... | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | -| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | UseUseExplosion.rb:20:320:20:3460 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:325:20:3460 | if ... | UseUseExplosion.rb:20:320:20:3460 | then ... | | UseUseExplosion.rb:20:329:20:333 | @prop | UseUseExplosion.rb:20:329:20:338 | ... > ... | | UseUseExplosion.rb:20:329:20:333 | [post] self | UseUseExplosion.rb:20:350:20:354 | self | @@ -392,9 +422,11 @@ | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [false] ( ... ) | | UseUseExplosion.rb:20:329:20:338 | ... > ... | UseUseExplosion.rb:20:328:20:339 | [true] ( ... ) | | UseUseExplosion.rb:20:337:20:338 | 85 | UseUseExplosion.rb:20:329:20:338 | ... > ... | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:341:20:3444 | then ... | UseUseExplosion.rb:20:325:20:3460 | if ... | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | -| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | UseUseExplosion.rb:20:341:20:3444 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:346:20:3444 | if ... | UseUseExplosion.rb:20:341:20:3444 | then ... | | UseUseExplosion.rb:20:350:20:354 | @prop | UseUseExplosion.rb:20:350:20:359 | ... > ... | | UseUseExplosion.rb:20:350:20:354 | [post] self | UseUseExplosion.rb:20:371:20:375 | self | @@ -404,9 +436,11 @@ | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [false] ( ... ) | | UseUseExplosion.rb:20:350:20:359 | ... > ... | UseUseExplosion.rb:20:349:20:360 | [true] ( ... ) | | UseUseExplosion.rb:20:358:20:359 | 84 | UseUseExplosion.rb:20:350:20:359 | ... > ... | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:362:20:3428 | then ... | UseUseExplosion.rb:20:346:20:3444 | if ... | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | -| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | UseUseExplosion.rb:20:362:20:3428 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:367:20:3428 | if ... | UseUseExplosion.rb:20:362:20:3428 | then ... | | UseUseExplosion.rb:20:371:20:375 | @prop | UseUseExplosion.rb:20:371:20:380 | ... > ... | | UseUseExplosion.rb:20:371:20:375 | [post] self | UseUseExplosion.rb:20:392:20:396 | self | @@ -416,9 +450,11 @@ | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [false] ( ... ) | | UseUseExplosion.rb:20:371:20:380 | ... > ... | UseUseExplosion.rb:20:370:20:381 | [true] ( ... ) | | UseUseExplosion.rb:20:379:20:380 | 83 | UseUseExplosion.rb:20:371:20:380 | ... > ... | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:383:20:3412 | then ... | UseUseExplosion.rb:20:367:20:3428 | if ... | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | -| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | UseUseExplosion.rb:20:383:20:3412 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:388:20:3412 | if ... | UseUseExplosion.rb:20:383:20:3412 | then ... | | UseUseExplosion.rb:20:392:20:396 | @prop | UseUseExplosion.rb:20:392:20:401 | ... > ... | | UseUseExplosion.rb:20:392:20:396 | [post] self | UseUseExplosion.rb:20:413:20:417 | self | @@ -428,9 +464,11 @@ | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [false] ( ... ) | | UseUseExplosion.rb:20:392:20:401 | ... > ... | UseUseExplosion.rb:20:391:20:402 | [true] ( ... ) | | UseUseExplosion.rb:20:400:20:401 | 82 | UseUseExplosion.rb:20:392:20:401 | ... > ... | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:404:20:3396 | then ... | UseUseExplosion.rb:20:388:20:3412 | if ... | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | -| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | UseUseExplosion.rb:20:404:20:3396 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:409:20:3396 | if ... | UseUseExplosion.rb:20:404:20:3396 | then ... | | UseUseExplosion.rb:20:413:20:417 | @prop | UseUseExplosion.rb:20:413:20:422 | ... > ... | | UseUseExplosion.rb:20:413:20:417 | [post] self | UseUseExplosion.rb:20:434:20:438 | self | @@ -440,9 +478,11 @@ | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [false] ( ... ) | | UseUseExplosion.rb:20:413:20:422 | ... > ... | UseUseExplosion.rb:20:412:20:423 | [true] ( ... ) | | UseUseExplosion.rb:20:421:20:422 | 81 | UseUseExplosion.rb:20:413:20:422 | ... > ... | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:425:20:3380 | then ... | UseUseExplosion.rb:20:409:20:3396 | if ... | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | -| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | UseUseExplosion.rb:20:425:20:3380 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:430:20:3380 | if ... | UseUseExplosion.rb:20:425:20:3380 | then ... | | UseUseExplosion.rb:20:434:20:438 | @prop | UseUseExplosion.rb:20:434:20:443 | ... > ... | | UseUseExplosion.rb:20:434:20:438 | [post] self | UseUseExplosion.rb:20:455:20:459 | self | @@ -452,9 +492,11 @@ | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [false] ( ... ) | | UseUseExplosion.rb:20:434:20:443 | ... > ... | UseUseExplosion.rb:20:433:20:444 | [true] ( ... ) | | UseUseExplosion.rb:20:442:20:443 | 80 | UseUseExplosion.rb:20:434:20:443 | ... > ... | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:446:20:3364 | then ... | UseUseExplosion.rb:20:430:20:3380 | if ... | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | -| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | UseUseExplosion.rb:20:446:20:3364 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:451:20:3364 | if ... | UseUseExplosion.rb:20:446:20:3364 | then ... | | UseUseExplosion.rb:20:455:20:459 | @prop | UseUseExplosion.rb:20:455:20:464 | ... > ... | | UseUseExplosion.rb:20:455:20:459 | [post] self | UseUseExplosion.rb:20:476:20:480 | self | @@ -464,9 +506,11 @@ | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [false] ( ... ) | | UseUseExplosion.rb:20:455:20:464 | ... > ... | UseUseExplosion.rb:20:454:20:465 | [true] ( ... ) | | UseUseExplosion.rb:20:463:20:464 | 79 | UseUseExplosion.rb:20:455:20:464 | ... > ... | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:467:20:3348 | then ... | UseUseExplosion.rb:20:451:20:3364 | if ... | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | -| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | UseUseExplosion.rb:20:467:20:3348 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:472:20:3348 | if ... | UseUseExplosion.rb:20:467:20:3348 | then ... | | UseUseExplosion.rb:20:476:20:480 | @prop | UseUseExplosion.rb:20:476:20:485 | ... > ... | | UseUseExplosion.rb:20:476:20:480 | [post] self | UseUseExplosion.rb:20:497:20:501 | self | @@ -476,9 +520,11 @@ | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [false] ( ... ) | | UseUseExplosion.rb:20:476:20:485 | ... > ... | UseUseExplosion.rb:20:475:20:486 | [true] ( ... ) | | UseUseExplosion.rb:20:484:20:485 | 78 | UseUseExplosion.rb:20:476:20:485 | ... > ... | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:488:20:3332 | then ... | UseUseExplosion.rb:20:472:20:3348 | if ... | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | -| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | UseUseExplosion.rb:20:488:20:3332 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:493:20:3332 | if ... | UseUseExplosion.rb:20:488:20:3332 | then ... | | UseUseExplosion.rb:20:497:20:501 | @prop | UseUseExplosion.rb:20:497:20:506 | ... > ... | | UseUseExplosion.rb:20:497:20:501 | [post] self | UseUseExplosion.rb:20:518:20:522 | self | @@ -488,9 +534,11 @@ | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [false] ( ... ) | | UseUseExplosion.rb:20:497:20:506 | ... > ... | UseUseExplosion.rb:20:496:20:507 | [true] ( ... ) | | UseUseExplosion.rb:20:505:20:506 | 77 | UseUseExplosion.rb:20:497:20:506 | ... > ... | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:509:20:3316 | then ... | UseUseExplosion.rb:20:493:20:3332 | if ... | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | -| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | UseUseExplosion.rb:20:509:20:3316 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:514:20:3316 | if ... | UseUseExplosion.rb:20:509:20:3316 | then ... | | UseUseExplosion.rb:20:518:20:522 | @prop | UseUseExplosion.rb:20:518:20:527 | ... > ... | | UseUseExplosion.rb:20:518:20:522 | [post] self | UseUseExplosion.rb:20:539:20:543 | self | @@ -500,9 +548,11 @@ | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [false] ( ... ) | | UseUseExplosion.rb:20:518:20:527 | ... > ... | UseUseExplosion.rb:20:517:20:528 | [true] ( ... ) | | UseUseExplosion.rb:20:526:20:527 | 76 | UseUseExplosion.rb:20:518:20:527 | ... > ... | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:530:20:3300 | then ... | UseUseExplosion.rb:20:514:20:3316 | if ... | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | -| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | UseUseExplosion.rb:20:530:20:3300 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:535:20:3300 | if ... | UseUseExplosion.rb:20:530:20:3300 | then ... | | UseUseExplosion.rb:20:539:20:543 | @prop | UseUseExplosion.rb:20:539:20:548 | ... > ... | | UseUseExplosion.rb:20:539:20:543 | [post] self | UseUseExplosion.rb:20:560:20:564 | self | @@ -512,9 +562,11 @@ | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [false] ( ... ) | | UseUseExplosion.rb:20:539:20:548 | ... > ... | UseUseExplosion.rb:20:538:20:549 | [true] ( ... ) | | UseUseExplosion.rb:20:547:20:548 | 75 | UseUseExplosion.rb:20:539:20:548 | ... > ... | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:551:20:3284 | then ... | UseUseExplosion.rb:20:535:20:3300 | if ... | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | -| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | UseUseExplosion.rb:20:551:20:3284 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:556:20:3284 | if ... | UseUseExplosion.rb:20:551:20:3284 | then ... | | UseUseExplosion.rb:20:560:20:564 | @prop | UseUseExplosion.rb:20:560:20:569 | ... > ... | | UseUseExplosion.rb:20:560:20:564 | [post] self | UseUseExplosion.rb:20:581:20:585 | self | @@ -524,9 +576,11 @@ | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [false] ( ... ) | | UseUseExplosion.rb:20:560:20:569 | ... > ... | UseUseExplosion.rb:20:559:20:570 | [true] ( ... ) | | UseUseExplosion.rb:20:568:20:569 | 74 | UseUseExplosion.rb:20:560:20:569 | ... > ... | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:572:20:3268 | then ... | UseUseExplosion.rb:20:556:20:3284 | if ... | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | -| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | UseUseExplosion.rb:20:572:20:3268 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:577:20:3268 | if ... | UseUseExplosion.rb:20:572:20:3268 | then ... | | UseUseExplosion.rb:20:581:20:585 | @prop | UseUseExplosion.rb:20:581:20:590 | ... > ... | | UseUseExplosion.rb:20:581:20:585 | [post] self | UseUseExplosion.rb:20:602:20:606 | self | @@ -536,9 +590,11 @@ | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [false] ( ... ) | | UseUseExplosion.rb:20:581:20:590 | ... > ... | UseUseExplosion.rb:20:580:20:591 | [true] ( ... ) | | UseUseExplosion.rb:20:589:20:590 | 73 | UseUseExplosion.rb:20:581:20:590 | ... > ... | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:593:20:3252 | then ... | UseUseExplosion.rb:20:577:20:3268 | if ... | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | -| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | UseUseExplosion.rb:20:593:20:3252 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:598:20:3252 | if ... | UseUseExplosion.rb:20:593:20:3252 | then ... | | UseUseExplosion.rb:20:602:20:606 | @prop | UseUseExplosion.rb:20:602:20:611 | ... > ... | | UseUseExplosion.rb:20:602:20:606 | [post] self | UseUseExplosion.rb:20:623:20:627 | self | @@ -548,9 +604,11 @@ | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [false] ( ... ) | | UseUseExplosion.rb:20:602:20:611 | ... > ... | UseUseExplosion.rb:20:601:20:612 | [true] ( ... ) | | UseUseExplosion.rb:20:610:20:611 | 72 | UseUseExplosion.rb:20:602:20:611 | ... > ... | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:614:20:3236 | then ... | UseUseExplosion.rb:20:598:20:3252 | if ... | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | -| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | UseUseExplosion.rb:20:614:20:3236 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:619:20:3236 | if ... | UseUseExplosion.rb:20:614:20:3236 | then ... | | UseUseExplosion.rb:20:623:20:627 | @prop | UseUseExplosion.rb:20:623:20:632 | ... > ... | | UseUseExplosion.rb:20:623:20:627 | [post] self | UseUseExplosion.rb:20:644:20:648 | self | @@ -560,9 +618,11 @@ | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [false] ( ... ) | | UseUseExplosion.rb:20:623:20:632 | ... > ... | UseUseExplosion.rb:20:622:20:633 | [true] ( ... ) | | UseUseExplosion.rb:20:631:20:632 | 71 | UseUseExplosion.rb:20:623:20:632 | ... > ... | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:635:20:3220 | then ... | UseUseExplosion.rb:20:619:20:3236 | if ... | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | -| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | UseUseExplosion.rb:20:635:20:3220 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:640:20:3220 | if ... | UseUseExplosion.rb:20:635:20:3220 | then ... | | UseUseExplosion.rb:20:644:20:648 | @prop | UseUseExplosion.rb:20:644:20:653 | ... > ... | | UseUseExplosion.rb:20:644:20:648 | [post] self | UseUseExplosion.rb:20:665:20:669 | self | @@ -572,9 +632,11 @@ | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [false] ( ... ) | | UseUseExplosion.rb:20:644:20:653 | ... > ... | UseUseExplosion.rb:20:643:20:654 | [true] ( ... ) | | UseUseExplosion.rb:20:652:20:653 | 70 | UseUseExplosion.rb:20:644:20:653 | ... > ... | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:656:20:3204 | then ... | UseUseExplosion.rb:20:640:20:3220 | if ... | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | -| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | UseUseExplosion.rb:20:656:20:3204 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:661:20:3204 | if ... | UseUseExplosion.rb:20:656:20:3204 | then ... | | UseUseExplosion.rb:20:665:20:669 | @prop | UseUseExplosion.rb:20:665:20:674 | ... > ... | | UseUseExplosion.rb:20:665:20:669 | [post] self | UseUseExplosion.rb:20:686:20:690 | self | @@ -584,9 +646,11 @@ | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [false] ( ... ) | | UseUseExplosion.rb:20:665:20:674 | ... > ... | UseUseExplosion.rb:20:664:20:675 | [true] ( ... ) | | UseUseExplosion.rb:20:673:20:674 | 69 | UseUseExplosion.rb:20:665:20:674 | ... > ... | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:677:20:3188 | then ... | UseUseExplosion.rb:20:661:20:3204 | if ... | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | -| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | UseUseExplosion.rb:20:677:20:3188 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:682:20:3188 | if ... | UseUseExplosion.rb:20:677:20:3188 | then ... | | UseUseExplosion.rb:20:686:20:690 | @prop | UseUseExplosion.rb:20:686:20:695 | ... > ... | | UseUseExplosion.rb:20:686:20:690 | [post] self | UseUseExplosion.rb:20:707:20:711 | self | @@ -596,9 +660,11 @@ | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [false] ( ... ) | | UseUseExplosion.rb:20:686:20:695 | ... > ... | UseUseExplosion.rb:20:685:20:696 | [true] ( ... ) | | UseUseExplosion.rb:20:694:20:695 | 68 | UseUseExplosion.rb:20:686:20:695 | ... > ... | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:698:20:3172 | then ... | UseUseExplosion.rb:20:682:20:3188 | if ... | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | -| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | UseUseExplosion.rb:20:698:20:3172 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:703:20:3172 | if ... | UseUseExplosion.rb:20:698:20:3172 | then ... | | UseUseExplosion.rb:20:707:20:711 | @prop | UseUseExplosion.rb:20:707:20:716 | ... > ... | | UseUseExplosion.rb:20:707:20:711 | [post] self | UseUseExplosion.rb:20:728:20:732 | self | @@ -608,9 +674,11 @@ | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [false] ( ... ) | | UseUseExplosion.rb:20:707:20:716 | ... > ... | UseUseExplosion.rb:20:706:20:717 | [true] ( ... ) | | UseUseExplosion.rb:20:715:20:716 | 67 | UseUseExplosion.rb:20:707:20:716 | ... > ... | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:719:20:3156 | then ... | UseUseExplosion.rb:20:703:20:3172 | if ... | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | -| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | UseUseExplosion.rb:20:719:20:3156 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:724:20:3156 | if ... | UseUseExplosion.rb:20:719:20:3156 | then ... | | UseUseExplosion.rb:20:728:20:732 | @prop | UseUseExplosion.rb:20:728:20:737 | ... > ... | | UseUseExplosion.rb:20:728:20:732 | [post] self | UseUseExplosion.rb:20:749:20:753 | self | @@ -620,9 +688,11 @@ | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [false] ( ... ) | | UseUseExplosion.rb:20:728:20:737 | ... > ... | UseUseExplosion.rb:20:727:20:738 | [true] ( ... ) | | UseUseExplosion.rb:20:736:20:737 | 66 | UseUseExplosion.rb:20:728:20:737 | ... > ... | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:740:20:3140 | then ... | UseUseExplosion.rb:20:724:20:3156 | if ... | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | -| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | UseUseExplosion.rb:20:740:20:3140 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:745:20:3140 | if ... | UseUseExplosion.rb:20:740:20:3140 | then ... | | UseUseExplosion.rb:20:749:20:753 | @prop | UseUseExplosion.rb:20:749:20:758 | ... > ... | | UseUseExplosion.rb:20:749:20:753 | [post] self | UseUseExplosion.rb:20:770:20:774 | self | @@ -632,9 +702,11 @@ | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [false] ( ... ) | | UseUseExplosion.rb:20:749:20:758 | ... > ... | UseUseExplosion.rb:20:748:20:759 | [true] ( ... ) | | UseUseExplosion.rb:20:757:20:758 | 65 | UseUseExplosion.rb:20:749:20:758 | ... > ... | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:761:20:3124 | then ... | UseUseExplosion.rb:20:745:20:3140 | if ... | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | -| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | UseUseExplosion.rb:20:761:20:3124 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:766:20:3124 | if ... | UseUseExplosion.rb:20:761:20:3124 | then ... | | UseUseExplosion.rb:20:770:20:774 | @prop | UseUseExplosion.rb:20:770:20:779 | ... > ... | | UseUseExplosion.rb:20:770:20:774 | [post] self | UseUseExplosion.rb:20:791:20:795 | self | @@ -644,9 +716,11 @@ | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [false] ( ... ) | | UseUseExplosion.rb:20:770:20:779 | ... > ... | UseUseExplosion.rb:20:769:20:780 | [true] ( ... ) | | UseUseExplosion.rb:20:778:20:779 | 64 | UseUseExplosion.rb:20:770:20:779 | ... > ... | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:782:20:3108 | then ... | UseUseExplosion.rb:20:766:20:3124 | if ... | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | -| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | UseUseExplosion.rb:20:782:20:3108 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:787:20:3108 | if ... | UseUseExplosion.rb:20:782:20:3108 | then ... | | UseUseExplosion.rb:20:791:20:795 | @prop | UseUseExplosion.rb:20:791:20:800 | ... > ... | | UseUseExplosion.rb:20:791:20:795 | [post] self | UseUseExplosion.rb:20:812:20:816 | self | @@ -656,9 +730,11 @@ | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [false] ( ... ) | | UseUseExplosion.rb:20:791:20:800 | ... > ... | UseUseExplosion.rb:20:790:20:801 | [true] ( ... ) | | UseUseExplosion.rb:20:799:20:800 | 63 | UseUseExplosion.rb:20:791:20:800 | ... > ... | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:803:20:3092 | then ... | UseUseExplosion.rb:20:787:20:3108 | if ... | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | -| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | UseUseExplosion.rb:20:803:20:3092 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:808:20:3092 | if ... | UseUseExplosion.rb:20:803:20:3092 | then ... | | UseUseExplosion.rb:20:812:20:816 | @prop | UseUseExplosion.rb:20:812:20:821 | ... > ... | | UseUseExplosion.rb:20:812:20:816 | [post] self | UseUseExplosion.rb:20:833:20:837 | self | @@ -668,9 +744,11 @@ | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [false] ( ... ) | | UseUseExplosion.rb:20:812:20:821 | ... > ... | UseUseExplosion.rb:20:811:20:822 | [true] ( ... ) | | UseUseExplosion.rb:20:820:20:821 | 62 | UseUseExplosion.rb:20:812:20:821 | ... > ... | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:824:20:3076 | then ... | UseUseExplosion.rb:20:808:20:3092 | if ... | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | -| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | UseUseExplosion.rb:20:824:20:3076 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:829:20:3076 | if ... | UseUseExplosion.rb:20:824:20:3076 | then ... | | UseUseExplosion.rb:20:833:20:837 | @prop | UseUseExplosion.rb:20:833:20:842 | ... > ... | | UseUseExplosion.rb:20:833:20:837 | [post] self | UseUseExplosion.rb:20:854:20:858 | self | @@ -680,9 +758,11 @@ | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [false] ( ... ) | | UseUseExplosion.rb:20:833:20:842 | ... > ... | UseUseExplosion.rb:20:832:20:843 | [true] ( ... ) | | UseUseExplosion.rb:20:841:20:842 | 61 | UseUseExplosion.rb:20:833:20:842 | ... > ... | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:845:20:3060 | then ... | UseUseExplosion.rb:20:829:20:3076 | if ... | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | -| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | UseUseExplosion.rb:20:845:20:3060 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:850:20:3060 | if ... | UseUseExplosion.rb:20:845:20:3060 | then ... | | UseUseExplosion.rb:20:854:20:858 | @prop | UseUseExplosion.rb:20:854:20:863 | ... > ... | | UseUseExplosion.rb:20:854:20:858 | [post] self | UseUseExplosion.rb:20:875:20:879 | self | @@ -692,9 +772,11 @@ | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [false] ( ... ) | | UseUseExplosion.rb:20:854:20:863 | ... > ... | UseUseExplosion.rb:20:853:20:864 | [true] ( ... ) | | UseUseExplosion.rb:20:862:20:863 | 60 | UseUseExplosion.rb:20:854:20:863 | ... > ... | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:866:20:3044 | then ... | UseUseExplosion.rb:20:850:20:3060 | if ... | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | -| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | UseUseExplosion.rb:20:866:20:3044 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:871:20:3044 | if ... | UseUseExplosion.rb:20:866:20:3044 | then ... | | UseUseExplosion.rb:20:875:20:879 | @prop | UseUseExplosion.rb:20:875:20:884 | ... > ... | | UseUseExplosion.rb:20:875:20:879 | [post] self | UseUseExplosion.rb:20:896:20:900 | self | @@ -704,9 +786,11 @@ | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [false] ( ... ) | | UseUseExplosion.rb:20:875:20:884 | ... > ... | UseUseExplosion.rb:20:874:20:885 | [true] ( ... ) | | UseUseExplosion.rb:20:883:20:884 | 59 | UseUseExplosion.rb:20:875:20:884 | ... > ... | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:887:20:3028 | then ... | UseUseExplosion.rb:20:871:20:3044 | if ... | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | -| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | UseUseExplosion.rb:20:887:20:3028 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:892:20:3028 | if ... | UseUseExplosion.rb:20:887:20:3028 | then ... | | UseUseExplosion.rb:20:896:20:900 | @prop | UseUseExplosion.rb:20:896:20:905 | ... > ... | | UseUseExplosion.rb:20:896:20:900 | [post] self | UseUseExplosion.rb:20:917:20:921 | self | @@ -716,9 +800,11 @@ | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [false] ( ... ) | | UseUseExplosion.rb:20:896:20:905 | ... > ... | UseUseExplosion.rb:20:895:20:906 | [true] ( ... ) | | UseUseExplosion.rb:20:904:20:905 | 58 | UseUseExplosion.rb:20:896:20:905 | ... > ... | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:908:20:3012 | then ... | UseUseExplosion.rb:20:892:20:3028 | if ... | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | -| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | UseUseExplosion.rb:20:908:20:3012 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:913:20:3012 | if ... | UseUseExplosion.rb:20:908:20:3012 | then ... | | UseUseExplosion.rb:20:917:20:921 | @prop | UseUseExplosion.rb:20:917:20:926 | ... > ... | | UseUseExplosion.rb:20:917:20:921 | [post] self | UseUseExplosion.rb:20:938:20:942 | self | @@ -728,9 +814,11 @@ | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [false] ( ... ) | | UseUseExplosion.rb:20:917:20:926 | ... > ... | UseUseExplosion.rb:20:916:20:927 | [true] ( ... ) | | UseUseExplosion.rb:20:925:20:926 | 57 | UseUseExplosion.rb:20:917:20:926 | ... > ... | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:929:20:2996 | then ... | UseUseExplosion.rb:20:913:20:3012 | if ... | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | -| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | UseUseExplosion.rb:20:929:20:2996 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:934:20:2996 | if ... | UseUseExplosion.rb:20:929:20:2996 | then ... | | UseUseExplosion.rb:20:938:20:942 | @prop | UseUseExplosion.rb:20:938:20:947 | ... > ... | | UseUseExplosion.rb:20:938:20:942 | [post] self | UseUseExplosion.rb:20:959:20:963 | self | @@ -740,9 +828,11 @@ | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [false] ( ... ) | | UseUseExplosion.rb:20:938:20:947 | ... > ... | UseUseExplosion.rb:20:937:20:948 | [true] ( ... ) | | UseUseExplosion.rb:20:946:20:947 | 56 | UseUseExplosion.rb:20:938:20:947 | ... > ... | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:950:20:2980 | then ... | UseUseExplosion.rb:20:934:20:2996 | if ... | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | -| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | UseUseExplosion.rb:20:950:20:2980 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:955:20:2980 | if ... | UseUseExplosion.rb:20:950:20:2980 | then ... | | UseUseExplosion.rb:20:959:20:963 | @prop | UseUseExplosion.rb:20:959:20:968 | ... > ... | | UseUseExplosion.rb:20:959:20:963 | [post] self | UseUseExplosion.rb:20:980:20:984 | self | @@ -752,9 +842,11 @@ | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [false] ( ... ) | | UseUseExplosion.rb:20:959:20:968 | ... > ... | UseUseExplosion.rb:20:958:20:969 | [true] ( ... ) | | UseUseExplosion.rb:20:967:20:968 | 55 | UseUseExplosion.rb:20:959:20:968 | ... > ... | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:971:20:2964 | then ... | UseUseExplosion.rb:20:955:20:2980 | if ... | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | -| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | UseUseExplosion.rb:20:971:20:2964 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:976:20:2964 | if ... | UseUseExplosion.rb:20:971:20:2964 | then ... | | UseUseExplosion.rb:20:980:20:984 | @prop | UseUseExplosion.rb:20:980:20:989 | ... > ... | | UseUseExplosion.rb:20:980:20:984 | [post] self | UseUseExplosion.rb:20:1001:20:1005 | self | @@ -764,9 +856,11 @@ | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [false] ( ... ) | | UseUseExplosion.rb:20:980:20:989 | ... > ... | UseUseExplosion.rb:20:979:20:990 | [true] ( ... ) | | UseUseExplosion.rb:20:988:20:989 | 54 | UseUseExplosion.rb:20:980:20:989 | ... > ... | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:992:20:2948 | then ... | UseUseExplosion.rb:20:976:20:2964 | if ... | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | -| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | UseUseExplosion.rb:20:992:20:2948 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:997:20:2948 | if ... | UseUseExplosion.rb:20:992:20:2948 | then ... | | UseUseExplosion.rb:20:1001:20:1005 | @prop | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | | UseUseExplosion.rb:20:1001:20:1005 | [post] self | UseUseExplosion.rb:20:1022:20:1026 | self | @@ -776,9 +870,11 @@ | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [false] ( ... ) | | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | UseUseExplosion.rb:20:1000:20:1011 | [true] ( ... ) | | UseUseExplosion.rb:20:1009:20:1010 | 53 | UseUseExplosion.rb:20:1001:20:1010 | ... > ... | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:1013:20:2932 | then ... | UseUseExplosion.rb:20:997:20:2948 | if ... | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | -| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | UseUseExplosion.rb:20:1013:20:2932 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1018:20:2932 | if ... | UseUseExplosion.rb:20:1013:20:2932 | then ... | | UseUseExplosion.rb:20:1022:20:1026 | @prop | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | | UseUseExplosion.rb:20:1022:20:1026 | [post] self | UseUseExplosion.rb:20:1043:20:1047 | self | @@ -788,9 +884,11 @@ | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [false] ( ... ) | | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | UseUseExplosion.rb:20:1021:20:1032 | [true] ( ... ) | | UseUseExplosion.rb:20:1030:20:1031 | 52 | UseUseExplosion.rb:20:1022:20:1031 | ... > ... | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:1034:20:2916 | then ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | -| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | UseUseExplosion.rb:20:1034:20:2916 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1039:20:2916 | if ... | UseUseExplosion.rb:20:1034:20:2916 | then ... | | UseUseExplosion.rb:20:1043:20:1047 | @prop | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | | UseUseExplosion.rb:20:1043:20:1047 | [post] self | UseUseExplosion.rb:20:1064:20:1068 | self | @@ -800,9 +898,11 @@ | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [false] ( ... ) | | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | UseUseExplosion.rb:20:1042:20:1053 | [true] ( ... ) | | UseUseExplosion.rb:20:1051:20:1052 | 51 | UseUseExplosion.rb:20:1043:20:1052 | ... > ... | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:1055:20:2900 | then ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | -| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | UseUseExplosion.rb:20:1055:20:2900 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1060:20:2900 | if ... | UseUseExplosion.rb:20:1055:20:2900 | then ... | | UseUseExplosion.rb:20:1064:20:1068 | @prop | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | | UseUseExplosion.rb:20:1064:20:1068 | [post] self | UseUseExplosion.rb:20:1085:20:1089 | self | @@ -812,9 +912,11 @@ | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [false] ( ... ) | | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | UseUseExplosion.rb:20:1063:20:1074 | [true] ( ... ) | | UseUseExplosion.rb:20:1072:20:1073 | 50 | UseUseExplosion.rb:20:1064:20:1073 | ... > ... | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:1076:20:2884 | then ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | -| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | UseUseExplosion.rb:20:1076:20:2884 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1081:20:2884 | if ... | UseUseExplosion.rb:20:1076:20:2884 | then ... | | UseUseExplosion.rb:20:1085:20:1089 | @prop | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | | UseUseExplosion.rb:20:1085:20:1089 | [post] self | UseUseExplosion.rb:20:1106:20:1110 | self | @@ -824,9 +926,11 @@ | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [false] ( ... ) | | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | UseUseExplosion.rb:20:1084:20:1095 | [true] ( ... ) | | UseUseExplosion.rb:20:1093:20:1094 | 49 | UseUseExplosion.rb:20:1085:20:1094 | ... > ... | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:1097:20:2868 | then ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | -| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | UseUseExplosion.rb:20:1097:20:2868 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1102:20:2868 | if ... | UseUseExplosion.rb:20:1097:20:2868 | then ... | | UseUseExplosion.rb:20:1106:20:1110 | @prop | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | | UseUseExplosion.rb:20:1106:20:1110 | [post] self | UseUseExplosion.rb:20:1127:20:1131 | self | @@ -836,9 +940,11 @@ | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [false] ( ... ) | | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | UseUseExplosion.rb:20:1105:20:1116 | [true] ( ... ) | | UseUseExplosion.rb:20:1114:20:1115 | 48 | UseUseExplosion.rb:20:1106:20:1115 | ... > ... | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:1118:20:2852 | then ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | -| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | UseUseExplosion.rb:20:1118:20:2852 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1123:20:2852 | if ... | UseUseExplosion.rb:20:1118:20:2852 | then ... | | UseUseExplosion.rb:20:1127:20:1131 | @prop | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | | UseUseExplosion.rb:20:1127:20:1131 | [post] self | UseUseExplosion.rb:20:1148:20:1152 | self | @@ -848,9 +954,11 @@ | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [false] ( ... ) | | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | UseUseExplosion.rb:20:1126:20:1137 | [true] ( ... ) | | UseUseExplosion.rb:20:1135:20:1136 | 47 | UseUseExplosion.rb:20:1127:20:1136 | ... > ... | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:1139:20:2836 | then ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | -| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | UseUseExplosion.rb:20:1139:20:2836 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1144:20:2836 | if ... | UseUseExplosion.rb:20:1139:20:2836 | then ... | | UseUseExplosion.rb:20:1148:20:1152 | @prop | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | | UseUseExplosion.rb:20:1148:20:1152 | [post] self | UseUseExplosion.rb:20:1169:20:1173 | self | @@ -860,9 +968,11 @@ | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [false] ( ... ) | | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | UseUseExplosion.rb:20:1147:20:1158 | [true] ( ... ) | | UseUseExplosion.rb:20:1156:20:1157 | 46 | UseUseExplosion.rb:20:1148:20:1157 | ... > ... | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:1160:20:2820 | then ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | -| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | UseUseExplosion.rb:20:1160:20:2820 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1165:20:2820 | if ... | UseUseExplosion.rb:20:1160:20:2820 | then ... | | UseUseExplosion.rb:20:1169:20:1173 | @prop | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | | UseUseExplosion.rb:20:1169:20:1173 | [post] self | UseUseExplosion.rb:20:1190:20:1194 | self | @@ -872,9 +982,11 @@ | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [false] ( ... ) | | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | UseUseExplosion.rb:20:1168:20:1179 | [true] ( ... ) | | UseUseExplosion.rb:20:1177:20:1178 | 45 | UseUseExplosion.rb:20:1169:20:1178 | ... > ... | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:1181:20:2804 | then ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | -| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | UseUseExplosion.rb:20:1181:20:2804 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1186:20:2804 | if ... | UseUseExplosion.rb:20:1181:20:2804 | then ... | | UseUseExplosion.rb:20:1190:20:1194 | @prop | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | | UseUseExplosion.rb:20:1190:20:1194 | [post] self | UseUseExplosion.rb:20:1211:20:1215 | self | @@ -884,9 +996,11 @@ | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [false] ( ... ) | | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | UseUseExplosion.rb:20:1189:20:1200 | [true] ( ... ) | | UseUseExplosion.rb:20:1198:20:1199 | 44 | UseUseExplosion.rb:20:1190:20:1199 | ... > ... | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:1202:20:2788 | then ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | -| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | UseUseExplosion.rb:20:1202:20:2788 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1207:20:2788 | if ... | UseUseExplosion.rb:20:1202:20:2788 | then ... | | UseUseExplosion.rb:20:1211:20:1215 | @prop | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | | UseUseExplosion.rb:20:1211:20:1215 | [post] self | UseUseExplosion.rb:20:1232:20:1236 | self | @@ -896,9 +1010,11 @@ | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [false] ( ... ) | | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | UseUseExplosion.rb:20:1210:20:1221 | [true] ( ... ) | | UseUseExplosion.rb:20:1219:20:1220 | 43 | UseUseExplosion.rb:20:1211:20:1220 | ... > ... | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:1223:20:2772 | then ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | -| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | UseUseExplosion.rb:20:1223:20:2772 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1228:20:2772 | if ... | UseUseExplosion.rb:20:1223:20:2772 | then ... | | UseUseExplosion.rb:20:1232:20:1236 | @prop | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | | UseUseExplosion.rb:20:1232:20:1236 | [post] self | UseUseExplosion.rb:20:1253:20:1257 | self | @@ -908,9 +1024,11 @@ | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [false] ( ... ) | | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | UseUseExplosion.rb:20:1231:20:1242 | [true] ( ... ) | | UseUseExplosion.rb:20:1240:20:1241 | 42 | UseUseExplosion.rb:20:1232:20:1241 | ... > ... | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:1244:20:2756 | then ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | -| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | UseUseExplosion.rb:20:1244:20:2756 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1249:20:2756 | if ... | UseUseExplosion.rb:20:1244:20:2756 | then ... | | UseUseExplosion.rb:20:1253:20:1257 | @prop | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | | UseUseExplosion.rb:20:1253:20:1257 | [post] self | UseUseExplosion.rb:20:1274:20:1278 | self | @@ -920,9 +1038,11 @@ | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [false] ( ... ) | | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | UseUseExplosion.rb:20:1252:20:1263 | [true] ( ... ) | | UseUseExplosion.rb:20:1261:20:1262 | 41 | UseUseExplosion.rb:20:1253:20:1262 | ... > ... | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:1265:20:2740 | then ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | -| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | UseUseExplosion.rb:20:1265:20:2740 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1270:20:2740 | if ... | UseUseExplosion.rb:20:1265:20:2740 | then ... | | UseUseExplosion.rb:20:1274:20:1278 | @prop | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | | UseUseExplosion.rb:20:1274:20:1278 | [post] self | UseUseExplosion.rb:20:1295:20:1299 | self | @@ -932,9 +1052,11 @@ | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [false] ( ... ) | | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | UseUseExplosion.rb:20:1273:20:1284 | [true] ( ... ) | | UseUseExplosion.rb:20:1282:20:1283 | 40 | UseUseExplosion.rb:20:1274:20:1283 | ... > ... | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:1286:20:2724 | then ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | -| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | UseUseExplosion.rb:20:1286:20:2724 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1291:20:2724 | if ... | UseUseExplosion.rb:20:1286:20:2724 | then ... | | UseUseExplosion.rb:20:1295:20:1299 | @prop | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | | UseUseExplosion.rb:20:1295:20:1299 | [post] self | UseUseExplosion.rb:20:1316:20:1320 | self | @@ -944,9 +1066,11 @@ | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [false] ( ... ) | | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | UseUseExplosion.rb:20:1294:20:1305 | [true] ( ... ) | | UseUseExplosion.rb:20:1303:20:1304 | 39 | UseUseExplosion.rb:20:1295:20:1304 | ... > ... | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:1307:20:2708 | then ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | -| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | UseUseExplosion.rb:20:1307:20:2708 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1312:20:2708 | if ... | UseUseExplosion.rb:20:1307:20:2708 | then ... | | UseUseExplosion.rb:20:1316:20:1320 | @prop | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | | UseUseExplosion.rb:20:1316:20:1320 | [post] self | UseUseExplosion.rb:20:1337:20:1341 | self | @@ -956,9 +1080,11 @@ | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [false] ( ... ) | | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | UseUseExplosion.rb:20:1315:20:1326 | [true] ( ... ) | | UseUseExplosion.rb:20:1324:20:1325 | 38 | UseUseExplosion.rb:20:1316:20:1325 | ... > ... | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:1328:20:2692 | then ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | -| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | UseUseExplosion.rb:20:1328:20:2692 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1333:20:2692 | if ... | UseUseExplosion.rb:20:1328:20:2692 | then ... | | UseUseExplosion.rb:20:1337:20:1341 | @prop | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | | UseUseExplosion.rb:20:1337:20:1341 | [post] self | UseUseExplosion.rb:20:1358:20:1362 | self | @@ -968,9 +1094,11 @@ | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [false] ( ... ) | | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | UseUseExplosion.rb:20:1336:20:1347 | [true] ( ... ) | | UseUseExplosion.rb:20:1345:20:1346 | 37 | UseUseExplosion.rb:20:1337:20:1346 | ... > ... | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:1349:20:2676 | then ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | -| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | UseUseExplosion.rb:20:1349:20:2676 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1354:20:2676 | if ... | UseUseExplosion.rb:20:1349:20:2676 | then ... | | UseUseExplosion.rb:20:1358:20:1362 | @prop | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | | UseUseExplosion.rb:20:1358:20:1362 | [post] self | UseUseExplosion.rb:20:1379:20:1383 | self | @@ -980,9 +1108,11 @@ | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [false] ( ... ) | | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | UseUseExplosion.rb:20:1357:20:1368 | [true] ( ... ) | | UseUseExplosion.rb:20:1366:20:1367 | 36 | UseUseExplosion.rb:20:1358:20:1367 | ... > ... | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:1370:20:2660 | then ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | -| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | UseUseExplosion.rb:20:1370:20:2660 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1375:20:2660 | if ... | UseUseExplosion.rb:20:1370:20:2660 | then ... | | UseUseExplosion.rb:20:1379:20:1383 | @prop | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | | UseUseExplosion.rb:20:1379:20:1383 | [post] self | UseUseExplosion.rb:20:1400:20:1404 | self | @@ -992,9 +1122,11 @@ | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [false] ( ... ) | | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | UseUseExplosion.rb:20:1378:20:1389 | [true] ( ... ) | | UseUseExplosion.rb:20:1387:20:1388 | 35 | UseUseExplosion.rb:20:1379:20:1388 | ... > ... | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:1391:20:2644 | then ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | -| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | UseUseExplosion.rb:20:1391:20:2644 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1396:20:2644 | if ... | UseUseExplosion.rb:20:1391:20:2644 | then ... | | UseUseExplosion.rb:20:1400:20:1404 | @prop | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | | UseUseExplosion.rb:20:1400:20:1404 | [post] self | UseUseExplosion.rb:20:1421:20:1425 | self | @@ -1004,9 +1136,11 @@ | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [false] ( ... ) | | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | UseUseExplosion.rb:20:1399:20:1410 | [true] ( ... ) | | UseUseExplosion.rb:20:1408:20:1409 | 34 | UseUseExplosion.rb:20:1400:20:1409 | ... > ... | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:1412:20:2628 | then ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | -| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | UseUseExplosion.rb:20:1412:20:2628 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1417:20:2628 | if ... | UseUseExplosion.rb:20:1412:20:2628 | then ... | | UseUseExplosion.rb:20:1421:20:1425 | @prop | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | | UseUseExplosion.rb:20:1421:20:1425 | [post] self | UseUseExplosion.rb:20:1442:20:1446 | self | @@ -1016,9 +1150,11 @@ | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [false] ( ... ) | | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | UseUseExplosion.rb:20:1420:20:1431 | [true] ( ... ) | | UseUseExplosion.rb:20:1429:20:1430 | 33 | UseUseExplosion.rb:20:1421:20:1430 | ... > ... | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:1433:20:2612 | then ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | -| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | UseUseExplosion.rb:20:1433:20:2612 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1438:20:2612 | if ... | UseUseExplosion.rb:20:1433:20:2612 | then ... | | UseUseExplosion.rb:20:1442:20:1446 | @prop | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | | UseUseExplosion.rb:20:1442:20:1446 | [post] self | UseUseExplosion.rb:20:1463:20:1467 | self | @@ -1028,9 +1164,11 @@ | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [false] ( ... ) | | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | UseUseExplosion.rb:20:1441:20:1452 | [true] ( ... ) | | UseUseExplosion.rb:20:1450:20:1451 | 32 | UseUseExplosion.rb:20:1442:20:1451 | ... > ... | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:1454:20:2596 | then ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | -| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | UseUseExplosion.rb:20:1454:20:2596 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1459:20:2596 | if ... | UseUseExplosion.rb:20:1454:20:2596 | then ... | | UseUseExplosion.rb:20:1463:20:1467 | @prop | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | | UseUseExplosion.rb:20:1463:20:1467 | [post] self | UseUseExplosion.rb:20:1484:20:1488 | self | @@ -1040,9 +1178,11 @@ | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [false] ( ... ) | | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | UseUseExplosion.rb:20:1462:20:1473 | [true] ( ... ) | | UseUseExplosion.rb:20:1471:20:1472 | 31 | UseUseExplosion.rb:20:1463:20:1472 | ... > ... | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:1475:20:2580 | then ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | -| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | UseUseExplosion.rb:20:1475:20:2580 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1480:20:2580 | if ... | UseUseExplosion.rb:20:1475:20:2580 | then ... | | UseUseExplosion.rb:20:1484:20:1488 | @prop | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | | UseUseExplosion.rb:20:1484:20:1488 | [post] self | UseUseExplosion.rb:20:1505:20:1509 | self | @@ -1052,9 +1192,11 @@ | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [false] ( ... ) | | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | UseUseExplosion.rb:20:1483:20:1494 | [true] ( ... ) | | UseUseExplosion.rb:20:1492:20:1493 | 30 | UseUseExplosion.rb:20:1484:20:1493 | ... > ... | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:1496:20:2564 | then ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | -| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | UseUseExplosion.rb:20:1496:20:2564 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1501:20:2564 | if ... | UseUseExplosion.rb:20:1496:20:2564 | then ... | | UseUseExplosion.rb:20:1505:20:1509 | @prop | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | | UseUseExplosion.rb:20:1505:20:1509 | [post] self | UseUseExplosion.rb:20:1526:20:1530 | self | @@ -1064,9 +1206,11 @@ | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [false] ( ... ) | | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | UseUseExplosion.rb:20:1504:20:1515 | [true] ( ... ) | | UseUseExplosion.rb:20:1513:20:1514 | 29 | UseUseExplosion.rb:20:1505:20:1514 | ... > ... | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:1517:20:2548 | then ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | -| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | UseUseExplosion.rb:20:1517:20:2548 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1522:20:2548 | if ... | UseUseExplosion.rb:20:1517:20:2548 | then ... | | UseUseExplosion.rb:20:1526:20:1530 | @prop | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | | UseUseExplosion.rb:20:1526:20:1530 | [post] self | UseUseExplosion.rb:20:1547:20:1551 | self | @@ -1076,9 +1220,11 @@ | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [false] ( ... ) | | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | UseUseExplosion.rb:20:1525:20:1536 | [true] ( ... ) | | UseUseExplosion.rb:20:1534:20:1535 | 28 | UseUseExplosion.rb:20:1526:20:1535 | ... > ... | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:1538:20:2532 | then ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | -| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | UseUseExplosion.rb:20:1538:20:2532 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1543:20:2532 | if ... | UseUseExplosion.rb:20:1538:20:2532 | then ... | | UseUseExplosion.rb:20:1547:20:1551 | @prop | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | | UseUseExplosion.rb:20:1547:20:1551 | [post] self | UseUseExplosion.rb:20:1568:20:1572 | self | @@ -1088,9 +1234,11 @@ | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [false] ( ... ) | | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | UseUseExplosion.rb:20:1546:20:1557 | [true] ( ... ) | | UseUseExplosion.rb:20:1555:20:1556 | 27 | UseUseExplosion.rb:20:1547:20:1556 | ... > ... | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:1559:20:2516 | then ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | -| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | UseUseExplosion.rb:20:1559:20:2516 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1564:20:2516 | if ... | UseUseExplosion.rb:20:1559:20:2516 | then ... | | UseUseExplosion.rb:20:1568:20:1572 | @prop | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | | UseUseExplosion.rb:20:1568:20:1572 | [post] self | UseUseExplosion.rb:20:1589:20:1593 | self | @@ -1100,9 +1248,11 @@ | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [false] ( ... ) | | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | UseUseExplosion.rb:20:1567:20:1578 | [true] ( ... ) | | UseUseExplosion.rb:20:1576:20:1577 | 26 | UseUseExplosion.rb:20:1568:20:1577 | ... > ... | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:1580:20:2500 | then ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | -| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | UseUseExplosion.rb:20:1580:20:2500 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1585:20:2500 | if ... | UseUseExplosion.rb:20:1580:20:2500 | then ... | | UseUseExplosion.rb:20:1589:20:1593 | @prop | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | | UseUseExplosion.rb:20:1589:20:1593 | [post] self | UseUseExplosion.rb:20:1610:20:1614 | self | @@ -1112,9 +1262,11 @@ | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [false] ( ... ) | | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | UseUseExplosion.rb:20:1588:20:1599 | [true] ( ... ) | | UseUseExplosion.rb:20:1597:20:1598 | 25 | UseUseExplosion.rb:20:1589:20:1598 | ... > ... | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:1601:20:2484 | then ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | -| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | UseUseExplosion.rb:20:1601:20:2484 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1606:20:2484 | if ... | UseUseExplosion.rb:20:1601:20:2484 | then ... | | UseUseExplosion.rb:20:1610:20:1614 | @prop | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | | UseUseExplosion.rb:20:1610:20:1614 | [post] self | UseUseExplosion.rb:20:1631:20:1635 | self | @@ -1124,9 +1276,11 @@ | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [false] ( ... ) | | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | UseUseExplosion.rb:20:1609:20:1620 | [true] ( ... ) | | UseUseExplosion.rb:20:1618:20:1619 | 24 | UseUseExplosion.rb:20:1610:20:1619 | ... > ... | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:1622:20:2468 | then ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | -| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | UseUseExplosion.rb:20:1622:20:2468 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1627:20:2468 | if ... | UseUseExplosion.rb:20:1622:20:2468 | then ... | | UseUseExplosion.rb:20:1631:20:1635 | @prop | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | | UseUseExplosion.rb:20:1631:20:1635 | [post] self | UseUseExplosion.rb:20:1652:20:1656 | self | @@ -1136,9 +1290,11 @@ | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [false] ( ... ) | | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | UseUseExplosion.rb:20:1630:20:1641 | [true] ( ... ) | | UseUseExplosion.rb:20:1639:20:1640 | 23 | UseUseExplosion.rb:20:1631:20:1640 | ... > ... | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:1643:20:2452 | then ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | -| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | UseUseExplosion.rb:20:1643:20:2452 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1648:20:2452 | if ... | UseUseExplosion.rb:20:1643:20:2452 | then ... | | UseUseExplosion.rb:20:1652:20:1656 | @prop | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | | UseUseExplosion.rb:20:1652:20:1656 | [post] self | UseUseExplosion.rb:20:1673:20:1677 | self | @@ -1148,9 +1304,11 @@ | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [false] ( ... ) | | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | UseUseExplosion.rb:20:1651:20:1662 | [true] ( ... ) | | UseUseExplosion.rb:20:1660:20:1661 | 22 | UseUseExplosion.rb:20:1652:20:1661 | ... > ... | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:1664:20:2436 | then ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | -| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | UseUseExplosion.rb:20:1664:20:2436 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1669:20:2436 | if ... | UseUseExplosion.rb:20:1664:20:2436 | then ... | | UseUseExplosion.rb:20:1673:20:1677 | @prop | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | | UseUseExplosion.rb:20:1673:20:1677 | [post] self | UseUseExplosion.rb:20:1694:20:1698 | self | @@ -1160,9 +1318,11 @@ | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [false] ( ... ) | | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | UseUseExplosion.rb:20:1672:20:1683 | [true] ( ... ) | | UseUseExplosion.rb:20:1681:20:1682 | 21 | UseUseExplosion.rb:20:1673:20:1682 | ... > ... | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:1685:20:2420 | then ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | -| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | UseUseExplosion.rb:20:1685:20:2420 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1690:20:2420 | if ... | UseUseExplosion.rb:20:1685:20:2420 | then ... | | UseUseExplosion.rb:20:1694:20:1698 | @prop | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | | UseUseExplosion.rb:20:1694:20:1698 | [post] self | UseUseExplosion.rb:20:1715:20:1719 | self | @@ -1172,9 +1332,11 @@ | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [false] ( ... ) | | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | UseUseExplosion.rb:20:1693:20:1704 | [true] ( ... ) | | UseUseExplosion.rb:20:1702:20:1703 | 20 | UseUseExplosion.rb:20:1694:20:1703 | ... > ... | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:1706:20:2404 | then ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | -| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | UseUseExplosion.rb:20:1706:20:2404 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1711:20:2404 | if ... | UseUseExplosion.rb:20:1706:20:2404 | then ... | | UseUseExplosion.rb:20:1715:20:1719 | @prop | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | | UseUseExplosion.rb:20:1715:20:1719 | [post] self | UseUseExplosion.rb:20:1736:20:1740 | self | @@ -1184,9 +1346,11 @@ | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [false] ( ... ) | | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | UseUseExplosion.rb:20:1714:20:1725 | [true] ( ... ) | | UseUseExplosion.rb:20:1723:20:1724 | 19 | UseUseExplosion.rb:20:1715:20:1724 | ... > ... | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:1727:20:2388 | then ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | -| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | UseUseExplosion.rb:20:1727:20:2388 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1732:20:2388 | if ... | UseUseExplosion.rb:20:1727:20:2388 | then ... | | UseUseExplosion.rb:20:1736:20:1740 | @prop | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | | UseUseExplosion.rb:20:1736:20:1740 | [post] self | UseUseExplosion.rb:20:1757:20:1761 | self | @@ -1196,9 +1360,11 @@ | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [false] ( ... ) | | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | UseUseExplosion.rb:20:1735:20:1746 | [true] ( ... ) | | UseUseExplosion.rb:20:1744:20:1745 | 18 | UseUseExplosion.rb:20:1736:20:1745 | ... > ... | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:1748:20:2372 | then ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | -| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | UseUseExplosion.rb:20:1748:20:2372 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1753:20:2372 | if ... | UseUseExplosion.rb:20:1748:20:2372 | then ... | | UseUseExplosion.rb:20:1757:20:1761 | @prop | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | | UseUseExplosion.rb:20:1757:20:1761 | [post] self | UseUseExplosion.rb:20:1778:20:1782 | self | @@ -1208,9 +1374,11 @@ | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [false] ( ... ) | | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | UseUseExplosion.rb:20:1756:20:1767 | [true] ( ... ) | | UseUseExplosion.rb:20:1765:20:1766 | 17 | UseUseExplosion.rb:20:1757:20:1766 | ... > ... | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:1769:20:2356 | then ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | -| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | UseUseExplosion.rb:20:1769:20:2356 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1774:20:2356 | if ... | UseUseExplosion.rb:20:1769:20:2356 | then ... | | UseUseExplosion.rb:20:1778:20:1782 | @prop | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | | UseUseExplosion.rb:20:1778:20:1782 | [post] self | UseUseExplosion.rb:20:1799:20:1803 | self | @@ -1220,9 +1388,11 @@ | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [false] ( ... ) | | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | UseUseExplosion.rb:20:1777:20:1788 | [true] ( ... ) | | UseUseExplosion.rb:20:1786:20:1787 | 16 | UseUseExplosion.rb:20:1778:20:1787 | ... > ... | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:1790:20:2340 | then ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | -| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | UseUseExplosion.rb:20:1790:20:2340 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1795:20:2340 | if ... | UseUseExplosion.rb:20:1790:20:2340 | then ... | | UseUseExplosion.rb:20:1799:20:1803 | @prop | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | | UseUseExplosion.rb:20:1799:20:1803 | [post] self | UseUseExplosion.rb:20:1820:20:1824 | self | @@ -1232,9 +1402,11 @@ | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [false] ( ... ) | | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | UseUseExplosion.rb:20:1798:20:1809 | [true] ( ... ) | | UseUseExplosion.rb:20:1807:20:1808 | 15 | UseUseExplosion.rb:20:1799:20:1808 | ... > ... | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:1811:20:2324 | then ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | -| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | UseUseExplosion.rb:20:1811:20:2324 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1816:20:2324 | if ... | UseUseExplosion.rb:20:1811:20:2324 | then ... | | UseUseExplosion.rb:20:1820:20:1824 | @prop | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | | UseUseExplosion.rb:20:1820:20:1824 | [post] self | UseUseExplosion.rb:20:1841:20:1845 | self | @@ -1244,9 +1416,11 @@ | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [false] ( ... ) | | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | UseUseExplosion.rb:20:1819:20:1830 | [true] ( ... ) | | UseUseExplosion.rb:20:1828:20:1829 | 14 | UseUseExplosion.rb:20:1820:20:1829 | ... > ... | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:1832:20:2308 | then ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | -| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | UseUseExplosion.rb:20:1832:20:2308 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1837:20:2308 | if ... | UseUseExplosion.rb:20:1832:20:2308 | then ... | | UseUseExplosion.rb:20:1841:20:1845 | @prop | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | | UseUseExplosion.rb:20:1841:20:1845 | [post] self | UseUseExplosion.rb:20:1862:20:1866 | self | @@ -1256,9 +1430,11 @@ | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [false] ( ... ) | | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | UseUseExplosion.rb:20:1840:20:1851 | [true] ( ... ) | | UseUseExplosion.rb:20:1849:20:1850 | 13 | UseUseExplosion.rb:20:1841:20:1850 | ... > ... | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:1853:20:2292 | then ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | -| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | UseUseExplosion.rb:20:1853:20:2292 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1858:20:2292 | if ... | UseUseExplosion.rb:20:1853:20:2292 | then ... | | UseUseExplosion.rb:20:1862:20:1866 | @prop | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | | UseUseExplosion.rb:20:1862:20:1866 | [post] self | UseUseExplosion.rb:20:1883:20:1887 | self | @@ -1268,9 +1444,11 @@ | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [false] ( ... ) | | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | UseUseExplosion.rb:20:1861:20:1872 | [true] ( ... ) | | UseUseExplosion.rb:20:1870:20:1871 | 12 | UseUseExplosion.rb:20:1862:20:1871 | ... > ... | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:1874:20:2276 | then ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | -| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | UseUseExplosion.rb:20:1874:20:2276 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1879:20:2276 | if ... | UseUseExplosion.rb:20:1874:20:2276 | then ... | | UseUseExplosion.rb:20:1883:20:1887 | @prop | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | | UseUseExplosion.rb:20:1883:20:1887 | [post] self | UseUseExplosion.rb:20:1904:20:1908 | self | @@ -1280,9 +1458,11 @@ | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [false] ( ... ) | | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | UseUseExplosion.rb:20:1882:20:1893 | [true] ( ... ) | | UseUseExplosion.rb:20:1891:20:1892 | 11 | UseUseExplosion.rb:20:1883:20:1892 | ... > ... | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:1895:20:2260 | then ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | -| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | UseUseExplosion.rb:20:1895:20:2260 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1900:20:2260 | if ... | UseUseExplosion.rb:20:1895:20:2260 | then ... | | UseUseExplosion.rb:20:1904:20:1908 | @prop | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | | UseUseExplosion.rb:20:1904:20:1908 | [post] self | UseUseExplosion.rb:20:1925:20:1929 | self | @@ -1292,9 +1472,11 @@ | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [false] ( ... ) | | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | UseUseExplosion.rb:20:1903:20:1914 | [true] ( ... ) | | UseUseExplosion.rb:20:1912:20:1913 | 10 | UseUseExplosion.rb:20:1904:20:1913 | ... > ... | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:1916:20:2244 | then ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | -| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | UseUseExplosion.rb:20:1916:20:2244 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1921:20:2244 | if ... | UseUseExplosion.rb:20:1916:20:2244 | then ... | | UseUseExplosion.rb:20:1925:20:1929 | @prop | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | | UseUseExplosion.rb:20:1925:20:1929 | [post] self | UseUseExplosion.rb:20:1945:20:1949 | self | @@ -1304,9 +1486,11 @@ | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [false] ( ... ) | | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | UseUseExplosion.rb:20:1924:20:1934 | [true] ( ... ) | | UseUseExplosion.rb:20:1933:20:1933 | 9 | UseUseExplosion.rb:20:1925:20:1933 | ... > ... | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:1936:20:2228 | then ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | -| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | UseUseExplosion.rb:20:1936:20:2228 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1941:20:2228 | if ... | UseUseExplosion.rb:20:1936:20:2228 | then ... | | UseUseExplosion.rb:20:1945:20:1949 | @prop | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | | UseUseExplosion.rb:20:1945:20:1949 | [post] self | UseUseExplosion.rb:20:1965:20:1969 | self | @@ -1316,9 +1500,11 @@ | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [false] ( ... ) | | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | UseUseExplosion.rb:20:1944:20:1954 | [true] ( ... ) | | UseUseExplosion.rb:20:1953:20:1953 | 8 | UseUseExplosion.rb:20:1945:20:1953 | ... > ... | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:1956:20:2212 | then ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | -| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | UseUseExplosion.rb:20:1956:20:2212 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1961:20:2212 | if ... | UseUseExplosion.rb:20:1956:20:2212 | then ... | | UseUseExplosion.rb:20:1965:20:1969 | @prop | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | | UseUseExplosion.rb:20:1965:20:1969 | [post] self | UseUseExplosion.rb:20:1985:20:1989 | self | @@ -1328,9 +1514,11 @@ | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [false] ( ... ) | | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | UseUseExplosion.rb:20:1964:20:1974 | [true] ( ... ) | | UseUseExplosion.rb:20:1973:20:1973 | 7 | UseUseExplosion.rb:20:1965:20:1973 | ... > ... | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:1976:20:2196 | then ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | -| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | UseUseExplosion.rb:20:1976:20:2196 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:1981:20:2196 | if ... | UseUseExplosion.rb:20:1976:20:2196 | then ... | | UseUseExplosion.rb:20:1985:20:1989 | @prop | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | | UseUseExplosion.rb:20:1985:20:1989 | [post] self | UseUseExplosion.rb:20:2005:20:2009 | self | @@ -1340,9 +1528,11 @@ | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [false] ( ... ) | | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | UseUseExplosion.rb:20:1984:20:1994 | [true] ( ... ) | | UseUseExplosion.rb:20:1993:20:1993 | 6 | UseUseExplosion.rb:20:1985:20:1993 | ... > ... | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:1996:20:2180 | then ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | -| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | UseUseExplosion.rb:20:1996:20:2180 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2001:20:2180 | if ... | UseUseExplosion.rb:20:1996:20:2180 | then ... | | UseUseExplosion.rb:20:2005:20:2009 | @prop | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | | UseUseExplosion.rb:20:2005:20:2009 | [post] self | UseUseExplosion.rb:20:2025:20:2029 | self | @@ -1352,9 +1542,11 @@ | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [false] ( ... ) | | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | UseUseExplosion.rb:20:2004:20:2014 | [true] ( ... ) | | UseUseExplosion.rb:20:2013:20:2013 | 5 | UseUseExplosion.rb:20:2005:20:2013 | ... > ... | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2016:20:2164 | then ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | -| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | UseUseExplosion.rb:20:2016:20:2164 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2021:20:2164 | if ... | UseUseExplosion.rb:20:2016:20:2164 | then ... | | UseUseExplosion.rb:20:2025:20:2029 | @prop | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | | UseUseExplosion.rb:20:2025:20:2029 | [post] self | UseUseExplosion.rb:20:2045:20:2049 | self | @@ -1364,9 +1556,11 @@ | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [false] ( ... ) | | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | UseUseExplosion.rb:20:2024:20:2034 | [true] ( ... ) | | UseUseExplosion.rb:20:2033:20:2033 | 4 | UseUseExplosion.rb:20:2025:20:2033 | ... > ... | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2036:20:2148 | then ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | -| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | UseUseExplosion.rb:20:2036:20:2148 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2041:20:2148 | if ... | UseUseExplosion.rb:20:2036:20:2148 | then ... | | UseUseExplosion.rb:20:2045:20:2049 | @prop | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | | UseUseExplosion.rb:20:2045:20:2049 | [post] self | UseUseExplosion.rb:20:2065:20:2069 | self | @@ -1376,9 +1570,11 @@ | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [false] ( ... ) | | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | UseUseExplosion.rb:20:2044:20:2054 | [true] ( ... ) | | UseUseExplosion.rb:20:2053:20:2053 | 3 | UseUseExplosion.rb:20:2045:20:2053 | ... > ... | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2056:20:2132 | then ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | -| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | UseUseExplosion.rb:20:2056:20:2132 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2061:20:2132 | if ... | UseUseExplosion.rb:20:2056:20:2132 | then ... | | UseUseExplosion.rb:20:2065:20:2069 | @prop | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | | UseUseExplosion.rb:20:2065:20:2069 | [post] self | UseUseExplosion.rb:20:2085:20:2089 | self | @@ -1388,9 +1584,11 @@ | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [false] ( ... ) | | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | UseUseExplosion.rb:20:2064:20:2074 | [true] ( ... ) | | UseUseExplosion.rb:20:2073:20:2073 | 2 | UseUseExplosion.rb:20:2065:20:2073 | ... > ... | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2076:20:2116 | then ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | -| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(self) | +| UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | UseUseExplosion.rb:20:2076:20:2116 | [input] SSA phi read(x) | | UseUseExplosion.rb:20:2081:20:2116 | if ... | UseUseExplosion.rb:20:2076:20:2116 | then ... | | UseUseExplosion.rb:20:2085:20:2089 | @prop | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | | UseUseExplosion.rb:20:2085:20:2089 | [post] self | UseUseExplosion.rb:20:2107:20:2112 | self | @@ -1398,205 +1596,407 @@ | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [false] ( ... ) | | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | UseUseExplosion.rb:20:2084:20:2094 | [true] ( ... ) | | UseUseExplosion.rb:20:2093:20:2093 | 1 | UseUseExplosion.rb:20:2085:20:2093 | ... > ... | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2096:20:2099 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2096:20:2099 | then ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(self) | +| UseUseExplosion.rb:20:2102:20:2112 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2081:20:2116 | SSA phi read(x) | | UseUseExplosion.rb:20:2102:20:2112 | else ... | UseUseExplosion.rb:20:2081:20:2116 | if ... | | UseUseExplosion.rb:20:2107:20:2112 | call to use | UseUseExplosion.rb:20:2102:20:2112 | else ... | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(self) | +| UseUseExplosion.rb:20:2118:20:2128 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2061:20:2132 | SSA phi read(x) | | UseUseExplosion.rb:20:2118:20:2128 | else ... | UseUseExplosion.rb:20:2061:20:2132 | if ... | | UseUseExplosion.rb:20:2123:20:2128 | call to use | UseUseExplosion.rb:20:2118:20:2128 | else ... | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(self) | +| UseUseExplosion.rb:20:2134:20:2144 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2041:20:2148 | SSA phi read(x) | | UseUseExplosion.rb:20:2134:20:2144 | else ... | UseUseExplosion.rb:20:2041:20:2148 | if ... | | UseUseExplosion.rb:20:2139:20:2144 | call to use | UseUseExplosion.rb:20:2134:20:2144 | else ... | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(self) | +| UseUseExplosion.rb:20:2150:20:2160 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2021:20:2164 | SSA phi read(x) | | UseUseExplosion.rb:20:2150:20:2160 | else ... | UseUseExplosion.rb:20:2021:20:2164 | if ... | | UseUseExplosion.rb:20:2155:20:2160 | call to use | UseUseExplosion.rb:20:2150:20:2160 | else ... | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(self) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(self) | +| UseUseExplosion.rb:20:2166:20:2176 | [input] SSA phi read(x) | UseUseExplosion.rb:20:2001:20:2180 | SSA phi read(x) | | UseUseExplosion.rb:20:2166:20:2176 | else ... | UseUseExplosion.rb:20:2001:20:2180 | if ... | | UseUseExplosion.rb:20:2171:20:2176 | call to use | UseUseExplosion.rb:20:2166:20:2176 | else ... | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(self) | +| UseUseExplosion.rb:20:2182:20:2192 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1981:20:2196 | SSA phi read(x) | | UseUseExplosion.rb:20:2182:20:2192 | else ... | UseUseExplosion.rb:20:1981:20:2196 | if ... | | UseUseExplosion.rb:20:2187:20:2192 | call to use | UseUseExplosion.rb:20:2182:20:2192 | else ... | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(self) | +| UseUseExplosion.rb:20:2198:20:2208 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1961:20:2212 | SSA phi read(x) | | UseUseExplosion.rb:20:2198:20:2208 | else ... | UseUseExplosion.rb:20:1961:20:2212 | if ... | | UseUseExplosion.rb:20:2203:20:2208 | call to use | UseUseExplosion.rb:20:2198:20:2208 | else ... | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(self) | +| UseUseExplosion.rb:20:2214:20:2224 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1941:20:2228 | SSA phi read(x) | | UseUseExplosion.rb:20:2214:20:2224 | else ... | UseUseExplosion.rb:20:1941:20:2228 | if ... | | UseUseExplosion.rb:20:2219:20:2224 | call to use | UseUseExplosion.rb:20:2214:20:2224 | else ... | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(self) | +| UseUseExplosion.rb:20:2230:20:2240 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1921:20:2244 | SSA phi read(x) | | UseUseExplosion.rb:20:2230:20:2240 | else ... | UseUseExplosion.rb:20:1921:20:2244 | if ... | | UseUseExplosion.rb:20:2235:20:2240 | call to use | UseUseExplosion.rb:20:2230:20:2240 | else ... | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(self) | +| UseUseExplosion.rb:20:2246:20:2256 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1900:20:2260 | SSA phi read(x) | | UseUseExplosion.rb:20:2246:20:2256 | else ... | UseUseExplosion.rb:20:1900:20:2260 | if ... | | UseUseExplosion.rb:20:2251:20:2256 | call to use | UseUseExplosion.rb:20:2246:20:2256 | else ... | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(self) | +| UseUseExplosion.rb:20:2262:20:2272 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1879:20:2276 | SSA phi read(x) | | UseUseExplosion.rb:20:2262:20:2272 | else ... | UseUseExplosion.rb:20:1879:20:2276 | if ... | | UseUseExplosion.rb:20:2267:20:2272 | call to use | UseUseExplosion.rb:20:2262:20:2272 | else ... | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(self) | +| UseUseExplosion.rb:20:2278:20:2288 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1858:20:2292 | SSA phi read(x) | | UseUseExplosion.rb:20:2278:20:2288 | else ... | UseUseExplosion.rb:20:1858:20:2292 | if ... | | UseUseExplosion.rb:20:2283:20:2288 | call to use | UseUseExplosion.rb:20:2278:20:2288 | else ... | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(self) | +| UseUseExplosion.rb:20:2294:20:2304 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1837:20:2308 | SSA phi read(x) | | UseUseExplosion.rb:20:2294:20:2304 | else ... | UseUseExplosion.rb:20:1837:20:2308 | if ... | | UseUseExplosion.rb:20:2299:20:2304 | call to use | UseUseExplosion.rb:20:2294:20:2304 | else ... | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(self) | +| UseUseExplosion.rb:20:2310:20:2320 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1816:20:2324 | SSA phi read(x) | | UseUseExplosion.rb:20:2310:20:2320 | else ... | UseUseExplosion.rb:20:1816:20:2324 | if ... | | UseUseExplosion.rb:20:2315:20:2320 | call to use | UseUseExplosion.rb:20:2310:20:2320 | else ... | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(self) | +| UseUseExplosion.rb:20:2326:20:2336 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1795:20:2340 | SSA phi read(x) | | UseUseExplosion.rb:20:2326:20:2336 | else ... | UseUseExplosion.rb:20:1795:20:2340 | if ... | | UseUseExplosion.rb:20:2331:20:2336 | call to use | UseUseExplosion.rb:20:2326:20:2336 | else ... | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(self) | +| UseUseExplosion.rb:20:2342:20:2352 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1774:20:2356 | SSA phi read(x) | | UseUseExplosion.rb:20:2342:20:2352 | else ... | UseUseExplosion.rb:20:1774:20:2356 | if ... | | UseUseExplosion.rb:20:2347:20:2352 | call to use | UseUseExplosion.rb:20:2342:20:2352 | else ... | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(self) | +| UseUseExplosion.rb:20:2358:20:2368 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1753:20:2372 | SSA phi read(x) | | UseUseExplosion.rb:20:2358:20:2368 | else ... | UseUseExplosion.rb:20:1753:20:2372 | if ... | | UseUseExplosion.rb:20:2363:20:2368 | call to use | UseUseExplosion.rb:20:2358:20:2368 | else ... | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(self) | +| UseUseExplosion.rb:20:2374:20:2384 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1732:20:2388 | SSA phi read(x) | | UseUseExplosion.rb:20:2374:20:2384 | else ... | UseUseExplosion.rb:20:1732:20:2388 | if ... | | UseUseExplosion.rb:20:2379:20:2384 | call to use | UseUseExplosion.rb:20:2374:20:2384 | else ... | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(self) | +| UseUseExplosion.rb:20:2390:20:2400 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1711:20:2404 | SSA phi read(x) | | UseUseExplosion.rb:20:2390:20:2400 | else ... | UseUseExplosion.rb:20:1711:20:2404 | if ... | | UseUseExplosion.rb:20:2395:20:2400 | call to use | UseUseExplosion.rb:20:2390:20:2400 | else ... | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(self) | +| UseUseExplosion.rb:20:2406:20:2416 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1690:20:2420 | SSA phi read(x) | | UseUseExplosion.rb:20:2406:20:2416 | else ... | UseUseExplosion.rb:20:1690:20:2420 | if ... | | UseUseExplosion.rb:20:2411:20:2416 | call to use | UseUseExplosion.rb:20:2406:20:2416 | else ... | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(self) | +| UseUseExplosion.rb:20:2422:20:2432 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1669:20:2436 | SSA phi read(x) | | UseUseExplosion.rb:20:2422:20:2432 | else ... | UseUseExplosion.rb:20:1669:20:2436 | if ... | | UseUseExplosion.rb:20:2427:20:2432 | call to use | UseUseExplosion.rb:20:2422:20:2432 | else ... | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(self) | +| UseUseExplosion.rb:20:2438:20:2448 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1648:20:2452 | SSA phi read(x) | | UseUseExplosion.rb:20:2438:20:2448 | else ... | UseUseExplosion.rb:20:1648:20:2452 | if ... | | UseUseExplosion.rb:20:2443:20:2448 | call to use | UseUseExplosion.rb:20:2438:20:2448 | else ... | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(self) | +| UseUseExplosion.rb:20:2454:20:2464 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1627:20:2468 | SSA phi read(x) | | UseUseExplosion.rb:20:2454:20:2464 | else ... | UseUseExplosion.rb:20:1627:20:2468 | if ... | | UseUseExplosion.rb:20:2459:20:2464 | call to use | UseUseExplosion.rb:20:2454:20:2464 | else ... | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(self) | +| UseUseExplosion.rb:20:2470:20:2480 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1606:20:2484 | SSA phi read(x) | | UseUseExplosion.rb:20:2470:20:2480 | else ... | UseUseExplosion.rb:20:1606:20:2484 | if ... | | UseUseExplosion.rb:20:2475:20:2480 | call to use | UseUseExplosion.rb:20:2470:20:2480 | else ... | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(self) | +| UseUseExplosion.rb:20:2486:20:2496 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1585:20:2500 | SSA phi read(x) | | UseUseExplosion.rb:20:2486:20:2496 | else ... | UseUseExplosion.rb:20:1585:20:2500 | if ... | | UseUseExplosion.rb:20:2491:20:2496 | call to use | UseUseExplosion.rb:20:2486:20:2496 | else ... | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(self) | +| UseUseExplosion.rb:20:2502:20:2512 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1564:20:2516 | SSA phi read(x) | | UseUseExplosion.rb:20:2502:20:2512 | else ... | UseUseExplosion.rb:20:1564:20:2516 | if ... | | UseUseExplosion.rb:20:2507:20:2512 | call to use | UseUseExplosion.rb:20:2502:20:2512 | else ... | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(self) | +| UseUseExplosion.rb:20:2518:20:2528 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1543:20:2532 | SSA phi read(x) | | UseUseExplosion.rb:20:2518:20:2528 | else ... | UseUseExplosion.rb:20:1543:20:2532 | if ... | | UseUseExplosion.rb:20:2523:20:2528 | call to use | UseUseExplosion.rb:20:2518:20:2528 | else ... | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(self) | +| UseUseExplosion.rb:20:2534:20:2544 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1522:20:2548 | SSA phi read(x) | | UseUseExplosion.rb:20:2534:20:2544 | else ... | UseUseExplosion.rb:20:1522:20:2548 | if ... | | UseUseExplosion.rb:20:2539:20:2544 | call to use | UseUseExplosion.rb:20:2534:20:2544 | else ... | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(self) | +| UseUseExplosion.rb:20:2550:20:2560 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1501:20:2564 | SSA phi read(x) | | UseUseExplosion.rb:20:2550:20:2560 | else ... | UseUseExplosion.rb:20:1501:20:2564 | if ... | | UseUseExplosion.rb:20:2555:20:2560 | call to use | UseUseExplosion.rb:20:2550:20:2560 | else ... | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(self) | +| UseUseExplosion.rb:20:2566:20:2576 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1480:20:2580 | SSA phi read(x) | | UseUseExplosion.rb:20:2566:20:2576 | else ... | UseUseExplosion.rb:20:1480:20:2580 | if ... | | UseUseExplosion.rb:20:2571:20:2576 | call to use | UseUseExplosion.rb:20:2566:20:2576 | else ... | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(self) | +| UseUseExplosion.rb:20:2582:20:2592 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1459:20:2596 | SSA phi read(x) | | UseUseExplosion.rb:20:2582:20:2592 | else ... | UseUseExplosion.rb:20:1459:20:2596 | if ... | | UseUseExplosion.rb:20:2587:20:2592 | call to use | UseUseExplosion.rb:20:2582:20:2592 | else ... | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(self) | +| UseUseExplosion.rb:20:2598:20:2608 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1438:20:2612 | SSA phi read(x) | | UseUseExplosion.rb:20:2598:20:2608 | else ... | UseUseExplosion.rb:20:1438:20:2612 | if ... | | UseUseExplosion.rb:20:2603:20:2608 | call to use | UseUseExplosion.rb:20:2598:20:2608 | else ... | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(self) | +| UseUseExplosion.rb:20:2614:20:2624 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1417:20:2628 | SSA phi read(x) | | UseUseExplosion.rb:20:2614:20:2624 | else ... | UseUseExplosion.rb:20:1417:20:2628 | if ... | | UseUseExplosion.rb:20:2619:20:2624 | call to use | UseUseExplosion.rb:20:2614:20:2624 | else ... | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(self) | +| UseUseExplosion.rb:20:2630:20:2640 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1396:20:2644 | SSA phi read(x) | | UseUseExplosion.rb:20:2630:20:2640 | else ... | UseUseExplosion.rb:20:1396:20:2644 | if ... | | UseUseExplosion.rb:20:2635:20:2640 | call to use | UseUseExplosion.rb:20:2630:20:2640 | else ... | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(self) | +| UseUseExplosion.rb:20:2646:20:2656 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1375:20:2660 | SSA phi read(x) | | UseUseExplosion.rb:20:2646:20:2656 | else ... | UseUseExplosion.rb:20:1375:20:2660 | if ... | | UseUseExplosion.rb:20:2651:20:2656 | call to use | UseUseExplosion.rb:20:2646:20:2656 | else ... | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(self) | +| UseUseExplosion.rb:20:2662:20:2672 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1354:20:2676 | SSA phi read(x) | | UseUseExplosion.rb:20:2662:20:2672 | else ... | UseUseExplosion.rb:20:1354:20:2676 | if ... | | UseUseExplosion.rb:20:2667:20:2672 | call to use | UseUseExplosion.rb:20:2662:20:2672 | else ... | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(self) | +| UseUseExplosion.rb:20:2678:20:2688 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1333:20:2692 | SSA phi read(x) | | UseUseExplosion.rb:20:2678:20:2688 | else ... | UseUseExplosion.rb:20:1333:20:2692 | if ... | | UseUseExplosion.rb:20:2683:20:2688 | call to use | UseUseExplosion.rb:20:2678:20:2688 | else ... | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(self) | +| UseUseExplosion.rb:20:2694:20:2704 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1312:20:2708 | SSA phi read(x) | | UseUseExplosion.rb:20:2694:20:2704 | else ... | UseUseExplosion.rb:20:1312:20:2708 | if ... | | UseUseExplosion.rb:20:2699:20:2704 | call to use | UseUseExplosion.rb:20:2694:20:2704 | else ... | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(self) | +| UseUseExplosion.rb:20:2710:20:2720 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1291:20:2724 | SSA phi read(x) | | UseUseExplosion.rb:20:2710:20:2720 | else ... | UseUseExplosion.rb:20:1291:20:2724 | if ... | | UseUseExplosion.rb:20:2715:20:2720 | call to use | UseUseExplosion.rb:20:2710:20:2720 | else ... | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(self) | +| UseUseExplosion.rb:20:2726:20:2736 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1270:20:2740 | SSA phi read(x) | | UseUseExplosion.rb:20:2726:20:2736 | else ... | UseUseExplosion.rb:20:1270:20:2740 | if ... | | UseUseExplosion.rb:20:2731:20:2736 | call to use | UseUseExplosion.rb:20:2726:20:2736 | else ... | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(self) | +| UseUseExplosion.rb:20:2742:20:2752 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1249:20:2756 | SSA phi read(x) | | UseUseExplosion.rb:20:2742:20:2752 | else ... | UseUseExplosion.rb:20:1249:20:2756 | if ... | | UseUseExplosion.rb:20:2747:20:2752 | call to use | UseUseExplosion.rb:20:2742:20:2752 | else ... | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(self) | +| UseUseExplosion.rb:20:2758:20:2768 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1228:20:2772 | SSA phi read(x) | | UseUseExplosion.rb:20:2758:20:2768 | else ... | UseUseExplosion.rb:20:1228:20:2772 | if ... | | UseUseExplosion.rb:20:2763:20:2768 | call to use | UseUseExplosion.rb:20:2758:20:2768 | else ... | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(self) | +| UseUseExplosion.rb:20:2774:20:2784 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1207:20:2788 | SSA phi read(x) | | UseUseExplosion.rb:20:2774:20:2784 | else ... | UseUseExplosion.rb:20:1207:20:2788 | if ... | | UseUseExplosion.rb:20:2779:20:2784 | call to use | UseUseExplosion.rb:20:2774:20:2784 | else ... | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(self) | +| UseUseExplosion.rb:20:2790:20:2800 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1186:20:2804 | SSA phi read(x) | | UseUseExplosion.rb:20:2790:20:2800 | else ... | UseUseExplosion.rb:20:1186:20:2804 | if ... | | UseUseExplosion.rb:20:2795:20:2800 | call to use | UseUseExplosion.rb:20:2790:20:2800 | else ... | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(self) | +| UseUseExplosion.rb:20:2806:20:2816 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1165:20:2820 | SSA phi read(x) | | UseUseExplosion.rb:20:2806:20:2816 | else ... | UseUseExplosion.rb:20:1165:20:2820 | if ... | | UseUseExplosion.rb:20:2811:20:2816 | call to use | UseUseExplosion.rb:20:2806:20:2816 | else ... | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(self) | +| UseUseExplosion.rb:20:2822:20:2832 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1144:20:2836 | SSA phi read(x) | | UseUseExplosion.rb:20:2822:20:2832 | else ... | UseUseExplosion.rb:20:1144:20:2836 | if ... | | UseUseExplosion.rb:20:2827:20:2832 | call to use | UseUseExplosion.rb:20:2822:20:2832 | else ... | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(self) | +| UseUseExplosion.rb:20:2838:20:2848 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1123:20:2852 | SSA phi read(x) | | UseUseExplosion.rb:20:2838:20:2848 | else ... | UseUseExplosion.rb:20:1123:20:2852 | if ... | | UseUseExplosion.rb:20:2843:20:2848 | call to use | UseUseExplosion.rb:20:2838:20:2848 | else ... | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(self) | +| UseUseExplosion.rb:20:2854:20:2864 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1102:20:2868 | SSA phi read(x) | | UseUseExplosion.rb:20:2854:20:2864 | else ... | UseUseExplosion.rb:20:1102:20:2868 | if ... | | UseUseExplosion.rb:20:2859:20:2864 | call to use | UseUseExplosion.rb:20:2854:20:2864 | else ... | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(self) | +| UseUseExplosion.rb:20:2870:20:2880 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1081:20:2884 | SSA phi read(x) | | UseUseExplosion.rb:20:2870:20:2880 | else ... | UseUseExplosion.rb:20:1081:20:2884 | if ... | | UseUseExplosion.rb:20:2875:20:2880 | call to use | UseUseExplosion.rb:20:2870:20:2880 | else ... | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(self) | +| UseUseExplosion.rb:20:2886:20:2896 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1060:20:2900 | SSA phi read(x) | | UseUseExplosion.rb:20:2886:20:2896 | else ... | UseUseExplosion.rb:20:1060:20:2900 | if ... | | UseUseExplosion.rb:20:2891:20:2896 | call to use | UseUseExplosion.rb:20:2886:20:2896 | else ... | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(self) | +| UseUseExplosion.rb:20:2902:20:2912 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1039:20:2916 | SSA phi read(x) | | UseUseExplosion.rb:20:2902:20:2912 | else ... | UseUseExplosion.rb:20:1039:20:2916 | if ... | | UseUseExplosion.rb:20:2907:20:2912 | call to use | UseUseExplosion.rb:20:2902:20:2912 | else ... | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(self) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(self) | +| UseUseExplosion.rb:20:2918:20:2928 | [input] SSA phi read(x) | UseUseExplosion.rb:20:1018:20:2932 | SSA phi read(x) | | UseUseExplosion.rb:20:2918:20:2928 | else ... | UseUseExplosion.rb:20:1018:20:2932 | if ... | | UseUseExplosion.rb:20:2923:20:2928 | call to use | UseUseExplosion.rb:20:2918:20:2928 | else ... | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(self) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(self) | +| UseUseExplosion.rb:20:2934:20:2944 | [input] SSA phi read(x) | UseUseExplosion.rb:20:997:20:2948 | SSA phi read(x) | | UseUseExplosion.rb:20:2934:20:2944 | else ... | UseUseExplosion.rb:20:997:20:2948 | if ... | | UseUseExplosion.rb:20:2939:20:2944 | call to use | UseUseExplosion.rb:20:2934:20:2944 | else ... | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(self) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(self) | +| UseUseExplosion.rb:20:2950:20:2960 | [input] SSA phi read(x) | UseUseExplosion.rb:20:976:20:2964 | SSA phi read(x) | | UseUseExplosion.rb:20:2950:20:2960 | else ... | UseUseExplosion.rb:20:976:20:2964 | if ... | | UseUseExplosion.rb:20:2955:20:2960 | call to use | UseUseExplosion.rb:20:2950:20:2960 | else ... | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(self) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(self) | +| UseUseExplosion.rb:20:2966:20:2976 | [input] SSA phi read(x) | UseUseExplosion.rb:20:955:20:2980 | SSA phi read(x) | | UseUseExplosion.rb:20:2966:20:2976 | else ... | UseUseExplosion.rb:20:955:20:2980 | if ... | | UseUseExplosion.rb:20:2971:20:2976 | call to use | UseUseExplosion.rb:20:2966:20:2976 | else ... | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(self) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(self) | +| UseUseExplosion.rb:20:2982:20:2992 | [input] SSA phi read(x) | UseUseExplosion.rb:20:934:20:2996 | SSA phi read(x) | | UseUseExplosion.rb:20:2982:20:2992 | else ... | UseUseExplosion.rb:20:934:20:2996 | if ... | | UseUseExplosion.rb:20:2987:20:2992 | call to use | UseUseExplosion.rb:20:2982:20:2992 | else ... | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(self) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(self) | +| UseUseExplosion.rb:20:2998:20:3008 | [input] SSA phi read(x) | UseUseExplosion.rb:20:913:20:3012 | SSA phi read(x) | | UseUseExplosion.rb:20:2998:20:3008 | else ... | UseUseExplosion.rb:20:913:20:3012 | if ... | | UseUseExplosion.rb:20:3003:20:3008 | call to use | UseUseExplosion.rb:20:2998:20:3008 | else ... | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(self) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(self) | +| UseUseExplosion.rb:20:3014:20:3024 | [input] SSA phi read(x) | UseUseExplosion.rb:20:892:20:3028 | SSA phi read(x) | | UseUseExplosion.rb:20:3014:20:3024 | else ... | UseUseExplosion.rb:20:892:20:3028 | if ... | | UseUseExplosion.rb:20:3019:20:3024 | call to use | UseUseExplosion.rb:20:3014:20:3024 | else ... | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(self) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(self) | +| UseUseExplosion.rb:20:3030:20:3040 | [input] SSA phi read(x) | UseUseExplosion.rb:20:871:20:3044 | SSA phi read(x) | | UseUseExplosion.rb:20:3030:20:3040 | else ... | UseUseExplosion.rb:20:871:20:3044 | if ... | | UseUseExplosion.rb:20:3035:20:3040 | call to use | UseUseExplosion.rb:20:3030:20:3040 | else ... | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(self) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(self) | +| UseUseExplosion.rb:20:3046:20:3056 | [input] SSA phi read(x) | UseUseExplosion.rb:20:850:20:3060 | SSA phi read(x) | | UseUseExplosion.rb:20:3046:20:3056 | else ... | UseUseExplosion.rb:20:850:20:3060 | if ... | | UseUseExplosion.rb:20:3051:20:3056 | call to use | UseUseExplosion.rb:20:3046:20:3056 | else ... | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(self) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(self) | +| UseUseExplosion.rb:20:3062:20:3072 | [input] SSA phi read(x) | UseUseExplosion.rb:20:829:20:3076 | SSA phi read(x) | | UseUseExplosion.rb:20:3062:20:3072 | else ... | UseUseExplosion.rb:20:829:20:3076 | if ... | | UseUseExplosion.rb:20:3067:20:3072 | call to use | UseUseExplosion.rb:20:3062:20:3072 | else ... | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(self) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(self) | +| UseUseExplosion.rb:20:3078:20:3088 | [input] SSA phi read(x) | UseUseExplosion.rb:20:808:20:3092 | SSA phi read(x) | | UseUseExplosion.rb:20:3078:20:3088 | else ... | UseUseExplosion.rb:20:808:20:3092 | if ... | | UseUseExplosion.rb:20:3083:20:3088 | call to use | UseUseExplosion.rb:20:3078:20:3088 | else ... | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(self) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(self) | +| UseUseExplosion.rb:20:3094:20:3104 | [input] SSA phi read(x) | UseUseExplosion.rb:20:787:20:3108 | SSA phi read(x) | | UseUseExplosion.rb:20:3094:20:3104 | else ... | UseUseExplosion.rb:20:787:20:3108 | if ... | | UseUseExplosion.rb:20:3099:20:3104 | call to use | UseUseExplosion.rb:20:3094:20:3104 | else ... | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(self) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(self) | +| UseUseExplosion.rb:20:3110:20:3120 | [input] SSA phi read(x) | UseUseExplosion.rb:20:766:20:3124 | SSA phi read(x) | | UseUseExplosion.rb:20:3110:20:3120 | else ... | UseUseExplosion.rb:20:766:20:3124 | if ... | | UseUseExplosion.rb:20:3115:20:3120 | call to use | UseUseExplosion.rb:20:3110:20:3120 | else ... | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(self) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(self) | +| UseUseExplosion.rb:20:3126:20:3136 | [input] SSA phi read(x) | UseUseExplosion.rb:20:745:20:3140 | SSA phi read(x) | | UseUseExplosion.rb:20:3126:20:3136 | else ... | UseUseExplosion.rb:20:745:20:3140 | if ... | | UseUseExplosion.rb:20:3131:20:3136 | call to use | UseUseExplosion.rb:20:3126:20:3136 | else ... | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(self) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(self) | +| UseUseExplosion.rb:20:3142:20:3152 | [input] SSA phi read(x) | UseUseExplosion.rb:20:724:20:3156 | SSA phi read(x) | | UseUseExplosion.rb:20:3142:20:3152 | else ... | UseUseExplosion.rb:20:724:20:3156 | if ... | | UseUseExplosion.rb:20:3147:20:3152 | call to use | UseUseExplosion.rb:20:3142:20:3152 | else ... | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(self) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(self) | +| UseUseExplosion.rb:20:3158:20:3168 | [input] SSA phi read(x) | UseUseExplosion.rb:20:703:20:3172 | SSA phi read(x) | | UseUseExplosion.rb:20:3158:20:3168 | else ... | UseUseExplosion.rb:20:703:20:3172 | if ... | | UseUseExplosion.rb:20:3163:20:3168 | call to use | UseUseExplosion.rb:20:3158:20:3168 | else ... | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(self) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(self) | +| UseUseExplosion.rb:20:3174:20:3184 | [input] SSA phi read(x) | UseUseExplosion.rb:20:682:20:3188 | SSA phi read(x) | | UseUseExplosion.rb:20:3174:20:3184 | else ... | UseUseExplosion.rb:20:682:20:3188 | if ... | | UseUseExplosion.rb:20:3179:20:3184 | call to use | UseUseExplosion.rb:20:3174:20:3184 | else ... | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(self) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(self) | +| UseUseExplosion.rb:20:3190:20:3200 | [input] SSA phi read(x) | UseUseExplosion.rb:20:661:20:3204 | SSA phi read(x) | | UseUseExplosion.rb:20:3190:20:3200 | else ... | UseUseExplosion.rb:20:661:20:3204 | if ... | | UseUseExplosion.rb:20:3195:20:3200 | call to use | UseUseExplosion.rb:20:3190:20:3200 | else ... | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(self) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(self) | +| UseUseExplosion.rb:20:3206:20:3216 | [input] SSA phi read(x) | UseUseExplosion.rb:20:640:20:3220 | SSA phi read(x) | | UseUseExplosion.rb:20:3206:20:3216 | else ... | UseUseExplosion.rb:20:640:20:3220 | if ... | | UseUseExplosion.rb:20:3211:20:3216 | call to use | UseUseExplosion.rb:20:3206:20:3216 | else ... | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(self) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(self) | +| UseUseExplosion.rb:20:3222:20:3232 | [input] SSA phi read(x) | UseUseExplosion.rb:20:619:20:3236 | SSA phi read(x) | | UseUseExplosion.rb:20:3222:20:3232 | else ... | UseUseExplosion.rb:20:619:20:3236 | if ... | | UseUseExplosion.rb:20:3227:20:3232 | call to use | UseUseExplosion.rb:20:3222:20:3232 | else ... | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(self) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(self) | +| UseUseExplosion.rb:20:3238:20:3248 | [input] SSA phi read(x) | UseUseExplosion.rb:20:598:20:3252 | SSA phi read(x) | | UseUseExplosion.rb:20:3238:20:3248 | else ... | UseUseExplosion.rb:20:598:20:3252 | if ... | | UseUseExplosion.rb:20:3243:20:3248 | call to use | UseUseExplosion.rb:20:3238:20:3248 | else ... | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(self) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(self) | +| UseUseExplosion.rb:20:3254:20:3264 | [input] SSA phi read(x) | UseUseExplosion.rb:20:577:20:3268 | SSA phi read(x) | | UseUseExplosion.rb:20:3254:20:3264 | else ... | UseUseExplosion.rb:20:577:20:3268 | if ... | | UseUseExplosion.rb:20:3259:20:3264 | call to use | UseUseExplosion.rb:20:3254:20:3264 | else ... | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(self) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(self) | +| UseUseExplosion.rb:20:3270:20:3280 | [input] SSA phi read(x) | UseUseExplosion.rb:20:556:20:3284 | SSA phi read(x) | | UseUseExplosion.rb:20:3270:20:3280 | else ... | UseUseExplosion.rb:20:556:20:3284 | if ... | | UseUseExplosion.rb:20:3275:20:3280 | call to use | UseUseExplosion.rb:20:3270:20:3280 | else ... | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(self) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(self) | +| UseUseExplosion.rb:20:3286:20:3296 | [input] SSA phi read(x) | UseUseExplosion.rb:20:535:20:3300 | SSA phi read(x) | | UseUseExplosion.rb:20:3286:20:3296 | else ... | UseUseExplosion.rb:20:535:20:3300 | if ... | | UseUseExplosion.rb:20:3291:20:3296 | call to use | UseUseExplosion.rb:20:3286:20:3296 | else ... | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(self) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(self) | +| UseUseExplosion.rb:20:3302:20:3312 | [input] SSA phi read(x) | UseUseExplosion.rb:20:514:20:3316 | SSA phi read(x) | | UseUseExplosion.rb:20:3302:20:3312 | else ... | UseUseExplosion.rb:20:514:20:3316 | if ... | | UseUseExplosion.rb:20:3307:20:3312 | call to use | UseUseExplosion.rb:20:3302:20:3312 | else ... | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(self) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(self) | +| UseUseExplosion.rb:20:3318:20:3328 | [input] SSA phi read(x) | UseUseExplosion.rb:20:493:20:3332 | SSA phi read(x) | | UseUseExplosion.rb:20:3318:20:3328 | else ... | UseUseExplosion.rb:20:493:20:3332 | if ... | | UseUseExplosion.rb:20:3323:20:3328 | call to use | UseUseExplosion.rb:20:3318:20:3328 | else ... | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(self) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(self) | +| UseUseExplosion.rb:20:3334:20:3344 | [input] SSA phi read(x) | UseUseExplosion.rb:20:472:20:3348 | SSA phi read(x) | | UseUseExplosion.rb:20:3334:20:3344 | else ... | UseUseExplosion.rb:20:472:20:3348 | if ... | | UseUseExplosion.rb:20:3339:20:3344 | call to use | UseUseExplosion.rb:20:3334:20:3344 | else ... | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(self) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(self) | +| UseUseExplosion.rb:20:3350:20:3360 | [input] SSA phi read(x) | UseUseExplosion.rb:20:451:20:3364 | SSA phi read(x) | | UseUseExplosion.rb:20:3350:20:3360 | else ... | UseUseExplosion.rb:20:451:20:3364 | if ... | | UseUseExplosion.rb:20:3355:20:3360 | call to use | UseUseExplosion.rb:20:3350:20:3360 | else ... | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(self) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(self) | +| UseUseExplosion.rb:20:3366:20:3376 | [input] SSA phi read(x) | UseUseExplosion.rb:20:430:20:3380 | SSA phi read(x) | | UseUseExplosion.rb:20:3366:20:3376 | else ... | UseUseExplosion.rb:20:430:20:3380 | if ... | | UseUseExplosion.rb:20:3371:20:3376 | call to use | UseUseExplosion.rb:20:3366:20:3376 | else ... | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(self) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(self) | +| UseUseExplosion.rb:20:3382:20:3392 | [input] SSA phi read(x) | UseUseExplosion.rb:20:409:20:3396 | SSA phi read(x) | | UseUseExplosion.rb:20:3382:20:3392 | else ... | UseUseExplosion.rb:20:409:20:3396 | if ... | | UseUseExplosion.rb:20:3387:20:3392 | call to use | UseUseExplosion.rb:20:3382:20:3392 | else ... | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(self) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(self) | +| UseUseExplosion.rb:20:3398:20:3408 | [input] SSA phi read(x) | UseUseExplosion.rb:20:388:20:3412 | SSA phi read(x) | | UseUseExplosion.rb:20:3398:20:3408 | else ... | UseUseExplosion.rb:20:388:20:3412 | if ... | | UseUseExplosion.rb:20:3403:20:3408 | call to use | UseUseExplosion.rb:20:3398:20:3408 | else ... | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(self) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(self) | +| UseUseExplosion.rb:20:3414:20:3424 | [input] SSA phi read(x) | UseUseExplosion.rb:20:367:20:3428 | SSA phi read(x) | | UseUseExplosion.rb:20:3414:20:3424 | else ... | UseUseExplosion.rb:20:367:20:3428 | if ... | | UseUseExplosion.rb:20:3419:20:3424 | call to use | UseUseExplosion.rb:20:3414:20:3424 | else ... | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(self) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(self) | +| UseUseExplosion.rb:20:3430:20:3440 | [input] SSA phi read(x) | UseUseExplosion.rb:20:346:20:3444 | SSA phi read(x) | | UseUseExplosion.rb:20:3430:20:3440 | else ... | UseUseExplosion.rb:20:346:20:3444 | if ... | | UseUseExplosion.rb:20:3435:20:3440 | call to use | UseUseExplosion.rb:20:3430:20:3440 | else ... | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(self) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(self) | +| UseUseExplosion.rb:20:3446:20:3456 | [input] SSA phi read(x) | UseUseExplosion.rb:20:325:20:3460 | SSA phi read(x) | | UseUseExplosion.rb:20:3446:20:3456 | else ... | UseUseExplosion.rb:20:325:20:3460 | if ... | | UseUseExplosion.rb:20:3451:20:3456 | call to use | UseUseExplosion.rb:20:3446:20:3456 | else ... | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(self) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(self) | +| UseUseExplosion.rb:20:3462:20:3472 | [input] SSA phi read(x) | UseUseExplosion.rb:20:304:20:3476 | SSA phi read(x) | | UseUseExplosion.rb:20:3462:20:3472 | else ... | UseUseExplosion.rb:20:304:20:3476 | if ... | | UseUseExplosion.rb:20:3467:20:3472 | call to use | UseUseExplosion.rb:20:3462:20:3472 | else ... | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(self) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(self) | +| UseUseExplosion.rb:20:3478:20:3488 | [input] SSA phi read(x) | UseUseExplosion.rb:20:283:20:3492 | SSA phi read(x) | | UseUseExplosion.rb:20:3478:20:3488 | else ... | UseUseExplosion.rb:20:283:20:3492 | if ... | | UseUseExplosion.rb:20:3483:20:3488 | call to use | UseUseExplosion.rb:20:3478:20:3488 | else ... | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(self) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(self) | +| UseUseExplosion.rb:20:3494:20:3504 | [input] SSA phi read(x) | UseUseExplosion.rb:20:262:20:3508 | SSA phi read(x) | | UseUseExplosion.rb:20:3494:20:3504 | else ... | UseUseExplosion.rb:20:262:20:3508 | if ... | | UseUseExplosion.rb:20:3499:20:3504 | call to use | UseUseExplosion.rb:20:3494:20:3504 | else ... | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(self) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(self) | +| UseUseExplosion.rb:20:3510:20:3520 | [input] SSA phi read(x) | UseUseExplosion.rb:20:241:20:3524 | SSA phi read(x) | | UseUseExplosion.rb:20:3510:20:3520 | else ... | UseUseExplosion.rb:20:241:20:3524 | if ... | | UseUseExplosion.rb:20:3515:20:3520 | call to use | UseUseExplosion.rb:20:3510:20:3520 | else ... | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(self) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(self) | +| UseUseExplosion.rb:20:3526:20:3536 | [input] SSA phi read(x) | UseUseExplosion.rb:20:220:20:3540 | SSA phi read(x) | | UseUseExplosion.rb:20:3526:20:3536 | else ... | UseUseExplosion.rb:20:220:20:3540 | if ... | | UseUseExplosion.rb:20:3531:20:3536 | call to use | UseUseExplosion.rb:20:3526:20:3536 | else ... | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(self) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(self) | +| UseUseExplosion.rb:20:3542:20:3552 | [input] SSA phi read(x) | UseUseExplosion.rb:20:199:20:3556 | SSA phi read(x) | | UseUseExplosion.rb:20:3542:20:3552 | else ... | UseUseExplosion.rb:20:199:20:3556 | if ... | | UseUseExplosion.rb:20:3547:20:3552 | call to use | UseUseExplosion.rb:20:3542:20:3552 | else ... | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(self) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(self) | +| UseUseExplosion.rb:20:3558:20:3568 | [input] SSA phi read(x) | UseUseExplosion.rb:20:178:20:3572 | SSA phi read(x) | | UseUseExplosion.rb:20:3558:20:3568 | else ... | UseUseExplosion.rb:20:178:20:3572 | if ... | | UseUseExplosion.rb:20:3563:20:3568 | call to use | UseUseExplosion.rb:20:3558:20:3568 | else ... | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(self) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(self) | +| UseUseExplosion.rb:20:3574:20:3584 | [input] SSA phi read(x) | UseUseExplosion.rb:20:157:20:3588 | SSA phi read(x) | | UseUseExplosion.rb:20:3574:20:3584 | else ... | UseUseExplosion.rb:20:157:20:3588 | if ... | | UseUseExplosion.rb:20:3579:20:3584 | call to use | UseUseExplosion.rb:20:3574:20:3584 | else ... | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(self) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(self) | +| UseUseExplosion.rb:20:3590:20:3600 | [input] SSA phi read(x) | UseUseExplosion.rb:20:136:20:3604 | SSA phi read(x) | | UseUseExplosion.rb:20:3590:20:3600 | else ... | UseUseExplosion.rb:20:136:20:3604 | if ... | | UseUseExplosion.rb:20:3595:20:3600 | call to use | UseUseExplosion.rb:20:3590:20:3600 | else ... | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(self) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(self) | +| UseUseExplosion.rb:20:3606:20:3616 | [input] SSA phi read(x) | UseUseExplosion.rb:20:115:20:3620 | SSA phi read(x) | | UseUseExplosion.rb:20:3606:20:3616 | else ... | UseUseExplosion.rb:20:115:20:3620 | if ... | | UseUseExplosion.rb:20:3611:20:3616 | call to use | UseUseExplosion.rb:20:3606:20:3616 | else ... | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(self) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(self) | +| UseUseExplosion.rb:20:3622:20:3632 | [input] SSA phi read(x) | UseUseExplosion.rb:20:94:20:3636 | SSA phi read(x) | | UseUseExplosion.rb:20:3622:20:3632 | else ... | UseUseExplosion.rb:20:94:20:3636 | if ... | | UseUseExplosion.rb:20:3627:20:3632 | call to use | UseUseExplosion.rb:20:3622:20:3632 | else ... | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(self) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(self) | +| UseUseExplosion.rb:20:3638:20:3648 | [input] SSA phi read(x) | UseUseExplosion.rb:20:73:20:3652 | SSA phi read(x) | | UseUseExplosion.rb:20:3638:20:3648 | else ... | UseUseExplosion.rb:20:73:20:3652 | if ... | | UseUseExplosion.rb:20:3643:20:3648 | call to use | UseUseExplosion.rb:20:3638:20:3648 | else ... | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(self) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(self) | +| UseUseExplosion.rb:20:3654:20:3664 | [input] SSA phi read(x) | UseUseExplosion.rb:20:52:20:3668 | SSA phi read(x) | | UseUseExplosion.rb:20:3654:20:3664 | else ... | UseUseExplosion.rb:20:52:20:3668 | if ... | | UseUseExplosion.rb:20:3659:20:3664 | call to use | UseUseExplosion.rb:20:3654:20:3664 | else ... | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(self) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(self) | +| UseUseExplosion.rb:20:3670:20:3680 | [input] SSA phi read(x) | UseUseExplosion.rb:20:31:20:3684 | SSA phi read(x) | | UseUseExplosion.rb:20:3670:20:3680 | else ... | UseUseExplosion.rb:20:31:20:3684 | if ... | | UseUseExplosion.rb:20:3675:20:3680 | call to use | UseUseExplosion.rb:20:3670:20:3680 | else ... | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(self) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(self) | +| UseUseExplosion.rb:20:3686:20:3696 | [input] SSA phi read(x) | UseUseExplosion.rb:20:9:20:3700 | SSA phi read(x) | | UseUseExplosion.rb:20:3686:20:3696 | else ... | UseUseExplosion.rb:20:9:20:3700 | if ... | | UseUseExplosion.rb:20:3691:20:3696 | call to use | UseUseExplosion.rb:20:3686:20:3696 | else ... | | UseUseExplosion.rb:21:13:21:17 | @prop | UseUseExplosion.rb:21:13:21:23 | ... > ... | @@ -2889,12 +3289,14 @@ | local_dataflow.rb:10:5:13:3 | call to each | local_dataflow.rb:10:5:13:3 | ... | | local_dataflow.rb:10:5:13:3 | synthetic splat parameter | local_dataflow.rb:10:5:13:3 | __synth__0__1 | | local_dataflow.rb:10:9:10:9 | ... = ... | local_dataflow.rb:10:9:10:9 | if ... | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | +| local_dataflow.rb:10:9:10:9 | [input] phi | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [false] ! ... | | local_dataflow.rb:10:9:10:9 | defined? ... | local_dataflow.rb:10:9:10:9 | [true] ! ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | ... = ... | | local_dataflow.rb:10:9:10:9 | nil | local_dataflow.rb:10:9:10:9 | x | +| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | [input] phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | defined? ... | -| local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:10:9:10:9 | phi | | local_dataflow.rb:10:9:10:9 | x | local_dataflow.rb:12:5:12:5 | x | | local_dataflow.rb:10:14:10:18 | [post] array | local_dataflow.rb:15:10:15:14 | array | | local_dataflow.rb:10:14:10:18 | array | local_dataflow.rb:15:10:15:14 | array | @@ -2908,12 +3310,14 @@ | local_dataflow.rb:15:1:17:3 | call to each | local_dataflow.rb:15:1:17:3 | ... | | local_dataflow.rb:15:1:17:3 | synthetic splat parameter | local_dataflow.rb:15:1:17:3 | __synth__0__1 | | local_dataflow.rb:15:5:15:5 | ... = ... | local_dataflow.rb:15:5:15:5 | if ... | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | +| local_dataflow.rb:15:5:15:5 | [input] phi | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [false] ! ... | | local_dataflow.rb:15:5:15:5 | defined? ... | local_dataflow.rb:15:5:15:5 | [true] ! ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | ... = ... | | local_dataflow.rb:15:5:15:5 | nil | local_dataflow.rb:15:5:15:5 | x | +| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | [input] phi | | local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | defined? ... | -| local_dataflow.rb:15:5:15:5 | x | local_dataflow.rb:15:5:15:5 | phi | | local_dataflow.rb:15:10:15:14 | [post] array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:15:10:15:14 | array | local_dataflow.rb:19:10:19:14 | array | | local_dataflow.rb:16:9:16:10 | 10 | local_dataflow.rb:16:3:16:10 | break | @@ -2924,12 +3328,14 @@ | local_dataflow.rb:19:1:21:3 | call to each | local_dataflow.rb:19:1:21:3 | ... | | local_dataflow.rb:19:1:21:3 | synthetic splat parameter | local_dataflow.rb:19:1:21:3 | __synth__0__1 | | local_dataflow.rb:19:5:19:5 | ... = ... | local_dataflow.rb:19:5:19:5 | if ... | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | +| local_dataflow.rb:19:5:19:5 | [input] phi | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [false] ! ... | | local_dataflow.rb:19:5:19:5 | defined? ... | local_dataflow.rb:19:5:19:5 | [true] ! ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | ... = ... | | local_dataflow.rb:19:5:19:5 | nil | local_dataflow.rb:19:5:19:5 | x | +| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | [input] phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | defined? ... | -| local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:19:5:19:5 | phi | | local_dataflow.rb:19:5:19:5 | x | local_dataflow.rb:20:6:20:6 | x | | local_dataflow.rb:20:6:20:6 | x | local_dataflow.rb:20:6:20:10 | ... > ... | | local_dataflow.rb:20:10:20:10 | 1 | local_dataflow.rb:20:6:20:10 | ... > ... | @@ -2978,12 +3384,16 @@ | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:63:15:63:15 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:65:6:65:6 | x | | local_dataflow.rb:61:12:61:12 | x | local_dataflow.rb:67:5:67:5 | x | +| local_dataflow.rb:62:10:62:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:62:10:62:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:62:15:62:15 | 3 | local_dataflow.rb:62:10:62:15 | then ... | +| local_dataflow.rb:63:10:63:15 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:63:10:63:15 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:63:15:63:15 | x | local_dataflow.rb:63:10:63:15 | then ... | +| local_dataflow.rb:64:9:65:6 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:64:9:65:6 | then ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:65:6:65:6 | x | local_dataflow.rb:64:9:65:6 | then ... | +| local_dataflow.rb:66:3:67:5 | [input] SSA phi read(x) | local_dataflow.rb:61:7:68:5 | SSA phi read(x) | | local_dataflow.rb:66:3:67:5 | else ... | local_dataflow.rb:61:7:68:5 | case ... | | local_dataflow.rb:67:5:67:5 | x | local_dataflow.rb:66:3:67:5 | else ... | | local_dataflow.rb:69:7:76:5 | case ... | local_dataflow.rb:69:3:76:5 | ... = ... | @@ -3023,6 +3433,7 @@ | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:86:28:86:34 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:87:20:87:26 | self | | local_dataflow.rb:79:13:79:13 | b | local_dataflow.rb:79:25:79:25 | b | +| local_dataflow.rb:79:15:79:45 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:79:15:79:45 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:79:20:79:26 | call to sink | local_dataflow.rb:79:15:79:45 | then ... | | local_dataflow.rb:80:8:80:8 | a | local_dataflow.rb:80:13:80:13 | a | @@ -3030,11 +3441,13 @@ | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:13:80:17 | ... > ... | | local_dataflow.rb:80:13:80:13 | a | local_dataflow.rb:80:29:80:29 | a | | local_dataflow.rb:80:17:80:17 | 0 | local_dataflow.rb:80:13:80:17 | ... > ... | +| local_dataflow.rb:80:19:80:49 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:80:19:80:49 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:80:24:80:30 | call to sink | local_dataflow.rb:80:19:80:49 | then ... | | local_dataflow.rb:81:9:81:9 | c | local_dataflow.rb:82:12:82:12 | c | | local_dataflow.rb:81:13:81:13 | d | local_dataflow.rb:83:12:83:12 | d | | local_dataflow.rb:81:16:81:16 | e | local_dataflow.rb:84:12:84:12 | e | +| local_dataflow.rb:81:20:84:33 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:81:20:84:33 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:81:25:84:14 | Array | local_dataflow.rb:81:25:84:14 | call to [] | | local_dataflow.rb:81:25:84:14 | call to [] | local_dataflow.rb:81:20:84:33 | then ... | @@ -3044,12 +3457,15 @@ | local_dataflow.rb:83:7:83:13 | [post] self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:83:7:83:13 | self | local_dataflow.rb:84:7:84:13 | self | | local_dataflow.rb:85:13:85:13 | f | local_dataflow.rb:85:27:85:27 | f | +| local_dataflow.rb:85:17:85:47 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:85:17:85:47 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:85:22:85:28 | call to sink | local_dataflow.rb:85:17:85:47 | then ... | | local_dataflow.rb:86:18:86:18 | g | local_dataflow.rb:86:33:86:33 | g | +| local_dataflow.rb:86:23:86:53 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:86:23:86:53 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:86:28:86:34 | call to sink | local_dataflow.rb:86:23:86:53 | then ... | | local_dataflow.rb:87:10:87:10 | x | local_dataflow.rb:87:25:87:25 | x | +| local_dataflow.rb:87:15:87:48 | [input] SSA phi read(self) | local_dataflow.rb:78:7:88:5 | SSA phi read(self) | | local_dataflow.rb:87:15:87:48 | then ... | local_dataflow.rb:78:7:88:5 | case ... | | local_dataflow.rb:87:25:87:25 | [post] x | local_dataflow.rb:87:29:87:29 | x | | local_dataflow.rb:87:25:87:25 | x | local_dataflow.rb:87:29:87:29 | x | @@ -3057,42 +3473,50 @@ | local_dataflow.rb:92:1:109:3 | self (and_or) | local_dataflow.rb:93:7:93:15 | self | | local_dataflow.rb:92:1:109:3 | self in and_or | local_dataflow.rb:92:1:109:3 | self (and_or) | | local_dataflow.rb:93:3:93:3 | a | local_dataflow.rb:94:8:94:8 | a | +| local_dataflow.rb:93:7:93:15 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:7:93:15 | [post] self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:15 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:93:7:93:15 | self | local_dataflow.rb:93:20:93:28 | self | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:3 | a | | local_dataflow.rb:93:7:93:28 | ... \|\| ... | local_dataflow.rb:93:3:93:28 | ... = ... | | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | local_dataflow.rb:94:3:94:9 | self | +| local_dataflow.rb:93:20:93:28 | [input] SSA phi read(self) | local_dataflow.rb:93:7:93:28 | SSA phi read(self) | | local_dataflow.rb:93:20:93:28 | call to source | local_dataflow.rb:93:7:93:28 | ... \|\| ... | | local_dataflow.rb:94:3:94:9 | [post] self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:94:3:94:9 | self | local_dataflow.rb:95:8:95:16 | self | | local_dataflow.rb:95:3:95:3 | b | local_dataflow.rb:96:8:96:8 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:3 | b | | local_dataflow.rb:95:7:95:30 | ( ... ) | local_dataflow.rb:95:3:95:30 | ... = ... | +| local_dataflow.rb:95:8:95:16 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:8:95:16 | [post] self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:16 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:95:8:95:16 | self | local_dataflow.rb:95:21:95:29 | self | | local_dataflow.rb:95:8:95:29 | ... or ... | local_dataflow.rb:95:7:95:30 | ( ... ) | | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | local_dataflow.rb:96:3:96:9 | self | +| local_dataflow.rb:95:21:95:29 | [input] SSA phi read(self) | local_dataflow.rb:95:8:95:29 | SSA phi read(self) | | local_dataflow.rb:95:21:95:29 | call to source | local_dataflow.rb:95:8:95:29 | ... or ... | | local_dataflow.rb:96:3:96:9 | [post] self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:96:3:96:9 | self | local_dataflow.rb:98:7:98:15 | self | | local_dataflow.rb:98:3:98:3 | a | local_dataflow.rb:99:8:99:8 | a | +| local_dataflow.rb:98:7:98:15 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:7:98:15 | [post] self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:15 | self | local_dataflow.rb:98:20:98:28 | self | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:3 | a | | local_dataflow.rb:98:7:98:28 | ... && ... | local_dataflow.rb:98:3:98:28 | ... = ... | | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | local_dataflow.rb:99:3:99:9 | self | +| local_dataflow.rb:98:20:98:28 | [input] SSA phi read(self) | local_dataflow.rb:98:7:98:28 | SSA phi read(self) | | local_dataflow.rb:98:20:98:28 | call to source | local_dataflow.rb:98:7:98:28 | ... && ... | | local_dataflow.rb:99:3:99:9 | [post] self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:99:3:99:9 | self | local_dataflow.rb:100:8:100:16 | self | | local_dataflow.rb:100:3:100:3 | b | local_dataflow.rb:101:8:101:8 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:3 | b | | local_dataflow.rb:100:7:100:31 | ( ... ) | local_dataflow.rb:100:3:100:31 | ... = ... | +| local_dataflow.rb:100:8:100:16 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:8:100:16 | [post] self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:16 | self | local_dataflow.rb:100:22:100:30 | self | | local_dataflow.rb:100:8:100:30 | ... and ... | local_dataflow.rb:100:7:100:31 | ( ... ) | | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | local_dataflow.rb:101:3:101:9 | self | +| local_dataflow.rb:100:22:100:30 | [input] SSA phi read(self) | local_dataflow.rb:100:8:100:30 | SSA phi read(self) | | local_dataflow.rb:100:22:100:30 | call to source | local_dataflow.rb:100:8:100:30 | ... and ... | | local_dataflow.rb:101:3:101:9 | [post] self | local_dataflow.rb:103:7:103:15 | self | | local_dataflow.rb:101:3:101:9 | self | local_dataflow.rb:103:7:103:15 | self | @@ -3101,11 +3525,13 @@ | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:3 | a | | local_dataflow.rb:103:7:103:15 | call to source | local_dataflow.rb:103:3:103:15 | ... = ... | | local_dataflow.rb:103:7:103:15 | self | local_dataflow.rb:104:9:104:17 | self | +| local_dataflow.rb:104:3:104:3 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:104:3:104:3 | a | local_dataflow.rb:105:8:105:8 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:3 | a | | local_dataflow.rb:104:5:104:7 | ... \|\| ... | local_dataflow.rb:104:3:104:17 | ... = ... | | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | local_dataflow.rb:105:3:105:9 | self | +| local_dataflow.rb:104:9:104:17 | [input] SSA phi read(self) | local_dataflow.rb:104:5:104:7 | SSA phi read(self) | | local_dataflow.rb:104:9:104:17 | call to source | local_dataflow.rb:104:5:104:7 | ... \|\| ... | | local_dataflow.rb:105:3:105:9 | [post] self | local_dataflow.rb:106:7:106:15 | self | | local_dataflow.rb:105:3:105:9 | self | local_dataflow.rb:106:7:106:15 | self | @@ -3114,10 +3540,12 @@ | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:3 | b | | local_dataflow.rb:106:7:106:15 | call to source | local_dataflow.rb:106:3:106:15 | ... = ... | | local_dataflow.rb:106:7:106:15 | self | local_dataflow.rb:107:9:107:17 | self | +| local_dataflow.rb:107:3:107:3 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:3:107:3 | b | local_dataflow.rb:108:8:108:8 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:3 | b | | local_dataflow.rb:107:5:107:7 | ... && ... | local_dataflow.rb:107:3:107:17 | ... = ... | | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | local_dataflow.rb:108:3:108:9 | self | +| local_dataflow.rb:107:9:107:17 | [input] SSA phi read(self) | local_dataflow.rb:107:5:107:7 | SSA phi read(self) | | local_dataflow.rb:107:9:107:17 | call to source | local_dataflow.rb:107:5:107:7 | ... && ... | | local_dataflow.rb:111:1:114:3 | self (object_dup) | local_dataflow.rb:112:3:112:21 | self | | local_dataflow.rb:111:1:114:3 | self in object_dup | local_dataflow.rb:111:1:114:3 | self (object_dup) | @@ -3172,6 +3600,8 @@ | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | local_dataflow.rb:141:13:141:13 | x | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:8:133:13 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:8:133:13 | [post] self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:8:133:13 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | @@ -3180,29 +3610,43 @@ | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | | local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(self) | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | +| local_dataflow.rb:133:18:133:23 | [input] SSA phi read(x) | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:133:24:134:12 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | +| local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | -| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | -| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(self) | +| local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:135:5:138:9 | [input] SSA phi read(x) | | local_dataflow.rb:137:7:138:9 | if ... | local_dataflow.rb:135:5:138:9 | else ... | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:15 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:10:137:15 | [post] self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | -| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | -| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:10:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | | local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(self) | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | +| local_dataflow.rb:137:20:137:26 | [input] SSA phi read(x) | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | | local_dataflow.rb:137:21:137:26 | call to use | local_dataflow.rb:137:20:137:26 | [false] ! ... | | local_dataflow.rb:137:21:137:26 | call to use | local_dataflow.rb:137:20:137:26 | [true] ! ... | @@ -3210,9 +3654,11 @@ | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | local_dataflow.rb:147:9:147:9 | x | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:8:141:14 | [false] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:8:141:14 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:8:141:14 | [true] ! ... | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | -| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | +| local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | | local_dataflow.rb:141:9:141:14 | [post] self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [false] ! ... | | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [true] ! ... | @@ -3220,7 +3666,11 @@ | local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:8:141:37 | SSA phi read(self) | +| local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:20:141:25 | [post] self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:25 | self | local_dataflow.rb:141:31:141:36 | self | | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | @@ -3230,24 +3680,38 @@ | local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(self) | local_dataflow.rb:141:20:141:36 | SSA phi read(self) | +| local_dataflow.rb:141:30:141:36 | [input] SSA phi read(x) | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | | local_dataflow.rb:141:31:141:36 | call to use | local_dataflow.rb:141:30:141:36 | [false] ! ... | | local_dataflow.rb:141:31:141:36 | call to use | local_dataflow.rb:141:30:141:36 | [true] ! ... | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:141:38:142:9 | then ... | local_dataflow.rb:141:5:145:7 | if ... | | local_dataflow.rb:142:7:142:9 | nil | local_dataflow.rb:141:38:142:9 | then ... | -| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | -| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(self) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | SSA phi read(x) | local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(self) | local_dataflow.rb:141:5:145:7 | SSA phi read(self) | +| local_dataflow.rb:143:5:144:16 | [input] SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:143:5:144:16 | elsif ... | local_dataflow.rb:141:5:145:7 | if ... | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:16 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:11:143:16 | [post] self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:11:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | +| local_dataflow.rb:143:21:143:26 | [input] SSA phi read(x) | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(self) | local_dataflow.rb:143:5:144:16 | SSA phi read(self) | +| local_dataflow.rb:143:27:144:16 | [input] SSA phi read(x) | local_dataflow.rb:143:5:144:16 | SSA phi read(x) | | local_dataflow.rb:143:27:144:16 | then ... | local_dataflow.rb:143:5:144:16 | elsif ... | | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 5445a71296b..e08953ebb65 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -473,7 +473,7 @@ module Make Input> { } pragma[noinline] - private predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { + predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { exists(SourceVariable v | ssaDefReachesEndOfBlockExt(bb, def, v) and not defOccursInBlock(_, bb, v, _) @@ -741,6 +741,16 @@ module Make Input> { defAdjacentRead(def, bb1, bb2, i2) } + private predicate lastRefRedefExtSameBlock( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next + ) { + exists(int rnk, int j | + rnk = ssaDefRank(def, v, bb, i, _) and + next.definesAt(v, bb, j, _) and + rnk + 1 = ssaRefRank(bb, j, v, ssaDefExt()) + ) + } + /** * NB: If this predicate is exposed, it should be cached. * @@ -753,11 +763,7 @@ module Make Input> { DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next ) { // Next reference to `v` inside `bb` is a write - exists(int rnk, int j | - rnk = ssaDefRank(def, v, bb, i, _) and - next.definesAt(v, bb, j, _) and - rnk + 1 = ssaRefRank(bb, j, v, ssaDefExt()) - ) + lastRefRedefExtSameBlock(def, v, bb, i, next) or // Can reach a write using one or more steps lastSsaRefExt(def, v, bb, i) and @@ -767,6 +773,38 @@ module Make Input> { ) } + /** + * NB: If this predicate is exposed, it should be cached. + * + * Holds if the node at index `i` in `bb` is a last reference to SSA definition + * `def`. The reference is last because it can reach another write `next`, + * without passing through another read or write. + * + * The path from node `i` in `bb` to `next` goes via basic block `input`, which is + * either a predecessor of the basic block of `next`, or `input = bb` in case `next` + * occurs in basic block `bb`. + */ + pragma[nomagic] + predicate lastRefRedefExt( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, BasicBlock input, DefinitionExt next + ) { + // Next reference to `v` inside `bb` is a write + lastRefRedefExtSameBlock(def, v, bb, i, next) and + input = bb + or + // Can reach a write using one or more steps + lastSsaRefExt(def, v, bb, i) and + exists(BasicBlock bb2 | + input = getABasicBlockPredecessor(bb2) and + 1 = ssaDefRank(next, v, bb2, _, ssaDefExt()) + | + input = bb + or + varBlockReachesExt(def, v, bb, input) and + ssaDefReachesThroughBlock(def, input) + ) + } + /** * NB: If this predicate is exposed, it should be cached. * From 3ee965f2b94df2fa6da2bb11773f5789be3bcd78 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 19 Mar 2024 16:42:52 +0100 Subject: [PATCH 185/497] C++: Update test results --- .../library-tests/ir/ir/PrintAST.expected | 204 ++++++++++ .../conditional_destructors/cfg.expected | 362 +++++++++--------- 2 files changed, 392 insertions(+), 174 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 669ec52376f..e583b2328e4 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1823,6 +1823,12 @@ destructors_for_temps.cpp: # 17| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 # 17| Type = [VoidType] void # 17| ValueCategory = prvalue +# 17| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 17| Type = [VoidType] void +# 17| ValueCategory = prvalue +# 17| getQualifier(): [ReuseExpr] reuse of temporary object +# 17| Type = [Class] ClassWithDestructor2 +# 17| ValueCategory = xvalue # 17| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 17| Type = [Class] ClassWithDestructor2 # 17| ValueCategory = prvalue(load) @@ -1858,6 +1864,18 @@ destructors_for_temps.cpp: # 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 23| Type = [Class] ClassWithDestructor2 # 23| ValueCategory = prvalue(load) +# 23| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue +# 23| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ReuseExpr] reuse of temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = xvalue # 23| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... # 23| Conversion = [IntegralConversion] integral conversion # 23| Type = [IntType] int @@ -1959,6 +1977,12 @@ destructors_for_temps.cpp: # 39| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 39| Type = [VoidType] void # 39| ValueCategory = prvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = xvalue # 39| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object # 39| Type = [Class] ClassWithDestructor2 # 39| ValueCategory = prvalue(load) @@ -2066,6 +2090,24 @@ destructors_for_temps.cpp: # 51| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 51| Type = [VoidType] void # 51| ValueCategory = prvalue +# 51| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue +# 51| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue +# 51| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ReuseExpr] reuse of temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = xvalue # 51| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 51| Type = [Class] ClassWithDestructor2 # 51| ValueCategory = prvalue(load) @@ -2113,6 +2155,24 @@ destructors_for_temps.cpp: # 55| getElse(): [ConstructorCall] call to ClassWithDestructor2 # 55| Type = [VoidType] void # 55| ValueCategory = prvalue +# 55| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue +# 55| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue +# 55| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ReuseExpr] reuse of temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = xvalue # 55| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 55| Type = [Class] ClassWithDestructor2 # 55| ValueCategory = prvalue(load) @@ -7245,6 +7305,12 @@ ir.cpp: # 809| Conversion = [BaseClassConversion] base class conversion # 809| Type = [SpecifiedType] const Base # 809| ValueCategory = lvalue +# 809| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 809| Type = [VoidType] void +# 809| ValueCategory = prvalue +# 809| getQualifier(): [ReuseExpr] reuse of temporary object +# 809| Type = [Struct,VirtualBaseClass] Base +# 809| ValueCategory = xvalue # 809| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 809| Type = [LValueReferenceType] const Base & # 809| ValueCategory = prvalue @@ -7278,6 +7344,12 @@ ir.cpp: # 810| Conversion = [BaseClassConversion] base class conversion # 810| Type = [SpecifiedType] const Base # 810| ValueCategory = lvalue +# 810| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 810| Type = [VoidType] void +# 810| ValueCategory = prvalue +# 810| getQualifier(): [ReuseExpr] reuse of temporary object +# 810| Type = [Struct,VirtualBaseClass] Base +# 810| ValueCategory = xvalue # 810| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 810| Type = [LValueReferenceType] const Base & # 810| ValueCategory = prvalue @@ -7485,6 +7557,12 @@ ir.cpp: # 823| Conversion = [BaseClassConversion] base class conversion # 823| Type = [SpecifiedType] const Middle # 823| ValueCategory = lvalue +# 823| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 823| Type = [VoidType] void +# 823| ValueCategory = prvalue +# 823| getQualifier(): [ReuseExpr] reuse of temporary object +# 823| Type = [Struct,VirtualBaseClass] Base +# 823| ValueCategory = xvalue # 823| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 823| Type = [LValueReferenceType] const Base & # 823| ValueCategory = prvalue @@ -7522,6 +7600,12 @@ ir.cpp: # 824| Conversion = [BaseClassConversion] base class conversion # 824| Type = [SpecifiedType] const Middle # 824| ValueCategory = lvalue +# 824| getImplicitDestructorCall(0): [DestructorCall] call to ~Base +# 824| Type = [VoidType] void +# 824| ValueCategory = prvalue +# 824| getQualifier(): [ReuseExpr] reuse of temporary object +# 824| Type = [Struct,VirtualBaseClass] Base +# 824| ValueCategory = xvalue # 824| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 824| Type = [LValueReferenceType] const Base & # 824| ValueCategory = prvalue @@ -11685,6 +11769,12 @@ ir.cpp: # 1419| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1419| Type = [PointerType] const char * # 1419| ValueCategory = prvalue +# 1419| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1419| Type = [VoidType] void +# 1419| ValueCategory = prvalue +# 1419| getQualifier(): [ReuseExpr] reuse of temporary object +# 1419| Type = [SpecifiedType] const String +# 1419| ValueCategory = xvalue # 1419| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 1419| Type = [LValueReferenceType] const String & # 1419| ValueCategory = prvalue @@ -11708,6 +11798,12 @@ ir.cpp: # 1420| Conversion = [GlvalueConversion] glvalue conversion # 1420| Type = [SpecifiedType] const String # 1420| ValueCategory = lvalue +# 1420| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1420| Type = [VoidType] void +# 1420| ValueCategory = prvalue +# 1420| getQualifier(): [ReuseExpr] reuse of temporary object +# 1420| Type = [Struct] String +# 1420| ValueCategory = xvalue # 1420| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1420| Type = [Struct] String # 1420| ValueCategory = lvalue @@ -11725,6 +11821,12 @@ ir.cpp: # 1421| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1421| Type = [PointerType] const char * # 1421| ValueCategory = prvalue +# 1421| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1421| Type = [VoidType] void +# 1421| ValueCategory = prvalue +# 1421| getQualifier(): [ReuseExpr] reuse of temporary object +# 1421| Type = [Struct] String +# 1421| ValueCategory = xvalue # 1421| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1421| Type = [Struct] String # 1421| ValueCategory = lvalue @@ -11735,6 +11837,12 @@ ir.cpp: # 1422| getQualifier(): [ConstructorCall] call to String # 1422| Type = [VoidType] void # 1422| ValueCategory = prvalue +# 1422| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1422| Type = [VoidType] void +# 1422| ValueCategory = prvalue +# 1422| getQualifier(): [ReuseExpr] reuse of temporary object +# 1422| Type = [Struct] String +# 1422| ValueCategory = xvalue # 1422| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1422| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1422| Type = [SpecifiedType] const String @@ -11749,6 +11857,12 @@ ir.cpp: # 1423| getQualifier(): [FunctionCall] call to returnValue # 1423| Type = [Struct] String # 1423| ValueCategory = prvalue +# 1423| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1423| Type = [VoidType] void +# 1423| ValueCategory = prvalue +# 1423| getQualifier(): [ReuseExpr] reuse of temporary object +# 1423| Type = [Struct] String +# 1423| ValueCategory = xvalue # 1423| getQualifier().getFullyConverted(): [CStyleCast] (const String)... # 1423| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion # 1423| Type = [SpecifiedType] const String @@ -11760,6 +11874,12 @@ ir.cpp: # 1425| getExpr(): [FunctionCall] call to defaultConstruct # 1425| Type = [Struct] String # 1425| ValueCategory = prvalue +# 1425| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1425| Type = [VoidType] void +# 1425| ValueCategory = prvalue +# 1425| getQualifier(): [ReuseExpr] reuse of temporary object +# 1425| Type = [Struct] String +# 1425| ValueCategory = xvalue # 1425| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1425| Type = [Struct] String # 1425| ValueCategory = prvalue @@ -11827,6 +11947,12 @@ ir.cpp: # 1433| getArgument(0): [VariableAccess] d # 1433| Type = [Class] destructor_only # 1433| ValueCategory = prvalue(load) +# 1433| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1433| Type = [VoidType] void +# 1433| ValueCategory = prvalue +# 1433| getQualifier(): [ReuseExpr] reuse of temporary object +# 1433| Type = [Class] destructor_only +# 1433| ValueCategory = xvalue # 1433| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1433| Type = [Class] destructor_only # 1433| ValueCategory = lvalue @@ -11838,6 +11964,12 @@ ir.cpp: # 1434| Type = [Class] destructor_only # 1434| Value = [Literal] 0 # 1434| ValueCategory = prvalue +# 1434| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1434| Type = [VoidType] void +# 1434| ValueCategory = prvalue +# 1434| getQualifier(): [ReuseExpr] reuse of temporary object +# 1434| Type = [Class] destructor_only +# 1434| ValueCategory = xvalue # 1434| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1434| Type = [Class] destructor_only # 1434| ValueCategory = prvalue(load) @@ -11848,6 +11980,12 @@ ir.cpp: # 1435| getQualifier(): [FunctionCall] call to returnValue # 1435| Type = [Class] destructor_only # 1435| ValueCategory = prvalue +# 1435| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1435| Type = [VoidType] void +# 1435| ValueCategory = prvalue +# 1435| getQualifier(): [ReuseExpr] reuse of temporary object +# 1435| Type = [Class] destructor_only +# 1435| ValueCategory = xvalue # 1435| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1435| Type = [Class] destructor_only # 1435| ValueCategory = prvalue(load) @@ -11855,6 +11993,12 @@ ir.cpp: # 1437| getExpr(): [FunctionCall] call to defaultConstruct # 1437| Type = [Class] destructor_only # 1437| ValueCategory = prvalue +# 1437| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1437| Type = [VoidType] void +# 1437| ValueCategory = prvalue +# 1437| getQualifier(): [ReuseExpr] reuse of temporary object +# 1437| Type = [Class] destructor_only +# 1437| ValueCategory = xvalue # 1437| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1437| Type = [Class] destructor_only # 1437| ValueCategory = prvalue @@ -16229,6 +16373,12 @@ ir.cpp: # 2068| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2068| Type = [Struct] TernaryNonPodObj # 2068| ValueCategory = prvalue(load) +# 2068| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2068| Type = [VoidType] void +# 2068| ValueCategory = prvalue +# 2068| getQualifier(): [ReuseExpr] reuse of temporary object +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = xvalue # 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2068| Type = [LValueReferenceType] const TernaryNonPodObj & # 2068| ValueCategory = prvalue @@ -16267,6 +16417,12 @@ ir.cpp: # 2069| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2069| Type = [Struct] TernaryNonPodObj # 2069| ValueCategory = prvalue(load) +# 2069| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2069| Type = [VoidType] void +# 2069| ValueCategory = prvalue +# 2069| getQualifier(): [ReuseExpr] reuse of temporary object +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = xvalue # 2069| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2069| Type = [LValueReferenceType] const TernaryNonPodObj & # 2069| ValueCategory = prvalue @@ -16312,6 +16468,12 @@ ir.cpp: # 2070| getArgument(0): [ConstructorCall] call to TernaryNonPodObj # 2070| Type = [VoidType] void # 2070| ValueCategory = prvalue +# 2070| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2070| Type = [VoidType] void +# 2070| ValueCategory = prvalue +# 2070| getQualifier(): [ReuseExpr] reuse of temporary object +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = xvalue # 2070| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) # 2070| Type = [Struct] TernaryNonPodObj # 2070| ValueCategory = lvalue @@ -18767,6 +18929,12 @@ smart_ptr.cpp: # 12| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 12| Type = [LValueReferenceType] unique_ptr> & # 12| ValueCategory = prvalue +# 12| getImplicitDestructorCall(0): [DestructorCall] call to ~unique_ptr +# 12| Type = [VoidType] void +# 12| ValueCategory = prvalue +# 12| getQualifier(): [ReuseExpr] reuse of temporary object +# 12| Type = [ClassTemplateInstantiation] unique_ptr> +# 12| ValueCategory = xvalue # 12| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 12| Type = [ClassTemplateInstantiation] unique_ptr> # 12| ValueCategory = lvalue @@ -18816,6 +18984,12 @@ smart_ptr.cpp: # 19| Conversion = [GlvalueConversion] glvalue conversion # 19| Type = [SpecifiedType] const shared_ptr # 19| ValueCategory = lvalue +# 19| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 19| Type = [VoidType] void +# 19| ValueCategory = prvalue +# 19| getQualifier(): [ReuseExpr] reuse of temporary object +# 19| Type = [ClassTemplateInstantiation] shared_ptr +# 19| ValueCategory = xvalue # 19| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 19| Type = [ClassTemplateInstantiation] shared_ptr # 19| ValueCategory = lvalue @@ -18869,6 +19043,12 @@ smart_ptr.cpp: # 31| Conversion = [GlvalueConversion] glvalue conversion # 31| Type = [SpecifiedType] const shared_ptr # 31| ValueCategory = lvalue +# 31| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 31| Type = [VoidType] void +# 31| ValueCategory = prvalue +# 31| getQualifier(): [ReuseExpr] reuse of temporary object +# 31| Type = [ClassTemplateInstantiation] shared_ptr +# 31| ValueCategory = xvalue # 31| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 31| Type = [ClassTemplateInstantiation] shared_ptr # 31| ValueCategory = lvalue @@ -18892,6 +19072,12 @@ smart_ptr.cpp: # 35| Conversion = [GlvalueConversion] glvalue conversion # 35| Type = [SpecifiedType] const shared_ptr # 35| ValueCategory = lvalue +# 35| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 35| Type = [VoidType] void +# 35| ValueCategory = prvalue +# 35| getQualifier(): [ReuseExpr] reuse of temporary object +# 35| Type = [ClassTemplateInstantiation] shared_ptr +# 35| ValueCategory = xvalue # 35| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 35| Type = [ClassTemplateInstantiation] shared_ptr # 35| ValueCategory = lvalue @@ -18915,6 +19101,12 @@ smart_ptr.cpp: # 39| Conversion = [GlvalueConversion] glvalue conversion # 39| Type = [SpecifiedType] const shared_ptr> # 39| ValueCategory = lvalue +# 39| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getQualifier(): [ReuseExpr] reuse of temporary object +# 39| Type = [ClassTemplateInstantiation] shared_ptr> +# 39| ValueCategory = xvalue # 39| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 39| Type = [ClassTemplateInstantiation] shared_ptr> # 39| ValueCategory = lvalue @@ -18938,6 +19130,12 @@ smart_ptr.cpp: # 43| Conversion = [GlvalueConversion] glvalue conversion # 43| Type = [SpecifiedType] const shared_ptr> # 43| ValueCategory = lvalue +# 43| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 43| getQualifier(): [ReuseExpr] reuse of temporary object +# 43| Type = [ClassTemplateInstantiation] shared_ptr> +# 43| ValueCategory = xvalue # 43| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 43| Type = [ClassTemplateInstantiation] shared_ptr> # 43| ValueCategory = lvalue @@ -18961,6 +19159,12 @@ smart_ptr.cpp: # 47| Conversion = [GlvalueConversion] glvalue conversion # 47| Type = [SpecifiedType] const shared_ptr> # 47| ValueCategory = lvalue +# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~shared_ptr +# 47| Type = [VoidType] void +# 47| ValueCategory = prvalue +# 47| getQualifier(): [ReuseExpr] reuse of temporary object +# 47| Type = [ClassTemplateInstantiation] shared_ptr> +# 47| ValueCategory = xvalue # 47| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 47| Type = [ClassTemplateInstantiation] shared_ptr> # 47| ValueCategory = lvalue diff --git a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected index a47bcaf6fbf..006ed12e35f 100644 --- a/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected +++ b/cpp/ql/test/successor-tests/conditional_destructors/cfg.expected @@ -1,175 +1,189 @@ -| C1::C1 | false | 237 | 237 | C1 | -| C1::C1 | false | 359 | 359 | C1 | -| C1::C1 | false | 363 | 363 | C1 | -| C1::C1 | false | 398 | 398 | ExprStmt | -| C1::C1 | false | 400 | 400 | this | -| C1::C1 | false | 401 | 401 | val | -| C1::C1 | false | 403 | 403 | x | -| C1::C1 | false | 405 | 405 | ... = ... | -| C1::C1 | false | 407 | 407 | return ... | -| C1::C1 | false | 409 | 409 | { ... } | -| C1::C1 | true | 398 | 403 | | -| C1::C1 | true | 400 | 401 | | -| C1::C1 | true | 401 | 405 | | -| C1::C1 | true | 403 | 400 | | -| C1::C1 | true | 405 | 407 | | -| C1::C1 | true | 407 | 237 | | -| C1::C1 | true | 409 | 398 | | -| C1::operator= | false | 348 | 348 | operator= | -| C1::operator= | false | 355 | 355 | operator= | -| C1::operator== | false | 226 | 226 | operator== | -| C1::operator== | false | 376 | 376 | return ... | -| C1::operator== | false | 378 | 378 | this | -| C1::operator== | false | 379 | 379 | val | -| C1::operator== | false | 382 | 382 | other | -| C1::operator== | false | 384 | 384 | (reference dereference) | -| C1::operator== | false | 385 | 385 | val | -| C1::operator== | false | 387 | 387 | ... == ... | -| C1::operator== | false | 389 | 389 | { ... } | -| C1::operator== | true | 376 | 378 | | -| C1::operator== | true | 378 | 379 | | -| C1::operator== | true | 379 | 382 | | -| C1::operator== | true | 382 | 385 | | -| C1::operator== | true | 385 | 387 | | -| C1::operator== | true | 387 | 226 | | -| C1::operator== | true | 389 | 376 | | -| C2::C2 | false | 170 | 170 | C2 | -| C2::C2 | false | 288 | 288 | C2 | -| C2::C2 | false | 334 | 334 | ExprStmt | -| C2::C2 | false | 336 | 336 | this | -| C2::C2 | false | 337 | 337 | val | -| C2::C2 | false | 339 | 339 | x | -| C2::C2 | false | 341 | 341 | ... = ... | -| C2::C2 | false | 343 | 343 | return ... | -| C2::C2 | false | 345 | 345 | { ... } | -| C2::C2 | true | 334 | 339 | | -| C2::C2 | true | 336 | 337 | | -| C2::C2 | true | 337 | 341 | | -| C2::C2 | true | 339 | 336 | | -| C2::C2 | true | 341 | 343 | | -| C2::C2 | true | 343 | 170 | | -| C2::C2 | true | 345 | 334 | | -| C2::operator= | false | 282 | 282 | operator= | -| C2::operator== | false | 159 | 159 | operator== | -| C2::operator== | false | 301 | 301 | return ... | -| C2::operator== | false | 303 | 303 | this | -| C2::operator== | false | 304 | 304 | val | -| C2::operator== | false | 307 | 307 | other | -| C2::operator== | false | 309 | 309 | (reference dereference) | -| C2::operator== | false | 310 | 310 | val | -| C2::operator== | false | 312 | 312 | ... == ... | -| C2::operator== | false | 314 | 314 | { ... } | -| C2::operator== | true | 301 | 303 | | -| C2::operator== | true | 303 | 304 | | -| C2::operator== | true | 304 | 307 | | -| C2::operator== | true | 307 | 310 | | -| C2::operator== | true | 310 | 312 | | -| C2::operator== | true | 312 | 159 | | -| C2::operator== | true | 314 | 301 | | -| C2::~C2 | false | 316 | 316 | ~C2 | -| C2::~C2 | false | 321 | 321 | ; | -| C2::~C2 | false | 323 | 323 | return ... | -| C2::~C2 | false | 325 | 325 | { ... } | -| C2::~C2 | true | 321 | 323 | | -| C2::~C2 | true | 323 | 316 | | -| C2::~C2 | true | 325 | 321 | | -| __va_list_tag::operator= | false | 57 | 57 | operator= | -| __va_list_tag::operator= | false | 63 | 63 | operator= | -| f1 | false | 215 | 215 | f1 | -| f1 | false | 220 | 220 | if (...) ... | -| f1 | false | 234 | 234 | call to operator== | -| f1 | false | 235 | 235 | call to C1 | -| f1 | false | 240 | 240 | 1 | -| f1 | false | 241 | 241 | temporary object | -| f1 | false | 242 | 242 | (const C1)... | -| f1 | false | 243 | 243 | call to C1 | -| f1 | false | 247 | 247 | 2 | -| f1 | false | 248 | 248 | temporary object | -| f1 | false | 249 | 249 | (const C1)... | -| f1 | false | 250 | 250 | (reference to) | -| f1 | false | 251 | 251 | ; | -| f1 | false | 253 | 253 | { ... } | -| f1 | false | 255 | 255 | if (...) ... | -| f1 | false | 258 | 258 | call to operator== | -| f1 | false | 259 | 259 | call to C1 | -| f1 | false | 263 | 263 | 3 | -| f1 | false | 264 | 264 | temporary object | -| f1 | false | 265 | 265 | (const C1)... | -| f1 | false | 266 | 266 | call to C1 | -| f1 | false | 270 | 270 | 3 | -| f1 | false | 271 | 271 | temporary object | -| f1 | false | 272 | 272 | (const C1)... | -| f1 | false | 273 | 273 | (reference to) | -| f1 | false | 274 | 274 | ; | -| f1 | false | 276 | 276 | { ... } | -| f1 | false | 278 | 278 | return ... | -| f1 | false | 280 | 280 | { ... } | -| f1 | true | 220 | 247 | | -| f1 | true | 234 | 253 | T | -| f1 | true | 234 | 255 | F | -| f1 | true | 235 | 234 | | -| f1 | true | 240 | 235 | | -| f1 | true | 243 | 240 | | -| f1 | true | 247 | 243 | | -| f1 | true | 251 | 255 | | -| f1 | true | 253 | 251 | | -| f1 | true | 255 | 270 | | -| f1 | true | 258 | 276 | T | -| f1 | true | 258 | 278 | F | -| f1 | true | 259 | 258 | | -| f1 | true | 263 | 259 | | -| f1 | true | 266 | 263 | | -| f1 | true | 270 | 266 | | -| f1 | true | 274 | 278 | | -| f1 | true | 276 | 274 | | -| f1 | true | 278 | 215 | | -| f1 | true | 280 | 220 | | -| f2 | false | 148 | 148 | f2 | -| f2 | false | 153 | 153 | if (...) ... | -| f2 | false | 167 | 167 | call to operator== | -| f2 | false | 168 | 168 | call to C2 | -| f2 | false | 173 | 173 | 1 | -| f2 | false | 174 | 174 | temporary object | -| f2 | false | 175 | 175 | (const C2)... | -| f2 | false | 176 | 176 | call to C2 | -| f2 | false | 180 | 180 | 2 | -| f2 | false | 181 | 181 | temporary object | -| f2 | false | 182 | 182 | (const C2)... | -| f2 | false | 183 | 183 | (reference to) | -| f2 | false | 184 | 184 | ; | -| f2 | false | 186 | 186 | { ... } | -| f2 | false | 188 | 188 | if (...) ... | -| f2 | false | 191 | 191 | call to operator== | -| f2 | false | 192 | 192 | call to C2 | -| f2 | false | 196 | 196 | 3 | -| f2 | false | 197 | 197 | temporary object | +| C1::C1 | false | 305 | 305 | C1 | +| C1::C1 | false | 473 | 473 | C1 | +| C1::C1 | false | 477 | 477 | C1 | +| C1::C1 | false | 521 | 521 | ExprStmt | +| C1::C1 | false | 524 | 524 | this | +| C1::C1 | false | 526 | 526 | val | +| C1::C1 | false | 529 | 529 | x | +| C1::C1 | false | 532 | 532 | ... = ... | +| C1::C1 | false | 535 | 535 | return ... | +| C1::C1 | false | 538 | 538 | { ... } | +| C1::C1 | true | 521 | 529 | | +| C1::C1 | true | 524 | 526 | | +| C1::C1 | true | 526 | 532 | | +| C1::C1 | true | 529 | 524 | | +| C1::C1 | true | 532 | 535 | | +| C1::C1 | true | 535 | 305 | | +| C1::C1 | true | 538 | 521 | | +| C1::operator= | false | 462 | 462 | operator= | +| C1::operator= | false | 469 | 469 | operator= | +| C1::operator== | false | 292 | 292 | operator== | +| C1::operator== | false | 491 | 491 | return ... | +| C1::operator== | false | 494 | 494 | this | +| C1::operator== | false | 496 | 496 | val | +| C1::operator== | false | 500 | 500 | other | +| C1::operator== | false | 503 | 503 | (reference dereference) | +| C1::operator== | false | 505 | 505 | val | +| C1::operator== | false | 508 | 508 | ... == ... | +| C1::operator== | false | 511 | 511 | { ... } | +| C1::operator== | true | 491 | 494 | | +| C1::operator== | true | 494 | 496 | | +| C1::operator== | true | 496 | 500 | | +| C1::operator== | true | 500 | 505 | | +| C1::operator== | true | 505 | 508 | | +| C1::operator== | true | 508 | 292 | | +| C1::operator== | true | 511 | 491 | | +| C2::C2 | false | 189 | 189 | C2 | +| C2::C2 | false | 385 | 385 | C2 | +| C2::C2 | false | 442 | 442 | ExprStmt | +| C2::C2 | false | 445 | 445 | this | +| C2::C2 | false | 447 | 447 | val | +| C2::C2 | false | 450 | 450 | x | +| C2::C2 | false | 453 | 453 | ... = ... | +| C2::C2 | false | 456 | 456 | return ... | +| C2::C2 | false | 459 | 459 | { ... } | +| C2::C2 | true | 442 | 450 | | +| C2::C2 | true | 445 | 447 | | +| C2::C2 | true | 447 | 453 | | +| C2::C2 | true | 450 | 445 | | +| C2::C2 | true | 453 | 456 | | +| C2::C2 | true | 456 | 189 | | +| C2::C2 | true | 459 | 442 | | +| C2::operator= | false | 379 | 379 | operator= | +| C2::operator== | false | 176 | 176 | operator== | +| C2::operator== | false | 399 | 399 | return ... | +| C2::operator== | false | 402 | 402 | this | +| C2::operator== | false | 404 | 404 | val | +| C2::operator== | false | 408 | 408 | other | +| C2::operator== | false | 411 | 411 | (reference dereference) | +| C2::operator== | false | 413 | 413 | val | +| C2::operator== | false | 416 | 416 | ... == ... | +| C2::operator== | false | 419 | 419 | { ... } | +| C2::operator== | true | 399 | 402 | | +| C2::operator== | true | 402 | 404 | | +| C2::operator== | true | 404 | 408 | | +| C2::operator== | true | 408 | 413 | | +| C2::operator== | true | 413 | 416 | | +| C2::operator== | true | 416 | 176 | | +| C2::operator== | true | 419 | 399 | | +| C2::~C2 | false | 267 | 267 | ~C2 | +| C2::~C2 | false | 426 | 426 | ; | +| C2::~C2 | false | 429 | 429 | return ... | +| C2::~C2 | false | 432 | 432 | { ... } | +| C2::~C2 | true | 426 | 429 | | +| C2::~C2 | true | 429 | 267 | | +| C2::~C2 | true | 432 | 426 | | +| __va_list_tag::operator= | false | 66 | 66 | operator= | +| __va_list_tag::operator= | false | 72 | 72 | operator= | +| f1 | false | 280 | 280 | f1 | +| f1 | false | 286 | 286 | if (...) ... | +| f1 | false | 301 | 301 | call to operator== | +| f1 | false | 303 | 303 | call to C1 | +| f1 | false | 310 | 310 | 1 | +| f1 | false | 312 | 312 | temporary object | +| f1 | false | 314 | 314 | (const C1)... | +| f1 | false | 316 | 316 | call to C1 | +| f1 | false | 322 | 322 | 2 | +| f1 | false | 324 | 324 | temporary object | +| f1 | false | 326 | 326 | (const C1)... | +| f1 | false | 328 | 328 | (reference to) | +| f1 | false | 330 | 330 | ; | +| f1 | false | 333 | 333 | { ... } | +| f1 | false | 336 | 336 | if (...) ... | +| f1 | false | 340 | 340 | call to operator== | +| f1 | false | 342 | 342 | call to C1 | +| f1 | false | 348 | 348 | 3 | +| f1 | false | 350 | 350 | temporary object | +| f1 | false | 352 | 352 | (const C1)... | +| f1 | false | 354 | 354 | call to C1 | +| f1 | false | 360 | 360 | 3 | +| f1 | false | 362 | 362 | temporary object | +| f1 | false | 364 | 364 | (const C1)... | +| f1 | false | 366 | 366 | (reference to) | +| f1 | false | 368 | 368 | ; | +| f1 | false | 371 | 371 | { ... } | +| f1 | false | 374 | 374 | return ... | +| f1 | false | 377 | 377 | { ... } | +| f1 | true | 286 | 322 | | +| f1 | true | 301 | 333 | T | +| f1 | true | 301 | 336 | F | +| f1 | true | 303 | 301 | | +| f1 | true | 310 | 303 | | +| f1 | true | 316 | 310 | | +| f1 | true | 322 | 316 | | +| f1 | true | 330 | 336 | | +| f1 | true | 333 | 330 | | +| f1 | true | 336 | 360 | | +| f1 | true | 340 | 371 | T | +| f1 | true | 340 | 374 | F | +| f1 | true | 342 | 340 | | +| f1 | true | 348 | 342 | | +| f1 | true | 354 | 348 | | +| f1 | true | 360 | 354 | | +| f1 | true | 368 | 374 | | +| f1 | true | 371 | 368 | | +| f1 | true | 374 | 280 | | +| f1 | true | 377 | 286 | | +| f2 | false | 164 | 164 | f2 | +| f2 | false | 170 | 170 | if (...) ... | +| f2 | false | 185 | 185 | call to operator== | +| f2 | false | 187 | 187 | call to C2 | +| f2 | false | 194 | 194 | 1 | +| f2 | false | 196 | 196 | temporary object | | f2 | false | 198 | 198 | (const C2)... | -| f2 | false | 199 | 199 | call to C2 | -| f2 | false | 203 | 203 | 3 | -| f2 | false | 204 | 204 | temporary object | -| f2 | false | 205 | 205 | (const C2)... | -| f2 | false | 206 | 206 | (reference to) | -| f2 | false | 207 | 207 | ; | -| f2 | false | 209 | 209 | { ... } | -| f2 | false | 211 | 211 | return ... | -| f2 | false | 213 | 213 | { ... } | -| f2 | true | 153 | 180 | | -| f2 | true | 167 | 186 | T | -| f2 | true | 167 | 188 | F | -| f2 | true | 168 | 167 | | -| f2 | true | 173 | 168 | | -| f2 | true | 176 | 173 | | -| f2 | true | 180 | 176 | | -| f2 | true | 184 | 188 | | -| f2 | true | 186 | 184 | | -| f2 | true | 188 | 203 | | -| f2 | true | 191 | 209 | T | -| f2 | true | 191 | 211 | F | -| f2 | true | 192 | 191 | | -| f2 | true | 196 | 192 | | -| f2 | true | 199 | 196 | | -| f2 | true | 203 | 199 | | -| f2 | true | 207 | 211 | | -| f2 | true | 209 | 207 | | -| f2 | true | 211 | 148 | | -| f2 | true | 213 | 153 | | +| f2 | false | 200 | 200 | call to C2 | +| f2 | false | 206 | 206 | 2 | +| f2 | false | 208 | 208 | temporary object | +| f2 | false | 210 | 210 | (const C2)... | +| f2 | false | 212 | 212 | (reference to) | +| f2 | false | 214 | 214 | ; | +| f2 | false | 217 | 217 | { ... } | +| f2 | false | 220 | 220 | if (...) ... | +| f2 | false | 224 | 224 | call to operator== | +| f2 | false | 226 | 226 | call to C2 | +| f2 | false | 232 | 232 | 3 | +| f2 | false | 234 | 234 | temporary object | +| f2 | false | 236 | 236 | (const C2)... | +| f2 | false | 238 | 238 | call to C2 | +| f2 | false | 244 | 244 | 3 | +| f2 | false | 246 | 246 | temporary object | +| f2 | false | 248 | 248 | (const C2)... | +| f2 | false | 250 | 250 | (reference to) | +| f2 | false | 252 | 252 | ; | +| f2 | false | 255 | 255 | { ... } | +| f2 | false | 258 | 258 | return ... | +| f2 | false | 261 | 261 | { ... } | +| f2 | false | 264 | 264 | reuse of temporary object | +| f2 | false | 266 | 266 | call to ~C2 | +| f2 | false | 269 | 269 | reuse of temporary object | +| f2 | false | 271 | 271 | call to ~C2 | +| f2 | false | 273 | 273 | reuse of temporary object | +| f2 | false | 275 | 275 | call to ~C2 | +| f2 | false | 277 | 277 | reuse of temporary object | +| f2 | false | 279 | 279 | call to ~C2 | +| f2 | true | 170 | 206 | | +| f2 | true | 185 | 217 | T | +| f2 | true | 185 | 220 | F | +| f2 | true | 187 | 185 | | +| f2 | true | 194 | 187 | | +| f2 | true | 200 | 194 | | +| f2 | true | 206 | 200 | | +| f2 | true | 214 | 220 | | +| f2 | true | 217 | 214 | | +| f2 | true | 220 | 244 | | +| f2 | true | 224 | 255 | T | +| f2 | true | 224 | 258 | F | +| f2 | true | 226 | 224 | | +| f2 | true | 232 | 226 | | +| f2 | true | 238 | 232 | | +| f2 | true | 244 | 238 | | +| f2 | true | 252 | 258 | | +| f2 | true | 255 | 252 | | +| f2 | true | 258 | 164 | | +| f2 | true | 261 | 170 | | +| f2 | true | 264 | 266 | | +| f2 | true | 269 | 271 | | +| f2 | true | 271 | 264 | | +| f2 | true | 273 | 275 | | +| f2 | true | 277 | 279 | | +| f2 | true | 279 | 273 | | From db3bf0e4824561374e784da82f57a1728edfdaab Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Wed, 20 Mar 2024 10:11:07 +0100 Subject: [PATCH 186/497] use the sanitizers from ReflectedXSS in unsafe-html-construction --- .../security/UnsafeHtmlConstructionCustomizations.qll | 7 ++++++- .../ruby/security/UnsafeHtmlConstructionQuery.qll | 10 ++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll index 45a1c00befe..a241fb8ce4f 100644 --- a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll @@ -7,6 +7,7 @@ private import ruby private import codeql.ruby.ApiGraphs private import codeql.ruby.frameworks.core.Gem::Gem as Gem +private import codeql.ruby.security.XSS::ReflectedXss as ReflectedXss private import codeql.ruby.typetracking.TypeTracking /** @@ -34,7 +35,11 @@ module UnsafeHtmlConstruction { abstract string getSinkType(); } - private import codeql.ruby.security.XSS::ReflectedXss as ReflectedXss + /** A sanitizer for HTML constructed from library input vulnerabilities. */ + abstract class Sanitizer extends DataFlow::Node { } + + // inherit all the sanitizers from ReflectedXss + class ReflectedXssSanitizers extends Sanitizer instanceof ReflectedXss::Sanitizer { } /** Gets a node that eventually ends up in the XSS `sink`. */ private DataFlow::Node getANodeThatEndsInXssSink(ReflectedXss::Sink sink) { diff --git a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll index 71e7b5d33db..9d655a6d16a 100644 --- a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionQuery.qll @@ -23,10 +23,7 @@ deprecated class Configuration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - override predicate isSanitizer(DataFlow::Node node) { - node instanceof StringConstCompareBarrier or - node instanceof StringConstArrayInclusionCallBarrier - } + override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer } // override to require the path doesn't have unmatched return steps override DataFlow::FlowFeature getAFeature() { @@ -39,10 +36,7 @@ private module UnsafeHtmlConstructionConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - predicate isBarrier(DataFlow::Node node) { - node instanceof StringConstCompareBarrier or - node instanceof StringConstArrayInclusionCallBarrier - } + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } // override to require the path doesn't have unmatched return steps DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } From 3a7b80da47417183f73fe68b67ba0c647ab65c8f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 10:12:29 +0000 Subject: [PATCH 187/497] C++: Respond to review comments. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 1416fb2cd8a..ee419dd7024 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -134,7 +134,7 @@ class GuardCondition extends Expr { /** * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= k`. + * If `isLessThan = false` then this implies `e >= k`. */ cached predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { none() } @@ -256,7 +256,6 @@ private class GuardConditionFromIR extends GuardCondition { this.controlsBlock(controlled, v) } - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and @@ -265,10 +264,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `e < k` evaluates to `isLessThan` if - * this expression evaluates to `value`. - */ override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and @@ -276,10 +271,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= right + k`. - */ override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and @@ -289,10 +280,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `e >= k`. - */ override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { exists(Instruction i, AbstractValue value | i.getUnconvertedResultExpression() = e and @@ -301,7 +288,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and @@ -310,10 +296,6 @@ private class GuardConditionFromIR extends GuardCondition { ) } - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. - * If `areEqual = false` then this implies `left != right + k`. - */ override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and From 3fa7532b4324eae5b067f9f236a3c5c87b44f05f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 19 Mar 2024 13:16:45 +0000 Subject: [PATCH 188/497] Kotlin 2: Accept more test changes --- .../library-tests/exprs/exprs.expected | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 13dfc71b6c3..63adc378aeb 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -68,16 +68,16 @@ | delegatedProperties.kt:18:12:18:33 | Map | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:18:12:18:33 | Object | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:18:12:18:33 | String | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | | PropertyRefExpr | -| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:9:19:51 | | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:9:19:51 | | PropertyRefExpr | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | | delegatedProperties.kt:19:34:19:51 | (...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | -| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:34:19:51 | | TypeAccess | -| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:34:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:9:19:51 | | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0 | delegatedProperties.kt:19:9:19:51 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | | delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | set | TypeAccess | @@ -87,19 +87,19 @@ | delegatedProperties.kt:19:34:19:51 | a0 | delegatedProperties.kt:19:34:19:51 | set | VarAccess | | delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | | delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | -| delegatedProperties.kt:19:34:19:51 | getValue(...) | delegatedProperties.kt:19:34:19:51 | | MethodCall | +| delegatedProperties.kt:19:34:19:51 | getValue(...) | delegatedProperties.kt:19:9:19:51 | | MethodCall | | delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | -| delegatedProperties.kt:19:34:19:51 | setValue(...) | delegatedProperties.kt:19:34:19:51 | | MethodCall | +| delegatedProperties.kt:19:34:19:51 | setValue(...) | delegatedProperties.kt:19:9:19:51 | | MethodCall | | delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | | delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | | delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | | VarAccess | -| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | | VarAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:9:19:51 | | VarAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:9:19:51 | | VarAccess | | delegatedProperties.kt:19:34:19:51 | ResourceDelegate | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:19:34:19:51 | new ResourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:19:34:19:51 | value | delegatedProperties.kt:19:34:19:51 | | VarAccess | @@ -112,19 +112,19 @@ | delegatedProperties.kt:21:9:21:24 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:21:9:21:24 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:21:24:21:24 | 2 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | -| delegatedProperties.kt:23:29:23:31 | ...::... | delegatedProperties.kt:23:29:23:31 | | PropertyRefExpr | +| delegatedProperties.kt:23:29:23:31 | ...::... | delegatedProperties.kt:23:9:23:31 | | PropertyRefExpr | | delegatedProperties.kt:23:29:23:31 | (...) | delegatedProperties.kt:23:29:23:31 | get | MethodCall | -| delegatedProperties.kt:23:29:23:31 | KProperty0 | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | MapAccessorsKt | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | KProperty0 | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | MapAccessorsKt | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | get | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | String | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:29:23:31 | invoke | MethodCall | +| delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:9:23:31 | invoke | MethodCall | | delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:29:23:31 | | MethodCall | | delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:29:23:31 | | VarAccess | +| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:9:23:31 | | VarAccess | | delegatedProperties.kt:23:29:23:31 | new (...) | delegatedProperties.kt:23:29:23:31 | get | ClassInstanceExpr | | delegatedProperties.kt:23:29:23:31 | this | delegatedProperties.kt:23:29:23:31 | invoke | ThisAccess | | delegatedProperties.kt:23:29:23:31 | map | delegatedProperties.kt:18:5:40:5 | fn | VarAccess | @@ -158,13 +158,13 @@ | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:28:50:28:71 | KProperty | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:74:28:83 | int | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:29:17:29:24 | setCurValue(...) | delegatedProperties.kt:28:22:30:13 | setValue | MethodCall | -| delegatedProperties.kt:29:17:29:24 | this | delegatedProperties.kt:28:22:30:13 | setValue | ThisAccess | -| delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:22:30:13 | setValue | VarAccess | -| delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:30:33:47 | | PropertyRefExpr | +| delegatedProperties.kt:29:17:29:24 | setCurValue(...) | delegatedProperties.kt:28:13:30:13 | setValue | MethodCall | +| delegatedProperties.kt:29:17:29:24 | this | delegatedProperties.kt:28:13:30:13 | setValue | ThisAccess | +| delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:13:30:13 | setValue | VarAccess | +| delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:9:33:47 | | PropertyRefExpr | | delegatedProperties.kt:33:30:33:47 | (...) | delegatedProperties.kt:33:30:33:47 | get | MethodCall | -| delegatedProperties.kt:33:30:33:47 | Integer | delegatedProperties.kt:33:30:33:47 | | TypeAccess | -| delegatedProperties.kt:33:30:33:47 | KProperty0 | delegatedProperties.kt:33:30:33:47 | | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | Integer | delegatedProperties.kt:33:9:33:47 | | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | KProperty0 | delegatedProperties.kt:33:9:33:47 | | TypeAccess | | delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:33:30:33:47 | get | TypeAccess | | delegatedProperties.kt:33:30:33:47 | get(...) | delegatedProperties.kt:33:30:33:47 | invoke | MethodCall | | delegatedProperties.kt:33:30:33:47 | getValue(...) | delegatedProperties.kt:33:30:33:47 | | MethodCall | @@ -176,16 +176,16 @@ | delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:33:30:33:47 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | | PropertyRefExpr | -| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:9:34:48 | | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:9:34:48 | | PropertyRefExpr | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | | delegatedProperties.kt:34:31:34:48 | (...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | -| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:31:34:48 | | TypeAccess | -| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:31:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:9:34:48 | | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0 | delegatedProperties.kt:34:9:34:48 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | set | TypeAccess | @@ -195,7 +195,7 @@ | delegatedProperties.kt:34:31:34:48 | a0 | delegatedProperties.kt:34:31:34:48 | set | VarAccess | | delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | | delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | -| delegatedProperties.kt:34:31:34:48 | getValue(...) | delegatedProperties.kt:34:31:34:48 | | MethodCall | +| delegatedProperties.kt:34:31:34:48 | getValue(...) | delegatedProperties.kt:34:9:34:48 | | MethodCall | | delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | get | ClassInstanceExpr | @@ -205,7 +205,7 @@ | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | | VarAccess | | delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | | VarAccess | -| delegatedProperties.kt:34:31:34:48 | setValue(...) | delegatedProperties.kt:34:31:34:48 | | MethodCall | +| delegatedProperties.kt:34:31:34:48 | setValue(...) | delegatedProperties.kt:34:9:34:48 | | MethodCall | | delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | | delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | @@ -220,18 +220,18 @@ | delegatedProperties.kt:37:9:37:24 | this | delegatedProperties.kt:18:5:40:5 | fn | ThisAccess | | delegatedProperties.kt:37:24:37:24 | 3 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | | delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:18:5:40:5 | fn | PropertyRefExpr | -| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:39:34:39:51 | | PropertyRefExpr | +| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:39:9:39:51 | | PropertyRefExpr | | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:34:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:39:34:39:51 | | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:39:9:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | | delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | | delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | -| delegatedProperties.kt:39:34:39:51 | getValue(...) | delegatedProperties.kt:39:34:39:51 | | MethodCall | +| delegatedProperties.kt:39:34:39:51 | getValue(...) | delegatedProperties.kt:39:9:39:51 | | MethodCall | | delegatedProperties.kt:39:34:39:51 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | | delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | From 06134467e9e5317ac327ad439e7c776a116a8160 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 19 Mar 2024 16:39:57 +0000 Subject: [PATCH 189/497] Go: Make `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` true by default --- go/extractor/extractor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f2ba68a20f0..2e846b66e28 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -119,7 +119,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { // root directories of packages that we want to extract wantedRoots := make(map[string]bool) - if os.Getenv("CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO") != "" { + if os.Getenv("CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO") != "false" { log.Printf("Running go list to resolve package and module directories.") // get all packages information pkgInfos, err = util.GetPkgsInfo(patterns, true, modFlags...) From c9dbb7c5a9ff739f014b303ddb147f9e90331c5b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 12:01:57 +0000 Subject: [PATCH 190/497] C++: Rewrite 'cpp/missing-check-scanf' to use standard dataflow configurations. --- cpp/ql/src/Critical/MissingCheckScanf.ql | 112 +++++++++-------------- 1 file changed, 44 insertions(+), 68 deletions(-) diff --git a/cpp/ql/src/Critical/MissingCheckScanf.ql b/cpp/ql/src/Critical/MissingCheckScanf.ql index 78560383b00..3418fb8485c 100644 --- a/cpp/ql/src/Critical/MissingCheckScanf.ql +++ b/cpp/ql/src/Critical/MissingCheckScanf.ql @@ -21,14 +21,6 @@ import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.ValueNumbering import ScanfChecks -/** Holds if `n` reaches an argument to a call to a `scanf`-like function. */ -pragma[nomagic] -predicate revFlow0(Node n) { - isSink(_, _, n, _) - or - exists(Node succ | revFlow0(succ) | localFlowStep(n, succ)) -} - /** * Holds if `n` represents an uninitialized stack-allocated variable, or a * newly (and presumed uninitialized) heap allocation. @@ -38,30 +30,45 @@ predicate isUninitialized(Node n) { n.asIndirectExpr(1) instanceof AllocationExpr } -pragma[nomagic] -predicate fwdFlow0(Node n) { - revFlow0(n) and - ( - isUninitialized(n) - or - exists(Node prev | - fwdFlow0(prev) and - localFlowStep(prev, n) - ) - ) -} - predicate isSink(ScanfFunctionCall call, int index, Node n, Expr input) { input = call.getOutputArgument(index) and n.asIndirectExpr() = input } +/** + * A configuration to track a uninitialized data flowing to a `scanf`-like + * output parameter position. + * + * This is meant to be a simple flow to rule out cases like: + * ``` + * int x = 0; + * scanf(..., &x); + * use(x); + * ``` + * since `x` is already initialized it's not a security concern that `x` is + * used without checking the return value of `scanf`. + * + * Since this flow is meant to be simple, we disable field flow and require the + * source and the sink to be in the same callable. + */ +module UninitializedToScanfConfig implements ConfigSig { + predicate isSource(Node source) { isUninitialized(source) } + + predicate isSink(Node sink) { isSink(_, _, sink, _) } + + FlowFeature getAFeature() { result instanceof FeatureEqualSourceSinkCallContext } + + int accessPathLimit() { result = 0 } +} + +module UninitializedToScanfFlow = Global; + /** * Holds if `call` is a `scanf`-like call and `output` is the `index`'th * argument that has not been previously initialized. */ predicate isRelevantScanfCall(ScanfFunctionCall call, int index, Expr output) { - exists(Node n | fwdFlow0(n) and isSink(call, index, n, output)) and + exists(Node n | UninitializedToScanfFlow::flowTo(n) and isSink(call, index, n, output)) and // Exclude results from incorrectky checked scanf query not incorrectlyCheckedScanf(call) } @@ -77,31 +84,6 @@ predicate isSource(ScanfFunctionCall call, int index, Node n, Expr output) { n.asDefiningArgument() = output } -/** - * Holds if `n` is reachable from an output argument of a relevant call to - * a `scanf`-like function. - */ -pragma[nomagic] -predicate fwdFlow(Node n) { - isSource(_, _, n, _) - or - exists(Node prev | - fwdFlow(prev) and - localFlowStep(prev, n) and - not isSanitizerOut(prev) - ) -} - -/** Holds if `n` should not have outgoing flow. */ -predicate isSanitizerOut(Node n) { - // We disable flow out of sinks to reduce result duplication - isSink(n, _) - or - // If the node is being passed to a function it may be - // modified, and thus it's safe to later read the value. - exists(n.asIndirectArgument()) -} - /** * Holds if `n` is a node such that `n.asExpr() = e` and `e` is not an * argument of a deallocation expression. @@ -112,31 +94,25 @@ predicate isSink(Node n, Expr e) { } /** - * Holds if `n` is part of a path from a call to a `scanf`-like function - * to a use of the written variable. + * A configuration to track flow from the output argument of a call to a + * `scanf`-like function, and to a use of the defined variable. */ -pragma[nomagic] -predicate revFlow(Node n) { - fwdFlow(n) and - ( +module ScanfToUseConfig implements ConfigSig { + predicate isSource(Node source) { isSource(_, _, source, _) } + + predicate isSink(Node sink) { isSink(sink, _) } + + predicate isBarrierOut(Node n) { + // We disable flow out of sinks to reduce result duplication isSink(n, _) or - exists(Node succ | - revFlow(succ) and - localFlowStep(n, succ) and - not isSanitizerOut(n) - ) - ) + // If the node is being passed to a function it may be + // modified, and thus it's safe to later read the value. + exists(n.asIndirectArgument()) + } } -/** A local flow step, restricted to relevant dataflow nodes. */ -private predicate step(Node n1, Node n2) { - revFlow(n1) and - revFlow(n2) and - localFlowStep(n1, n2) -} - -predicate hasFlow(Node n1, Node n2) = fastTC(step/2)(n1, n2) +module ScanfToUseFlow = Global; /** * Holds if `source` is the `index`'th argument to the `scanf`-like call `call`, and `sink` is @@ -144,7 +120,7 @@ predicate hasFlow(Node n1, Node n2) = fastTC(step/2)(n1, n2) */ predicate hasFlow(Node source, ScanfFunctionCall call, int index, Node sink, Expr e) { isSource(call, index, source, _) and - hasFlow(source, sink) and + ScanfToUseFlow::flow(source, sink) and isSink(sink, e) } From c71ba0361edf9f1d3501f383f3de2e190de80352 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 20 Mar 2024 12:12:20 +0000 Subject: [PATCH 191/497] Docs: Add Go 1.22 to supported versions range --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 05cc675c71c..727642a87ac 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -16,7 +16,7 @@ .NET Core up to 3.1 .NET 5, .NET 6, .NET 7, .NET 8","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" - Go (aka Golang), "Go up to 1.21", "Go 1.11 or more recent", ``.go`` + Go (aka Golang), "Go up to 1.22", "Go 1.11 or more recent", ``.go`` Java,"Java 7 to 21 [5]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [6]_",``.java`` From 96a6dd72cdde1582b44b28ce9e279d95b6f286a9 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 20 Mar 2024 13:08:59 +0000 Subject: [PATCH 192/497] Go: Move `go version` command construction into its own function --- go/extractor/toolchain/toolchain.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 38abfd43874..97b1d75e085 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -25,7 +25,7 @@ func GetEnvGoVersion() string { // download the version of Go specified in there. That may either fail or result in us just // being told what's already in 'go.mod'. Setting 'GOTOOLCHAIN' to 'local' will force it // to use the local Go toolchain instead. - cmd := exec.Command("go", "version") + cmd := Version() cmd.Env = append(os.Environ(), "GOTOOLCHAIN=local") out, err := cmd.CombinedOutput() @@ -92,3 +92,9 @@ func VendorModule(path string) *exec.Cmd { modVendor.Dir = path return modVendor } + +// Constructs a command to run `go version`. +func Version() *exec.Cmd { + version := exec.Command("go", "version") + return version +} From 0d527b2f75c8a3006a10b9b6b44b54ebb3ffe70e Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 20 Mar 2024 13:51:17 +0000 Subject: [PATCH 193/497] Go: Keep track of all installed toolchains that we know of --- go/extractor/toolchain/toolchain.go | 55 +++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 97b1d75e085..a91bf64ba7d 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -16,7 +16,15 @@ func IsInstalled() bool { return err == nil } +// The default Go version that is available on a system and a set of all versions +// that we know are installed on the system. var goVersion = "" +var goVersions = map[string]struct{}{} + +// Adds an entry to the set of installed Go versions for the normalised `version` number. +func addGoVersion(version string) { + goVersions[semver.Canonical(version)] = struct{}{} +} // Returns the current Go version as returned by 'go version', e.g. go1.14.4 func GetEnvGoVersion() string { @@ -34,10 +42,57 @@ func GetEnvGoVersion() string { } goVersion = parseGoVersion(string(out)) + addGoVersion(goVersion) } return goVersion } +// Determines whether, to our knowledge, `version` is available on the current system. +func HasGoVersion(version string) bool { + _, found := goVersions[semver.Canonical(version)] + return found +} + +// Attempts to install the Go toolchain `version`. +func InstallVersion(workingDir string, version string) bool { + // No need to install it if we know that it is already installed. + if HasGoVersion(version) { + return true + } + + // Construct a command to invoke `go version` with `GOTOOLCHAIN=go1.N.0` to give + // Go a valid toolchain version to download the toolchain we need; subsequent commands + // should then work even with an invalid version that's still in `go.mod` + toolchainArg := "GOTOOLCHAIN=go" + semver.Canonical(version) + versionCmd := Version() + versionCmd.Dir = workingDir + versionCmd.Env = append(os.Environ(), toolchainArg) + + log.Printf( + "Trying to install Go %s using its canonical representation in `%s`.", + version, + workingDir, + ) + + // Run the command. If something goes wrong, report it to the log and signal failure + // to the caller. + if versionErr := versionCmd.Run(); versionErr != nil { + log.Printf( + "Failed to invoke `%s go version` in %s: %s\n", + toolchainArg, + versionCmd.Dir, + versionErr.Error(), + ) + + return false + } + + // Add the version to the set of versions that we know are installed and signal + // success to the caller. + addGoVersion(version) + return true +} + // Returns the current Go version in semver format, e.g. v1.14.4 func GetEnvGoSemVer() string { goVersion := GetEnvGoVersion() From c74d6348f9c35952fe0769b46f5770070a7f3c66 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 20 Mar 2024 13:30:10 +0000 Subject: [PATCH 194/497] Go: Run `go` with a valid toolchain version if we have found an invalid one --- go/extractor/project/project.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index 580be07eceb..7deb2d2ad94 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -212,6 +212,16 @@ func LoadGoModules(emitDiagnostics bool, goModFilePaths []string) []*GoModule { if modFile.Toolchain == nil && modFile.Go != nil && !toolchainVersionRe.Match([]byte(modFile.Go.Version)) && semver.Compare("v"+modFile.Go.Version, "v1.21.0") >= 0 { diagnostics.EmitInvalidToolchainVersion(goModFilePath, modFile.Go.Version) + + modPath := filepath.Dir(goModFilePath) + + log.Printf( + "`%s` is not a valid toolchain version, trying to install it explicitly using the canonical representation in `%s`.", + modFile.Go.Version, + modPath, + ) + + toolchain.InstallVersion(modPath, modFile.Go.Version) } } From 79dc7fcc048ab7c7402f7a0f5702c14155c7088d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 20 Mar 2024 15:21:36 +0100 Subject: [PATCH 195/497] C#: Avoid using TRAP stack in buildless mode --- csharp/extractor/Semmle.Extraction/Context.cs | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction/Context.cs b/csharp/extractor/Semmle.Extraction/Context.cs index a6442758daf..6697bfb06fd 100644 --- a/csharp/extractor/Semmle.Extraction/Context.cs +++ b/csharp/extractor/Semmle.Extraction/Context.cs @@ -274,28 +274,36 @@ namespace Semmle.Extraction bool duplicationGuard, deferred; - switch (entity.TrapStackBehaviour) + if (Extractor.Mode is ExtractorMode.Standalone) { - case TrapStackBehaviour.NeedsLabel: - if (!tagStack.Any()) - ExtractionError("TagStack unexpectedly empty", optionalSymbol, entity); - duplicationGuard = false; - deferred = false; - break; - case TrapStackBehaviour.NoLabel: - duplicationGuard = false; - deferred = tagStack.Any(); - break; - case TrapStackBehaviour.OptionalLabel: - duplicationGuard = false; - deferred = false; - break; - case TrapStackBehaviour.PushesLabel: - duplicationGuard = true; - deferred = duplicationGuard && tagStack.Any(); - break; - default: - throw new InternalError("Unexpected TrapStackBehaviour"); + duplicationGuard = false; + deferred = false; + } + else + { + switch (entity.TrapStackBehaviour) + { + case TrapStackBehaviour.NeedsLabel: + if (!tagStack.Any()) + ExtractionError("TagStack unexpectedly empty", optionalSymbol, entity); + duplicationGuard = false; + deferred = false; + break; + case TrapStackBehaviour.NoLabel: + duplicationGuard = false; + deferred = tagStack.Any(); + break; + case TrapStackBehaviour.OptionalLabel: + duplicationGuard = false; + deferred = false; + break; + case TrapStackBehaviour.PushesLabel: + duplicationGuard = true; + deferred = duplicationGuard && tagStack.Any(); + break; + default: + throw new InternalError("Unexpected TrapStackBehaviour"); + } } var a = duplicationGuard && IsEntityDuplicationGuarded(entity, out var loc) From 969676975d5be45ace129e709988d52734f8bf2f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 20 Mar 2024 15:28:56 +0100 Subject: [PATCH 196/497] C#: Address review comments. --- .../library-tests/dataflow/library/FlowSummariesFiltered.ql | 2 +- csharp/ql/test/shared/FlowSummaries.qll | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql index 5bbb7ec0c6f..9c19d00cb59 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.ql @@ -13,7 +13,7 @@ class IncludeFilteredSummarizedCallable extends IncludeSummarizedCallable { this.propagatesFlow(input, output, preservesValue) and not exists(IncludeSummarizedCallable rsc | isBaseCallableOrPrototype(rsc) and - rsc.(SummarizedCallableImpl).propagatesFlow(input, output, preservesValue) and + rsc.propagatesFlow(input, output, preservesValue) and this.(UnboundCallable).overridesOrImplementsUnbound(rsc) ) } diff --git a/csharp/ql/test/shared/FlowSummaries.qll b/csharp/ql/test/shared/FlowSummaries.qll index b68966afa34..2fecea3f62f 100644 --- a/csharp/ql/test/shared/FlowSummaries.qll +++ b/csharp/ql/test/shared/FlowSummaries.qll @@ -17,6 +17,4 @@ class IncludeSummarizedCallable extends SummarizedCallableImplFinal { ) { this.propagatesFlow(input, output, preservesValue) } - - string toString() { result = super.toString() } } From 90fbacc7bf33203c89346d460676d61faff4ab9c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:29:48 +0000 Subject: [PATCH 197/497] Java/Shared: Use getLocation instead of hasLocationInfo. --- .../semmle/code/java/dataflow/TypeFlow.qll | 12 +++-------- shared/typeflow/codeql/typeflow/TypeFlow.qll | 20 +++++++------------ .../codeql/typeflow/internal/TypeFlowImpl.qll | 5 +++-- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index 9a29809f15c..ad423d6d3c7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -14,7 +14,7 @@ private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.controlflow.Guards private import codeql.typeflow.TypeFlow -private module Input implements TypeFlowInput { +private module Input implements TypeFlowInput { private newtype TTypeFlowNode = TField(Field f) { not f.getType() instanceof PrimitiveType } or TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or @@ -38,12 +38,6 @@ private module Input implements TypeFlowInput { result = this.asMethod().toString() } - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - Location getLocation() { result = this.asField().getLocation() or result = this.asSsa().getLocation() or @@ -164,7 +158,7 @@ private module Input implements TypeFlowInput { */ pragma[nomagic] private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { - exists(TypeFlowNode next | step(n, next) or Make::joinStep(n, next) | + exists(TypeFlowNode next | step(n, next) or Make::joinStep(n, next) | n.getType() = t1 and next.getType() = t2 and t1.getErasure() = t1e and @@ -356,7 +350,7 @@ private module Input implements TypeFlowInput { cached private module TypeFlowBounds { - private module TypeFlow = Make; + private module TypeFlow = Make; /** * Holds if the runtime type of `f` is bounded by `t` and if this bound is diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index bdf90dab7cf..7551f0f7e44 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -8,8 +8,10 @@ * explicit or implicit cast that lost type information. */ +private import codeql.util.Location + /** Provides the input specification. */ -signature module TypeFlowInput { +signature module TypeFlowInput { /** * A node for which type information is available. For example, expressions * and method declarations. @@ -21,16 +23,8 @@ signature module TypeFlowInput { /** Gets the type of this node. */ Type getType(); - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); + /** Gets the location of this node. */ + Location getLocation(); } /** @@ -112,6 +106,6 @@ private import internal.TypeFlowImpl as Impl /** * Provides an implementation of type-flow using input `I`. */ -module Make { - import Impl::TypeFlow +module Make I> { + import Impl::TypeFlow } diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 121bc605dbc..787c9b55de2 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -1,7 +1,8 @@ private import codeql.typeflow.TypeFlow +private import codeql.util.Location private import codeql.util.Unit -module TypeFlow { +module TypeFlow I> { private import I /** @@ -56,7 +57,7 @@ module TypeFlow { n1 = rank[r](TypeFlowNode n, int startline, int startcolumn | edge(n, n2) and - n.hasLocationInfo(_, startline, startcolumn, _, _) + n.getLocation().hasLocationInfo(_, startline, startcolumn, _, _) | n order by startline, startcolumn ) From 6a65c46b2e7fe3888a2c3c025751488eb848991b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:36:12 +0000 Subject: [PATCH 198/497] Java/Shared: Share more 'isNull' computations. --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 6 ++---- shared/typeflow/codeql/typeflow/TypeFlow.qll | 6 ++---- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 7 +++++++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index ad423d6d3c7..ed526ba2eda 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -125,7 +125,7 @@ private module Input implements TypeFlowInput { /** * Holds if `null` is the only value that flows to `n`. */ - predicate isNull(TypeFlowNode n) { + predicate isNullValue(TypeFlowNode n) { n.asExpr() instanceof NullLiteral or exists(LocalVariableDeclExpr decl | @@ -134,9 +134,7 @@ private module Input implements TypeFlowInput { not exists(decl.getInit()) ) or - exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) - or - forex(TypeFlowNode mid | joinStep0(mid, n) | isNull(mid)) and + forex(TypeFlowNode mid | joinStep0(mid, n) | Make::isNull(mid)) and // Fields that are never assigned a non-null value are probably set by // reflection and are thus not always null. not exists(n.asField()) diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index 7551f0f7e44..c1679b1b1fe 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -39,10 +39,8 @@ signature module TypeFlowInput { */ predicate step(TypeFlowNode n1, TypeFlowNode n2); - /** - * Holds if `null` is the only value that flows to `n`. - */ - predicate isNull(TypeFlowNode n); + /** Holds if `n` represents a `null` value. */ + predicate isNullValue(TypeFlowNode n); /** A type. */ class Type { diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 787c9b55de2..e486cfe3072 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -5,6 +5,13 @@ private import codeql.util.Unit module TypeFlow I> { private import I + /** Holds if `null` is the only value that flows to `n`. */ + predicate isNull(TypeFlowNode n) { + isNullValue(n) + or + exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) + } + /** * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily * functionally determined by `n2`, and `n1` might take a non-null value. From ebac171b2b89758161757172ab1c76a6fde492de Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:40:16 +0000 Subject: [PATCH 199/497] Java/Shared: Rename 'joinStep0' to 'joinStep'. --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 4 ++-- shared/typeflow/codeql/typeflow/TypeFlow.qll | 2 +- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index ed526ba2eda..afec2a22ae8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -75,7 +75,7 @@ private module Input implements TypeFlowInput { * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not * necessarily functionally determined by `n2`. */ - predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2) { + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { n2.asExpr().(ChooseExpr).getAResultExpr() = n1.asExpr() or exists(Field f, Expr e | @@ -134,7 +134,7 @@ private module Input implements TypeFlowInput { not exists(decl.getInit()) ) or - forex(TypeFlowNode mid | joinStep0(mid, n) | Make::isNull(mid)) and + forex(TypeFlowNode mid | joinStep(mid, n) | Make::isNull(mid)) and // Fields that are never assigned a non-null value are probably set by // reflection and are thus not always null. not exists(n.asField()) diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index c1679b1b1fe..d2862b77637 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -31,7 +31,7 @@ signature module TypeFlowInput { * Holds if data can flow from `n1` to `n2` in one step, and `n1` is not * necessarily functionally determined by `n2`. */ - predicate joinStep0(TypeFlowNode n1, TypeFlowNode n2); + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2); /** * Holds if data can flow from `n1` to `n2` in one step, and `n1` is diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index e486cfe3072..d640c4b67e1 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -16,7 +16,7 @@ module TypeFlow I> { * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily * functionally determined by `n2`, and `n1` might take a non-null value. */ - predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep0(n1, n2) and not isNull(n1) } + predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { I::joinStep(n1, n2) and not isNull(n1) } private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } From 14aff5c94c2e838b51fd1e50bee3943aea5e17eb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:54:53 +0000 Subject: [PATCH 200/497] C++: Convert 'cpp/missing-check-scanf' to a path-problem query. --- cpp/ql/src/Critical/MissingCheckScanf.ql | 29 ++-- .../MissingCheckScanf.expected | 154 ++++++++++++++++-- 2 files changed, 155 insertions(+), 28 deletions(-) diff --git a/cpp/ql/src/Critical/MissingCheckScanf.ql b/cpp/ql/src/Critical/MissingCheckScanf.ql index 3418fb8485c..ba09aae2a73 100644 --- a/cpp/ql/src/Critical/MissingCheckScanf.ql +++ b/cpp/ql/src/Critical/MissingCheckScanf.ql @@ -2,7 +2,7 @@ * @name Missing return-value check for a 'scanf'-like function * @description Failing to check that a call to 'scanf' actually writes to an * output variable can lead to unexpected behavior at reading time. - * @kind problem + * @kind path-problem * @problem.severity warning * @security-severity 7.5 * @precision medium @@ -20,6 +20,7 @@ import semmle.code.cpp.dataflow.new.DataFlow::DataFlow import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.ValueNumbering import ScanfChecks +import ScanfToUseFlow::PathGraph /** * Holds if `n` represents an uninitialized stack-allocated variable, or a @@ -118,10 +119,13 @@ module ScanfToUseFlow = Global; * Holds if `source` is the `index`'th argument to the `scanf`-like call `call`, and `sink` is * a dataflow node that represents the expression `e`. */ -predicate hasFlow(Node source, ScanfFunctionCall call, int index, Node sink, Expr e) { - isSource(call, index, source, _) and - ScanfToUseFlow::flow(source, sink) and - isSink(sink, e) +predicate flowPath( + ScanfToUseFlow::PathNode source, ScanfFunctionCall call, int index, ScanfToUseFlow::PathNode sink, + Expr e +) { + isSource(call, index, source.getNode(), _) and + ScanfToUseFlow::flowPath(source, sink) and + isSink(sink.getNode(), e) } /** @@ -143,9 +147,12 @@ int getMinimumGuardConstant(ScanfFunctionCall call, int index) { * Holds the access to `e` isn't guarded by a check that ensures that `call` returned * at least `minGuard`. */ -predicate hasNonGuardedAccess(ScanfFunctionCall call, Expr e, int minGuard) { +predicate hasNonGuardedAccess( + ScanfToUseFlow::PathNode source, ScanfFunctionCall call, ScanfToUseFlow::PathNode sink, Expr e, + int minGuard +) { exists(int index | - hasFlow(_, call, index, _, e) and + flowPath(source, call, index, sink, e) and minGuard = getMinimumGuardConstant(call, index) | not exists(int value | @@ -173,9 +180,11 @@ BasicBlock blockGuardedBy(int value, string op, ScanfFunctionCall call) { ) } -from ScanfFunctionCall call, Expr e, int minGuard -where hasNonGuardedAccess(call, e, minGuard) -select e, +from + ScanfToUseFlow::PathNode source, ScanfToUseFlow::PathNode sink, ScanfFunctionCall call, Expr e, + int minGuard +where hasNonGuardedAccess(source, call, sink, e, minGuard) +select e, source, sink, "This variable is read, but may not have been written. " + "It should be guarded by a check that the $@ returns at least " + minGuard + ".", call, call.toString() diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected index 69f9ab820eb..8bb2c9643a9 100644 --- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected +++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected @@ -1,18 +1,136 @@ -| test.cpp:35:7:35:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:34:3:34:7 | call to scanf | call to scanf | -| test.cpp:68:7:68:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:67:3:67:7 | call to scanf | call to scanf | -| test.cpp:80:7:80:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:79:3:79:7 | call to scanf | call to scanf | -| test.cpp:90:7:90:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:89:3:89:7 | call to scanf | call to scanf | -| test.cpp:98:7:98:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:97:3:97:7 | call to scanf | call to scanf | -| test.cpp:108:7:108:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:107:3:107:8 | call to fscanf | call to fscanf | -| test.cpp:115:7:115:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:114:3:114:8 | call to sscanf | call to sscanf | -| test.cpp:224:8:224:8 | j | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:221:7:221:11 | call to scanf | call to scanf | -| test.cpp:248:9:248:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:246:25:246:29 | call to scanf | call to scanf | -| test.cpp:252:9:252:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:250:14:250:18 | call to scanf | call to scanf | -| test.cpp:272:7:272:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:271:3:271:7 | call to scanf | call to scanf | -| test.cpp:280:7:280:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:279:3:279:7 | call to scanf | call to scanf | -| test.cpp:292:7:292:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:291:3:291:7 | call to scanf | call to scanf | -| test.cpp:404:25:404:25 | u | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:403:6:403:11 | call to sscanf | call to sscanf | -| test.cpp:416:7:416:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:413:7:413:11 | call to scanf | call to scanf | -| test.cpp:423:7:423:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:420:7:420:11 | call to scanf | call to scanf | -| test.cpp:460:6:460:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:455:12:455:17 | call to sscanf | call to sscanf | -| test.cpp:474:6:474:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:467:8:467:12 | call to scanf | call to scanf | +edges +| test.cpp:34:15:34:16 | scanf output argument | test.cpp:35:7:35:7 | i | provenance | | +| test.cpp:41:19:41:20 | scanf output argument | test.cpp:43:8:43:8 | i | provenance | | +| test.cpp:58:19:58:20 | scanf output argument | test.cpp:60:8:60:8 | i | provenance | | +| test.cpp:67:15:67:16 | scanf output argument | test.cpp:68:7:68:7 | i | provenance | | +| test.cpp:70:19:70:20 | scanf output argument | test.cpp:72:8:72:8 | i | provenance | | +| test.cpp:79:15:79:16 | scanf output argument | test.cpp:80:7:80:7 | i | provenance | | +| test.cpp:89:15:89:15 | scanf output argument | test.cpp:90:7:90:8 | * ... | provenance | | +| test.cpp:97:15:97:15 | scanf output argument | test.cpp:98:7:98:8 | * ... | provenance | | +| test.cpp:107:32:107:33 | fscanf output argument | test.cpp:108:7:108:7 | i | provenance | | +| test.cpp:114:32:114:33 | sscanf output argument | test.cpp:115:7:115:7 | i | provenance | | +| test.cpp:121:38:121:39 | _scanf_l output argument | test.cpp:123:8:123:8 | i | provenance | | +| test.cpp:132:19:132:20 | scanf output argument | test.cpp:134:8:134:8 | i | provenance | | +| test.cpp:141:19:141:20 | scanf output argument | test.cpp:143:8:143:8 | i | provenance | | +| test.cpp:150:23:150:24 | scanf output argument | test.cpp:154:9:154:9 | i | provenance | | +| test.cpp:181:19:181:20 | scanf output argument | test.cpp:185:8:185:8 | i | provenance | | +| test.cpp:193:19:193:20 | scanf output argument | test.cpp:197:8:197:8 | i | provenance | | +| test.cpp:211:22:211:23 | scanf output argument | test.cpp:213:8:213:8 | i | provenance | | +| test.cpp:221:22:221:23 | scanf output argument | test.cpp:223:8:223:8 | i | provenance | | +| test.cpp:221:26:221:27 | scanf output argument | test.cpp:224:8:224:8 | j | provenance | | +| test.cpp:231:22:231:23 | scanf output argument | test.cpp:233:8:233:8 | i | provenance | | +| test.cpp:231:26:231:27 | scanf output argument | test.cpp:234:8:234:8 | j | provenance | | +| test.cpp:246:44:246:45 | scanf output argument | test.cpp:248:9:248:9 | d | provenance | | +| test.cpp:250:33:250:34 | scanf output argument | test.cpp:252:9:252:9 | d | provenance | | +| test.cpp:271:15:271:16 | scanf output argument | test.cpp:272:7:272:7 | i | provenance | | +| test.cpp:279:15:279:16 | scanf output argument | test.cpp:280:7:280:7 | i | provenance | | +| test.cpp:291:15:291:16 | scanf output argument | test.cpp:292:7:292:7 | i | provenance | | +| test.cpp:325:34:325:35 | sscanf output argument | test.cpp:327:8:327:8 | i | provenance | | +| test.cpp:325:38:325:39 | sscanf output argument | test.cpp:328:8:328:8 | j | provenance | | +| test.cpp:335:22:335:23 | scanf output argument | test.cpp:337:8:337:8 | i | provenance | | +| test.cpp:344:23:344:24 | scanf output argument | test.cpp:346:8:346:8 | i | provenance | | +| test.cpp:353:26:353:27 | scanf output argument | test.cpp:354:8:354:8 | d | provenance | | +| test.cpp:353:30:353:31 | scanf output argument | test.cpp:355:8:355:8 | n | provenance | | +| test.cpp:362:62:362:63 | sscanf output argument | test.cpp:364:17:364:17 | n | provenance | | +| test.cpp:403:29:403:30 | sscanf output argument | test.cpp:404:18:404:25 | u | provenance | | +| test.cpp:413:19:413:20 | scanf output argument | test.cpp:416:7:416:7 | i | provenance | | +| test.cpp:420:19:420:20 | scanf output argument | test.cpp:423:7:423:7 | i | provenance | | +| test.cpp:455:41:455:46 | sscanf output argument | test.cpp:460:6:460:10 | value | provenance | | +| test.cpp:467:20:467:25 | scanf output argument | test.cpp:474:6:474:10 | value | provenance | | +nodes +| test.cpp:34:15:34:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:35:7:35:7 | i | semmle.label | i | +| test.cpp:41:19:41:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:43:8:43:8 | i | semmle.label | i | +| test.cpp:58:19:58:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:60:8:60:8 | i | semmle.label | i | +| test.cpp:67:15:67:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:68:7:68:7 | i | semmle.label | i | +| test.cpp:70:19:70:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:72:8:72:8 | i | semmle.label | i | +| test.cpp:79:15:79:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:80:7:80:7 | i | semmle.label | i | +| test.cpp:89:15:89:15 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:90:7:90:8 | * ... | semmle.label | * ... | +| test.cpp:97:15:97:15 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:98:7:98:8 | * ... | semmle.label | * ... | +| test.cpp:107:32:107:33 | fscanf output argument | semmle.label | fscanf output argument | +| test.cpp:108:7:108:7 | i | semmle.label | i | +| test.cpp:114:32:114:33 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:115:7:115:7 | i | semmle.label | i | +| test.cpp:121:38:121:39 | _scanf_l output argument | semmle.label | _scanf_l output argument | +| test.cpp:123:8:123:8 | i | semmle.label | i | +| test.cpp:132:19:132:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:134:8:134:8 | i | semmle.label | i | +| test.cpp:141:19:141:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:143:8:143:8 | i | semmle.label | i | +| test.cpp:150:23:150:24 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:154:9:154:9 | i | semmle.label | i | +| test.cpp:181:19:181:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:185:8:185:8 | i | semmle.label | i | +| test.cpp:193:19:193:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:197:8:197:8 | i | semmle.label | i | +| test.cpp:211:22:211:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:213:8:213:8 | i | semmle.label | i | +| test.cpp:221:22:221:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:221:26:221:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:223:8:223:8 | i | semmle.label | i | +| test.cpp:224:8:224:8 | j | semmle.label | j | +| test.cpp:231:22:231:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:231:26:231:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:233:8:233:8 | i | semmle.label | i | +| test.cpp:234:8:234:8 | j | semmle.label | j | +| test.cpp:246:44:246:45 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:248:9:248:9 | d | semmle.label | d | +| test.cpp:250:33:250:34 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:252:9:252:9 | d | semmle.label | d | +| test.cpp:271:15:271:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:272:7:272:7 | i | semmle.label | i | +| test.cpp:279:15:279:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:280:7:280:7 | i | semmle.label | i | +| test.cpp:291:15:291:16 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:292:7:292:7 | i | semmle.label | i | +| test.cpp:325:34:325:35 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:325:38:325:39 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:327:8:327:8 | i | semmle.label | i | +| test.cpp:328:8:328:8 | j | semmle.label | j | +| test.cpp:335:22:335:23 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:337:8:337:8 | i | semmle.label | i | +| test.cpp:344:23:344:24 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:346:8:346:8 | i | semmle.label | i | +| test.cpp:353:26:353:27 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:353:30:353:31 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:354:8:354:8 | d | semmle.label | d | +| test.cpp:355:8:355:8 | n | semmle.label | n | +| test.cpp:362:62:362:63 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:364:17:364:17 | n | semmle.label | n | +| test.cpp:403:29:403:30 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:404:18:404:25 | u | semmle.label | u | +| test.cpp:413:19:413:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:416:7:416:7 | i | semmle.label | i | +| test.cpp:420:19:420:20 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:423:7:423:7 | i | semmle.label | i | +| test.cpp:455:41:455:46 | sscanf output argument | semmle.label | sscanf output argument | +| test.cpp:460:6:460:10 | value | semmle.label | value | +| test.cpp:467:20:467:25 | scanf output argument | semmle.label | scanf output argument | +| test.cpp:474:6:474:10 | value | semmle.label | value | +subpaths +#select +| test.cpp:35:7:35:7 | i | test.cpp:34:15:34:16 | scanf output argument | test.cpp:35:7:35:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:34:3:34:7 | call to scanf | call to scanf | +| test.cpp:68:7:68:7 | i | test.cpp:67:15:67:16 | scanf output argument | test.cpp:68:7:68:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:67:3:67:7 | call to scanf | call to scanf | +| test.cpp:80:7:80:7 | i | test.cpp:79:15:79:16 | scanf output argument | test.cpp:80:7:80:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:79:3:79:7 | call to scanf | call to scanf | +| test.cpp:90:7:90:8 | * ... | test.cpp:89:15:89:15 | scanf output argument | test.cpp:90:7:90:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:89:3:89:7 | call to scanf | call to scanf | +| test.cpp:98:7:98:8 | * ... | test.cpp:97:15:97:15 | scanf output argument | test.cpp:98:7:98:8 | * ... | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:97:3:97:7 | call to scanf | call to scanf | +| test.cpp:108:7:108:7 | i | test.cpp:107:32:107:33 | fscanf output argument | test.cpp:108:7:108:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:107:3:107:8 | call to fscanf | call to fscanf | +| test.cpp:115:7:115:7 | i | test.cpp:114:32:114:33 | sscanf output argument | test.cpp:115:7:115:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:114:3:114:8 | call to sscanf | call to sscanf | +| test.cpp:224:8:224:8 | j | test.cpp:221:26:221:27 | scanf output argument | test.cpp:224:8:224:8 | j | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:221:7:221:11 | call to scanf | call to scanf | +| test.cpp:248:9:248:9 | d | test.cpp:246:44:246:45 | scanf output argument | test.cpp:248:9:248:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:246:25:246:29 | call to scanf | call to scanf | +| test.cpp:252:9:252:9 | d | test.cpp:250:33:250:34 | scanf output argument | test.cpp:252:9:252:9 | d | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 2. | test.cpp:250:14:250:18 | call to scanf | call to scanf | +| test.cpp:272:7:272:7 | i | test.cpp:271:15:271:16 | scanf output argument | test.cpp:272:7:272:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:271:3:271:7 | call to scanf | call to scanf | +| test.cpp:280:7:280:7 | i | test.cpp:279:15:279:16 | scanf output argument | test.cpp:280:7:280:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:279:3:279:7 | call to scanf | call to scanf | +| test.cpp:292:7:292:7 | i | test.cpp:291:15:291:16 | scanf output argument | test.cpp:292:7:292:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:291:3:291:7 | call to scanf | call to scanf | +| test.cpp:404:25:404:25 | u | test.cpp:403:29:403:30 | sscanf output argument | test.cpp:404:18:404:25 | u | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:403:6:403:11 | call to sscanf | call to sscanf | +| test.cpp:416:7:416:7 | i | test.cpp:413:19:413:20 | scanf output argument | test.cpp:416:7:416:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:413:7:413:11 | call to scanf | call to scanf | +| test.cpp:423:7:423:7 | i | test.cpp:420:19:420:20 | scanf output argument | test.cpp:423:7:423:7 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:420:7:420:11 | call to scanf | call to scanf | +| test.cpp:460:6:460:10 | value | test.cpp:455:41:455:46 | sscanf output argument | test.cpp:460:6:460:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:455:12:455:17 | call to sscanf | call to sscanf | +| test.cpp:474:6:474:10 | value | test.cpp:467:20:467:25 | scanf output argument | test.cpp:474:6:474:10 | value | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:467:8:467:12 | call to scanf | call to scanf | From 96cd259eda97c163d19cd70b4253900bcdd1c7fc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:56:39 +0000 Subject: [PATCH 201/497] C++: Add change note. --- .../2024-03-20-missing-check-scanf-path-problem.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md diff --git a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md new file mode 100644 index 00000000000..12a185add1e --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. \ No newline at end of file From 5476f42d2c7872d9343e8f1d122e7ed4a33f5b98 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 14:11:28 +0000 Subject: [PATCH 202/497] C++: Simplify use of 'GuardCondition's in 'cpp/missing-check-scanf'. --- cpp/ql/src/Critical/MissingCheckScanf.ql | 31 ++++++++---------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/cpp/ql/src/Critical/MissingCheckScanf.ql b/cpp/ql/src/Critical/MissingCheckScanf.ql index ba09aae2a73..5d8ce9e8846 100644 --- a/cpp/ql/src/Critical/MissingCheckScanf.ql +++ b/cpp/ql/src/Critical/MissingCheckScanf.ql @@ -18,7 +18,7 @@ import semmle.code.cpp.commons.Scanf import semmle.code.cpp.controlflow.Guards import semmle.code.cpp.dataflow.new.DataFlow::DataFlow import semmle.code.cpp.ir.IR -import semmle.code.cpp.ir.ValueNumbering +import semmle.code.cpp.valuenumbering.GlobalValueNumbering import ScanfChecks import ScanfToUseFlow::PathGraph @@ -155,31 +155,20 @@ predicate hasNonGuardedAccess( flowPath(source, call, index, sink, e) and minGuard = getMinimumGuardConstant(call, index) | - not exists(int value | - e.getBasicBlock() = blockGuardedBy(value, "==", call) and minGuard <= value + not exists(GuardCondition guard | + // call == k and k >= minGuard so call >= minGuard + guard + .ensuresEq(globalValueNumber(call).getAnExpr(), any(int k | minGuard <= k), + e.getBasicBlock(), true) or - e.getBasicBlock() = blockGuardedBy(value, "<", call) and minGuard - 1 <= value - or - e.getBasicBlock() = blockGuardedBy(value, "<=", call) and minGuard <= value + // call >= k and k >= minGuard so call >= minGuard + guard + .ensuresLt(globalValueNumber(call).getAnExpr(), any(int k | minGuard <= k), + e.getBasicBlock(), false) ) ) } -/** Returns a block guarded by the assertion of `value op call` */ -BasicBlock blockGuardedBy(int value, string op, ScanfFunctionCall call) { - exists(GuardCondition g, Expr left, Expr right | - right = g.getAChild() and - value = left.getValue().toInt() and - localExprFlow(call, right) - | - g.ensuresEq(left, right, 0, result, true) and op = "==" - or - g.ensuresLt(left, right, 0, result, true) and op = "<" - or - g.ensuresLt(left, right, 1, result, true) and op = "<=" - ) -} - from ScanfToUseFlow::PathNode source, ScanfToUseFlow::PathNode sink, ScanfFunctionCall call, Expr e, int minGuard From f31bb1391dee7f56f8d660dec61ec52262ac3668 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 16:59:39 +0000 Subject: [PATCH 203/497] C++: Simplify 'checkedForEof'. --- cpp/ql/src/Critical/ScanfChecks.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cpp/ql/src/Critical/ScanfChecks.qll b/cpp/ql/src/Critical/ScanfChecks.qll index 403df4715f3..6f50172537e 100644 --- a/cpp/ql/src/Critical/ScanfChecks.qll +++ b/cpp/ql/src/Critical/ScanfChecks.qll @@ -3,10 +3,6 @@ private import semmle.code.cpp.commons.Scanf private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.ir.ValueNumbering -private ConstantInstruction getZeroInstruction() { result.getValue() = "0" } - -private Operand zero() { result.getDef() = getZeroInstruction() } - private predicate exprInBooleanContext(Expr e) { exists(IRGuardCondition gc | exists(Instruction i | @@ -46,7 +42,7 @@ private predicate checkedForEof(ScanfFunctionCall call) { gc.comparesEq(valueNumber(i).getAUse(), getEofValue().toInt(), _, _) or // call < 0 (EOF is guaranteed to be negative) - gc.comparesLt(valueNumber(i).getAUse(), zero(), 0, true, _) + gc.comparesLt(valueNumber(i).getAUse(), 0, true, _) ) ) } From 1330c885c8ceecbe670398806139b7280164441d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 18:04:59 +0000 Subject: [PATCH 204/497] C++: Use 'asIndirectExpr' in the sink of 'ExistsAnyFlowConfig. --- .../Protocols/TlsSettingsMisconfiguration.ql | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index 61989db1c6e..f20b299da60 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -12,34 +12,42 @@ import cpp import semmle.code.cpp.security.boostorg.asio.protocols -module ExistsAnyFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = source.asExpr()) - } +predicate isSourceImpl(DataFlow::Node source, ConstructorCall cc) { + exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = cc and cc = source.asExpr()) +} - predicate isSink(DataFlow::Node sink) { - exists(BoostorgAsio::SslSetOptionsFunction f, FunctionCall fcSetOptions | - f.getACallToThisFunction() = fcSetOptions and - fcSetOptions.getQualifier() = sink.asExpr() - ) - } +predicate isSinkImpl(DataFlow::Node sink, FunctionCall fcSetOptions) { + exists(BoostorgAsio::SslSetOptionsFunction f | + f.getACallToThisFunction() = fcSetOptions and + fcSetOptions.getQualifier() = sink.asIndirectExpr() + ) +} + +module ExistsAnyFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { isSourceImpl(source, _) } + + predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } } module ExistsAnyFlow = DataFlow::Global; bindingset[flag] predicate isOptionSet(ConstructorCall cc, int flag, FunctionCall fcSetOptions) { - exists(VariableAccess contextSetOptions | - ExistsAnyFlow::flow(DataFlow::exprNode(cc), DataFlow::exprNode(contextSetOptions)) and - exists(BoostorgAsio::SslSetOptionsFunction f | f.getACallToThisFunction() = fcSetOptions | - contextSetOptions = fcSetOptions.getQualifier() and - forall(Expr optionArgument, Expr optionArgumentSource | - optionArgument = fcSetOptions.getArgument(0) and - BoostorgAsio::SslOptionFlow::flow(DataFlow::exprNode(optionArgumentSource), - DataFlow::exprNode(optionArgument)) - | - optionArgument.getValue().toInt().bitShiftRight(16).bitAnd(flag) = flag - ) + exists( + VariableAccess contextSetOptions, BoostorgAsio::SslSetOptionsFunction f, DataFlow::Node source, + DataFlow::Node sink + | + isSourceImpl(source, cc) and + isSinkImpl(sink, fcSetOptions) and + ExistsAnyFlow::flow(source, sink) and + f.getACallToThisFunction() = fcSetOptions and + contextSetOptions = fcSetOptions.getQualifier() and + forall(Expr optionArgument, Expr optionArgumentSource | + optionArgument = fcSetOptions.getArgument(0) and + BoostorgAsio::SslOptionFlow::flow(DataFlow::exprNode(optionArgumentSource), + DataFlow::exprNode(optionArgument)) + | + optionArgument.getValue().toInt().bitShiftRight(16).bitAnd(flag) = flag ) ) } From 0ef8c7d87f368db9ece16cfe00d5acb9e5b2409b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Mar 2024 18:05:14 +0000 Subject: [PATCH 205/497] C++: Accept test changes. --- .../Protocols/TlsSettingsMisconfiguration.expected | 5 ----- cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected index f889cb12a68..b2191d5b544 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected @@ -5,12 +5,7 @@ | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_sslv3 has not been set | | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_tlsv1 has not been set | | test2.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:31:32:31:64 | sslv23 | sslv23 | test2.cpp:31:32:31:65 | call to context | no_tlsv1_1 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_sslv3 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_tlsv1 has not been set | -| test2.cpp:38:35:38:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:38:65:38:97 | sslv23 | sslv23 | test2.cpp:38:35:38:98 | call to context | no_tlsv1_1 has not been set | | test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_sslv3 has not been set | -| test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_tlsv1 has not been set | -| test2.cpp:45:35:45:98 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:45:65:45:97 | sslv23 | sslv23 | test2.cpp:45:35:45:98 | call to context | no_tlsv1_1 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_sslv3 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1_1 has not been set | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp index e8c802d6902..5679cee8b0f 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp @@ -34,7 +34,7 @@ void bad2() void good3() { - // GOOD [FALSE POSITIVE] + // GOOD boost::asio::ssl::context *ctx = new boost::asio::ssl::context(boost::asio::ssl::context::sslv23); ctx->set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1 | boost::asio::ssl::context::no_sslv3); } From a76832f4e0ee375adda4904f090e68aab064d8e1 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 20 Mar 2024 21:15:23 +0000 Subject: [PATCH 206/497] Mark LOC queries as `debug` instead --- cpp/ql/src/Summary/LinesOfUserCode.ql | 2 +- csharp/ql/src/Metrics/Summaries/LinesOfCode.ql | 2 +- go/ql/src/Summary/LinesOfCode.ql | 2 +- java/ql/src/Metrics/Summaries/LinesOfCode.ql | 2 +- javascript/ql/src/Summary/LinesOfUserCode.ql | 2 +- python/ql/src/Summary/LinesOfUserCode.ql | 2 +- ql/ql/src/queries/summary/LinesOfCode.ql | 2 +- ql/ql/src/queries/summary/LinesOfUserCode.ql | 2 +- ruby/ql/src/queries/summary/LinesOfCode.ql | 2 +- ruby/ql/src/queries/summary/LinesOfUserCode.ql | 2 +- swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cpp/ql/src/Summary/LinesOfUserCode.ql b/cpp/ql/src/Summary/LinesOfUserCode.ql index 2c198a1488d..468dbda4ffb 100644 --- a/cpp/ql/src/Summary/LinesOfUserCode.ql +++ b/cpp/ql/src/Summary/LinesOfUserCode.ql @@ -4,7 +4,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug * @id cpp/summary/lines-of-user-code */ diff --git a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql index 4c6eb55e5ab..ca4da7bd4b9 100644 --- a/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -5,7 +5,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug */ import csharp diff --git a/go/ql/src/Summary/LinesOfCode.ql b/go/ql/src/Summary/LinesOfCode.ql index 04864e5c4a0..987648f604c 100644 --- a/go/ql/src/Summary/LinesOfCode.ql +++ b/go/ql/src/Summary/LinesOfCode.ql @@ -5,7 +5,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug */ import go diff --git a/java/ql/src/Metrics/Summaries/LinesOfCode.ql b/java/ql/src/Metrics/Summaries/LinesOfCode.ql index 1ead46f1b20..e2e83b35631 100644 --- a/java/ql/src/Metrics/Summaries/LinesOfCode.ql +++ b/java/ql/src/Metrics/Summaries/LinesOfCode.ql @@ -7,7 +7,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug */ import java diff --git a/javascript/ql/src/Summary/LinesOfUserCode.ql b/javascript/ql/src/Summary/LinesOfUserCode.ql index 83fbb9b32da..1f8f2b9fef7 100644 --- a/javascript/ql/src/Summary/LinesOfUserCode.ql +++ b/javascript/ql/src/Summary/LinesOfUserCode.ql @@ -6,7 +6,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug * @id js/summary/lines-of-user-code */ diff --git a/python/ql/src/Summary/LinesOfUserCode.ql b/python/ql/src/Summary/LinesOfUserCode.ql index a30ba7afd19..f6d6f25872f 100644 --- a/python/ql/src/Summary/LinesOfUserCode.ql +++ b/python/ql/src/Summary/LinesOfUserCode.ql @@ -8,7 +8,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug * @id py/summary/lines-of-user-code */ diff --git a/ql/ql/src/queries/summary/LinesOfCode.ql b/ql/ql/src/queries/summary/LinesOfCode.ql index c0dbe831967..7a552137cf3 100644 --- a/ql/ql/src/queries/summary/LinesOfCode.ql +++ b/ql/ql/src/queries/summary/LinesOfCode.ql @@ -8,7 +8,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug */ import ql diff --git a/ql/ql/src/queries/summary/LinesOfUserCode.ql b/ql/ql/src/queries/summary/LinesOfUserCode.ql index 8f49ce27d2f..b1d8481a564 100644 --- a/ql/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ql/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,7 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary - * telemetry + * debug */ import ql diff --git a/ruby/ql/src/queries/summary/LinesOfCode.ql b/ruby/ql/src/queries/summary/LinesOfCode.ql index 34e7438bab1..f90cf34d046 100644 --- a/ruby/ql/src/queries/summary/LinesOfCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfCode.ql @@ -8,7 +8,7 @@ * @kind metric * @tags summary * lines-of-code - * telemetry + * debug */ import codeql.ruby.AST diff --git a/ruby/ql/src/queries/summary/LinesOfUserCode.ql b/ruby/ql/src/queries/summary/LinesOfUserCode.ql index 121124862a1..91471c417ee 100644 --- a/ruby/ql/src/queries/summary/LinesOfUserCode.ql +++ b/ruby/ql/src/queries/summary/LinesOfUserCode.ql @@ -6,7 +6,7 @@ * query counts the lines of code, excluding whitespace or comments. * @kind metric * @tags summary - * telemetry + * debug */ import codeql.ruby.AST diff --git a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql index 9fc40680852..5aec16da4ef 100644 --- a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql +++ b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql @@ -4,7 +4,7 @@ * @kind metric * @id swift/diagnostics/successfully-extracted-lines * @tags summary - * telemetry + * debug */ import swift From 9300b04defceca67d2ab26c24da0590170503048 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 20 Mar 2024 14:28:25 +0100 Subject: [PATCH 207/497] C++: Update test results --- cpp/ql/test/library-tests/ir/ir/PrintAST.expected | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 8d71b7cedce..a8cc2321f2e 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -2030,7 +2030,13 @@ destructors_for_temps.cpp: # 45| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 45| Type = [Class] ClassWithDestructor2 # 45| ValueCategory = prvalue(load) -# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 45| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 45| Type = [VoidType] void +# 45| ValueCategory = prvalue +# 45| getQualifier(): [ReuseExpr] reuse of temporary object +# 45| Type = [Class] ClassWithDestructor2 +# 45| ValueCategory = xvalue +# 47| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 # 47| Type = [VoidType] void # 47| ValueCategory = prvalue # 47| getQualifier(): [VariableAccess] c From 84646cd795a389bbd89588652b28e64b2940df7c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 21 Mar 2024 09:40:00 +0100 Subject: [PATCH 208/497] C++: Add tests showing missing destructors for initialization statements Incidentially this also shows that for contructs like `if (char x = ...)`, so there is an initialization but not initializer statement, the initialization is not displayed in the AST, although the IR does contain the initialization. --- .../library-tests/ir/ir/PrintAST.expected | 304 ++++++++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 289 +++++++++++++++++ cpp/ql/test/library-tests/ir/ir/ir.cpp | 24 ++ .../ir/ir/operand_locations.expected | 279 ++++++++++++++++ .../test/library-tests/ir/ir/raw_ir.expected | 254 +++++++++++++++ 5 files changed, 1150 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index a8cc2321f2e..3c922cd3a5a 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9872,6 +9872,10 @@ ir.cpp: # 1078| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const iterator & +# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) +# 1078| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & # 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) # 1078| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9890,6 +9894,10 @@ ir.cpp: # 1082| : # 1082| getParameter(0): [Parameter] other # 1082| Type = [LValueReferenceType] const iterator & +# 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & # 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) # 1082| : # 1082| getParameter(0): [Parameter] other @@ -9900,6 +9908,8 @@ ir.cpp: # 1084| : # 1084| [MemberFunction] std::iterator& std::iterator::operator++() # 1084| : +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : # 1084| [MemberFunction] std::iterator& std::iterator::operator++() # 1084| : # 1085| [MemberFunction] std::iterator std::iterator::operator++(int) @@ -9928,6 +9938,10 @@ ir.cpp: # 1089| : # 1089| getParameter(0): [Parameter] other # 1089| Type = [ClassTemplateInstantiation,Struct] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator # 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const # 1089| : # 1089| getParameter(0): [Parameter] other @@ -9936,6 +9950,8 @@ ir.cpp: # 1090| : # 1090| [ConstMemberFunction] String& std::iterator::operator*() const # 1090| : +# 1090| [ConstMemberFunction] char& std::iterator::operator*() const +# 1090| : # 1090| [ConstMemberFunction] int& std::iterator::operator*() const # 1090| : # 1090| [ConstMemberFunction] reference_type std::iterator::operator*() const @@ -10020,6 +10036,10 @@ ir.cpp: # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) +# 1108| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -10032,6 +10052,10 @@ ir.cpp: # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & +# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) +# 1108| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1108| [CopyConstructor] void std::vector::vector(std::vector const&) # 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -10048,6 +10072,10 @@ ir.cpp: # 1109| : # 1109| getParameter(0): [Parameter] (unnamed parameter 0) # 1109| Type = [TemplateParameter] T +# 1109| [Constructor] void std::vector::vector(char) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [PlainCharType] char # 1109| [Constructor] void std::vector::vector(int) # 1109| : # 1109| getParameter(0): [Parameter] (unnamed parameter 0) @@ -10064,6 +10092,8 @@ ir.cpp: # 1115| : # 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const # 1115| : +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const +# 1115| : # 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const # 1115| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const @@ -10072,6 +10102,8 @@ ir.cpp: # 1116| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const # 1116| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : # 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const # 1116| : # 1120| [Operator,TemplateFunction,TopLevelFunction] bool std::operator==(iterator, iterator) @@ -19636,6 +19668,278 @@ ir.cpp: # 2393| Type = [IntType] int # 2393| Value = [ParenthesisExpr] 0 # 2393| ValueCategory = prvalue +# 2396| [TopLevelFunction] void initialization_with_temp_destructor() +# 2396| : +# 2396| getEntryPoint(): [BlockStmt] { ... } +# 2397| getStmt(0): [IfStmt] if (...) ... +# 2397| getCondition(): [ConditionDeclExpr] (condition decl) +# 2397| Type = [BoolType] bool +# 2397| ValueCategory = prvalue +# 2397| getVariableAccess(): [VariableAccess] x +# 2397| Type = [PlainCharType] char +# 2397| ValueCategory = prvalue(load) +# 2397| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 2397| Conversion = [BoolConversion] conversion to bool +# 2397| Type = [BoolType] bool +# 2397| ValueCategory = prvalue +# 2398| getThen(): [ExprStmt] ExprStmt +# 2398| getExpr(): [PostfixIncrExpr] ... ++ +# 2398| Type = [PlainCharType] char +# 2398| ValueCategory = prvalue +# 2398| getOperand(): [VariableAccess] x +# 2398| Type = [PlainCharType] char +# 2398| ValueCategory = lvalue +# 2400| getStmt(1): [IfStmt] if (...) ... +# 2400| getInitialization(): [DeclStmt] declaration +# 2400| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2400| Type = [PlainCharType] char +# 2400| getVariable().getInitializer(): [Initializer] initializer for x +# 2400| getExpr(): [FunctionCall] call to get_x +# 2400| Type = [PlainCharType] char +# 2400| ValueCategory = prvalue +# 2400| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2400| Type = [VoidType] void +# 2400| ValueCategory = prvalue +# 2400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2400| Type = [Class] ClassWithDestructor +# 2400| ValueCategory = prvalue(load) +# 2400| getCondition(): [VariableAccess] x +# 2400| Type = [PlainCharType] char +# 2400| ValueCategory = prvalue(load) +# 2401| getThen(): [ExprStmt] ExprStmt +# 2401| getExpr(): [PostfixIncrExpr] ... ++ +# 2401| Type = [PlainCharType] char +# 2401| ValueCategory = prvalue +# 2401| getOperand(): [VariableAccess] x +# 2401| Type = [PlainCharType] char +# 2401| ValueCategory = lvalue +# 2400| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 2400| Conversion = [BoolConversion] conversion to bool +# 2400| Type = [BoolType] bool +# 2400| ValueCategory = prvalue +# 2403| getStmt(2): [ConstexprIfStmt] if constexpr (...) ... +# 2403| getInitialization(): [DeclStmt] declaration +# 2403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2403| Type = [PlainCharType] char +# 2403| getVariable().getInitializer(): [Initializer] initializer for x +# 2403| getExpr(): [FunctionCall] call to get_x +# 2403| Type = [PlainCharType] char +# 2403| ValueCategory = prvalue +# 2403| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2403| Type = [VoidType] void +# 2403| ValueCategory = prvalue +# 2403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2403| Type = [Class] ClassWithDestructor +# 2403| ValueCategory = prvalue(load) +# 2403| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2403| Type = [BoolType] bool +# 2403| Value = [VariableAccess] 1 +# 2403| ValueCategory = prvalue(load) +# 2404| getThen(): [ExprStmt] ExprStmt +# 2404| getExpr(): [PostfixIncrExpr] ... ++ +# 2404| Type = [PlainCharType] char +# 2404| ValueCategory = prvalue +# 2404| getOperand(): [VariableAccess] x +# 2404| Type = [PlainCharType] char +# 2404| ValueCategory = lvalue +# 2406| getStmt(3): [SwitchStmt] switch (...) ... +# 2406| getExpr(): [ConditionDeclExpr] (condition decl) +# 2406| Type = [IntType] int +# 2406| ValueCategory = prvalue +# 2406| getVariableAccess(): [VariableAccess] x +# 2406| Type = [PlainCharType] char +# 2406| ValueCategory = prvalue(load) +# 2406| getVariableAccess().getFullyConverted(): [CStyleCast] (int)... +# 2406| Conversion = [IntegralConversion] integral conversion +# 2406| Type = [IntType] int +# 2406| ValueCategory = prvalue +# 2406| getStmt(): [BlockStmt] { ... } +# 2407| getStmt(0): [SwitchCase] case ...: +# 2407| getExpr(): [CharLiteral] 97 +# 2407| Type = [PlainCharType] char +# 2407| Value = [CharLiteral] 97 +# 2407| ValueCategory = prvalue +# 2407| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2407| Conversion = [IntegralConversion] integral conversion +# 2407| Type = [IntType] int +# 2407| Value = [CStyleCast] 97 +# 2407| ValueCategory = prvalue +# 2408| getStmt(1): [ExprStmt] ExprStmt +# 2408| getExpr(): [PostfixIncrExpr] ... ++ +# 2408| Type = [PlainCharType] char +# 2408| ValueCategory = prvalue +# 2408| getOperand(): [VariableAccess] x +# 2408| Type = [PlainCharType] char +# 2408| ValueCategory = lvalue +# 2411| getStmt(4): [SwitchStmt] switch (...) ... +# 2411| getInitialization(): [DeclStmt] declaration +# 2411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2411| Type = [PlainCharType] char +# 2411| getVariable().getInitializer(): [Initializer] initializer for x +# 2411| getExpr(): [FunctionCall] call to get_x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = prvalue(load) +# 2411| getExpr(): [VariableAccess] x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue(load) +# 2411| getStmt(): [BlockStmt] { ... } +# 2412| getStmt(0): [SwitchCase] case ...: +# 2412| getExpr(): [CharLiteral] 97 +# 2412| Type = [PlainCharType] char +# 2412| Value = [CharLiteral] 97 +# 2412| ValueCategory = prvalue +# 2412| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2412| Conversion = [IntegralConversion] integral conversion +# 2412| Type = [IntType] int +# 2412| Value = [CStyleCast] 97 +# 2412| ValueCategory = prvalue +# 2413| getStmt(1): [ExprStmt] ExprStmt +# 2413| getExpr(): [PostfixIncrExpr] ... ++ +# 2413| Type = [PlainCharType] char +# 2413| ValueCategory = prvalue +# 2413| getOperand(): [VariableAccess] x +# 2413| Type = [PlainCharType] char +# 2413| ValueCategory = lvalue +# 2411| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2411| Conversion = [IntegralConversion] integral conversion +# 2411| Type = [IntType] int +# 2411| ValueCategory = prvalue +# 2416| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2416| getInitialization(): [DeclStmt] declaration +# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2416| Type = [PlainCharType] char +# 2416| getVariable().getInitializer(): [Initializer] initializer for x +# 2416| getExpr(): [FunctionCall] call to get_x +# 2416| Type = [PlainCharType] char +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2416| Type = [VoidType] void +# 2416| ValueCategory = prvalue +# 2416| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2416| Type = [Class] ClassWithDestructor +# 2416| ValueCategory = prvalue(load) +# 2416| getChild(1): [DeclStmt] declaration +# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2416| Type = [RValueReferenceType] vector && +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2416| getExpr(): [ConstructorCall] call to vector +# 2416| Type = [VoidType] void +# 2416| ValueCategory = prvalue +# 2416| getArgument(0): [VariableAccess] x +# 2416| Type = [PlainCharType] char +# 2416| ValueCategory = prvalue(load) +# 2416| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2416| Type = [LValueReferenceType] vector & +# 2416| ValueCategory = prvalue +# 2416| getExpr(): [TemporaryObjectExpr] temporary object +# 2416| Type = [ClassTemplateInstantiation,Struct] vector +# 2416| ValueCategory = xvalue +# 2416| getBeginEndDeclaration(): [DeclStmt] declaration +# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2416| getExpr(): [FunctionCall] call to begin +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [VariableAccess] (__range) +# 2416| Type = [RValueReferenceType] vector && +# 2416| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2416| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2416| getExpr(): [FunctionCall] call to end +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [VariableAccess] (__range) +# 2416| Type = [RValueReferenceType] vector && +# 2416| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2416| getCondition(): [FunctionCall] call to operator!= +# 2416| Type = [BoolType] bool +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [VariableAccess] (__begin) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = lvalue +# 2416| getArgument(0): [ConstructorCall] call to iterator +# 2416| Type = [VoidType] void +# 2416| ValueCategory = prvalue +# 2416| getArgument(0): [VariableAccess] (__end) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2416| getUpdate(): [FunctionCall] call to operator++ +# 2416| Type = [LValueReferenceType] iterator & +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [VariableAccess] (__begin) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = lvalue +# 2416| getChild(5): [DeclStmt] declaration +# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2416| Type = [PlainCharType] char +# 2416| getVariable().getInitializer(): [Initializer] initializer for y +# 2416| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2416| Type = [LValueReferenceType] char & +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [VariableAccess] (__begin) +# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2416| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2416| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2416| Type = [PlainCharType] char +# 2416| ValueCategory = prvalue(load) +# 2417| getStmt(): [ExprStmt] ExprStmt +# 2417| getExpr(): [AssignAddExpr] ... += ... +# 2417| Type = [PlainCharType] char +# 2417| ValueCategory = lvalue +# 2417| getLValue(): [VariableAccess] y +# 2417| Type = [PlainCharType] char +# 2417| ValueCategory = lvalue +# 2417| getRValue(): [VariableAccess] x +# 2417| Type = [PlainCharType] char +# 2417| ValueCategory = prvalue(load) +# 2417| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 2417| Conversion = [IntegralConversion] integral conversion +# 2417| Type = [IntType] int +# 2417| ValueCategory = prvalue +# 2416| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2416| Type = [ClassTemplateInstantiation,Struct] iterator +# 2416| ValueCategory = lvalue +# 2418| getStmt(6): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : 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 588aa16238b..e80688b355a 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -15165,6 +15165,295 @@ ir.cpp: # 2392| v2392_7(void) = AliasedUse : m2392_3 # 2392| v2392_8(void) = ExitFunction : +# 2396| void initialization_with_temp_destructor() +# 2396| Block 0 +# 2396| v2396_1(void) = EnterFunction : +# 2396| m2396_2(unknown) = AliasedDefinition : +# 2396| m2396_3(unknown) = InitializeNonLocal : +# 2396| m2396_4(unknown) = Chi : total:m2396_2, partial:m2396_3 +# 2397| r2397_1(glval) = VariableAddress[x] : +# 2397| r2397_2(glval) = VariableAddress[#temp2397:18] : +# 2397| m2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2 +# 2397| r2397_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2 +# 2397| m2397_6(unknown) = ^CallSideEffect : ~m2396_4 +# 2397| m2397_7(unknown) = Chi : total:m2396_4, partial:m2397_6 +# 2397| m2397_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 +# 2397| m2397_9(ClassWithDestructor) = Chi : total:m2397_3, partial:m2397_8 +# 2397| r2397_10(glval) = FunctionAddress[get_x] : +# 2397| r2397_11(char) = Call[get_x] : func:r2397_10, this:r2397_2 +# 2397| m2397_12(unknown) = ^CallSideEffect : ~m2397_7 +# 2397| m2397_13(unknown) = Chi : total:m2397_7, partial:m2397_12 +# 2397| v2397_14(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, m2397_9 +# 2397| m2397_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 +# 2397| m2397_16(ClassWithDestructor) = Chi : total:m2397_9, partial:m2397_15 +# 2397| m2397_17(char) = Store[x] : &:r2397_1, r2397_11 +# 2397| r2397_18(glval) = VariableAddress[x] : +# 2397| r2397_19(char) = Load[x] : &:r2397_18, m2397_17 +# 2397| r2397_20(char) = Constant[0] : +# 2397| r2397_21(bool) = CompareNE : r2397_19, r2397_20 +# 2397| r2397_22(bool) = CopyValue : r2397_21 +# 2397| v2397_23(void) = ConditionalBranch : r2397_22 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2398| Block 1 +# 2398| r2398_1(glval) = VariableAddress[x] : +# 2398| r2398_2(char) = Load[x] : &:r2398_1, m2397_17 +# 2398| r2398_3(char) = Constant[1] : +# 2398| r2398_4(char) = Add : r2398_2, r2398_3 +# 2398| m2398_5(char) = Store[x] : &:r2398_1, r2398_4 +#-----| Goto -> Block 2 + +# 2400| Block 2 +# 2400| r2400_1(glval) = VariableAddress[x] : +# 2400| r2400_2(glval) = VariableAddress[#temp2400:18] : +# 2400| m2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2 +# 2400| r2400_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2 +# 2400| m2400_6(unknown) = ^CallSideEffect : ~m2397_13 +# 2400| m2400_7(unknown) = Chi : total:m2397_13, partial:m2400_6 +# 2400| m2400_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 +# 2400| m2400_9(ClassWithDestructor) = Chi : total:m2400_3, partial:m2400_8 +# 2400| r2400_10(glval) = FunctionAddress[get_x] : +# 2400| r2400_11(char) = Call[get_x] : func:r2400_10, this:r2400_2 +# 2400| m2400_12(unknown) = ^CallSideEffect : ~m2400_7 +# 2400| m2400_13(unknown) = Chi : total:m2400_7, partial:m2400_12 +# 2400| v2400_14(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, m2400_9 +# 2400| m2400_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 +# 2400| m2400_16(ClassWithDestructor) = Chi : total:m2400_9, partial:m2400_15 +# 2400| m2400_17(char) = Store[x] : &:r2400_1, r2400_11 +# 2400| r2400_18(glval) = VariableAddress[x] : +# 2400| r2400_19(char) = Load[x] : &:r2400_18, m2400_17 +# 2400| r2400_20(char) = Constant[0] : +# 2400| r2400_21(bool) = CompareNE : r2400_19, r2400_20 +# 2400| v2400_22(void) = ConditionalBranch : r2400_21 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2401| Block 3 +# 2401| r2401_1(glval) = VariableAddress[x] : +# 2401| r2401_2(char) = Load[x] : &:r2401_1, m2400_17 +# 2401| r2401_3(char) = Constant[1] : +# 2401| r2401_4(char) = Add : r2401_2, r2401_3 +# 2401| m2401_5(char) = Store[x] : &:r2401_1, r2401_4 +#-----| Goto -> Block 4 + +# 2403| Block 4 +# 2403| r2403_1(glval) = VariableAddress[x] : +# 2403| r2403_2(glval) = VariableAddress[#temp2403:28] : +# 2403| m2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2 +# 2403| r2403_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2 +# 2403| m2403_6(unknown) = ^CallSideEffect : ~m2400_13 +# 2403| m2403_7(unknown) = Chi : total:m2400_13, partial:m2403_6 +# 2403| m2403_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 +# 2403| m2403_9(ClassWithDestructor) = Chi : total:m2403_3, partial:m2403_8 +# 2403| r2403_10(glval) = FunctionAddress[get_x] : +# 2403| r2403_11(char) = Call[get_x] : func:r2403_10, this:r2403_2 +# 2403| m2403_12(unknown) = ^CallSideEffect : ~m2403_7 +# 2403| m2403_13(unknown) = Chi : total:m2403_7, partial:m2403_12 +# 2403| v2403_14(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, m2403_9 +# 2403| m2403_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 +# 2403| m2403_16(ClassWithDestructor) = Chi : total:m2403_9, partial:m2403_15 +# 2403| m2403_17(char) = Store[x] : &:r2403_1, r2403_11 +# 2403| r2403_18(bool) = Constant[1] : +# 2403| v2403_19(void) = ConditionalBranch : r2403_18 +#-----| False -> Block 13 +#-----| True -> Block 5 + +# 2404| Block 5 +# 2404| r2404_1(glval) = VariableAddress[x] : +# 2404| r2404_2(char) = Load[x] : &:r2404_1, m2403_17 +# 2404| r2404_3(char) = Constant[1] : +# 2404| r2404_4(char) = Add : r2404_2, r2404_3 +# 2404| m2404_5(char) = Store[x] : &:r2404_1, r2404_4 +# 2406| r2406_1(glval) = VariableAddress[x] : +# 2406| r2406_2(glval) = VariableAddress[#temp2406:21] : +# 2406| m2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2 +# 2406| r2406_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2 +# 2406| m2406_6(unknown) = ^CallSideEffect : ~m2403_13 +# 2406| m2406_7(unknown) = Chi : total:m2403_13, partial:m2406_6 +# 2406| m2406_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 +# 2406| m2406_9(ClassWithDestructor) = Chi : total:m2406_3, partial:m2406_8 +# 2406| r2406_10(glval) = FunctionAddress[get_x] : +# 2406| r2406_11(char) = Call[get_x] : func:r2406_10, this:r2406_2 +# 2406| m2406_12(unknown) = ^CallSideEffect : ~m2406_7 +# 2406| m2406_13(unknown) = Chi : total:m2406_7, partial:m2406_12 +# 2406| v2406_14(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, m2406_9 +# 2406| m2406_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 +# 2406| m2406_16(ClassWithDestructor) = Chi : total:m2406_9, partial:m2406_15 +# 2406| m2406_17(char) = Store[x] : &:r2406_1, r2406_11 +# 2406| r2406_18(glval) = VariableAddress[x] : +# 2406| r2406_19(char) = Load[x] : &:r2406_18, m2406_17 +# 2406| r2406_20(int) = Convert : r2406_19 +# 2406| r2406_21(int) = CopyValue : r2406_20 +# 2406| v2406_22(void) = Switch : r2406_21 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 + +# 2407| Block 6 +# 2407| v2407_1(void) = NoOp : +# 2408| r2408_1(glval) = VariableAddress[x] : +# 2408| r2408_2(char) = Load[x] : &:r2408_1, m2406_17 +# 2408| r2408_3(char) = Constant[1] : +# 2408| r2408_4(char) = Add : r2408_2, r2408_3 +# 2408| m2408_5(char) = Store[x] : &:r2408_1, r2408_4 +#-----| Goto -> Block 7 + +# 2411| Block 7 +# 2411| r2411_1(glval) = VariableAddress[x] : +# 2411| r2411_2(glval) = VariableAddress[#temp2411:21] : +# 2411| m2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2 +# 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 +# 2411| m2411_6(unknown) = ^CallSideEffect : ~m2406_13 +# 2411| m2411_7(unknown) = Chi : total:m2406_13, partial:m2411_6 +# 2411| m2411_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| m2411_9(ClassWithDestructor) = Chi : total:m2411_3, partial:m2411_8 +# 2411| r2411_10(glval) = FunctionAddress[get_x] : +# 2411| r2411_11(char) = Call[get_x] : func:r2411_10, this:r2411_2 +# 2411| m2411_12(unknown) = ^CallSideEffect : ~m2411_7 +# 2411| m2411_13(unknown) = Chi : total:m2411_7, partial:m2411_12 +# 2411| v2411_14(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, m2411_9 +# 2411| m2411_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| m2411_16(ClassWithDestructor) = Chi : total:m2411_9, partial:m2411_15 +# 2411| m2411_17(char) = Store[x] : &:r2411_1, r2411_11 +# 2411| r2411_18(glval) = VariableAddress[x] : +# 2411| r2411_19(char) = Load[x] : &:r2411_18, m2411_17 +# 2411| r2411_20(int) = Convert : r2411_19 +# 2411| v2411_21(void) = Switch : r2411_20 +#-----| Case[97] -> Block 8 +#-----| Default -> Block 9 + +# 2412| Block 8 +# 2412| v2412_1(void) = NoOp : +# 2413| r2413_1(glval) = VariableAddress[x] : +# 2413| r2413_2(char) = Load[x] : &:r2413_1, m2411_17 +# 2413| r2413_3(char) = Constant[1] : +# 2413| r2413_4(char) = Add : r2413_2, r2413_3 +# 2413| m2413_5(char) = Store[x] : &:r2413_1, r2413_4 +#-----| Goto -> Block 9 + +# 2416| Block 9 +# 2416| r2416_1(glval) = VariableAddress[x] : +# 2416| r2416_2(glval) = VariableAddress[#temp2416:18] : +# 2416| m2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2 +# 2416| r2416_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2 +# 2416| m2416_6(unknown) = ^CallSideEffect : ~m2411_13 +# 2416| m2416_7(unknown) = Chi : total:m2411_13, partial:m2416_6 +# 2416| m2416_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 +# 2416| m2416_9(ClassWithDestructor) = Chi : total:m2416_3, partial:m2416_8 +# 2416| r2416_10(glval) = FunctionAddress[get_x] : +# 2416| r2416_11(char) = Call[get_x] : func:r2416_10, this:r2416_2 +# 2416| m2416_12(unknown) = ^CallSideEffect : ~m2416_7 +# 2416| m2416_13(unknown) = Chi : total:m2416_7, partial:m2416_12 +# 2416| v2416_14(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, m2416_9 +# 2416| m2416_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 +# 2416| m2416_16(ClassWithDestructor) = Chi : total:m2416_9, partial:m2416_15 +# 2416| m2416_17(char) = Store[x] : &:r2416_1, r2416_11 +# 2416| r2416_18(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_19(glval>) = VariableAddress[#temp2416:58] : +# 2416| m2416_20(vector) = Uninitialized[#temp2416:58] : &:r2416_19 +# 2416| r2416_21(glval) = FunctionAddress[vector] : +# 2416| r2416_22(glval) = VariableAddress[x] : +# 2416| r2416_23(char) = Load[x] : &:r2416_22, m2416_17 +# 2416| v2416_24(void) = Call[vector] : func:r2416_21, this:r2416_19, 0:r2416_23 +# 2416| m2416_25(unknown) = ^CallSideEffect : ~m2416_13 +# 2416| m2416_26(unknown) = Chi : total:m2416_13, partial:m2416_25 +# 2416| m2416_27(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2416_19 +# 2416| m2416_28(vector) = Chi : total:m2416_20, partial:m2416_27 +# 2416| r2416_29(vector &) = CopyValue : r2416_19 +# 2416| m2416_30(vector &&) = Store[(__range)] : &:r2416_18, r2416_29 +# 2416| r2416_31(glval>) = VariableAddress[(__begin)] : +# 2416| r2416_32(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_33(vector &&) = Load[(__range)] : &:r2416_32, m2416_30 +#-----| r0_1(glval>) = CopyValue : r2416_33 +#-----| r0_2(glval>) = Convert : r0_1 +# 2416| r2416_34(glval) = FunctionAddress[begin] : +# 2416| r2416_35(iterator) = Call[begin] : func:r2416_34, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2416_28 +# 2416| m2416_36(iterator) = Store[(__begin)] : &:r2416_31, r2416_35 +# 2416| r2416_37(glval>) = VariableAddress[(__end)] : +# 2416| r2416_38(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_39(vector &&) = Load[(__range)] : &:r2416_38, m2416_30 +#-----| r0_4(glval>) = CopyValue : r2416_39 +#-----| r0_5(glval>) = Convert : r0_4 +# 2416| r2416_40(glval) = FunctionAddress[end] : +# 2416| r2416_41(iterator) = Call[end] : func:r2416_40, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2416_28 +# 2416| m2416_42(iterator) = Store[(__end)] : &:r2416_37, r2416_41 +#-----| Goto -> Block 10 + +# 2416| Block 10 +# 2416| m2416_43(iterator) = Phi : from 9:m2416_36, from 11:m2416_73 +# 2416| m2416_44(unknown) = Phi : from 9:~m2416_26, from 11:~m2416_70 +# 2416| r2416_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2416_45 +# 2416| r2416_46(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2416| r2416_47(glval) = FunctionAddress[iterator] : +# 2416| r2416_48(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2416_48 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2416| v2416_49(void) = Call[iterator] : func:r2416_47, this:r0_8, 0:r0_11 +# 2416| m2416_50(unknown) = ^CallSideEffect : ~m2416_44 +# 2416| m2416_51(unknown) = Chi : total:m2416_44, partial:m2416_50 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2416_42 +# 2416| m2416_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2416| m2416_53(iterator) = Chi : total:m0_9, partial:m2416_52 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2416_53 +# 2416| r2416_54(bool) = Call[operator!=] : func:r2416_46, this:r0_7, 0:r0_13 +# 2416| m2416_55(unknown) = ^CallSideEffect : ~m2416_51 +# 2416| m2416_56(unknown) = Chi : total:m2416_51, partial:m2416_55 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2416_43 +# 2416| v2416_57(void) = ConditionalBranch : r2416_54 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2416| Block 11 +# 2416| r2416_58(glval) = VariableAddress[y] : +# 2416| r2416_59(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2416_59 +# 2416| r2416_60(glval) = FunctionAddress[operator*] : +# 2416| r2416_61(char &) = Call[operator*] : func:r2416_60, this:r0_15 +# 2416| m2416_62(unknown) = ^CallSideEffect : ~m2416_56 +# 2416| m2416_63(unknown) = Chi : total:m2416_56, partial:m2416_62 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2416_43 +# 2416| r2416_64(char) = Load[?] : &:r2416_61, ~m2416_63 +# 2416| m2416_65(char) = Store[y] : &:r2416_58, r2416_64 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(char) = Load[x] : &:r2417_1, m2416_17 +# 2417| r2417_3(int) = Convert : r2417_2 +# 2417| r2417_4(glval) = VariableAddress[y] : +# 2417| r2417_5(char) = Load[y] : &:r2417_4, m2416_65 +# 2417| r2417_6(int) = Convert : r2417_5 +# 2417| r2417_7(int) = Add : r2417_6, r2417_3 +# 2417| r2417_8(char) = Convert : r2417_7 +# 2417| m2417_9(char) = Store[y] : &:r2417_4, r2417_8 +# 2416| r2416_66(glval>) = VariableAddress[(__begin)] : +# 2416| r2416_67(glval) = FunctionAddress[operator++] : +# 2416| r2416_68(iterator &) = Call[operator++] : func:r2416_67, this:r2416_66 +# 2416| m2416_69(unknown) = ^CallSideEffect : ~m2416_63 +# 2416| m2416_70(unknown) = Chi : total:m2416_63, partial:m2416_69 +# 2416| v2416_71(void) = ^IndirectReadSideEffect[-1] : &:r2416_66, m2416_43 +# 2416| m2416_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2416_66 +# 2416| m2416_73(iterator) = Chi : total:m2416_43, partial:m2416_72 +# 2416| r2416_74(glval>) = CopyValue : r2416_68 +#-----| Goto (back edge) -> Block 10 + +# 2418| Block 12 +# 2418| v2418_1(void) = NoOp : +# 2396| v2396_5(void) = ReturnVoid : +# 2396| v2396_6(void) = AliasedUse : ~m2416_56 +# 2396| v2396_7(void) = ExitFunction : + +# 2396| Block 13 +# 2396| v2396_8(void) = Unreached : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 2f51b63dff1..67327ddc846 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2393,4 +2393,28 @@ int large_operation_should_be_constant_folded() { return BINOP64(1); } +void initialization_with_temp_destructor() { + if (char x = ClassWithDestructor().get_x()) + x++; + + if (char x = ClassWithDestructor().get_x(); x) + x++; + + if constexpr (char x = ClassWithDestructor().get_x(); initialization_with_destructor_bool) + x++; + + switch(char x = ClassWithDestructor().get_x()) { + case 'a': + x++; + } + + switch(char x = ClassWithDestructor().get_x(); x) { + case 'a': + x++; + } + + for(char x = ClassWithDestructor().get_x(); char y : std::vector(x)) + y += x; +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index add30395130..912d2984956 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1127,6 +1127,7 @@ | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_2 | +| file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -1176,6 +1177,7 @@ | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | +| file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | @@ -1186,6 +1188,10 @@ | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | @@ -1208,6 +1214,7 @@ | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | +| file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | @@ -1217,6 +1224,7 @@ | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | +| file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | @@ -1265,6 +1273,8 @@ | file://:0:0:0:0 | Arg(0) | 0:r0_11 | | file://:0:0:0:0 | Arg(0) | 0:r0_11 | | file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_15 | @@ -1363,6 +1373,7 @@ | file://:0:0:0:0 | Load | m2210_36 | | file://:0:0:0:0 | Load | m2215_40 | | file://:0:0:0:0 | Load | m2293_46 | +| file://:0:0:0:0 | Load | m2416_53 | | file://:0:0:0:0 | Load | ~m0_4 | | file://:0:0:0:0 | Load | ~m1493_6 | | file://:0:0:0:0 | Load | ~m1761_10 | @@ -1412,6 +1423,10 @@ | file://:0:0:0:0 | SideEffect | m2293_21 | | file://:0:0:0:0 | SideEffect | m2293_36 | | file://:0:0:0:0 | SideEffect | m2293_36 | +| file://:0:0:0:0 | SideEffect | m2416_28 | +| file://:0:0:0:0 | SideEffect | m2416_28 | +| file://:0:0:0:0 | SideEffect | m2416_43 | +| file://:0:0:0:0 | SideEffect | m2416_43 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -1438,6 +1453,7 @@ | file://:0:0:0:0 | SideEffect | ~m2226_4 | | file://:0:0:0:0 | SideEffect | ~m2233_6 | | file://:0:0:0:0 | SideEffect | ~m2293_35 | +| file://:0:0:0:0 | SideEffect | ~m2416_42 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -1469,10 +1485,12 @@ | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | +| file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_2 | | file://:0:0:0:0 | Unary | r0_3 | | file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_4 | +| file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_6 | @@ -1497,6 +1515,7 @@ | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | +| file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_11 | | file://:0:0:0:0 | Unary | r0_12 | | file://:0:0:0:0 | Unary | r0_14 | @@ -12546,6 +12565,266 @@ | ir.cpp:2392:5:2392:45 | SideEffect | m2392_3 | | ir.cpp:2393:5:2393:22 | Address | &:r2393_1 | | ir.cpp:2393:12:2393:21 | StoreValue | r2393_2 | +| ir.cpp:2396:6:2396:40 | ChiPartial | partial:m2396_3 | +| ir.cpp:2396:6:2396:40 | ChiTotal | total:m2396_2 | +| ir.cpp:2396:6:2396:40 | SideEffect | ~m2416_56 | +| ir.cpp:2397:9:2397:46 | Address | &:r2397_1 | +| ir.cpp:2397:9:2397:46 | Condition | r2397_22 | +| ir.cpp:2397:14:2397:14 | Address | &:r2397_18 | +| ir.cpp:2397:14:2397:14 | Left | r2397_19 | +| ir.cpp:2397:14:2397:14 | Load | m2397_17 | +| ir.cpp:2397:14:2397:14 | Right | r2397_20 | +| ir.cpp:2397:14:2397:14 | Unary | r2397_21 | +| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | +| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | +| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | +| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | +| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 | +| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 | +| ir.cpp:2397:18:2397:38 | CallTarget | func:r2397_4 | +| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_6 | +| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_8 | +| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_15 | +| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2396_4 | +| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_3 | +| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_9 | +| ir.cpp:2397:18:2397:38 | SideEffect | m2397_9 | +| ir.cpp:2397:18:2397:38 | SideEffect | ~m2396_4 | +| ir.cpp:2397:40:2397:44 | CallTarget | func:r2397_10 | +| ir.cpp:2397:40:2397:44 | ChiPartial | partial:m2397_12 | +| ir.cpp:2397:40:2397:44 | ChiTotal | total:m2397_7 | +| ir.cpp:2397:40:2397:44 | SideEffect | ~m2397_7 | +| ir.cpp:2397:40:2397:44 | StoreValue | r2397_11 | +| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 | +| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 | +| ir.cpp:2398:9:2398:9 | Left | r2398_2 | +| ir.cpp:2398:9:2398:9 | Load | m2397_17 | +| ir.cpp:2398:9:2398:11 | Right | r2398_3 | +| ir.cpp:2398:9:2398:11 | StoreValue | r2398_4 | +| ir.cpp:2400:14:2400:14 | Address | &:r2400_1 | +| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | +| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | +| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | +| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | +| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 | +| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 | +| ir.cpp:2400:18:2400:38 | CallTarget | func:r2400_4 | +| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_6 | +| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_8 | +| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_15 | +| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2397_13 | +| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_3 | +| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_9 | +| ir.cpp:2400:18:2400:38 | SideEffect | m2400_9 | +| ir.cpp:2400:18:2400:38 | SideEffect | ~m2397_13 | +| ir.cpp:2400:40:2400:44 | CallTarget | func:r2400_10 | +| ir.cpp:2400:40:2400:44 | ChiPartial | partial:m2400_12 | +| ir.cpp:2400:40:2400:44 | ChiTotal | total:m2400_7 | +| ir.cpp:2400:40:2400:44 | SideEffect | ~m2400_7 | +| ir.cpp:2400:40:2400:44 | StoreValue | r2400_11 | +| ir.cpp:2400:49:2400:49 | Address | &:r2400_18 | +| ir.cpp:2400:49:2400:49 | Condition | r2400_21 | +| ir.cpp:2400:49:2400:49 | Left | r2400_19 | +| ir.cpp:2400:49:2400:49 | Load | m2400_17 | +| ir.cpp:2400:49:2400:49 | Right | r2400_20 | +| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 | +| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 | +| ir.cpp:2401:9:2401:9 | Left | r2401_2 | +| ir.cpp:2401:9:2401:9 | Load | m2400_17 | +| ir.cpp:2401:9:2401:11 | Right | r2401_3 | +| ir.cpp:2401:9:2401:11 | StoreValue | r2401_4 | +| ir.cpp:2403:24:2403:24 | Address | &:r2403_1 | +| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | +| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | +| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | +| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | +| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 | +| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 | +| ir.cpp:2403:28:2403:48 | CallTarget | func:r2403_4 | +| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_6 | +| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_8 | +| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_15 | +| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2400_13 | +| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_3 | +| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_9 | +| ir.cpp:2403:28:2403:48 | SideEffect | m2403_9 | +| ir.cpp:2403:28:2403:48 | SideEffect | ~m2400_13 | +| ir.cpp:2403:50:2403:54 | CallTarget | func:r2403_10 | +| ir.cpp:2403:50:2403:54 | ChiPartial | partial:m2403_12 | +| ir.cpp:2403:50:2403:54 | ChiTotal | total:m2403_7 | +| ir.cpp:2403:50:2403:54 | SideEffect | ~m2403_7 | +| ir.cpp:2403:50:2403:54 | StoreValue | r2403_11 | +| ir.cpp:2403:59:2403:93 | Condition | r2403_18 | +| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 | +| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 | +| ir.cpp:2404:9:2404:9 | Left | r2404_2 | +| ir.cpp:2404:9:2404:9 | Load | m2403_17 | +| ir.cpp:2404:9:2404:11 | Right | r2404_3 | +| ir.cpp:2404:9:2404:11 | StoreValue | r2404_4 | +| ir.cpp:2406:12:2406:49 | Address | &:r2406_1 | +| ir.cpp:2406:12:2406:49 | Condition | r2406_21 | +| ir.cpp:2406:17:2406:17 | Address | &:r2406_18 | +| ir.cpp:2406:17:2406:17 | Load | m2406_17 | +| ir.cpp:2406:17:2406:17 | Unary | r2406_19 | +| ir.cpp:2406:17:2406:17 | Unary | r2406_20 | +| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | +| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | +| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | +| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | +| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 | +| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 | +| ir.cpp:2406:21:2406:41 | CallTarget | func:r2406_4 | +| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_6 | +| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_8 | +| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_15 | +| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2403_13 | +| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_3 | +| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_9 | +| ir.cpp:2406:21:2406:41 | SideEffect | m2406_9 | +| ir.cpp:2406:21:2406:41 | SideEffect | ~m2403_13 | +| ir.cpp:2406:43:2406:47 | CallTarget | func:r2406_10 | +| ir.cpp:2406:43:2406:47 | ChiPartial | partial:m2406_12 | +| ir.cpp:2406:43:2406:47 | ChiTotal | total:m2406_7 | +| ir.cpp:2406:43:2406:47 | SideEffect | ~m2406_7 | +| ir.cpp:2406:43:2406:47 | StoreValue | r2406_11 | +| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 | +| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 | +| ir.cpp:2408:11:2408:11 | Left | r2408_2 | +| ir.cpp:2408:11:2408:11 | Load | m2406_17 | +| ir.cpp:2408:11:2408:13 | Right | r2408_3 | +| ir.cpp:2408:11:2408:13 | StoreValue | r2408_4 | +| ir.cpp:2411:17:2411:17 | Address | &:r2411_1 | +| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | +| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | +| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | +| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | +| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:21:2411:41 | CallTarget | func:r2411_4 | +| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_6 | +| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_8 | +| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_15 | +| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2406_13 | +| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_3 | +| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_9 | +| ir.cpp:2411:21:2411:41 | SideEffect | m2411_9 | +| ir.cpp:2411:21:2411:41 | SideEffect | ~m2406_13 | +| ir.cpp:2411:43:2411:47 | CallTarget | func:r2411_10 | +| ir.cpp:2411:43:2411:47 | ChiPartial | partial:m2411_12 | +| ir.cpp:2411:43:2411:47 | ChiTotal | total:m2411_7 | +| ir.cpp:2411:43:2411:47 | SideEffect | ~m2411_7 | +| ir.cpp:2411:43:2411:47 | StoreValue | r2411_11 | +| ir.cpp:2411:52:2411:52 | Address | &:r2411_18 | +| ir.cpp:2411:52:2411:52 | Condition | r2411_20 | +| ir.cpp:2411:52:2411:52 | Load | m2411_17 | +| ir.cpp:2411:52:2411:52 | Unary | r2411_19 | +| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 | +| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 | +| ir.cpp:2413:11:2413:11 | Left | r2413_2 | +| ir.cpp:2413:11:2413:11 | Load | m2411_17 | +| ir.cpp:2413:11:2413:13 | Right | r2413_3 | +| ir.cpp:2413:11:2413:13 | StoreValue | r2413_4 | +| ir.cpp:2416:5:2416:5 | Address | &:r2416_18 | +| ir.cpp:2416:5:2416:5 | Address | &:r2416_31 | +| ir.cpp:2416:5:2416:5 | Address | &:r2416_37 | +| ir.cpp:2416:14:2416:14 | Address | &:r2416_1 | +| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | +| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | +| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | +| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | +| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 | +| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 | +| ir.cpp:2416:18:2416:38 | CallTarget | func:r2416_4 | +| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_6 | +| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_8 | +| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_15 | +| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2411_13 | +| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_3 | +| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_9 | +| ir.cpp:2416:18:2416:38 | SideEffect | m2416_9 | +| ir.cpp:2416:18:2416:38 | SideEffect | ~m2411_13 | +| ir.cpp:2416:40:2416:44 | CallTarget | func:r2416_10 | +| ir.cpp:2416:40:2416:44 | ChiPartial | partial:m2416_12 | +| ir.cpp:2416:40:2416:44 | ChiTotal | total:m2416_7 | +| ir.cpp:2416:40:2416:44 | SideEffect | ~m2416_7 | +| ir.cpp:2416:40:2416:44 | StoreValue | r2416_11 | +| ir.cpp:2416:54:2416:54 | Address | &:r2416_58 | +| ir.cpp:2416:58:2416:58 | Address | &:r2416_32 | +| ir.cpp:2416:58:2416:58 | Address | &:r2416_38 | +| ir.cpp:2416:58:2416:58 | Address | &:r2416_61 | +| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 | +| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_2 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_5 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_7 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_8 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_15 | +| ir.cpp:2416:58:2416:58 | Arg(this) | this:r2416_66 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_34 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_40 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_46 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_47 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_60 | +| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_67 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_50 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_52 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_55 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_62 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_69 | +| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_72 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m0_9 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_43 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_44 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_51 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_56 | +| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_63 | +| ir.cpp:2416:58:2416:58 | Condition | r2416_54 | +| ir.cpp:2416:58:2416:58 | Load | m2416_30 | +| ir.cpp:2416:58:2416:58 | Load | m2416_30 | +| ir.cpp:2416:58:2416:58 | Phi | from 9:m2416_36 | +| ir.cpp:2416:58:2416:58 | Phi | from 9:~m2416_26 | +| ir.cpp:2416:58:2416:58 | Phi | from 11:m2416_73 | +| ir.cpp:2416:58:2416:58 | Phi | from 11:~m2416_70 | +| ir.cpp:2416:58:2416:58 | SideEffect | m2416_43 | +| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_44 | +| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_51 | +| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_56 | +| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_63 | +| ir.cpp:2416:58:2416:58 | StoreValue | r2416_35 | +| ir.cpp:2416:58:2416:58 | StoreValue | r2416_41 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_33 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_39 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_45 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_48 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_59 | +| ir.cpp:2416:58:2416:58 | Unary | r2416_68 | +| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 | +| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 | +| ir.cpp:2416:58:2416:77 | Arg(this) | this:r2416_19 | +| ir.cpp:2416:58:2416:77 | CallTarget | func:r2416_21 | +| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_25 | +| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_27 | +| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_13 | +| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_20 | +| ir.cpp:2416:58:2416:77 | SideEffect | ~m2416_13 | +| ir.cpp:2416:58:2416:77 | StoreValue | r2416_29 | +| ir.cpp:2416:58:2416:77 | Unary | r2416_19 | +| ir.cpp:2416:58:2416:78 | Load | ~m2416_63 | +| ir.cpp:2416:58:2416:78 | StoreValue | r2416_64 | +| ir.cpp:2416:76:2416:76 | Address | &:r2416_22 | +| ir.cpp:2416:76:2416:76 | Arg(0) | 0:r2416_23 | +| ir.cpp:2416:76:2416:76 | Load | m2416_17 | +| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 | +| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 | +| ir.cpp:2417:9:2417:9 | Load | m2416_65 | +| ir.cpp:2417:9:2417:9 | Unary | r2417_5 | +| ir.cpp:2417:9:2417:14 | Left | r2417_6 | +| ir.cpp:2417:9:2417:14 | StoreValue | r2417_8 | +| ir.cpp:2417:9:2417:14 | Unary | r2417_7 | +| ir.cpp:2417:14:2417:14 | Address | &:r2417_1 | +| ir.cpp:2417:14:2417:14 | Load | m2416_17 | +| ir.cpp:2417:14:2417:14 | Right | r2417_3 | +| ir.cpp:2417:14:2417:14 | Unary | r2417_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 b721a11e484..7698e996e12 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -14005,6 +14005,260 @@ ir.cpp: # 2392| v2392_6(void) = AliasedUse : ~m? # 2392| v2392_7(void) = ExitFunction : +# 2396| void initialization_with_temp_destructor() +# 2396| Block 0 +# 2396| v2396_1(void) = EnterFunction : +# 2396| mu2396_2(unknown) = AliasedDefinition : +# 2396| mu2396_3(unknown) = InitializeNonLocal : +# 2397| r2397_1(glval) = VariableAddress[x] : +# 2397| r2397_2(glval) = VariableAddress[#temp2397:18] : +# 2397| mu2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2 +# 2397| r2397_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2 +# 2397| mu2397_6(unknown) = ^CallSideEffect : ~m? +# 2397| mu2397_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 +# 2397| r2397_8(glval) = FunctionAddress[get_x] : +# 2397| r2397_9(char) = Call[get_x] : func:r2397_8, this:r2397_2 +# 2397| mu2397_10(unknown) = ^CallSideEffect : ~m? +# 2397| v2397_11(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, ~m? +# 2397| mu2397_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 +# 2397| mu2397_13(char) = Store[x] : &:r2397_1, r2397_9 +# 2397| r2397_14(glval) = VariableAddress[x] : +# 2397| r2397_15(char) = Load[x] : &:r2397_14, ~m? +# 2397| r2397_16(char) = Constant[0] : +# 2397| r2397_17(bool) = CompareNE : r2397_15, r2397_16 +# 2397| r2397_18(bool) = CopyValue : r2397_17 +# 2397| v2397_19(void) = ConditionalBranch : r2397_18 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2398| Block 1 +# 2398| r2398_1(glval) = VariableAddress[x] : +# 2398| r2398_2(char) = Load[x] : &:r2398_1, ~m? +# 2398| r2398_3(char) = Constant[1] : +# 2398| r2398_4(char) = Add : r2398_2, r2398_3 +# 2398| mu2398_5(char) = Store[x] : &:r2398_1, r2398_4 +#-----| Goto -> Block 2 + +# 2400| Block 2 +# 2400| r2400_1(glval) = VariableAddress[x] : +# 2400| r2400_2(glval) = VariableAddress[#temp2400:18] : +# 2400| mu2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2 +# 2400| r2400_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2 +# 2400| mu2400_6(unknown) = ^CallSideEffect : ~m? +# 2400| mu2400_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 +# 2400| r2400_8(glval) = FunctionAddress[get_x] : +# 2400| r2400_9(char) = Call[get_x] : func:r2400_8, this:r2400_2 +# 2400| mu2400_10(unknown) = ^CallSideEffect : ~m? +# 2400| v2400_11(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, ~m? +# 2400| mu2400_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 +# 2400| mu2400_13(char) = Store[x] : &:r2400_1, r2400_9 +# 2400| r2400_14(glval) = VariableAddress[x] : +# 2400| r2400_15(char) = Load[x] : &:r2400_14, ~m? +# 2400| r2400_16(char) = Constant[0] : +# 2400| r2400_17(bool) = CompareNE : r2400_15, r2400_16 +# 2400| v2400_18(void) = ConditionalBranch : r2400_17 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2401| Block 3 +# 2401| r2401_1(glval) = VariableAddress[x] : +# 2401| r2401_2(char) = Load[x] : &:r2401_1, ~m? +# 2401| r2401_3(char) = Constant[1] : +# 2401| r2401_4(char) = Add : r2401_2, r2401_3 +# 2401| mu2401_5(char) = Store[x] : &:r2401_1, r2401_4 +#-----| Goto -> Block 4 + +# 2403| Block 4 +# 2403| r2403_1(glval) = VariableAddress[x] : +# 2403| r2403_2(glval) = VariableAddress[#temp2403:28] : +# 2403| mu2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2 +# 2403| r2403_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2 +# 2403| mu2403_6(unknown) = ^CallSideEffect : ~m? +# 2403| mu2403_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 +# 2403| r2403_8(glval) = FunctionAddress[get_x] : +# 2403| r2403_9(char) = Call[get_x] : func:r2403_8, this:r2403_2 +# 2403| mu2403_10(unknown) = ^CallSideEffect : ~m? +# 2403| v2403_11(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, ~m? +# 2403| mu2403_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 +# 2403| mu2403_13(char) = Store[x] : &:r2403_1, r2403_9 +# 2403| r2403_14(bool) = Constant[1] : +# 2403| v2403_15(void) = ConditionalBranch : r2403_14 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2404| Block 5 +# 2404| r2404_1(glval) = VariableAddress[x] : +# 2404| r2404_2(char) = Load[x] : &:r2404_1, ~m? +# 2404| r2404_3(char) = Constant[1] : +# 2404| r2404_4(char) = Add : r2404_2, r2404_3 +# 2404| mu2404_5(char) = Store[x] : &:r2404_1, r2404_4 +#-----| Goto -> Block 6 + +# 2406| Block 6 +# 2406| r2406_1(glval) = VariableAddress[x] : +# 2406| r2406_2(glval) = VariableAddress[#temp2406:21] : +# 2406| mu2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2 +# 2406| r2406_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2 +# 2406| mu2406_6(unknown) = ^CallSideEffect : ~m? +# 2406| mu2406_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 +# 2406| r2406_8(glval) = FunctionAddress[get_x] : +# 2406| r2406_9(char) = Call[get_x] : func:r2406_8, this:r2406_2 +# 2406| mu2406_10(unknown) = ^CallSideEffect : ~m? +# 2406| v2406_11(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, ~m? +# 2406| mu2406_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 +# 2406| mu2406_13(char) = Store[x] : &:r2406_1, r2406_9 +# 2406| r2406_14(glval) = VariableAddress[x] : +# 2406| r2406_15(char) = Load[x] : &:r2406_14, ~m? +# 2406| r2406_16(int) = Convert : r2406_15 +# 2406| r2406_17(int) = CopyValue : r2406_16 +# 2406| v2406_18(void) = Switch : r2406_17 +#-----| Case[97] -> Block 7 +#-----| Default -> Block 8 + +# 2407| Block 7 +# 2407| v2407_1(void) = NoOp : +# 2408| r2408_1(glval) = VariableAddress[x] : +# 2408| r2408_2(char) = Load[x] : &:r2408_1, ~m? +# 2408| r2408_3(char) = Constant[1] : +# 2408| r2408_4(char) = Add : r2408_2, r2408_3 +# 2408| mu2408_5(char) = Store[x] : &:r2408_1, r2408_4 +#-----| Goto -> Block 8 + +# 2411| Block 8 +# 2411| r2411_1(glval) = VariableAddress[x] : +# 2411| r2411_2(glval) = VariableAddress[#temp2411:21] : +# 2411| mu2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2 +# 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 +# 2411| mu2411_6(unknown) = ^CallSideEffect : ~m? +# 2411| mu2411_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| r2411_8(glval) = FunctionAddress[get_x] : +# 2411| r2411_9(char) = Call[get_x] : func:r2411_8, this:r2411_2 +# 2411| mu2411_10(unknown) = ^CallSideEffect : ~m? +# 2411| v2411_11(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, ~m? +# 2411| mu2411_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 +# 2411| mu2411_13(char) = Store[x] : &:r2411_1, r2411_9 +# 2411| r2411_14(glval) = VariableAddress[x] : +# 2411| r2411_15(char) = Load[x] : &:r2411_14, ~m? +# 2411| r2411_16(int) = Convert : r2411_15 +# 2411| v2411_17(void) = Switch : r2411_16 +#-----| Case[97] -> Block 9 +#-----| Default -> Block 10 + +# 2412| Block 9 +# 2412| v2412_1(void) = NoOp : +# 2413| r2413_1(glval) = VariableAddress[x] : +# 2413| r2413_2(char) = Load[x] : &:r2413_1, ~m? +# 2413| r2413_3(char) = Constant[1] : +# 2413| r2413_4(char) = Add : r2413_2, r2413_3 +# 2413| mu2413_5(char) = Store[x] : &:r2413_1, r2413_4 +#-----| Goto -> Block 10 + +# 2416| Block 10 +# 2416| r2416_1(glval) = VariableAddress[x] : +# 2416| r2416_2(glval) = VariableAddress[#temp2416:18] : +# 2416| mu2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2 +# 2416| r2416_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2 +# 2416| mu2416_6(unknown) = ^CallSideEffect : ~m? +# 2416| mu2416_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 +# 2416| r2416_8(glval) = FunctionAddress[get_x] : +# 2416| r2416_9(char) = Call[get_x] : func:r2416_8, this:r2416_2 +# 2416| mu2416_10(unknown) = ^CallSideEffect : ~m? +# 2416| v2416_11(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, ~m? +# 2416| mu2416_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 +# 2416| mu2416_13(char) = Store[x] : &:r2416_1, r2416_9 +# 2416| r2416_14(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_15(glval>) = VariableAddress[#temp2416:58] : +# 2416| mu2416_16(vector) = Uninitialized[#temp2416:58] : &:r2416_15 +# 2416| r2416_17(glval) = FunctionAddress[vector] : +# 2416| r2416_18(glval) = VariableAddress[x] : +# 2416| r2416_19(char) = Load[x] : &:r2416_18, ~m? +# 2416| v2416_20(void) = Call[vector] : func:r2416_17, this:r2416_15, 0:r2416_19 +# 2416| mu2416_21(unknown) = ^CallSideEffect : ~m? +# 2416| mu2416_22(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2416_15 +# 2416| r2416_23(vector &) = CopyValue : r2416_15 +# 2416| mu2416_24(vector &&) = Store[(__range)] : &:r2416_14, r2416_23 +# 2416| r2416_25(glval>) = VariableAddress[(__begin)] : +# 2416| r2416_26(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_27(vector &&) = Load[(__range)] : &:r2416_26, ~m? +#-----| r0_1(glval>) = CopyValue : r2416_27 +#-----| r0_2(glval>) = Convert : r0_1 +# 2416| r2416_28(glval) = FunctionAddress[begin] : +# 2416| r2416_29(iterator) = Call[begin] : func:r2416_28, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2416| mu2416_30(iterator) = Store[(__begin)] : &:r2416_25, r2416_29 +# 2416| r2416_31(glval>) = VariableAddress[(__end)] : +# 2416| r2416_32(glval &&>) = VariableAddress[(__range)] : +# 2416| r2416_33(vector &&) = Load[(__range)] : &:r2416_32, ~m? +#-----| r0_4(glval>) = CopyValue : r2416_33 +#-----| r0_5(glval>) = Convert : r0_4 +# 2416| r2416_34(glval) = FunctionAddress[end] : +# 2416| r2416_35(iterator) = Call[end] : func:r2416_34, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2416| mu2416_36(iterator) = Store[(__end)] : &:r2416_31, r2416_35 +#-----| Goto -> Block 11 + +# 2416| Block 11 +# 2416| r2416_37(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2416_37 +# 2416| r2416_38(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2416| r2416_39(glval) = FunctionAddress[iterator] : +# 2416| r2416_40(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2416_40 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2416| v2416_41(void) = Call[iterator] : func:r2416_39, this:r0_8, 0:r0_11 +# 2416| mu2416_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2416| mu2416_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2416| r2416_44(bool) = Call[operator!=] : func:r2416_38, this:r0_7, 0:r0_13 +# 2416| mu2416_45(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2416| v2416_46(void) = ConditionalBranch : r2416_44 +#-----| False -> Block 13 +#-----| True -> Block 12 + +# 2416| Block 12 +# 2416| r2416_47(glval) = VariableAddress[y] : +# 2416| r2416_48(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2416_48 +# 2416| r2416_49(glval) = FunctionAddress[operator*] : +# 2416| r2416_50(char &) = Call[operator*] : func:r2416_49, this:r0_15 +# 2416| mu2416_51(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2416| r2416_52(char) = Load[?] : &:r2416_50, ~m? +# 2416| mu2416_53(char) = Store[y] : &:r2416_47, r2416_52 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(char) = Load[x] : &:r2417_1, ~m? +# 2417| r2417_3(int) = Convert : r2417_2 +# 2417| r2417_4(glval) = VariableAddress[y] : +# 2417| r2417_5(char) = Load[y] : &:r2417_4, ~m? +# 2417| r2417_6(int) = Convert : r2417_5 +# 2417| r2417_7(int) = Add : r2417_6, r2417_3 +# 2417| r2417_8(char) = Convert : r2417_7 +# 2417| mu2417_9(char) = Store[y] : &:r2417_4, r2417_8 +# 2416| r2416_54(glval>) = VariableAddress[(__begin)] : +# 2416| r2416_55(glval) = FunctionAddress[operator++] : +# 2416| r2416_56(iterator &) = Call[operator++] : func:r2416_55, this:r2416_54 +# 2416| mu2416_57(unknown) = ^CallSideEffect : ~m? +# 2416| v2416_58(void) = ^IndirectReadSideEffect[-1] : &:r2416_54, ~m? +# 2416| mu2416_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2416_54 +# 2416| r2416_60(glval>) = CopyValue : r2416_56 +#-----| Goto (back edge) -> Block 11 + +# 2418| Block 13 +# 2418| v2418_1(void) = NoOp : +# 2396| v2396_4(void) = ReturnVoid : +# 2396| v2396_5(void) = AliasedUse : ~m? +# 2396| v2396_6(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 From 9da8cb1165b3564077262e3a9d92d02e49c112fb Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 21 Mar 2024 09:44:12 +0100 Subject: [PATCH 209/497] C#: Simplify the output of `cs/wrong-compareto-signature` to remove entity locations --- csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql | 5 ++--- .../IncorrectCompareToSignature.expected | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index 9f9eff6f1f6..cf3298b09ea 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -40,6 +40,5 @@ where compareToMethod(m, actualParamType) and not implementsIComparable(declaringType, actualParamType) select m, - "The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'.", - actualParamType, actualParamType.getName(), declaringType, declaringType.getName(), - actualParamType, actualParamType.getName() + "The parameter of this 'CompareTo' method is of type '" + actualParamType.getName() + + "', but the declaring type does not implement 'IComparable<" + actualParamType.getName() + ">'." diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected index 46561c8184d..2b0e89de399 100644 --- a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected @@ -1,2 +1,2 @@ -| IncorrectCompareToSignature.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | IncorrectCompareToSignature.cs:3:7:3:11 | C1`1 | C1`1 | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | -| IncorrectCompareToSignatureBad.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | +| IncorrectCompareToSignature.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type 'T', but the declaring type does not implement 'IComparable'. | +| IncorrectCompareToSignatureBad.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type 'Bad', but the declaring type does not implement 'IComparable'. | From 54a1c252768998da916f4bdca97e114e2dec84f6 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 21 Mar 2024 09:26:35 +0100 Subject: [PATCH 210/497] change the precision of the js/unsafe-external-link query to low --- javascript/ql/src/DOM/TargetBlank.qhelp | 8 ++++++++ javascript/ql/src/DOM/TargetBlank.ql | 2 +- .../src/change-notes/2024-03-21-target-blank-precision.md | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md diff --git a/javascript/ql/src/DOM/TargetBlank.qhelp b/javascript/ql/src/DOM/TargetBlank.qhelp index f0e7ca37500..e1b1fd8e7f2 100644 --- a/javascript/ql/src/DOM/TargetBlank.qhelp +++ b/javascript/ql/src/DOM/TargetBlank.qhelp @@ -9,6 +9,14 @@ of the origin page using window.opener unless link type noope or noreferrer is specified. This is a potential security risk.

    +

    +Note that only older browsers, where target="_blank" does not imply rel="noopener", +are affected by this vulnerability. Modern browsers implicitly add rel="noopener" to +target="_blank" links. +Refer to the browser compatibility section +on the anchor element for details on which browsers implicitly add rel="noopener" to target="_blank" links. +

    + diff --git a/javascript/ql/src/DOM/TargetBlank.ql b/javascript/ql/src/DOM/TargetBlank.ql index fb63737f678..dc7f1d65e79 100644 --- a/javascript/ql/src/DOM/TargetBlank.ql +++ b/javascript/ql/src/DOM/TargetBlank.ql @@ -10,7 +10,7 @@ * security * external/cwe/cwe-200 * external/cwe/cwe-1022 - * @precision very-high + * @precision low */ import javascript diff --git a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md new file mode 100644 index 00000000000..89b0c0da191 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `@precision` of the `js/unsafe-external-link` has been lowered to `low` to reflect that modern browsers do not provider the `opener` attribute and thus mitigate the potential security risk of having a link with `target="_blank"`. \ No newline at end of file From d0c09f43a9aeeb58400077379251caa347ce8243 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 21 Mar 2024 11:13:42 +0100 Subject: [PATCH 211/497] Add change note --- .../change-notes/2024-03-21-change-compareto-signature.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md diff --git a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md new file mode 100644 index 00000000000..026321ea9af --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. + From 9d655520cc083cf888c80ebe43ef5d43649864dc Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 21 Mar 2024 11:26:45 +0100 Subject: [PATCH 212/497] Code quality improvement --- csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index cf3298b09ea..6f6c17566bf 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -33,12 +33,13 @@ predicate compareToMethod(Method m, Type paramType) { paramType = m.getAParameter().getType() } -from Method m, RefType declaringType, Type actualParamType +from Method m, RefType declaringType, Type actualParamType, string paramTypeName where m.isSourceDeclaration() and declaringType = m.getDeclaringType() and compareToMethod(m, actualParamType) and - not implementsIComparable(declaringType, actualParamType) + not implementsIComparable(declaringType, actualParamType) and + paramTypeName = actualParamType.getName() select m, - "The parameter of this 'CompareTo' method is of type '" + actualParamType.getName() + - "', but the declaring type does not implement 'IComparable<" + actualParamType.getName() + ">'." + "The parameter of this 'CompareTo' method is of type '" + paramTypeName + + "', but the declaring type does not implement 'IComparable<" + paramTypeName + ">'." From a3ae304dfea10b29a712715a86f1cbbd585c09d3 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 21 Mar 2024 11:32:23 +0100 Subject: [PATCH 213/497] C++: Handle `getInitializingExpr` in PrintAST --- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 7 +- .../library-tests/ir/ir/PrintAST.expected | 112 ++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index fa894a8b0fb..88dce1ce0b4 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -309,9 +309,12 @@ class ExprNode extends AstNode { override AstNode getChildInternal(int childIndex) { result.getAst() = expr.getChild(childIndex) or + childIndex = max(int index | exists(expr.getChild(index)) or index = 0) + 1 and + result.getAst() = expr.(ConditionDeclExpr).getInitializingExpr() + or exists(int destructorIndex | result.getAst() = expr.getImplicitDestructorCall(destructorIndex) and - childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 1 + childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 2 ) } @@ -686,6 +689,8 @@ private string getChildAccessorWithoutConversions(Locatable parent, Element chil not namedExprChildPredicates(expr, child, _) and exists(int n | expr.getChild(n) = child and result = "getChild(" + n + ")") or + expr.(ConditionDeclExpr).getInitializingExpr() = child and result = "getInitializingExpr()" + or exists(int n | expr.getImplicitDestructorCall(n) = child and result = "getImplicitDestructorCall(" + n + ")" diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 3c922cd3a5a..ddf5d8b1f5c 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -8812,6 +8812,15 @@ ir.cpp: # 976| getVariableAccess(): [VariableAccess] b # 976| Type = [BoolType] bool # 976| ValueCategory = prvalue(load) +# 976| getInitializingExpr(): [LTExpr] ... < ... +# 976| Type = [BoolType] bool +# 976| ValueCategory = prvalue +# 976| getLesserOperand(): [VariableAccess] x +# 976| Type = [IntType] int +# 976| ValueCategory = prvalue(load) +# 976| getGreaterOperand(): [VariableAccess] y +# 976| Type = [IntType] int +# 976| ValueCategory = prvalue(load) # 976| getThen(): [BlockStmt] { ... } # 977| getStmt(0): [ExprStmt] ExprStmt # 977| getExpr(): [AssignExpr] ... = ... @@ -8831,6 +8840,15 @@ ir.cpp: # 979| getVariableAccess(): [VariableAccess] z # 979| Type = [IntType] int # 979| ValueCategory = prvalue(load) +# 979| getInitializingExpr(): [AddExpr] ... + ... +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue +# 979| getLeftOperand(): [VariableAccess] x +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue(load) +# 979| getRightOperand(): [VariableAccess] y +# 979| Type = [IntType] int +# 979| ValueCategory = prvalue(load) # 979| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 979| Conversion = [BoolConversion] conversion to bool # 979| Type = [BoolType] bool @@ -8854,6 +8872,12 @@ ir.cpp: # 982| getVariableAccess(): [VariableAccess] p # 982| Type = [IntPointerType] int * # 982| ValueCategory = prvalue(load) +# 982| getInitializingExpr(): [AddressOfExpr] & ... +# 982| Type = [IntPointerType] int * +# 982| ValueCategory = prvalue +# 982| getOperand(): [VariableAccess] x +# 982| Type = [IntType] int +# 982| ValueCategory = lvalue # 982| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 982| Conversion = [BoolConversion] conversion to bool # 982| Type = [BoolType] bool @@ -8888,6 +8912,15 @@ ir.cpp: # 988| getVariableAccess(): [VariableAccess] b # 988| Type = [BoolType] bool # 988| ValueCategory = prvalue(load) +# 988| getInitializingExpr(): [LTExpr] ... < ... +# 988| Type = [BoolType] bool +# 988| ValueCategory = prvalue +# 988| getLesserOperand(): [VariableAccess] x +# 988| Type = [IntType] int +# 988| ValueCategory = prvalue(load) +# 988| getGreaterOperand(): [VariableAccess] y +# 988| Type = [IntType] int +# 988| ValueCategory = prvalue(load) # 988| getStmt(): [BlockStmt] { ... } # 990| getStmt(1): [WhileStmt] while (...) ... # 990| getCondition(): [ConditionDeclExpr] (condition decl) @@ -8896,6 +8929,15 @@ ir.cpp: # 990| getVariableAccess(): [VariableAccess] z # 990| Type = [IntType] int # 990| ValueCategory = prvalue(load) +# 990| getInitializingExpr(): [AddExpr] ... + ... +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue +# 990| getLeftOperand(): [VariableAccess] x +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue(load) +# 990| getRightOperand(): [VariableAccess] y +# 990| Type = [IntType] int +# 990| ValueCategory = prvalue(load) # 990| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 990| Conversion = [BoolConversion] conversion to bool # 990| Type = [BoolType] bool @@ -8908,6 +8950,12 @@ ir.cpp: # 992| getVariableAccess(): [VariableAccess] p # 992| Type = [IntPointerType] int * # 992| ValueCategory = prvalue(load) +# 992| getInitializingExpr(): [AddressOfExpr] & ... +# 992| Type = [IntPointerType] int * +# 992| ValueCategory = prvalue +# 992| getOperand(): [VariableAccess] x +# 992| Type = [IntType] int +# 992| ValueCategory = lvalue # 992| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 992| Conversion = [BoolConversion] conversion to bool # 992| Type = [BoolType] bool @@ -14780,6 +14828,9 @@ ir.cpp: # 1816| getVariableAccess(): [VariableAccess] w2 # 1816| Type = [IntType] int # 1816| ValueCategory = prvalue(load) +# 1816| getInitializingExpr(): [VariableAccess] w +# 1816| Type = [IntType] int +# 1816| ValueCategory = prvalue(load) # 1816| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1816| Conversion = [BoolConversion] conversion to bool # 1816| Type = [BoolType] bool @@ -14815,6 +14866,9 @@ ir.cpp: # 1820| getVariableAccess(): [VariableAccess] v2 # 1820| Type = [IntType] int # 1820| ValueCategory = prvalue(load) +# 1820| getInitializingExpr(): [VariableAccess] v +# 1820| Type = [IntType] int +# 1820| ValueCategory = prvalue(load) # 1820| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1820| Conversion = [BoolConversion] conversion to bool # 1820| Type = [BoolType] bool @@ -14875,6 +14929,9 @@ ir.cpp: # 1829| getVariableAccess(): [VariableAccess] z2 # 1829| Type = [IntType] int # 1829| ValueCategory = prvalue(load) +# 1829| getInitializingExpr(): [VariableAccess] z +# 1829| Type = [IntType] int +# 1829| ValueCategory = prvalue(load) # 1829| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 1829| Conversion = [BoolConversion] conversion to bool # 1829| Type = [BoolType] bool @@ -14991,6 +15048,9 @@ ir.cpp: # 1846| getVariableAccess(): [VariableAccess] w2 # 1846| Type = [IntType] int # 1846| ValueCategory = prvalue(load) +# 1846| getInitializingExpr(): [VariableAccess] w +# 1846| Type = [IntType] int +# 1846| ValueCategory = prvalue(load) # 1846| getStmt(): [BlockStmt] { ... } # 1847| getStmt(0): [SwitchCase] default: # 1848| getStmt(1): [ExprStmt] ExprStmt @@ -15023,6 +15083,9 @@ ir.cpp: # 1851| getVariableAccess(): [VariableAccess] v2 # 1851| Type = [IntType] int # 1851| ValueCategory = prvalue(load) +# 1851| getInitializingExpr(): [VariableAccess] v +# 1851| Type = [IntType] int +# 1851| ValueCategory = prvalue(load) # 1851| getStmt(): [BlockStmt] { ... } # 1852| getStmt(0): [SwitchCase] default: # 1853| getStmt(1): [ExprStmt] ExprStmt @@ -15077,6 +15140,9 @@ ir.cpp: # 1862| getVariableAccess(): [VariableAccess] z2 # 1862| Type = [IntType] int # 1862| ValueCategory = prvalue(load) +# 1862| getInitializingExpr(): [VariableAccess] z +# 1862| Type = [IntType] int +# 1862| ValueCategory = prvalue(load) # 1862| getStmt(): [BlockStmt] { ... } # 1863| getStmt(0): [SwitchCase] default: # 1864| getStmt(1): [ExprStmt] ExprStmt @@ -17048,6 +17114,10 @@ ir.cpp: # 2169| getQualifier(): [VariableAccess] b # 2169| Type = [Struct] HasOperatorBool # 2169| ValueCategory = prvalue(load) +# 2169| getInitializingExpr(): [Literal] 0 +# 2169| Type = [Struct] HasOperatorBool +# 2169| Value = [Literal] 0 +# 2169| ValueCategory = prvalue # 2169| getThen(): [BlockStmt] { ... } # 2170| getStmt(1): [ReturnStmt] return ... # 2172| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) @@ -18650,6 +18720,12 @@ ir.cpp: # 2318| getQualifier(): [VariableAccess] B # 2318| Type = [Class] Bool # 2318| ValueCategory = prvalue(load) +# 2318| getInitializingExpr(): [ConstructorCall] call to Bool +# 2318| Type = [VoidType] void +# 2318| ValueCategory = prvalue +# 2318| getArgument(0): [VariableAccess] b +# 2318| Type = [BoolType] bool +# 2318| ValueCategory = prvalue(load) # 2318| getThen(): [BlockStmt] { ... } # 2319| getStmt(0): [DeclStmt] declaration # 2319| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 @@ -18731,6 +18807,12 @@ ir.cpp: # 2334| getQualifier(): [VariableAccess] B # 2334| Type = [Class] Bool # 2334| ValueCategory = prvalue(load) +# 2334| getInitializingExpr(): [ConstructorCall] call to Bool +# 2334| Type = [VoidType] void +# 2334| ValueCategory = prvalue +# 2334| getArgument(0): [VariableAccess] b +# 2334| Type = [BoolType] bool +# 2334| ValueCategory = prvalue(load) # 2334| getStmt(): [BlockStmt] { ... } # 2335| getStmt(0): [ExprStmt] ExprStmt # 2335| getExpr(): [AssignExpr] ... = ... @@ -19678,6 +19760,21 @@ ir.cpp: # 2397| getVariableAccess(): [VariableAccess] x # 2397| Type = [PlainCharType] char # 2397| ValueCategory = prvalue(load) +# 2397| getInitializingExpr(): [FunctionCall] call to get_x +# 2397| Type = [PlainCharType] char +# 2397| ValueCategory = prvalue +# 2397| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2397| Type = [VoidType] void +# 2397| ValueCategory = prvalue +# 2397| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2397| Type = [VoidType] void +# 2397| ValueCategory = prvalue +# 2397| getQualifier(): [ReuseExpr] reuse of temporary object +# 2397| Type = [Class] ClassWithDestructor +# 2397| ValueCategory = xvalue +# 2397| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2397| Type = [Class] ClassWithDestructor +# 2397| ValueCategory = prvalue(load) # 2397| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 2397| Conversion = [BoolConversion] conversion to bool # 2397| Type = [BoolType] bool @@ -19749,6 +19846,21 @@ ir.cpp: # 2406| getVariableAccess(): [VariableAccess] x # 2406| Type = [PlainCharType] char # 2406| ValueCategory = prvalue(load) +# 2406| getInitializingExpr(): [FunctionCall] call to get_x +# 2406| Type = [PlainCharType] char +# 2406| ValueCategory = prvalue +# 2406| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2406| Type = [VoidType] void +# 2406| ValueCategory = prvalue +# 2406| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2406| Type = [VoidType] void +# 2406| ValueCategory = prvalue +# 2406| getQualifier(): [ReuseExpr] reuse of temporary object +# 2406| Type = [Class] ClassWithDestructor +# 2406| ValueCategory = xvalue +# 2406| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2406| Type = [Class] ClassWithDestructor +# 2406| ValueCategory = prvalue(load) # 2406| getVariableAccess().getFullyConverted(): [CStyleCast] (int)... # 2406| Conversion = [IntegralConversion] integral conversion # 2406| Type = [IntType] int From 4c4ebd907e51be023d59c50792a3047aec46f6dd Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 21 Mar 2024 11:54:29 +0100 Subject: [PATCH 214/497] C++: Update more expected test results --- cpp/ql/test/examples/expressions/PrintAST.expected | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 86aa1e36414..4aefbff5c55 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -105,10 +105,24 @@ ConditionDecl.cpp: # 3| getVariableAccess(): [VariableAccess] k # 3| Type = [IntType] int # 3| ValueCategory = prvalue(load) +# 3| getInitializingExpr(): [LTExpr] ... < ... +# 3| Type = [BoolType] bool +# 3| ValueCategory = prvalue +# 3| getLesserOperand(): [VariableAccess] j +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue(load) +# 3| getGreaterOperand(): [Literal] 5 +# 3| Type = [IntType] int +# 3| Value = [Literal] 5 +# 3| ValueCategory = prvalue # 3| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... # 3| Conversion = [BoolConversion] conversion to bool # 3| Type = [BoolType] bool # 3| ValueCategory = prvalue +# 3| getInitializingExpr().getFullyConverted(): [CStyleCast] (int)... +# 3| Conversion = [IntegralConversion] integral conversion +# 3| Type = [IntType] int +# 3| ValueCategory = prvalue # 3| getStmt(): [BlockStmt] { ... } # 5| getStmt(2): [ReturnStmt] return ... ConstructorCall.cpp: From 2aa5ae41fb98a84f778bcb1b428b06288f8d51de Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 21 Mar 2024 11:23:05 +0100 Subject: [PATCH 215/497] Python: Fix join-order problem in SqlAlchemy No major performance impact, more of a learning example for myself (had +3000 join order badness). Initial tuple counts ``` Evaluated recursive predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@594cfx2g in 1ms on iteration 1 (delta size: 4). Evaluated relational algebra for predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@594cfx2g on iteration 1 running pipeline base with tuple counts: 37793 ~0% {3} r1 = JOIN `ApiGraphs::API::Node.getACall/0#dispred#312deb92_10#join_rhs` WITH DataFlowPublic::CallCfgNode#b8ddbf81 ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Rhs.1 0 ~0% {2} | JOIN WITH `SqlAlchemy::SqlAlchemy::Connection::classRef/0#565fc3ad` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 30 ~0% {5} r2 = JOIN DataFlowPublic::CallCfgNode#b8ddbf81 WITH `DataFlowPublic::MethodCallNode.calls/2#dispred#1dd1e0f4#ffb` ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Rhs.1, Rhs.2, _ {4} | REWRITE WITH NOT [NOT [Tmp.4 := "begin", TEST InOut.3 = Tmp.4], NOT [Tmp.4 := "connect", TEST InOut.3 = Tmp.4]] KEEPING 4 21 ~0% {3} | SCAN OUTPUT In.2, In.0, In.1 4 ~0% {2} | JOIN WITH `SqlAlchemy::SqlAlchemy::Engine::instance/0#1828baef` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 4 ~0% {2} r3 = r1 UNION r2 return r3 ``` which is fixed by the only_bind_out ``` Evaluated recursive predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@49effxtg in 0ms on iteration 1 (delta size: 0). Evaluated relational algebra for predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@49effxtg on iteration 1 running pipeline base with tuple counts: 0 ~0% {1} r1 = JOIN `SqlAlchemy::SqlAlchemy::Connection::classRef/0#565fc3ad` WITH `ApiGraphs::API::Node.getACall/0#dispred#312deb92` ON FIRST 1 OUTPUT Rhs.1 0 ~0% {2} | JOIN WITH DataFlowPublic::CallCfgNode#b8ddbf81 ON FIRST 1 OUTPUT Lhs.0, Rhs.1 return r1 ``` We also had this initial problem ``` Evaluated recursive predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@594cfx2g in 1ms on iteration 4 (delta size: 0). Evaluated relational algebra for predicate SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0@594cfx2g on iteration 4 running pipeline standard with tuple counts: 48722 ~6% {2} r1 = DataFlowPublic::CallCfgNode#b8ddbf81 AND NOT SqlAlchemy::SqlAlchemy::Connection::ConnectionConstruction#45e716e0#prev(FIRST 2) 48722 ~3% {3} r2 = SCAN r1 OUTPUT In.0, _, In.1 48722 ~1% {3} | REWRITE WITH Out.1 := "connect" 16 ~0% {3} | JOIN WITH `DataFlowPublic::MethodCallNode.calls/2#dispred#1dd1e0f4#ffb_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 0 ~0% {2} | JOIN WITH `SqlAlchemy::SqlAlchemy::Connection::instance/0#5ed87c17#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 48722 ~3% {3} r3 = SCAN r1 OUTPUT In.0, _, In.1 48722 ~2% {3} | REWRITE WITH Out.1 := "execution_options" 9 ~0% {3} | JOIN WITH `DataFlowPublic::MethodCallNode.calls/2#dispred#1dd1e0f4#ffb_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 0 ~0% {2} | JOIN WITH `SqlAlchemy::SqlAlchemy::Connection::instance/0#5ed87c17#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 0 ~0% {2} r4 = r2 UNION r3 return r4 ``` which is fixed by `connectionConstruction_helper` ``` Evaluated recursive predicate SqlAlchemy::SqlAlchemy::Connection::helper/0#62cfc178#b@4f295yef in 1ms on iteration 4 (delta size: 0). Evaluated relational algebra for predicate SqlAlchemy::SqlAlchemy::Connection::helper/0#62cfc178#b@4f295yef on iteration 4 running pipeline standard with tuple counts: 4 ~0% {1} r1 = JOIN `SqlAlchemy::SqlAlchemy::Connection::instance/1#029b4c87#prev_delta` WITH `TypeTrackingImpl::TypeTracker::end/0#2ac2cfd4` ON FIRST 1 OUTPUT Lhs.1 16 ~0% {1} | JOIN WITH `LocalSources::Cached::hasLocalSource/2#8b3ee0ec_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1 0 ~0% {3} | JOIN WITH `DataFlowPublic::MethodCallNode.calls/2#dispred#1dd1e0f4#ffb_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Rhs.2, _ 0 ~0% {2} | REWRITE WITH NOT [NOT [Tmp.2 := "connect", TEST InOut.1 = Tmp.2], NOT [Tmp.2 := "execution_options", TEST InOut.1 = Tmp.2]] KEEPING 2 0 ~0% {1} | JOIN WITH DataFlowPublic::CallCfgNode#b8ddbf81 ON FIRST 1 OUTPUT Lhs.0 0 ~0% {1} | AND NOT `SqlAlchemy::SqlAlchemy::Connection::helper/0#62cfc178#b#prev`(FIRST 1) return r1 ``` --- .../semmle/python/frameworks/SqlAlchemy.qll | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index adeec0390fb..b5f5dcddbeb 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -113,15 +113,25 @@ module SqlAlchemy { */ abstract class InstanceSource extends DataFlow::LocalSourceNode { } + /** + * join-ordering helper for ConnectionConstruction char-pred -- without this would + * start with _all_ `CallCfgNode` and join those with `MethodCallNode` .. which is + * silly + */ + pragma[noinline] + private DataFlow::MethodCallNode connectionConstruction_helper() { + result.calls(Engine::instance(), ["begin", "connect"]) + or + result.calls(instance(), ["connect", "execution_options"]) + } + private class ConnectionConstruction extends InstanceSource, DataFlow::CallCfgNode { ConnectionConstruction() { - this = classRef().getACall() + // without the `pragma[only_bind_out]` we would start with joining + // `API::Node.getACall` with `CallCfgNode` which is not optimal + this = pragma[only_bind_out](classRef().getACall()) or - this.(DataFlow::MethodCallNode).calls(Engine::instance(), ["begin", "connect"]) - or - this.(DataFlow::MethodCallNode).calls(instance(), "connect") - or - this.(DataFlow::MethodCallNode).calls(instance(), "execution_options") + this = connectionConstruction_helper() } } From cff63ad5d5490d3666bde49d0a7992ea44ffc2c7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 21 Mar 2024 12:31:58 +0100 Subject: [PATCH 216/497] Python: Fix small join-order problem for call-graph problem is: ``` 14294 ~33% {1} r23 = r21 UNION r22 13626 ~0% {2} | JOIN WITH `DataFlowPublic::Node.getEnclosingCallable/0#dispred#be95825a` ON FIRST 1 OUTPUT Rhs.1, Lhs.0 11871493 ~2% {2} | JOIN WITH `DataFlowPublic::Node.getEnclosingCallable/0#dispred#be95825a_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 6810938 ~3% {2} | JOIN WITH num#DataFlowPublic::TCfgNode#2cd2fb22_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 0 ~0% {4} | JOIN WITH `DataFlowDispatch::resolveMethodCall/4#3067f1f1#reorder_0_3_1_2#prev` ON FIRST 2 OUTPUT Rhs.3, Lhs.1, Lhs.0, Rhs.2 0 ~0% {4} | JOIN WITH num#DataFlowDispatch::CallTypeClassMethod#3508c3e5 ON FIRST 1 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.1 0 ~0% {4} | JOIN WITH `DataFlowDispatch::resolveCall/3#454c02d8#reorder_1_0_2#prev` ON FIRST 3 OUTPUT Lhs.3, Lhs.1, Lhs.0, Lhs.2 0 ~0% {5} | JOIN WITH num#DataFlowDispatch::TSelfArgumentPosition#de6d64b8 CARTESIAN PRODUCT OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.0, Rhs.0 ``` that is, it does cartesian product of DataFlowPublic::Node.getEnclosingCallable After fix ``` 14294 ~33% {1} r23 = r21 UNION r22 0 ~0% {4} | JOIN WITH `DataFlowDispatch::resolveMethodCall/4#3067f1f1#reorder_3_0_1_2#prev` ON FIRST 1 OUTPUT Rhs.3, Lhs.0, Rhs.1, Rhs.2 0 ~0% {4} | JOIN WITH num#DataFlowDispatch::CallTypeClassMethod#3508c3e5 ON FIRST 1 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.1 0 ~0% {4} | JOIN WITH `DataFlowDispatch::resolveCall/3#454c02d8#reorder_1_0_2#prev` ON FIRST 3 OUTPUT Lhs.1, Lhs.3, Lhs.0, Lhs.2 0 ~0% {5} | JOIN WITH num#DataFlowPublic::TCfgNode#2cd2fb22 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Lhs.2, Lhs.3 0 ~0% {5} | JOIN WITH `DataFlowPublic::Node.getEnclosingCallable/0#dispred#be95825a` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2, Lhs.3, Lhs.4 0 ~0% {4} | JOIN WITH `DataFlowPublic::Node.getEnclosingCallable/0#dispred#be95825a` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4 0 ~0% {5} | JOIN WITH num#DataFlowDispatch::TSelfArgumentPosition#de6d64b8 CARTESIAN PRODUCT OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.0, Rhs.0 ``` Overall stats (old) Pipeline standard for DataFlowDispatch::getCallArg/5#21589076@b30c7vxg was evaluated in 51 iterations totaling 54ms (delta sizes total: 38247). ==> (new) Pipeline standard for DataFlowDispatch::getCallArg/5#21589076@c1559vxu was evaluated in 51 iterations totaling 28ms (delta sizes total: 38247). --- .../dataflow/new/internal/DataFlowDispatch.qll | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index b869bdda521..d4af28d4e26 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1302,9 +1302,7 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar // // call_func(my_obj.some_method) // ``` - exists(CfgNode cfgNode | cfgNode.getNode() = call | - cfgNode.getEnclosingCallable() = arg.getEnclosingCallable() - ) + exists(CfgNode cfgNode | cfgNode.getNode() = call | sameEnclosingCallable(cfgNode, arg)) or // cls argument for classmethod calls -- see note above about bound methods type instanceof CallTypeClassMethod and @@ -1312,9 +1310,7 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar resolveMethodCall(call, target, type, arg) and (arg = classTracker(_) or arg = clsArgumentTracker(_)) and // dataflow lib has requirement that arguments and calls are in same enclosing callable. - exists(CfgNode cfgNode | cfgNode.getNode() = call | - cfgNode.getEnclosingCallable() = arg.getEnclosingCallable() - ) + exists(CfgNode cfgNode | cfgNode.getNode() = call | sameEnclosingCallable(cfgNode, arg)) or // normal arguments for method calls ( @@ -1365,6 +1361,16 @@ predicate getCallArg(CallNode call, Function target, CallType type, Node arg, Ar ) } +/** + * join-order helper for getCallArg, since otherwise we would do cartesian product of + * the enclosing callables + */ +bindingset[node1, node2] +pragma[inline_late] +private predicate sameEnclosingCallable(Node node1, Node node2) { + node1.getEnclosingCallable() = node2.getEnclosingCallable() +} + // ============================================================================= // DataFlowCall // ============================================================================= From 33fe5abf94ce192832c38110c25ee1c662a8a74e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 21 Mar 2024 13:29:40 +0000 Subject: [PATCH 217/497] Kotlin: Remove references to legacy ODASA_SNAPSHOT env var --- .../src/main/java/com/semmle/util/process/Env.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java index 2e00bb61b32..0ce3d42c14f 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java @@ -274,8 +274,6 @@ public class Env { /** * The location of the snapshot being built. */ - ODASA_SNAPSHOT, - ODASA_SNAPSHOT_NAME, ODASA_SRC, ODASA_DB, ODASA_BUILD_ERROR_DIR, From 1b3605754fdb8b8355b97ba33c2f0749ba5884b6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 21 Mar 2024 13:38:54 +0000 Subject: [PATCH 218/497] Java: Add a changenote for dropping ODASA_SNAPSHOT support --- java/ql/lib/change-notes/2024-03-21-env-vars.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-03-21-env-vars.md diff --git a/java/ql/lib/change-notes/2024-03-21-env-vars.md b/java/ql/lib/change-notes/2024-03-21-env-vars.md new file mode 100644 index 00000000000..9306a814a7c --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-21-env-vars.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. From 79094e4b89dfcc9e9d6180b64285ec46ae52994d Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Thu, 21 Mar 2024 13:51:03 +0000 Subject: [PATCH 219/497] Swift genrule: Replace local with no-sandbox. This allows the bazel cache to cache this genrule invocation. It shouldn't depend on system-specific binaries, so I believe this is correct. This is the only part of our build where we otherwise need to recompute parts after pulling in a full cache. --- swift/third_party/BUILD.swift-toolchain-linux.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/third_party/BUILD.swift-toolchain-linux.bazel b/swift/third_party/BUILD.swift-toolchain-linux.bazel index 7c00eae382a..8125d4a0448 100644 --- a/swift/third_party/BUILD.swift-toolchain-linux.bazel +++ b/swift/third_party/BUILD.swift-toolchain-linux.bazel @@ -30,7 +30,7 @@ _pm_interface_files = [ srcs = ["%s/%s/%s" % (_strip_prefix, dir, interface)], outs = [module], cmd = "$(location usr/bin/swift-frontend) -compile-module-from-interface $< -o $@ -I $$(dirname $<)", - local = True, + tags = ["no-sandbox"], tools = ["usr/bin/swift-frontend"], ), pkg_files( From bfa8515b28f84b70cefa843fa05dc6858b9d23af Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 21 Mar 2024 14:51:45 +0100 Subject: [PATCH 220/497] Python: Apply suggestions from code review Co-authored-by: Anders Schack-Mulligen --- python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll index b5f5dcddbeb..fb747a4cabc 100644 --- a/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll +++ b/python/ql/lib/semmle/python/frameworks/SqlAlchemy.qll @@ -129,7 +129,7 @@ module SqlAlchemy { ConnectionConstruction() { // without the `pragma[only_bind_out]` we would start with joining // `API::Node.getACall` with `CallCfgNode` which is not optimal - this = pragma[only_bind_out](classRef().getACall()) + this = pragma[only_bind_out](classRef()).getACall() or this = connectionConstruction_helper() } From 9cc287dff164b27653b60ca6298fbe8faaca02c5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 21 Mar 2024 14:45:54 +0100 Subject: [PATCH 221/497] C++: Handle destructors of range-based for-loop initializer statements --- .../library-tests/ir/ir/PrintAST.expected | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index ddf5d8b1f5c..aa703b63af7 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -17357,6 +17357,12 @@ ir.cpp: # 2201| getArgument(0): [VariableAccess] x # 2201| Type = [Class] ClassWithDestructor # 2201| ValueCategory = prvalue(load) +# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2201| Type = [VoidType] void +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [ReuseExpr] reuse of temporary object +# 2201| Type = [Class] ClassWithDestructor +# 2201| ValueCategory = xvalue # 2201| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2201| Type = [Class] ClassWithDestructor # 2201| ValueCategory = lvalue @@ -17489,6 +17495,12 @@ ir.cpp: # 2204| getArgument(0): [VariableAccess] x # 2204| Type = [Class] ClassWithDestructor # 2204| ValueCategory = prvalue(load) +# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [ReuseExpr] reuse of temporary object +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = xvalue # 2204| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2204| Type = [Class] ClassWithDestructor # 2204| ValueCategory = lvalue @@ -17802,6 +17814,12 @@ ir.cpp: # 2215| getArgument(0): [VariableAccess] x # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = prvalue(load) +# 2215| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [ReuseExpr] reuse of temporary object +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = xvalue # 2215| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = lvalue @@ -19933,6 +19951,12 @@ ir.cpp: # 2416| getQualifier(): [ConstructorCall] call to ClassWithDestructor # 2416| Type = [VoidType] void # 2416| ValueCategory = prvalue +# 2416| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2416| Type = [VoidType] void +# 2416| ValueCategory = prvalue +# 2416| getQualifier(): [ReuseExpr] reuse of temporary object +# 2416| Type = [Class] ClassWithDestructor +# 2416| ValueCategory = xvalue # 2416| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2416| Type = [Class] ClassWithDestructor # 2416| ValueCategory = prvalue(load) From 98de4e209b320b778b2c07af9d0ee28c42ef990b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 21 Mar 2024 15:43:18 +0100 Subject: [PATCH 222/497] C++: Handle destructors of if and switch initializer statements --- .../test/library-tests/ir/ir/PrintAST.expected | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index aa703b63af7..a6276ecfc5a 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -19815,6 +19815,12 @@ ir.cpp: # 2400| getQualifier(): [ConstructorCall] call to ClassWithDestructor # 2400| Type = [VoidType] void # 2400| ValueCategory = prvalue +# 2400| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2400| Type = [VoidType] void +# 2400| ValueCategory = prvalue +# 2400| getQualifier(): [ReuseExpr] reuse of temporary object +# 2400| Type = [Class] ClassWithDestructor +# 2400| ValueCategory = xvalue # 2400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2400| Type = [Class] ClassWithDestructor # 2400| ValueCategory = prvalue(load) @@ -19843,6 +19849,12 @@ ir.cpp: # 2403| getQualifier(): [ConstructorCall] call to ClassWithDestructor # 2403| Type = [VoidType] void # 2403| ValueCategory = prvalue +# 2403| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2403| Type = [VoidType] void +# 2403| ValueCategory = prvalue +# 2403| getQualifier(): [ReuseExpr] reuse of temporary object +# 2403| Type = [Class] ClassWithDestructor +# 2403| ValueCategory = xvalue # 2403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2403| Type = [Class] ClassWithDestructor # 2403| ValueCategory = prvalue(load) @@ -19912,6 +19924,12 @@ ir.cpp: # 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor # 2411| Type = [VoidType] void # 2411| ValueCategory = prvalue +# 2411| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ReuseExpr] reuse of temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = xvalue # 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2411| Type = [Class] ClassWithDestructor # 2411| ValueCategory = prvalue(load) From 93f940aa9c2b911d878654a80a285586adc38084 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 21 Mar 2024 15:55:05 +0100 Subject: [PATCH 223/497] Python: Join-order improvement for `DataFlowDispatch::TrackAttrReadInput` I was surprised to see that this predicate actually gets evaluated 3 times - Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@c15596yu was evaluated in 74 iterations totaling 165ms (delta sizes total: 113119). - Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@3459ejws was evaluated in 30 iterations totaling 76ms (delta sizes total: 32555). - Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@5ac22jwq was evaluated in 30 iterations totaling 108ms (delta sizes total: 32555). It does however fit with it being used in exactly 3 places: https://github.com/search?q=repo%3Agithub%2Fcodeql+%2FattrReadTracker%5C%28%2F&type=code -- so I assume it's because each use forces a new evaluation. Although that's something we could look into solving, for now I'm just trying to fix the join-order. Initial ``` Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@3459ejws was evaluated in 30 iterations totaling 76ms (delta sizes total: 32555). 7068090 ~0% {2} r1 = SCAN Attributes::AttrRead#class#f6c3f431 OUTPUT In.0, In.0 {2} | AND NOT `DataFlowDispatch::TrackAttrReadInput::start/2#67f26627#prev`(FIRST 2) 3901178 ~5% {2} | SCAN OUTPUT In.1, In.1 3901178 ~0% {3} | JOIN WITH `Attributes::AttrRef.getObject/0#dispred#d7cd0a97` ON FIRST 1 OUTPUT Rhs.1, Lhs.0, Lhs.1 13615 ~1% {2} r2 = JOIN r1 WITH `DataFlowDispatch::classTracker/1#d11f2237#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 94 ~2% {2} r3 = JOIN r1 WITH `DataFlowDispatch::superCallTwoArgumentTracker/2#d18be99f#reorder_2_0_1#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 18846 ~1% {2} r4 = JOIN r1 WITH `DataFlowDispatch::classInstanceTracker/1#d73ecef4#prev_delta_1#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 32555 ~1% {2} r5 = r2 UNION r3 UNION r4 return r5 ``` ==> ``` Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@f2517jwq was evaluated in 30 iterations totaling 12ms (delta sizes total: 32704). 186719 ~121% {1} r1 = SCAN `DataFlowDispatch::classInstanceTracker/1#d73ecef4#prev_delta` OUTPUT In.1 164342 ~158% {1} r2 = SCAN `DataFlowDispatch::classTracker/1#d11f2237#reorder_1_0#prev_delta` OUTPUT In.0 96 ~0% {1} r3 = SCAN `DataFlowDispatch::superCallTwoArgumentTracker/2#d18be99f#reorder_2_0_1#prev_delta` OUTPUT In.0 351157 ~80% {1} r4 = r1 UNION r2 UNION r3 88074 ~14% {1} | JOIN WITH `Attributes::AttrRef.getObject/0#dispred#d7cd0a97_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1 41789 ~18% {2} | JOIN WITH Attributes::AttrRead#class#f6c3f431 ON FIRST 1 OUTPUT Lhs.0, Lhs.0 {2} | AND NOT `DataFlowDispatch::TrackAttrReadInput::start/2#67f26627#prev`(FIRST 2) 32883 ~2% {2} | SCAN OUTPUT In.1, In.1 return r4 ``` AND initial ``` Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@c15596yu was evaluated in 74 iterations totaling 165ms (delta sizes total: 113119). 17434622 ~0% {2} r1 = SCAN Attributes::AttrRead#class#f6c3f431 OUTPUT In.0, In.0 {2} | AND NOT `DataFlowDispatch::TrackAttrReadInput::start/2#67f26627#prev`(FIRST 2) 9483976 ~4% {2} | SCAN OUTPUT In.1, In.1 9483976 ~0% {3} | JOIN WITH `Attributes::AttrRef.getObject/0#dispred#d7cd0a97` ON FIRST 1 OUTPUT Rhs.1, Lhs.0, Lhs.1 19258 ~1% {2} r2 = JOIN r1 WITH `DataFlowDispatch::classInstanceTracker/1#d73ecef4#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 1654 ~1% {2} r3 = JOIN r1 WITH `DataFlowDispatch::superCallNoArgumentTracker/1#0a2e8a06#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 1314 ~4% {2} r4 = JOIN r1 WITH `DataFlowDispatch::clsArgumentTracker/1#47339327#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 94 ~2% {2} r5 = JOIN r1 WITH `DataFlowDispatch::superCallTwoArgumentTracker/2#d18be99f#reorder_2_0_1#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 77217 ~0% {2} r6 = JOIN r1 WITH `DataFlowDispatch::selfTracker/1#f157aa27#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 13632 ~1% {2} r7 = JOIN r1 WITH `DataFlowDispatch::classTracker/1#d11f2237#reorder_1_0#prev_delta` ON FIRST 1 OUTPUT Lhs.1, Lhs.2 113169 ~0% {2} r8 = r2 UNION r3 UNION r4 UNION r5 UNION r6 UNION r7 return r8 ``` ==> ``` Pipeline standard for DataFlowDispatch::TrackAttrReadInput::start/2#67f26627@d732e6yt was evaluated in 74 iterations totaling 31ms (delta sizes total: 113129). 186719 ~150% {1} r1 = SCAN `DataFlowDispatch::classInstanceTracker/1#d73ecef4#reorder_1_0#prev_delta` OUTPUT In.0 1669 ~0% {1} r2 = SCAN `DataFlowDispatch::superCallNoArgumentTracker/1#0a2e8a06#reorder_1_0#prev_delta` OUTPUT In.0 3425 ~15% {1} r3 = SCAN `DataFlowDispatch::clsArgumentTracker/1#47339327#prev_delta` OUTPUT In.1 96 ~0% {1} r4 = SCAN `DataFlowDispatch::superCallTwoArgumentTracker/2#d18be99f#reorder_2_0_1#prev_delta` OUTPUT In.0 123310 ~0% {1} r5 = SCAN `DataFlowDispatch::selfTracker/1#f157aa27#reorder_1_0#prev_delta` OUTPUT In.0 164342 ~581% {1} r6 = SCAN `DataFlowDispatch::classTracker/1#d11f2237#reorder_1_0#prev_delta` OUTPUT In.0 479561 ~94% {1} r7 = r1 UNION r2 UNION r3 UNION r4 UNION r5 UNION r6 169424 ~2% {1} | JOIN WITH `Attributes::AttrRef.getObject/0#dispred#d7cd0a97_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1 116290 ~0% {2} | JOIN WITH Attributes::AttrRead#class#f6c3f431 ON FIRST 1 OUTPUT Lhs.0, Lhs.0 {2} | AND NOT `DataFlowDispatch::TrackAttrReadInput::start/2#67f26627#prev`(FIRST 2) 113160 ~0% {2} | SCAN OUTPUT In.1, In.1 return r7 ``` --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index d4af28d4e26..ec8e2148e05 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -876,7 +876,7 @@ private module TrackAttrReadInput implements CallGraphConstruction::Simple::Inpu predicate start(Node start, AttrRead attr) { start = attr and - attr.getObject() in [ + pragma[only_bind_into](attr.getObject()) in [ classTracker(_), classInstanceTracker(_), selfTracker(_), clsArgumentTracker(_), superCallNoArgumentTracker(_), superCallTwoArgumentTracker(_, _) ] From a5b801b31f38c3d8173d4a54032f5b3220a89749 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 13:56:09 -0500 Subject: [PATCH 224/497] Add File reading methods --- csharp/ql/lib/ext/System.IO.model.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index e1120d5684e..7ad4a4b35ce 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -7,7 +7,18 @@ extensions: - ["System.IO", "File", False, "Create", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "File", False, "CreateText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "File", False, "Open", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "File", False, "Open", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "OpenRead", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "OpenText", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "File", False, "OpenWrite", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "File", False, "ReadAllBytes", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllBytesAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllLines", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllLinesAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllText", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadAllTextAsync", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadLines", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "File", False, "ReadLinesAsync", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "AppendText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "Create", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "CreateText", "", "", "ReturnValue", "file-write", "manual"] From bb9b0eabf27f3cf5548ee5205400b94c3fbfe973 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 13:56:25 -0500 Subject: [PATCH 225/497] Add BufferedStream summary models --- csharp/ql/lib/ext/System.IO.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 7ad4a4b35ce..c1d98d55410 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -36,6 +36,8 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: + - ["System.IO", "BufferedStream", False, "BufferedStream", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.IO", "BufferedStream", False, "BufferedStream", "(System.IO.Stream,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "FileStream", False, "FileStream", "(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)", "", "Argument[0]", "Argument[this]", "taint", "manual"] From a8c5e4e0f275514ae7a6b616bc14e36a9338401c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 13:59:04 -0500 Subject: [PATCH 226/497] FileInfo source models --- csharp/ql/lib/ext/System.IO.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index c1d98d55410..31ca78ff498 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -23,6 +23,8 @@ extensions: - ["System.IO", "FileInfo", False, "Create", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "CreateText", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file-write", "manual"] + - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "FileInfo", False, "OpenRead", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "OpenWrite", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file-write", "manual"] From 9232fafde1266fa8bcd34ac62476fdd57fd5e8f8 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 15:37:38 -0500 Subject: [PATCH 227/497] Add `System.IO.Stream::Read(Span)` model --- csharp/ql/lib/ext/System.IO.model.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 31ca78ff498..14838b50385 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -84,6 +84,7 @@ extensions: - ["System.IO", "Stream", True, "CopyToAsync", "(System.IO.Stream,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] From d387e6d0686840453601a7e18fedd4cd1590704f Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 7 Mar 2024 00:34:06 -0500 Subject: [PATCH 228/497] Fix flow-summary tests --- .../dataflow/library/FlowSummaries.expected | 18 +++++++++++++++++- .../library/FlowSummariesFiltered.expected | 4 +++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 30396dbf410..4a319fec7bf 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1478,6 +1478,7 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func,System.Buffers.ArrayPool);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -4067,6 +4068,7 @@ summary | ServiceStack.Text;NetCoreMemory;false;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;NetCoreMemory;false;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | ServiceStack.Text;RecyclableMemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStreamManager+EventHandler;false;BeginInvoke;(System.AsyncCallback,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStreamManager+LargeBufferDiscardedEventHandler;false;BeginInvoke;(ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamDiscardReason,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -9395,6 +9397,7 @@ summary | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;BrotliStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.Compression;BrotliStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9414,6 +9417,7 @@ summary | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;DeflateStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.Compression;DeflateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9431,6 +9435,7 @@ summary | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;GZipStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.Compression;GZipStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;GZipStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9446,6 +9451,7 @@ summary | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;ZLibStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.Compression;ZLibStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;ZLibStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9502,6 +9508,7 @@ summary | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9562,6 +9569,7 @@ summary | System.IO.Pipes;PipeStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Pipes;PipeStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO.Pipes;PipeStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO.Pipes;PipeStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Pipes;PipeStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9584,11 +9592,13 @@ summary | System.IO;BufferedStream;false;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream);;Argument[0];Argument[this];taint;manual | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;manual | | System.IO;BufferedStream;false;CopyTo;(System.IO.Stream,System.Int32);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;BufferedStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;BufferedStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;BufferedStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9685,6 +9695,7 @@ summary | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;FileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;FileStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;FileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9740,6 +9751,7 @@ summary | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;MemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;MemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;MemoryStream;false;ToArray;();;Argument[this];ReturnValue;taint;manual | @@ -9824,6 +9836,7 @@ summary | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -10038,6 +10051,7 @@ summary | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;UnmanagedMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[this];taint;df-generated | @@ -11977,6 +11991,7 @@ summary | System.Net.Quic;QuicStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Quic;QuicStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.Net.Quic;QuicStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.Net.Quic;QuicStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Quic;QuicStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -12082,6 +12097,7 @@ summary | System.Net.Sockets;NetworkStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.Net.Sockets;NetworkStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index cf17fed3269..50b1a5178cf 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -7532,7 +7532,8 @@ | System.IO;BinaryWriter;false;Write;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.IO;BinaryWriter;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;df-generated | | System.IO;BinaryWriter;false;get_BaseStream;();;Argument[this];ReturnValue;taint;df-generated | -| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream);;Argument[0];Argument[this];taint;manual | +| System.IO;BufferedStream;false;BufferedStream;(System.IO.Stream,System.Int32);;Argument[0];Argument[this];taint;manual | | System.IO;BufferedStream;false;get_UnderlyingStream;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Directory;false;CreateDirectory;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Directory;false;CreateDirectory;(System.String,System.IO.UnixFileMode);;Argument[0];ReturnValue;taint;df-generated | @@ -7738,6 +7739,7 @@ | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | From 3e29a8d2a189a36e8b47a94dd022f3210957d5e8 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 13:18:43 -0400 Subject: [PATCH 229/497] System.IO files test --- .../dataflow/flowsources/stored/file/Files.cs | 84 +++++++++++++++++++ .../flowsources/stored/file/Files.expected | 0 .../flowsources/stored/file/Files.ext.yml | 7 ++ .../dataflow/flowsources/stored/file/Files.ql | 12 +++ .../dataflow/flowsources/stored/file/options | 3 + 5 files changed, 106 insertions(+) create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs new file mode 100644 index 00000000000..168a7086f8d --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs @@ -0,0 +1,84 @@ +using System.IO; + +namespace Test +{ + class Files + { + public static void ReadAllText(string path) + { + string text = File.ReadAllText(path); + Sink(text); // $ hasTaintFlow=line:9 + } + + public static void ReadAllLines(string path) + { + string[] lines = File.ReadAllLines(path); + Sink(lines); // $ hasTaintFlow=line:15 + } + + public static void ReadAllBytes(string path) + { + byte[] bytes = File.ReadAllBytes(path); + Sink(bytes); // $ hasTaintFlow=line:21 + } + + public static void ReadLines(string path) + { + foreach (string line in File.ReadLines(path)) + { + Sink(line); // $ hasTaintFlow=line:27 + } + } + + public static void BuuferedRead(string path) + { + using (FileStream fs = new FileStream(path, FileMode.Open)) + { + using (BufferedStream bs = new BufferedStream(fs)) + { + using (StreamReader sr = new StreamReader(bs)) + { + string line; + while ((line = sr.ReadLine()) != null) + { + Sink(line); // $ hasTaintFlow=line:35 + } + } + } + } + } + + public static void ReadBlocks(string path) + { + using (FileStream fs = File.OpenRead(path)) + { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0) + { + Sink(buffer[0]); // $ hasTaintFlow=line:53 + } + } + } + + public static async void ReadAllTextAsync(string path) + { + string text = await File.ReadAllTextAsync(path); + Sink(text); // $ hasTaintFlow=line:66 + + using (FileStream fs = File.Open(path, FileMode.Open)) + { + using (StreamReader sr = new StreamReader(fs)) + { + string line; + while ((line = await sr.ReadLineAsync()) != null) + { + Sink(line); // $ hasTaintFlow=line:69 + } + } + } + } + + static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.expected b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml new file mode 100644 index 00000000000..520203b141f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["file", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql new file mode 100644 index 00000000000..1060ea756a2 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.ql @@ -0,0 +1,12 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources +import TestUtilities.InlineFlowTest +import TaintFlowTest + +module FilesConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options new file mode 100644 index 00000000000..13f94236f19 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs From a698684fecb4f52e1fc2e57cf3461460eb46c19e Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:00:42 -0400 Subject: [PATCH 230/497] `System.IO.Stream::ReadAtLeast` --- csharp/ql/lib/ext/System.IO.model.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 14838b50385..d10f9524065 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -87,6 +87,9 @@ extensions: - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", False, "WriteAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", True, "WriteAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] From 2a73677fd27a5b66708b1787faedfdce461a3d0c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:02:20 -0400 Subject: [PATCH 231/497] Missing `Stream::ReadAsync` overload --- csharp/ql/lib/ext/System.IO.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index d10f9524065..a93d12e7540 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -87,6 +87,8 @@ extensions: - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] From d6f085373e3a4acb27cc93cb47901bc62ac76618 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:06:04 -0400 Subject: [PATCH 232/497] `System.IO.Stream::ReadExactly` models --- csharp/ql/lib/ext/System.IO.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index a93d12e7540..4b0d417060a 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -92,6 +92,8 @@ extensions: - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", False, "WriteAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", True, "WriteAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] From e14e47cd735dd1b3325cbdbcb49a9c13b00ed208 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:07:12 -0400 Subject: [PATCH 233/497] Fix `Stream::Read(Span)` model --- csharp/ql/lib/ext/System.IO.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 4b0d417060a..c640a0cd56d 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -84,7 +84,7 @@ extensions: - ["System.IO", "Stream", True, "CopyToAsync", "(System.IO.Stream,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness From 08611f0c9c220d9af049a4d0b74cf553e76a0c84 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:35:56 -0400 Subject: [PATCH 234/497] Fix flow summary tests --- csharp/ql/lib/ext/System.IO.model.yml | 2 +- .../dataflow/library/FlowSummaries.expected | 78 +++++++++---------- .../library/FlowSummariesFiltered.expected | 14 ++-- 3 files changed, 45 insertions(+), 49 deletions(-) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index c640a0cd56d..2b23698fd21 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -89,7 +89,7 @@ extensions: - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 4a319fec7bf..055b9bba952 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1470,7 +1470,7 @@ summary | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -1478,9 +1478,9 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func,System.Buffers.ArrayPool);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -1488,7 +1488,7 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -4068,7 +4068,7 @@ summary | ServiceStack.Text;NetCoreMemory;false;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;NetCoreMemory;false;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| ServiceStack.Text;RecyclableMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | ServiceStack.Text;RecyclableMemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStreamManager+EventHandler;false;BeginInvoke;(System.AsyncCallback,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStreamManager+LargeBufferDiscardedEventHandler;false;BeginInvoke;(ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamDiscardReason,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -9397,9 +9397,9 @@ summary | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.Compression;BrotliStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;BrotliStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;BrotliStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;BrotliStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9417,9 +9417,9 @@ summary | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.Compression;DeflateStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;DeflateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;DeflateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;DeflateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9435,9 +9435,9 @@ summary | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Compression;GZipStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.Compression;GZipStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;GZipStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;GZipStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;GZipStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9451,9 +9451,9 @@ summary | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.Compression;ZLibStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;ZLibStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Compression;ZLibStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Compression;ZLibStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9508,10 +9508,9 @@ summary | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -9569,9 +9568,9 @@ summary | System.IO.Pipes;PipeStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO.Pipes;PipeStream;false;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.IO.Pipes;PipeStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO.Pipes;PipeStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Pipes;PipeStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO.Pipes;PipeStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO.Pipes;PipeStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9598,9 +9597,9 @@ summary | System.IO;BufferedStream;false;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;BufferedStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;BufferedStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;BufferedStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;BufferedStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9695,10 +9694,9 @@ summary | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;FileStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;FileStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;FileStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;FileStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -9751,9 +9749,9 @@ summary | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);;Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;MemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;MemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;false;ToArray;();;Argument[this];ReturnValue;taint;manual | | System.IO;MemoryStream;false;TryGetBuffer;(System.ArraySegment);;Argument[this];ReturnValue;taint;df-generated | | System.IO;MemoryStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | @@ -9826,6 +9824,10 @@ summary | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;false;FlushAsync;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeast;(System.Span,System.Int32,System.Boolean);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | @@ -9836,9 +9838,9 @@ summary | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -10051,9 +10053,9 @@ summary | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;UnmanagedMemoryStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;UnmanagedMemoryStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);;Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;false;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);;Argument[0];Argument[this];taint;df-generated | @@ -11991,9 +11993,9 @@ summary | System.Net.Quic;QuicStream;false;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Quic;QuicStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.Net.Quic;QuicStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Quic;QuicStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Quic;QuicStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Quic;QuicStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -12028,9 +12030,7 @@ summary | System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;NegotiateStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;NegotiateStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | @@ -12063,7 +12063,7 @@ summary | System.Net.Security;SslStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;SslStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;SslStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;SslStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Security;SslStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;false;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -12097,11 +12097,9 @@ summary | System.Net.Sockets;NetworkStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;false;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.Net.Sockets;NetworkStream;false;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Net.Sockets;NetworkStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | @@ -14256,7 +14254,7 @@ summary | System.Security.Cryptography;CryptoStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography;CryptoStream;false;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | | System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Cryptography;CryptoStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.Security.Cryptography;CryptoStream;false;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 50b1a5178cf..378fe3b3d01 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -7470,7 +7470,6 @@ | System.IO.IsolatedStorage;IsolatedStorage;false;get_AssemblyIdentity;();;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorage;false;get_DomainIdentity;();;Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO.MemoryMappedFiles;MemoryMappedFile;false;CreateFromFile;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.String,System.Int64,System.IO.MemoryMappedFiles.MemoryMappedFileAccess,System.IO.HandleInheritability,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | @@ -7618,7 +7617,6 @@ | System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.Boolean);;Argument[0];Argument[this];taint;manual | | System.IO;FileStream;false;FileStream;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,System.Int32,System.IO.FileOptions);;Argument[0];Argument[this];taint;manual | | System.IO;FileStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.IO;FileStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.IO;FileStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.IO;FileStream;false;get_SafeFileHandle;();;Argument[this];ReturnValue;taint;df-generated | @@ -7729,6 +7727,10 @@ | System.IO;Stream;false;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;false;FlushAsync;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;false;ReadAsync;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeast;(System.Span,System.Int32,System.Boolean);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;false;ReadExactly;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;false;Synchronized;(System.IO.Stream);;Argument[0];ReturnValue;taint;df-generated | | System.IO;Stream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);;Argument[3];Argument[3].Parameter[delegate-self];value;manual | @@ -7739,9 +7741,9 @@ | System.IO;Stream;true;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | | System.IO;Stream;true;FlushAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;true;Read;(System.Byte[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0];taint;manual | +| System.IO;Stream;true;Read;(System.Span);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.IO;Stream;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;Stream;true;Write;(System.Byte[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9675,8 +9677,6 @@ | System.Net.Security;NegotiateStream;false;BeginAuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;false;BeginAuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;false;FlushAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Security;NegotiateStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;false;get_RemoteIdentity;();;Argument[this];ReturnValue;taint;df-generated | @@ -9723,8 +9723,6 @@ | System.Net.Sockets;MulticastOption;false;set_Group;(System.Net.IPAddress);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;MulticastOption;false;set_LocalAddress;(System.Net.IPAddress);;Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;false;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);;Argument[0];Argument[this];taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | -| System.Net.Sockets;NetworkStream;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);;Argument[1];ReturnValue;taint;df-generated | | System.Net.Sockets;NetworkStream;false;get_Socket;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.Sockets;SafeSocketHandle;false;SafeSocketHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | From 46a9bb9804023bb2f66a68a2ef944de27ad9cbf8 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Mar 2024 22:42:56 -0400 Subject: [PATCH 235/497] Change note --- csharp/ql/lib/change-notes/2024-03-13-system.io-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-13-system.io-models.md diff --git a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md new file mode 100644 index 00000000000..84db6a663ae --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. From e2c2d574f859ab462dd7a264efb648cc5535f207 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Mar 2024 12:55:20 -0400 Subject: [PATCH 236/497] Add `FileInfo::OpenText` --- csharp/ql/lib/ext/System.IO.model.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 2b23698fd21..d78fb8e1e2d 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -25,6 +25,7 @@ extensions: - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileInfo", False, "Open", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "OpenRead", "", "", "ReturnValue", "file", "manual"] + - ["System.IO", "FileInfo", False, "OpenText", "", "", "ReturnValue", "file", "manual"] - ["System.IO", "FileInfo", False, "OpenWrite", "", "", "ReturnValue", "file-write", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file", "manual"] - ["System.IO", "FileStream", False, "FileStream", "", "", "Argument[this]", "file-write", "manual"] From 3e3eceea5f5f3a62ed2dfe1b561a9eeb6ed2cdf7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Mar 2024 12:55:54 -0400 Subject: [PATCH 237/497] Typo --- .../library-tests/dataflow/flowsources/stored/file/Files.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs index 168a7086f8d..37e9f2ed8f1 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/file/Files.cs @@ -30,7 +30,7 @@ namespace Test } } - public static void BuuferedRead(string path) + public static void BufferedRead(string path) { using (FileStream fs = new FileStream(path, FileMode.Open)) { From c7a746e3dcb9ff433c36064b60f40f8ec98bf156 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 21 Mar 2024 13:15:45 -0400 Subject: [PATCH 238/497] Flow summary tests --- .../dataflow/library/FlowSummaries.expected | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 055b9bba952..019e3572798 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -17,17 +17,43 @@ source | System.IO;File;false;Create;(System.String,System.Int32,System.IO.FileOptions);;ReturnValue;file-write;manual | | System.IO;File;false;CreateText;(System.String);;ReturnValue;file-write;manual | | System.IO;File;false;Open;(System.String,System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode);;ReturnValue;file;manual | | System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file;manual | | System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file;manual | | System.IO;File;false;Open;(System.String,System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;File;false;Open;(System.String,System.IO.FileStreamOptions);;ReturnValue;file;manual | +| System.IO;File;false;OpenRead;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;OpenText;(System.String);;ReturnValue;file;manual | | System.IO;File;false;OpenWrite;(System.String);;ReturnValue;file-write;manual | +| System.IO;File;false;ReadAllBytes;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllBytesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLines;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLines;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLinesAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllLinesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllText;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllText;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllTextAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadAllTextAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadLines;(System.String);;ReturnValue;file;manual | +| System.IO;File;false;ReadLines;(System.String,System.Text.Encoding);;ReturnValue;file;manual | +| System.IO;File;false;ReadLinesAsync;(System.String,System.Text.Encoding,System.Threading.CancellationToken);;ReturnValue;file;manual | +| System.IO;File;false;ReadLinesAsync;(System.String,System.Threading.CancellationToken);;ReturnValue;file;manual | | System.IO;FileInfo;false;AppendText;();;ReturnValue;file-write;manual | | System.IO;FileInfo;false;Create;();;ReturnValue;file-write;manual | | System.IO;FileInfo;false;CreateText;();;ReturnValue;file-write;manual | | System.IO;FileInfo;false;Open;(System.IO.FileMode);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode);;ReturnValue;file;manual | | System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess);;ReturnValue;file;manual | | System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare);;ReturnValue;file;manual | | System.IO;FileInfo;false;Open;(System.IO.FileStreamOptions);;ReturnValue;file-write;manual | +| System.IO;FileInfo;false;Open;(System.IO.FileStreamOptions);;ReturnValue;file;manual | +| System.IO;FileInfo;false;OpenRead;();;ReturnValue;file;manual | +| System.IO;FileInfo;false;OpenText;();;ReturnValue;file;manual | | System.IO;FileInfo;false;OpenWrite;();;ReturnValue;file-write;manual | | System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file-write;manual | | System.IO;FileStream;false;FileStream;(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess);;Argument[this];file;manual | From fa7f437e7142207c74435b7b68158a3245b474ae Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 22 Mar 2024 08:16:11 +0100 Subject: [PATCH 239/497] Code quality improvement --- .../Entities/Compilations/CompilerDiagnostic.cs | 2 +- .../extractor/Semmle.Extraction/Entities/ExtractionMessage.cs | 2 +- csharp/extractor/Semmle.Util/EnvironmentVariables.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs index 8de1442f26e..193869e6e80 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities { internal class CompilerDiagnostic : FreshEntity { - private static readonly int limit = EnvironmentVariables.TryGetExtractorOption("COMPILER_DIAGNOSTIC_LIMIT") ?? 1000; + private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("COMPILER_DIAGNOSTIC_LIMIT") ?? 1000; private static readonly ConcurrentDictionary messageCounts = new(); private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs index 35df66a6b0a..bc6ea5aa27d 100644 --- a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs +++ b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.Entities { internal class ExtractionMessage : FreshEntity { - private static readonly int limit = EnvironmentVariables.TryGetExtractorOption("MESSAGE_LIMIT") ?? 10000; + private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("MESSAGE_LIMIT") ?? 10000; private static int messageCount = 0; private readonly Message msg; diff --git a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs index d7bb81440ec..c96aa16357c 100644 --- a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs +++ b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs @@ -9,7 +9,7 @@ namespace Semmle.Util public static string? GetExtractorOption(string name) => Environment.GetEnvironmentVariable($"CODEQL_EXTRACTOR_CSHARP_OPTION_{name.ToUpper()}"); - public static T? TryGetExtractorOption(string name) where T : struct, INumberBase + public static T? TryGetExtractorNumberOption(string name) where T : struct, INumberBase { var value = GetExtractorOption(name); if (T.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out var result)) From 205d6a3bc5e55e9a2e4cfa9e522cae1219c22461 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 22 Mar 2024 08:53:45 +0100 Subject: [PATCH 240/497] Extract total number of diagnostic per ID and compilation --- .../Entities/Compilations/Compilation.cs | 11 ++++++++--- .../Entities/Compilations/CompilerDiagnostic.cs | 6 ++---- .../all-platforms/standalone/Diag.expected | 3 +++ .../all-platforms/standalone/Diag.ql | 8 ++++++++ .../CompilationInfo.ql | 1 + csharp/ql/src/Telemetry/ExtractorInformation.ql | 1 + 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs index e9706b3b579..0b575df2b69 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.IO; using System.Linq; using Microsoft.CodeAnalysis; @@ -8,6 +9,8 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Compilation : CachedEntity { + internal readonly ConcurrentDictionary messageCounts = new(); + private static (string Cwd, string[] Args) settings; private static int hashCode; @@ -78,9 +81,11 @@ namespace Semmle.Extraction.CSharp.Entities .ForEach((file, index) => trapFile.compilation_referencing_files(this, index, file)); // Diagnostics - Context.Compilation - .GetDiagnostics() - .ForEach((diag, index) => new CompilerDiagnostic(Context, diag, this, index)); + var diags = Context.Compilation.GetDiagnostics(); + diags.ForEach((diag, index) => new CompilerDiagnostic(Context, diag, this, index)); + + var diagCounts = diags.GroupBy(diag => diag.Id).ToDictionary(group => group.Key, group => group.Count()); + diagCounts.ForEach(pair => trapFile.compilation_info(this, $"Compiler diagnostic count for {pair.Key}", pair.Value.ToString())); } public void PopulatePerformance(PerformanceMetrics p) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs index 193869e6e80..c1227f2ffc0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs @@ -1,4 +1,3 @@ -using System.Collections.Concurrent; using System.IO; using Semmle.Util; @@ -7,7 +6,6 @@ namespace Semmle.Extraction.CSharp.Entities internal class CompilerDiagnostic : FreshEntity { private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption("COMPILER_DIAGNOSTIC_LIMIT") ?? 1000; - private static readonly ConcurrentDictionary messageCounts = new(); private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic; private readonly Compilation compilation; @@ -25,12 +23,12 @@ namespace Semmle.Extraction.CSharp.Entities { // The below doesn't limit the extractor messages to the exact limit, but it's good enough. var key = diagnostic.Id; - var messageCount = messageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); + var messageCount = compilation.messageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); if (messageCount > limit) { if (messageCount == limit + 1) { - Context.Extractor.Logger.LogWarning($"Stopped logging {key} compiler diagnostics after reaching {limit}"); + Context.Extractor.Logger.LogWarning($"Stopped logging {key} compiler diagnostics for the current compilation after reaching {limit}"); } return; diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected index 1fcc47687ca..b48630869ee 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.expected @@ -2,3 +2,6 @@ extractorMessages | 5 | compilerDiagnostics | 4 | +compilationInfo +| Compiler diagnostic count for CS0103 | 3.0 | +| Compiler diagnostic count for CS8019 | 7.0 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql index bbd142d3af3..e391b345b20 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone/Diag.ql @@ -4,3 +4,11 @@ import semmle.code.csharp.commons.Diagnostics query predicate extractorMessages(int c) { c = count(ExtractorMessage msg) } query predicate compilerDiagnostics(int c) { c = count(Diagnostic diag) } + +query predicate compilationInfo(string key, float value) { + exists(Compilation c, string infoValue | + infoValue = c.getInfo(key) and key.matches("Compiler diagnostic count for%") + | + value = infoValue.toFloat() + ) +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql index 87a9e20f027..073ffe3b224 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql @@ -3,6 +3,7 @@ import semmle.code.csharp.commons.Diagnostics query predicate compilationInfo(string key, float value) { key != "Resolved references" and + not key.matches("Compiler diagnostic count for%") and exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | key = infoKey and value = infoValue.toFloat() diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql index d09e1c9d5d3..08efbd7b6ec 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -10,6 +10,7 @@ import csharp import semmle.code.csharp.commons.Diagnostics predicate compilationInfo(string key, float value) { + not key.matches("Compiler diagnostic count for%") and exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | key = infoKey and value = infoValue.toFloat() From 9d124197e835bf60ff660168f7fe16c564d879ce Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Mar 2024 10:08:04 +0100 Subject: [PATCH 241/497] C#: Remove support for legacy LGTM options in autobuilder --- .../BuildScripts.cs | 24 +- .../Semmle.Autobuild.Cpp/CppAutobuilder.cs | 3 - .../BuildScripts.cs | 252 +----------------- .../CSharpAutobuilder.cs | 30 +-- .../Semmle.Autobuild.CSharp/DotNetRule.cs | 3 +- .../AutobuildOptions.cs | 29 +- .../Semmle.Autobuild.Shared/Autobuilder.cs | 19 -- .../BuildCommandAutoRule.cs | 5 - .../BuildCommandRule.cs | 37 --- .../Semmle.Autobuild.Shared/MsBuildRule.cs | 121 +++------ .../DotNet.cs | 6 +- .../Extractor/Analyser.cs | 2 +- .../Extractor/Options.cs | 8 - .../Semmle.Extraction.Tests/Options.cs | 14 - csharp/extractor/Semmle.Extraction/Options.cs | 8 - 15 files changed, 58 insertions(+), 503 deletions(-) delete mode 100644 csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs index 963ef88d624..3855428a5ae 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs @@ -250,12 +250,7 @@ namespace Semmle.Autobuild.Cpp.Tests EndCallbackIn.Add(s); } - CppAutobuilder CreateAutoBuilder(bool isWindows, - string? buildless = null, string? solution = null, string? buildCommand = null, string? ignoreErrors = null, - string? msBuildArguments = null, string? msBuildPlatform = null, string? msBuildConfiguration = null, string? msBuildTarget = null, - string? dotnetArguments = null, string? dotnetVersion = null, string? vsToolsVersion = null, - string? nugetRestore = null, string? allSolutions = null, - string cwd = @"C:\Project") + CppAutobuilder CreateAutoBuilder(bool isWindows, string? dotnetVersion = null, string cwd = @"C:\Project") { string codeqlUpperLanguage = Language.Cpp.UpperCaseName; Actions.GetEnvironmentVariable[$"CODEQL_AUTOBUILDER_{codeqlUpperLanguage}_NO_INDEXING"] = "false"; @@ -265,22 +260,7 @@ namespace Semmle.Autobuild.Cpp.Tests Actions.GetEnvironmentVariable[$"CODEQL_EXTRACTOR_{codeqlUpperLanguage}_DIAGNOSTIC_DIR"] = ""; Actions.GetEnvironmentVariable["CODEQL_JAVA_HOME"] = @"C:\codeql\tools\java"; Actions.GetEnvironmentVariable["CODEQL_PLATFORM"] = "win64"; - Actions.GetEnvironmentVariable["SEMMLE_DIST"] = @"C:\odasa"; - Actions.GetEnvironmentVariable["SEMMLE_JAVA_HOME"] = @"C:\odasa\tools\java"; - Actions.GetEnvironmentVariable["SEMMLE_PLATFORM_TOOLS"] = @"C:\odasa\tools"; - Actions.GetEnvironmentVariable["LGTM_INDEX_VSTOOLS_VERSION"] = vsToolsVersion; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_ARGUMENTS"] = msBuildArguments; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_PLATFORM"] = msBuildPlatform; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_CONFIGURATION"] = msBuildConfiguration; - Actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_TARGET"] = msBuildTarget; - Actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_ARGUMENTS"] = dotnetArguments; - Actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_VERSION"] = dotnetVersion; - Actions.GetEnvironmentVariable["LGTM_INDEX_BUILD_COMMAND"] = buildCommand; - Actions.GetEnvironmentVariable["LGTM_INDEX_SOLUTION"] = solution; - Actions.GetEnvironmentVariable["LGTM_INDEX_IGNORE_ERRORS"] = ignoreErrors; - Actions.GetEnvironmentVariable["LGTM_INDEX_BUILDLESS"] = buildless; - Actions.GetEnvironmentVariable["LGTM_INDEX_ALL_SOLUTIONS"] = allSolutions; - Actions.GetEnvironmentVariable["LGTM_INDEX_NUGET_RESTORE"] = nugetRestore; + Actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"] = dotnetVersion; Actions.GetEnvironmentVariable["ProgramFiles(x86)"] = isWindows ? @"C:\Program Files (x86)" : null; Actions.GetCurrentDirectory = cwd; Actions.IsWindows = isWindows; diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs index e3853b44a0c..cc2e1e05ad5 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs @@ -26,9 +26,6 @@ namespace Semmle.Autobuild.Cpp public override BuildScript GetBuildScript() { - if (Options.BuildCommand != null) - return new BuildCommandRule((_, f) => f(null)).Analyse(this, false); - return // First try MSBuild new MsBuildRule().Analyse(this, true) | diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index da2e3c36c9b..2b00d9db742 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -399,10 +399,8 @@ namespace Semmle.Autobuild.CSharp.Tests } private CSharpAutobuilder CreateAutoBuilder(bool isWindows, - string? buildless = null, string? solution = null, string? buildCommand = null, string? ignoreErrors = null, - string? msBuildArguments = null, string? msBuildPlatform = null, string? msBuildConfiguration = null, string? msBuildTarget = null, - string? dotnetArguments = null, string? dotnetVersion = null, string? vsToolsVersion = null, - string? nugetRestore = null, string? allSolutions = null, + string? buildless = null, + string? dotnetVersion = null, string cwd = @"C:\Project") { var codeqlUpperLanguage = Language.CSharp.UpperCaseName; @@ -412,20 +410,9 @@ namespace Semmle.Autobuild.CSharp.Tests actions.GetEnvironmentVariable[$"CODEQL_EXTRACTOR_{codeqlUpperLanguage}_DIAGNOSTIC_DIR"] = ""; actions.GetEnvironmentVariable["CODEQL_JAVA_HOME"] = @"C:\codeql\tools\java"; actions.GetEnvironmentVariable["CODEQL_PLATFORM"] = isWindows ? "win64" : "linux64"; - actions.GetEnvironmentVariable["LGTM_INDEX_VSTOOLS_VERSION"] = vsToolsVersion; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_ARGUMENTS"] = msBuildArguments; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_PLATFORM"] = msBuildPlatform; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_CONFIGURATION"] = msBuildConfiguration; - actions.GetEnvironmentVariable["LGTM_INDEX_MSBUILD_TARGET"] = msBuildTarget; - actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_ARGUMENTS"] = dotnetArguments; - actions.GetEnvironmentVariable["LGTM_INDEX_DOTNET_VERSION"] = dotnetVersion; - actions.GetEnvironmentVariable["LGTM_INDEX_BUILD_COMMAND"] = buildCommand; - actions.GetEnvironmentVariable["LGTM_INDEX_SOLUTION"] = solution; - actions.GetEnvironmentVariable["LGTM_INDEX_IGNORE_ERRORS"] = ignoreErrors; - actions.GetEnvironmentVariable["LGTM_INDEX_BUILDLESS"] = buildless; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_BUILDLESS"] = buildless; - actions.GetEnvironmentVariable["LGTM_INDEX_ALL_SOLUTIONS"] = allSolutions; - actions.GetEnvironmentVariable["LGTM_INDEX_NUGET_RESTORE"] = nugetRestore; + if (dotnetVersion is not null) + actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"] = dotnetVersion; actions.GetEnvironmentVariable["ProgramFiles(x86)"] = isWindows ? @"C:\Program Files (x86)" : null; actions.GetCurrentDirectory = cwd; actions.IsWindows = isWindows; @@ -600,15 +587,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - private void SkipVsWhere() - { - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = false; - } - private void TestAutobuilderScript(CSharpAutobuilder autobuilder, int expectedOutput, int commandsRun) { Assert.Equal(expectedOutput, autobuilder.GetBuildScript().Run(actions, StartCallback, EndCallback)); @@ -628,23 +606,6 @@ namespace Semmle.Autobuild.CSharp.Tests } } - [Fact] - public void TestLinuxBuildCommand() - { - actions.RunProcess["./build.sh --skip-tests"] = 0; - actions.FileExists["csharp.log"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - SkipVsWhere(); - - var autobuilder = CreateAutoBuilder(false, buildCommand: "./build.sh --skip-tests"); - TestAutobuilderScript(autobuilder, 0, 1); - } - [Fact] public void TestLinuxBuildSh() { @@ -714,177 +675,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - [Fact] - public void TestWindowsBuildBatIgnoreErrors() - { - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\nbuild.bat"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.RunProcess[@"cmd.exe /C C:\Project\build.bat"] = 1; - actions.RunProcessWorkingDirectory[@"cmd.exe /C C:\Project\build.bat"] = @"C:\Project"; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\java\bin\java -jar C:\codeql\csharp\tools\extractor-asp.jar ."] = 0; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\codeql index --xml --extensions config"] = 0; - actions.FileExists["csharp.log"] = true; - - var autobuilder = CreateAutoBuilder(true, ignoreErrors: "true"); - TestAutobuilderScript(autobuilder, 1, 1); - } - - [Fact] - public void TestWindowsCmdIgnoreErrors() - { - actions.RunProcess["cmd.exe /C ^\"build.cmd^ --skip-tests^\""] = 3; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\java\bin\java -jar C:\codeql\csharp\tools\extractor-asp.jar ."] = 0; - actions.RunProcess[@"cmd.exe /C C:\codeql\tools\codeql index --xml --extensions config"] = 0; - actions.FileExists["csharp.log"] = true; - SkipVsWhere(); - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, buildCommand: "build.cmd --skip-tests", ignoreErrors: "true"); - TestAutobuilderScript(autobuilder, 3, 1); - } - - [Fact] - public void TestWindowCSharpMsBuild() - { - actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test1.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess[@"cmd.exe /C C:\Project\.nuget\nuget.exe restore C:\Project\test2.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateFiles[@"C:\Project\.nuget"] = "nuget.exe"; - actions.EnumerateDirectories[@"C:\Project"] = @".nuget"; - actions.EnumerateDirectories[@"C:\Project\.nuget"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 0, 4); - } - - [Fact] - public void TestWindowCSharpMsBuildMultipleSolutions() - { - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.csproj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.csproj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test2.csproj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.csproj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Project\test1.csproj"] = true; - actions.FileExists[@"C:\Project\test2.csproj"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "test1.csproj\ntest2.csproj\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var csproj1 = new XmlDocument(); - csproj1.LoadXml(@" - - - - - "); - actions.LoadXml[@"C:\Project\test1.csproj"] = csproj1; - - var csproj2 = new XmlDocument(); - csproj2.LoadXml(@" - - - - - "); - actions.LoadXml[@"C:\Project\test2.csproj"] = csproj2; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12"); - - TestAutobuilderScript(autobuilder, 0, 4); - } - - [Fact] - public void TestWindowCSharpMsBuildFailed() - { - actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\test1.sln -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 1; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 1, 2); - } - - - [Fact] - public void TestSkipNugetMsBuild() - { - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test1.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\test2.sln /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"] = true; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"] = false; - actions.FileExists[@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest1.cs\ntest2.cs"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", - msBuildPlatform: "x86", msBuildConfiguration: "Debug", vsToolsVersion: "12", - allSolutions: "true", nugetRestore: "false"); - var testSolution1 = new TestSolution(@"C:\Project\test1.sln"); - var testSolution2 = new TestSolution(@"C:\Project\test2.sln"); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution1); - autobuilder.ProjectsOrSolutionsToBuild.Add(testSolution2); - - TestAutobuilderScript(autobuilder, 0, 2); - } - [Fact] public void TestSkipNugetBuildless() { @@ -900,35 +690,6 @@ namespace Semmle.Autobuild.CSharp.Tests TestAutobuilderScript(autobuilder, 0, 1); } - - [Fact] - public void TestSkipNugetDotnet() - { - actions.RunProcess["dotnet --info"] = 0; - actions.RunProcess[@"dotnet clean C:\Project/test.csproj"] = 0; - actions.RunProcess[@"dotnet restore C:\Project/test.csproj"] = 0; - actions.RunProcess[@"dotnet build --no-incremental --no-restore C:\Project/test.csproj"] = 0; - actions.FileExists["csharp.log"] = true; - actions.FileExists[@"C:\Project/test.csproj"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.cs\ntest.csproj"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - var xml = new XmlDocument(); - xml.LoadXml(@" - - Exe - netcoreapp2.1 - - -"); - actions.LoadXml[@"C:\Project/test.csproj"] = xml; - - var autobuilder = CreateAutoBuilder(false, dotnetArguments: "--no-restore"); // nugetRestore=false does not work for now. - TestAutobuilderScript(autobuilder, 0, 4); - } - [Fact] public void TestDotnetVersionNotInstalled() { @@ -1053,7 +814,7 @@ namespace Semmle.Autobuild.CSharp.Tests { actions.RunProcess[@"cmd.exe /C nuget restore C:\Project\dirs.proj -DisableParallelProcessing"] = 1; actions.RunProcess[@"cmd.exe /C scratch\.nuget\nuget.exe restore C:\Project\dirs.proj -DisableParallelProcessing"] = 0; - actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\dirs.proj /t:Windows /p:Platform=\"x86\" /p:Configuration=\"Debug\" /P:Fu=Bar"] = 0; + actions.RunProcess["cmd.exe /C CALL ^\"C:\\Program^ Files^ ^(x86^)\\Microsoft^ Visual^ Studio^ 12.0\\VC\\vcvarsall.bat^\" && set Platform=&& type NUL && msbuild C:\\Project\\dirs.proj /t:rebuild"] = 0; actions.FileExists["csharp.log"] = true; actions.FileExists[@"C:\Project\a\test.csproj"] = true; actions.FileExists[@"C:\Project\dirs.proj"] = true; @@ -1088,8 +849,7 @@ namespace Semmle.Autobuild.CSharp.Tests "); actions.LoadXml[@"C:\Project\dirs.proj"] = dirsproj; - var autobuilder = CreateAutoBuilder(true, msBuildArguments: "/P:Fu=Bar", msBuildTarget: "Windows", msBuildPlatform: "x86", msBuildConfiguration: "Debug", - vsToolsVersion: "12", allSolutions: "true"); + var autobuilder = CreateAutoBuilder(true); TestAutobuilderScript(autobuilder, 0, 3); } diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs index aad91541064..9290bf47e6b 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs @@ -25,9 +25,11 @@ namespace Semmle.Autobuild.CSharp /// public CSharpAutobuildOptions(IBuildActions actions) : base(actions) { - Buildless = actions.GetEnvironmentVariable(lgtmPrefix + "BUILDLESS").AsBool("buildless", false) || + Buildless = actions.GetEnvironmentVariable(extractorOptionPrefix + "BUILDLESS").AsBool("buildless", false) || actions.GetEnvironmentVariable(buildModeEnvironmentVariable)?.ToLower() == "none"; + + } } @@ -46,19 +48,10 @@ namespace Semmle.Autobuild.CSharp var attempt = BuildScript.Failure; switch (GetCSharpBuildStrategy()) { - case CSharpBuildStrategy.CustomBuildCommand: - attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); - break; case CSharpBuildStrategy.Buildless: // No need to check that the extractor has been executed in buildless mode attempt = new StandaloneBuildRule().Analyse(this, false); break; - case CSharpBuildStrategy.MSBuild: - attempt = new MsBuildRule().Analyse(this, false) & CheckExtractorRun(true); - break; - case CSharpBuildStrategy.DotNet: - attempt = new DotNetRule().Analyse(this, false) & CheckExtractorRun(true); - break; case CSharpBuildStrategy.Auto: attempt = // Attempt a few different build strategies to see if one works @@ -198,32 +191,15 @@ namespace Semmle.Autobuild.CSharp /// private CSharpBuildStrategy GetCSharpBuildStrategy() { - if (Options.BuildCommand is not null) - return CSharpBuildStrategy.CustomBuildCommand; - if (Options.Buildless) return CSharpBuildStrategy.Buildless; - if (Options.MsBuildArguments is not null - || Options.MsBuildConfiguration is not null - || Options.MsBuildPlatform is not null - || Options.MsBuildTarget is not null) - { - return CSharpBuildStrategy.MSBuild; - } - - if (Options.DotNetArguments is not null || Options.DotNetVersion is not null) - return CSharpBuildStrategy.DotNet; - return CSharpBuildStrategy.Auto; } private enum CSharpBuildStrategy { - CustomBuildCommand, Buildless, - MSBuild, - DotNet, Auto } } diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index cd25055da1a..c1383731361 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -150,8 +150,7 @@ namespace Semmle.Autobuild.CSharp Argument("--no-incremental"); return - script.Argument(builder.Options.DotNetArguments). - QuoteArgument(projOrSln). + script.QuoteArgument(projOrSln). Script; } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs index b7e3293a0f2..6df297eea37 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/AutobuildOptions.cs @@ -11,24 +11,9 @@ namespace Semmle.Autobuild.Shared /// public abstract class AutobuildOptionsShared { - protected const string lgtmPrefix = "LGTM_INDEX_"; - - public int SearchDepth { get; } = 3; public string RootDirectory { get; } - public string? VsToolsVersion { get; } - public string? MsBuildArguments { get; } - public string? MsBuildPlatform { get; } - public string? MsBuildConfiguration { get; } - public string? MsBuildTarget { get; } - public string? DotNetArguments { get; } public string? DotNetVersion { get; } - public string? BuildCommand { get; } - public IEnumerable Solution { get; } - public bool IgnoreErrors { get; } - - public bool AllSolutions { get; } - public bool NugetRestore { get; } public abstract Language Language { get; } /// @@ -38,19 +23,7 @@ namespace Semmle.Autobuild.Shared public AutobuildOptionsShared(IBuildActions actions) { RootDirectory = actions.GetCurrentDirectory(); - VsToolsVersion = actions.GetEnvironmentVariable(lgtmPrefix + "VSTOOLS_VERSION"); - MsBuildArguments = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_ARGUMENTS")?.AsStringWithExpandedEnvVars(actions); - MsBuildPlatform = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_PLATFORM"); - MsBuildConfiguration = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_CONFIGURATION"); - MsBuildTarget = actions.GetEnvironmentVariable(lgtmPrefix + "MSBUILD_TARGET"); - DotNetArguments = actions.GetEnvironmentVariable(lgtmPrefix + "DOTNET_ARGUMENTS")?.AsStringWithExpandedEnvVars(actions); - DotNetVersion = actions.GetEnvironmentVariable(lgtmPrefix + "DOTNET_VERSION"); - BuildCommand = actions.GetEnvironmentVariable(lgtmPrefix + "BUILD_COMMAND"); - Solution = actions.GetEnvironmentVariable(lgtmPrefix + "SOLUTION").AsListWithExpandedEnvVars(actions, Array.Empty()); - - IgnoreErrors = actions.GetEnvironmentVariable(lgtmPrefix + "IGNORE_ERRORS").AsBool("ignore_errors", false); - AllSolutions = actions.GetEnvironmentVariable(lgtmPrefix + "ALL_SOLUTIONS").AsBool("all_solutions", false); - NugetRestore = actions.GetEnvironmentVariable(lgtmPrefix + "NUGET_RESTORE").AsBool("nuget_restore", true); + DotNetVersion = actions.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_DOTNET_VERSION"); } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index a23d29d2979..904c6543feb 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -161,9 +161,6 @@ namespace Semmle.Autobuild.Shared if (matchingFiles.Length == 0) return null; - if (Options.AllSolutions) - return matchingFiles.Select(p => p.ProjectOrSolution); - return matchingFiles .Where(f => f.DistanceFromRoot == matchingFiles[0].DistanceFromRoot) .Select(f => f.ProjectOrSolution); @@ -185,19 +182,6 @@ namespace Semmle.Autobuild.Shared projectsOrSolutionsToBuildLazy = new Lazy>(() => { List? ret; - if (options.Solution.Any()) - { - ret = new List(); - foreach (var solution in options.Solution) - { - if (actions.FileExists(solution)) - ret.Add(new Solution(this, solution, true)); - else - logger.LogError($"The specified project or solution file {solution} was not found"); - } - return ret; - } - // First look for `.proj` files ret = FindFiles(".proj", f => new Project(this, f))?.ToList(); if (ret is not null) @@ -285,9 +269,6 @@ namespace Semmle.Autobuild.Shared var script = GetBuildScript(); - if (Options.IgnoreErrors) - script |= BuildScript.Success; - void startCallback(string s, bool silent) { logger.Log(silent ? Severity.Debug : Severity.Info, $"\nRunning {s}"); diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs index d754b3c3134..e12652767d1 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs @@ -82,11 +82,6 @@ namespace Semmle.Autobuild.Shared { var command = new CommandBuilder(builder.Actions, dir, environment); - // A specific Visual Studio version may be required - var vsTools = MsBuildRule.GetVcVarsBatFile(builder); - if (vsTools is not null) - command.CallBatFile(vsTools.Path); - command.RunCommand(this.ScriptPath); return command.Script; }); diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs deleted file mode 100644 index 9aaefe1a1da..00000000000 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Semmle.Util; - -namespace Semmle.Autobuild.Shared -{ - /// - /// Execute the build_command rule. - /// - public class BuildCommandRule : IBuildRule - { - private readonly WithDotNet withDotNet; - - public BuildCommandRule(WithDotNet withDotNet) - { - this.withDotNet = withDotNet; - } - - public BuildScript Analyse(IAutobuilder builder, bool auto) - { - if (builder.Options.BuildCommand is null) - return BuildScript.Failure; - - // Custom build commands may require a specific .NET Core version - return withDotNet(builder, environment => - { - var command = new CommandBuilder(builder.Actions, null, environment); - - // Custom build commands may require a specific Visual Studio version - var vsTools = MsBuildRule.GetVcVarsBatFile(builder); - if (vsTools is not null) - command.CallBatFile(vsTools.Path); - command.RunCommand(builder.Options.BuildCommand); - - return command.Script; - }); - } - } -} diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs index bff10532abf..83a354e2a81 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs @@ -42,9 +42,9 @@ namespace Semmle.Autobuild.Shared if (auto) builder.Logger.LogInfo("Attempting to build using MSBuild"); - var vsTools = GetVcVarsBatFile(builder); + VcVarsBatFile? vsTools = null; - if (vsTools is null && builder.ProjectsOrSolutionsToBuild.Any()) + if (builder.ProjectsOrSolutionsToBuild.Any()) { var firstSolution = builder.ProjectsOrSolutionsToBuild.OfType().FirstOrDefault(); vsTools = firstSolution is not null @@ -67,46 +67,44 @@ namespace Semmle.Autobuild.Shared foreach (var projectOrSolution in builder.ProjectsOrSolutionsToBuild) { - if (builder.Options.NugetRestore) + + BuildScript GetNugetRestoreScript() => + new CommandBuilder(builder.Actions). + RunCommand(nuget). + Argument("restore"). + QuoteArgument(projectOrSolution.FullPath). + Argument("-DisableParallelProcessing"). + Script; + var nugetRestore = GetNugetRestoreScript(); + var msbuildRestoreCommand = new CommandBuilder(builder.Actions). + MsBuildCommand(builder). + Argument("/t:restore"). + QuoteArgument(projectOrSolution.FullPath); + + if (builder.Actions.IsRunningOnAppleSilicon()) { - BuildScript GetNugetRestoreScript() => - new CommandBuilder(builder.Actions). - RunCommand(nuget). - Argument("restore"). - QuoteArgument(projectOrSolution.FullPath). - Argument("-DisableParallelProcessing"). - Script; - var nugetRestore = GetNugetRestoreScript(); - var msbuildRestoreCommand = new CommandBuilder(builder.Actions). - MsBuildCommand(builder). - Argument("/t:restore"). - QuoteArgument(projectOrSolution.FullPath); + // On Apple Silicon, only try package restore with `dotnet msbuild /t:restore` + ret &= BuildScript.Try(msbuildRestoreCommand.Script); + } + else if (nugetDownloaded) + { + ret &= BuildScript.Try(nugetRestore | msbuildRestoreCommand.Script); + } + else + { + // If `nuget restore` fails, and we have not already attempted to download `nuget.exe`, + // download it and reattempt `nuget restore`. + var nugetDownloadAndRestore = + BuildScript.Bind(DownloadNugetExe(builder, nugetDownloadPath), exitCode => + { + nugetDownloaded = true; + if (exitCode != 0) + return BuildScript.Failure; - if (builder.Actions.IsRunningOnAppleSilicon()) - { - // On Apple Silicon, only try package restore with `dotnet msbuild /t:restore` - ret &= BuildScript.Try(msbuildRestoreCommand.Script); - } - else if (nugetDownloaded) - { - ret &= BuildScript.Try(nugetRestore | msbuildRestoreCommand.Script); - } - else - { - // If `nuget restore` fails, and we have not already attempted to download `nuget.exe`, - // download it and reattempt `nuget restore`. - var nugetDownloadAndRestore = - BuildScript.Bind(DownloadNugetExe(builder, nugetDownloadPath), exitCode => - { - nugetDownloaded = true; - if (exitCode != 0) - return BuildScript.Failure; - - nuget = nugetDownloadPath; - return GetNugetRestoreScript(); - }); - ret &= BuildScript.Try(nugetRestore | nugetDownloadAndRestore | msbuildRestoreCommand.Script); - } + nuget = nugetDownloadPath; + return GetNugetRestoreScript(); + }); + ret &= BuildScript.Try(nugetRestore | nugetDownloadAndRestore | msbuildRestoreCommand.Script); } var command = new CommandBuilder(builder.Actions); @@ -124,9 +122,9 @@ namespace Semmle.Autobuild.Shared command.MsBuildCommand(builder); command.QuoteArgument(projectOrSolution.FullPath); - var target = builder.Options.MsBuildTarget ?? "rebuild"; - var platform = builder.Options.MsBuildPlatform ?? (projectOrSolution is ISolution s1 ? s1.DefaultPlatformName : null); - var configuration = builder.Options.MsBuildConfiguration ?? (projectOrSolution is ISolution s2 ? s2.DefaultConfigurationName : null); + var target = "rebuild"; + var platform = projectOrSolution is ISolution s1 ? s1.DefaultPlatformName : null; + var configuration = projectOrSolution is ISolution s2 ? s2.DefaultConfigurationName : null; command.Argument("/t:" + target); if (platform is not null) @@ -134,8 +132,6 @@ namespace Semmle.Autobuild.Shared if (configuration is not null) command.Argument(string.Format("/p:Configuration=\"{0}\"", configuration)); - command.Argument(builder.Options.MsBuildArguments); - // append the build script which invokes msbuild to the overall build script `ret`; // we insert a check that building the current project or solution was successful: // if it was not successful, we add it to `FailedProjectsOrSolutions` @@ -148,41 +144,6 @@ namespace Semmle.Autobuild.Shared return ret; } - /// - /// Gets the BAT file used to initialize the appropriate Visual Studio - /// version/platform, as specified by the `vstools_version` property in - /// lgtm.yml. - /// - /// Returns null when no version is specified. - /// - public static VcVarsBatFile? GetVcVarsBatFile(IAutobuilder builder) where TAutobuildOptions : AutobuildOptionsShared - { - VcVarsBatFile? vsTools = null; - - if (builder.Options.VsToolsVersion is not null) - { - if (int.TryParse(builder.Options.VsToolsVersion, out var msToolsVersion)) - { - foreach (var b in BuildTools.VcVarsAllBatFiles(builder.Actions)) - { - builder.Logger.Log(Severity.Info, "Found {0} version {1}", b.Path, b.ToolsVersion); - } - - vsTools = BuildTools.FindCompatibleVcVars(builder.Actions, msToolsVersion); - if (vsTools is null) - builder.Logger.LogWarning("Could not find build tools matching version {0}", msToolsVersion); - else - builder.Logger.Log(Severity.Info, "Setting Visual Studio tools to {0}", vsTools.Path); - } - else - { - builder.Logger.LogError("The format of vstools_version is incorrect. Please specify an integer."); - } - } - - return vsTools; - } - /// /// Returns a script for downloading `nuget.exe` from nuget.org. /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 41a117ed5d8..b132d1884f9 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -89,11 +89,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return dotnetCliInvoker.RunCommand(args); } - public IList GetListedRuntimes() => GetListed("--list-runtimes", "runtime"); + public IList GetListedRuntimes() => GetListed("--list-runtimes"); - public IList GetListedSdks() => GetListed("--list-sdks", "SDK"); + public IList GetListedSdks() => GetListed("--list-sdks"); - private IList GetListed(string args, string artifact) + private IList GetListed(string args) { if (dotnetCliInvoker.RunCommand(args, out var artifacts)) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 57ce2f7827c..473741f2c66 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -189,7 +189,7 @@ namespace Semmle.Extraction.CSharp // compilation.Clone() is used to allow symbols to be garbage collected. using var trapWriter = transformedSourcePath.CreateTrapWriter(Logger, options.TrapCompression, discardDuplicates: false); - upToDate = options.Fast && FileIsUpToDate(sourcePath, trapWriter.TrapFile); + upToDate = FileIsUpToDate(sourcePath, trapWriter.TrapFile); var currentTaskId = IncrementTaskCount(); ReportProgressTaskStarted(currentTaskId, sourcePath); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs index c2d21d6a16a..4fafffe9833 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Options.cs @@ -35,15 +35,7 @@ namespace Semmle.Extraction.CSharp public static Options CreateWithEnvironment(string[] arguments) { var options = new Options(); - var extractionOptions = Environment.GetEnvironmentVariable("LGTM_INDEX_EXTRACTOR"); - var argsList = new List(arguments); - - if (!string.IsNullOrEmpty(extractionOptions)) - { - argsList.AddRange(extractionOptions.Split(' ')); - } - options.ParseArguments(argsList); return options; } diff --git a/csharp/extractor/Semmle.Extraction.Tests/Options.cs b/csharp/extractor/Semmle.Extraction.Tests/Options.cs index a20788cd244..8b18f8cb041 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Options.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Options.cs @@ -12,11 +12,6 @@ namespace Semmle.Extraction.Tests private CSharp.Options? options; private CSharp.Standalone.Options? standaloneOptions; - public OptionsTests() - { - Environment.SetEnvironmentVariable("LGTM_INDEX_EXTRACTOR", ""); - } - [Fact] public void DefaultOptions() { @@ -28,7 +23,6 @@ namespace Semmle.Extraction.Tests Assert.True(options.Threads >= 1); Assert.Equal(Verbosity.Info, options.LegacyVerbosity); Assert.False(options.Console); - Assert.False(options.Fast); Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression); } @@ -165,14 +159,6 @@ namespace Semmle.Extraction.Tests Assert.True(standaloneOptions.Help); } - [Fact] - public void Fast() - { - Environment.SetEnvironmentVariable("LGTM_INDEX_EXTRACTOR", "--fast"); - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.True(options.Fast); - } - [Fact] public void ArchiveArguments() { diff --git a/csharp/extractor/Semmle.Extraction/Options.cs b/csharp/extractor/Semmle.Extraction/Options.cs index 3aa704e60c5..ba809e7cfcb 100644 --- a/csharp/extractor/Semmle.Extraction/Options.cs +++ b/csharp/extractor/Semmle.Extraction/Options.cs @@ -60,11 +60,6 @@ namespace Semmle.Extraction /// public bool Cache { get; private set; } = true; - /// - /// Whether "fast extraction mode" has been enabled. - /// - public bool Fast { get; private set; } = false; - /// /// Whether extraction is done using `codeql test run`. /// @@ -115,9 +110,6 @@ namespace Semmle.Extraction case "cache": Cache = value; return true; - case "fast": - Fast = value; - return true; case "qltest": QlTest = value; return true; From 3f0ce98ccbcf677342b4a2de61db41986c1bb3a5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Mar 2024 10:22:59 +0100 Subject: [PATCH 242/497] C++: Add destructor test cases for AV Rule 114 --- .../AV Rule 114/AV Rule 114.expected | 1 + .../jsf/4.13 Functions/AV Rule 114/test.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected index ce056261514..390da977d3f 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/AV Rule 114.expected @@ -10,3 +10,4 @@ | test.cpp:112:1:112:1 | return ... | Function g14 should return a value of type int but does not return a value here | | test.cpp:134:2:134:36 | ExprStmt | Function g16 should return a value of type int but does not return a value here | | test.cpp:141:3:141:37 | ExprStmt | Function g17 should return a value of type int but does not return a value here | +| test.cpp:189:2:189:16 | ExprStmt | Function g23 should return a value of type int but does not return a value here | diff --git a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp index c68ad23805c..c19c5de13f9 100644 --- a/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp +++ b/cpp/ql/test/query-tests/jsf/4.13 Functions/AV Rule 114/test.cpp @@ -170,3 +170,21 @@ int g19(int x) int g21() { g20(); // GOOD } + +class Aborting { +public: + [[noreturn]] + ~Aborting(); + + void a() {}; +}; + +int g22() { + Aborting x; + + x.a(); // GOOD +} + +int g23() { + Aborting().a(); // GOOD [FALSE POSITIVE] +} From a770bddff07b33a1a77df1ddcba9561cf1e7507a Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Mar 2024 10:46:35 +0100 Subject: [PATCH 243/497] C++: Add precision to `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` Also clean up the names of the queries while here. --- .../src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql | 3 ++- .../Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index f20b299da60..f61cd06888c 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -1,8 +1,9 @@ /** - * @name Boost_asio TLS Settings Misconfiguration + * @name boost::asio TLS settings misconfiguration * @description Using the TLS or SSLv23 protocol from the boost::asio library, but not disabling deprecated protocols, or disabling minimum-recommended protocols. * @kind problem * @problem.severity error + * @precision medium * @security-severity 7.5 * @id cpp/boost/tls-settings-misconfiguration * @tags security diff --git a/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql b/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql index 4df70695179..085a46a9d3f 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql @@ -1,8 +1,9 @@ /** - * @name boost::asio Use of deprecated hardcoded Protocol + * @name boost::asio use of deprecated hardcoded protocol * @description Using a deprecated hard-coded protocol using the boost::asio library. * @kind problem * @problem.severity error + * @precision medium * @security-severity 7.5 * @id cpp/boost/use-of-deprecated-hardcoded-security-protocol * @tags security From eef60c9ad2b035fb69244c75173fa53ecc647062 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 22 Mar 2024 10:54:12 +0100 Subject: [PATCH 244/497] python: add test for `"ReturnValue.TupleElement[0,1]"` also synchronise files --- .../dataflow/model-summaries/InlineTaintTest.ext.yml | 3 ++- .../dataflow/model-summaries/NormalDataflowTest.ext.yml | 1 + .../dataflow/model-summaries/model_summaries.py | 6 +++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml index e3a7e059401..10fbd6df744 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml @@ -3,7 +3,7 @@ extensions: pack: codeql/python-all extensible: summaryModel data: - - ["foo", "Member[MS_identity]", "Argument[0]", "ReturnValue", "value"] + - ["foo", "Member[MS_identity]", "Argument[0,x:]", "ReturnValue", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[1]", "Argument[0].Parameter[0]", "value"] - ["foo", "Member[MS_apply_lambda]", "Argument[0].ReturnValue", "ReturnValue", "value"] - ["foo", "Member[MS_reversed]", "Argument[0].ListElement", "ReturnValue.ListElement", "value"] @@ -17,4 +17,5 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] + - ["foo", "Member[MS_spread_all]", "Argument[0]", "ReturnValue.TupleElement[0,1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml index b3898193f59..10fbd6df744 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml @@ -17,4 +17,5 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] + - ["foo", "Member[MS_spread_all]", "Argument[0]", "ReturnValue.TupleElement[0,1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py index 071d1ae6aa4..17f831f6ed1 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py +++ b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py @@ -30,7 +30,7 @@ def SINK_F(x): ensure_tainted = ensure_not_tainted = print TAINTED_STRING = "TAINTED_STRING" -from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list, MS_spread +from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list, MS_spread, MS_spread_all # Simple summary via_identity = MS_identity(SOURCE) @@ -118,6 +118,10 @@ x, y = MS_spread(NONSOURCE, SOURCE) SINK_F(x) SINK(y) # $ flow="SOURCE, l:-2 -> y" +a, b = MS_spread_all(SOURCE) +SINK(a) # $ flow="SOURCE, l:-1 -> a" +SINK(b) # $ flow="SOURCE, l:-2 -> b" + # Modeled flow-summary is not value preserving from json import MS_loads as json_loads From adfb3c3d500d63b45eb27efe0440331ed1e49af8 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Mar 2024 11:22:11 +0100 Subject: [PATCH 245/497] C++: Simplify `cpp/boost/tls-settings-misconfiguration` --- .../src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index f61cd06888c..f5d1a09d04e 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -43,10 +43,9 @@ predicate isOptionSet(ConstructorCall cc, int flag, FunctionCall fcSetOptions) { ExistsAnyFlow::flow(source, sink) and f.getACallToThisFunction() = fcSetOptions and contextSetOptions = fcSetOptions.getQualifier() and - forall(Expr optionArgument, Expr optionArgumentSource | + forex(Expr optionArgument | optionArgument = fcSetOptions.getArgument(0) and - BoostorgAsio::SslOptionFlow::flow(DataFlow::exprNode(optionArgumentSource), - DataFlow::exprNode(optionArgument)) + BoostorgAsio::SslOptionFlow::flowTo(DataFlow::exprNode(optionArgument)) | optionArgument.getValue().toInt().bitShiftRight(16).bitAnd(flag) = flag ) From d62d68a40bbfd62524091ba333a1e98543ee1bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20St=C3=B6ckli?= Date: Fri, 22 Mar 2024 12:08:30 +0100 Subject: [PATCH 246/497] C#: add hint regarding ECB to weak encryption QHelp --- csharp/ql/src/Security Features/WeakEncryption.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/src/Security Features/WeakEncryption.qhelp b/csharp/ql/src/Security Features/WeakEncryption.qhelp index c67583b05e9..1749144ae8b 100644 --- a/csharp/ql/src/Security Features/WeakEncryption.qhelp +++ b/csharp/ql/src/Security Features/WeakEncryption.qhelp @@ -7,7 +7,7 @@ -

    You should switch to a more secure encryption algorithm, such as AES (Advanced Encryption Standard) and use a key length which is reasonable for the application for which it is being used.

    +

    You should switch to a more secure encryption algorithm, such as AES (Advanced Encryption Standard) and use a key length which is reasonable for the application for which it is being used. Do not use the ECB encryption mode since it is vulnerable to replay and other attacks.

    From 4e4cd52f6300da905256df3c5a532a018ff756b1 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Fri, 22 Mar 2024 11:44:06 +0000 Subject: [PATCH 247/497] Go: Update query help for `go/path-injection` to include example fixes. --- go/ql/src/Security/CWE-022/TaintedPath.qhelp | 51 +++++++++++++++---- go/ql/src/Security/CWE-022/TaintedPathGood.go | 20 ++++++++ .../src/Security/CWE-022/TaintedPathGood2.go | 23 +++++++++ 3 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 go/ql/src/Security/CWE-022/TaintedPathGood.go create mode 100644 go/ql/src/Security/CWE-022/TaintedPathGood2.go diff --git a/go/ql/src/Security/CWE-022/TaintedPath.qhelp b/go/ql/src/Security/CWE-022/TaintedPath.qhelp index 061ffbe3471..3a3948c425d 100644 --- a/go/ql/src/Security/CWE-022/TaintedPath.qhelp +++ b/go/ql/src/Security/CWE-022/TaintedPath.qhelp @@ -9,23 +9,35 @@ Accessing files using paths constructed from user-controlled data can allow an a unexpected resources. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

    +

    +Paths that are naively constructed from data controlled by a user may be absolute paths, +or may contain unexpected special characters such as "..". Such a path could point anywhere +on the file system. +

    -Validate user input before using it to construct a file path, either using an off-the-shelf library -or by performing custom validation. +Validate user input before using it to construct a file path.

    -Ideally, follow these rules: +Common validation methods include checking that the normalized path is relative and +does not contain any ".." components, or checking that the path is contained within a safe folder. The method you should use depends on how the path is used in the application, and whether the path should be a single path component. +

    +

    +If the path should be a single path component (such as a file name), you can check for the +existence of any path separators ("/" or "\"), or ".." sequences in the input, and reject +the input if any are found. +

    +

    +Note that removing "../" sequences is not sufficient, since the input could still +contain a path separator followed by "..". For example, the input ".../...//" would still +result in the string "../" if only "../" sequences are removed. +

    +

    +Finally, the simplest (but most restrictive) option is to use an allow list of safe patterns +and make sure that the user input matches one of these patterns.

    -
      -
    • Do not allow more than a single "." character.
    • -
    • Do not allow directory separators such as "/" or "\" (depending on the file system).
    • -
    • Do not rely on simply replacing problematic sequences such as "../". For example, after -applying this filter to ".../...//", the resulting string would still be "../".
    • -
    • Use an allowlist of known good patterns.
    • -
    @@ -43,6 +55,25 @@ password file. This file would then be sent back to the user, giving them access information.

    +

    +If the input should only be a file name, you can check that it doesn't contain any +path separators or ".." sequences. +

    + +

    +Note that this approach is only suitable if the input is expected to be a single file name. +

    +

    +If the input can be a path with multiple components, we can make it safe by verifying +that the path is within a specific directory that is considered safe. +This can be done by resolving the input with respect to that directory, and then checking +that the resulting path is still within it. +

    + +

    +Note that /home/user is just an example, you should replace it with the actual +safe directory in your application. +

    diff --git a/go/ql/src/Security/CWE-022/TaintedPathGood.go b/go/ql/src/Security/CWE-022/TaintedPathGood.go new file mode 100644 index 00000000000..50c1359a903 --- /dev/null +++ b/go/ql/src/Security/CWE-022/TaintedPathGood.go @@ -0,0 +1,20 @@ +package main + +import ( + "io/ioutil" + "net/http" + "path/filepath" + "strings" +) + +func handler(w http.ResponseWriter, r *http.Request) { + path := r.URL.Query()["path"][0] + + // GOOD: ensure that the filename has no path separators or parent directory references + if strings.Contains(path, "/") || strings.Contains(path, "\\") || strings.Contains(path, "..") { + http.Error(w, "Invalid file name", http.StatusBadRequest) + return + } + data, _ := ioutil.ReadFile(filepath.Join("/home/user/", path)) + w.Write(data) +} diff --git a/go/ql/src/Security/CWE-022/TaintedPathGood2.go b/go/ql/src/Security/CWE-022/TaintedPathGood2.go new file mode 100644 index 00000000000..0136adf11dc --- /dev/null +++ b/go/ql/src/Security/CWE-022/TaintedPathGood2.go @@ -0,0 +1,23 @@ +package main + +import ( + "io/ioutil" + "net/http" + "path/filepath" + "strings" +) + +const safeDir = "/home/user/" + +func handler(w http.ResponseWriter, r *http.Request) { + path := r.URL.Query()["path"][0] + + // GOOD: ensure that the resolved path is within the safe directory + absPath, err := filepath.Abs(filepath.Join(safeDir, path)) + if err != nil || !strings.HasPrefix(absPath, safeDir) { + http.Error(w, "Invalid file name", http.StatusBadRequest) + return + } + data, _ := ioutil.ReadFile(absPath) + w.Write(data) +} From 87ad170067d281bd12de0016479aaf9ada5c39a6 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 10 Mar 2024 15:04:10 -0400 Subject: [PATCH 248/497] Dapper source models --- csharp/ql/lib/ext/Dapper.model.yml | 50 ++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 839778e4b7b..372970089a2 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -58,3 +58,53 @@ extensions: - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[1]", "sql-injection", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[2]", "sql-injection", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "Argument[1]", "sql-injection", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: sourceModel + data: + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultiple", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultipleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] From 98285b5171c35ccf4653c670c31b011d0c2be969 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Mar 2024 23:28:27 -0400 Subject: [PATCH 249/497] Add `AsList` summary --- csharp/ql/lib/ext/Dapper.model.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 372970089a2..c16de645016 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -108,3 +108,8 @@ extensions: - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: summaryModel + data: + - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0]", "ReturnValue", "taint", "manual"] \ No newline at end of file From 23aeb1d878571df69e2702a864bca00741d36334 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Mar 2024 23:28:48 -0400 Subject: [PATCH 250/497] Add tests --- .../database/dapper/DatabaseSources.expected | 0 .../database/dapper/DatabaseSources.ext.yml | 7 +++ .../stored/database/dapper/DatabaseSources.ql | 12 +++++ .../stored/database/dapper/UseDapper.cs | 50 +++++++++++++++++++ .../stored/database/dapper/options | 5 ++ 5 files changed, 74 insertions(+) create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.expected b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml new file mode 100644 index 00000000000..06c77c199ce --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["database", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql new file mode 100644 index 00000000000..ebff54d131c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql @@ -0,0 +1,12 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources +import TestUtilities.InlineFlowTest +import TaintFlowTest + +module DatabseConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs new file mode 100644 index 00000000000..148af2306c4 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs @@ -0,0 +1,50 @@ +using System; +using System.Data; +using System.Data.Entity; +using System.Data.SqlClient; +using System.Threading.Tasks; +using Dapper; + +namespace Test +{ + class UseDapper + { + public static void Bad01(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = connection.Query(query); + Sink(result); // $ hasTaintFlow=line:16 + } + } + + public static async Task Bad02(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = await connection.QueryAsync(query); + Sink(result); // $ hasTaintFlow=line:25 + } + } + + public static void Bad03(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var result = connection.QueryFirst(query); + Sink(result); // $ hasTaintFlow=line:34 + } + } + + public static void Bad04(string connectionString, string query) + { + using (var connection = new SqlConnection(connectionString)) + { + var results = connection.Query(query).AsList(); + Sink(results); // $ hasTaintFlow=line:43 + } + } + + public static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options new file mode 100644 index 00000000000..fcda6c1b83c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/options @@ -0,0 +1,5 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/Dapper/2.1.24/Dapper.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/System.Data.SqlClient/4.8.5/System.Data.SqlClient.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/System.Data.SQLite/1.0.118/System.Data.SQLite.csproj +semmle-extractor-options: ${testdir}/../../../../../../resources/stubs/System.Windows.cs From 5ca6b40c34b749539578e1fe2384a93d380e1f38 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Mar 2024 23:30:21 -0400 Subject: [PATCH 251/497] Change note --- csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md diff --git a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md new file mode 100644 index 00000000000..204ae7db3ae --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. From 82237819782b435c9ddb3134a308f30a5ab5062a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 15 Mar 2024 01:00:54 -0400 Subject: [PATCH 252/497] Fix FlowSummaries tests --- .../test/library-tests/dataflow/library/FlowSummaries.expected | 1 + .../dataflow/library/FlowSummariesFiltered.expected | 1 + 2 files changed, 2 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 30396dbf410..1520eb90e66 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -619,6 +619,7 @@ summary | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;taint;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index cf17fed3269..92f85104b7f 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -8,6 +8,7 @@ | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;taint;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | From 5885938eafc45ef33b3c52b07a3167a825b0111a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 09:40:23 -0400 Subject: [PATCH 253/497] Use wildcard signatures for `Query` methods --- csharp/ql/lib/ext/Dapper.model.yml | 82 +++++++++++++----------------- 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index c16de645016..ca3a58131a6 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -62,52 +62,42 @@ extensions: pack: codeql/csharp-all extensible: sourceModel data: - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "Query", "(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryAsync", "(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirst", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryMultiple", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QueryMultipleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingle", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] - - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable)", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirst", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryFirstOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultiple", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QueryMultipleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingle", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefault", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "QuerySingleOrDefaultAsync", "", "", "ReturnValue", "database", "manual"] - addsTo: pack: codeql/csharp-all extensible: summaryModel From 9b23bfa0384cf8a9006fb3226a1bcafb865bbd45 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 09:40:46 -0400 Subject: [PATCH 254/497] `Execute` methods which return objects The `Execute` method returns `int` for "number of rows affected". But some of the other `Execute*` methods return objects. --- csharp/ql/lib/ext/Dapper.model.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index ca3a58131a6..0b65612c3a1 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -62,6 +62,12 @@ extensions: pack: codeql/csharp-all extensible: sourceModel data: + - ["Dapper", "SqlMapper", False, "ExecuteReader", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteReaderAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalar", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalar", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalarAsync", "", "", "ReturnValue", "database", "manual"] + - ["Dapper", "SqlMapper", False, "ExecuteScalarAsync", "", "", "ReturnValue", "database", "manual"] - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] - ["Dapper", "SqlMapper", False, "Query", "", "", "ReturnValue", "database", "manual"] From 73b4e8fe6a8afa26430f7a1efdee29d80d26886b Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 09:42:18 -0400 Subject: [PATCH 255/497] Add `WithElement` identifier to `AsList` method --- csharp/ql/lib/ext/Dapper.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 0b65612c3a1..4e24f96fd49 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -108,4 +108,4 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0]", "ReturnValue", "taint", "manual"] \ No newline at end of file + - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].WithElement", "ReturnValue", "taint", "manual"] From 1f04229def59b2beab43fb83f151db469d94d566 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 22:39:38 -0400 Subject: [PATCH 256/497] Fix typo --- .../flowsources/stored/database/dapper/DatabaseSources.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql index ebff54d131c..aa9372d73d2 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/DatabaseSources.ql @@ -1,9 +1,9 @@ import csharp import semmle.code.csharp.security.dataflow.flowsources.FlowSources import TestUtilities.InlineFlowTest -import TaintFlowTest +import TaintFlowTest -module DatabseConfig implements DataFlow::ConfigSig { +module DatabaseConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { From 9ed8ca27a12aa50d29a9cdb4025a674a99ac6a8a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 22:54:19 -0400 Subject: [PATCH 257/497] Fix test and model --- csharp/ql/lib/ext/Dapper.model.yml | 2 +- .../dataflow/flowsources/stored/database/dapper/UseDapper.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 4e24f96fd49..9f5d343d462 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -108,4 +108,4 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].WithElement", "ReturnValue", "taint", "manual"] + - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs index 148af2306c4..48a86d4fe6b 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs +++ b/csharp/ql/test/library-tests/dataflow/flowsources/stored/database/dapper/UseDapper.cs @@ -41,7 +41,7 @@ namespace Test using (var connection = new SqlConnection(connectionString)) { var results = connection.Query(query).AsList(); - Sink(results); // $ hasTaintFlow=line:43 + Sink(results[0]); // $ hasTaintFlow=line:43 } } From 4b13ad1310180ec7a473299f9b89b734402d18d5 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 17 Mar 2024 23:08:21 -0400 Subject: [PATCH 258/497] Fix flow summary tests --- .../test/library-tests/dataflow/library/FlowSummaries.expected | 2 +- .../dataflow/library/FlowSummariesFiltered.expected | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 1520eb90e66..4a88458f566 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -619,7 +619,7 @@ summary | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;taint;manual | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;taint;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 92f85104b7f..81240bcd292 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -8,7 +8,7 @@ | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0];ReturnValue;taint;manual | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;taint;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | From 7d968184fdad7c61dce3aa28f8f2944ec633a816 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 22 Mar 2024 13:58:34 +0100 Subject: [PATCH 259/497] improve the change-note Co-authored-by: Asger F --- .../ql/src/change-notes/2024-03-21-target-blank-precision.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md index 89b0c0da191..5bcb0ba7463 100644 --- a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md +++ b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md @@ -1,4 +1,4 @@ --- category: queryMetadata --- -* The `@precision` of the `js/unsafe-external-link` has been lowered to `low` to reflect that modern browsers do not provider the `opener` attribute and thus mitigate the potential security risk of having a link with `target="_blank"`. \ No newline at end of file +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. \ No newline at end of file From ca72b0583d5322a0da2475b762dec7f922959643 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 22 Mar 2024 13:59:47 +0100 Subject: [PATCH 260/497] C#: Update source and sink expected test output. --- .../dataflow/library/FlowSummaries.expected | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 4a88458f566..73def298f3a 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1,4 +1,95 @@ source +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReader;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.Common.DbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Data.CommandBehavior);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteReaderAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalar;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;ExecuteScalarAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Boolean,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,Dapper.CommandDefinition,System.Func,System.String);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryAsync;(System.Data.IDbConnection,System.String,System.Type[],System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirst;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryFirstOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultiple;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QueryMultipleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingle;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefault;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.Type,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,Dapper.CommandDefinition);;ReturnValue;database;manual | +| Dapper;SqlMapper;false;QuerySingleOrDefaultAsync;(System.Data.IDbConnection,System.String,System.Object,System.Data.IDbTransaction,System.Nullable,System.Nullable);;ReturnValue;database;manual | | Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];environment;manual | | Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;ReturnValue;environment;manual | | Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[0];environment;manual | From bc9396e0e66b5bd7dc689aeea6058108701b1d5c Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Fri, 22 Mar 2024 13:19:36 +0000 Subject: [PATCH 261/497] Address suggestions from review. --- go/ql/src/Security/CWE-022/TaintedPath.qhelp | 4 +++- go/ql/src/Security/CWE-022/TaintedPathGood.go | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go/ql/src/Security/CWE-022/TaintedPath.qhelp b/go/ql/src/Security/CWE-022/TaintedPath.qhelp index 3a3948c425d..3b54e80cd97 100644 --- a/go/ql/src/Security/CWE-022/TaintedPath.qhelp +++ b/go/ql/src/Security/CWE-022/TaintedPath.qhelp @@ -72,7 +72,9 @@ that the resulting path is still within it.

    Note that /home/user is just an example, you should replace it with the actual -safe directory in your application. +safe directory in your application. Also, while in this example the path of the safe +directory is absolute, this may not always be the case, and you may need to resolve it +first before checking the input.

    diff --git a/go/ql/src/Security/CWE-022/TaintedPathGood.go b/go/ql/src/Security/CWE-022/TaintedPathGood.go index 50c1359a903..8a46c76b26a 100644 --- a/go/ql/src/Security/CWE-022/TaintedPathGood.go +++ b/go/ql/src/Security/CWE-022/TaintedPathGood.go @@ -11,6 +11,7 @@ func handler(w http.ResponseWriter, r *http.Request) { path := r.URL.Query()["path"][0] // GOOD: ensure that the filename has no path separators or parent directory references + // (Note that this is only suitable if `path` is expected to have a single component!) if strings.Contains(path, "/") || strings.Contains(path, "\\") || strings.Contains(path, "..") { http.Error(w, "Invalid file name", http.StatusBadRequest) return From 178a45af25bdb0b601e0d90785723c8df4c63f61 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 22 Mar 2024 14:27:36 +0100 Subject: [PATCH 262/497] C#: Add high level diagnostic messages for buildless extraction (start, success) --- .../CSharpAutobuilder.cs | 6 +++- .../Semmle.Autobuild.Shared/Autobuilder.cs | 26 +++++++++++++++++ .../extractor/Semmle.Util/ToolStatusPage.cs | 1 + .../standalone/diagnostics.expected | 28 +++++++++++++++++++ .../all-platforms/standalone/test.py | 3 ++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs index aad91541064..b1ebc64cb4c 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs @@ -44,7 +44,7 @@ namespace Semmle.Autobuild.CSharp public override BuildScript GetBuildScript() { var attempt = BuildScript.Failure; - switch (GetCSharpBuildStrategy()) + switch (BuildStrategy) { case CSharpBuildStrategy.CustomBuildCommand: attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); @@ -218,6 +218,10 @@ namespace Semmle.Autobuild.CSharp return CSharpBuildStrategy.Auto; } + private CSharpBuildStrategy? buildStrategy = null; + private CSharpBuildStrategy BuildStrategy => buildStrategy ??= GetCSharpBuildStrategy(); + public override bool IsBuildless => BuildStrategy == CSharpBuildStrategy.Buildless; + private enum CSharpBuildStrategy { CustomBuildCommand, diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index a23d29d2979..bc155ea5da8 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -301,6 +301,18 @@ namespace Semmle.Autobuild.Shared var onOutput = BuildOutputHandler(Console.Out); var onError = BuildOutputHandler(Console.Error); + if (IsBuildless) + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/mode-active", + "C# was extracted in buildless mode", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + severity: DiagnosticMessage.TspSeverity.Note + )); + } + var buildResult = script.Run(Actions, startCallback, exitCallback, onOutput, onError); // if the build succeeded, all diagnostics we captured from the build output should be warnings; @@ -310,6 +322,18 @@ namespace Semmle.Autobuild.Shared .Select(result => result.ToDiagnosticMessage(this, diagSeverity)) .ForEach(AddDiagnostic); + if (buildResult == 0 && IsBuildless) + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/complete", + "C# buildless extraction completed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# buildless extraction has completed.", + severity: DiagnosticMessage.TspSeverity.Unknown + )); + } + return buildResult; } @@ -318,6 +342,8 @@ namespace Semmle.Autobuild.Shared /// public abstract BuildScript GetBuildScript(); + public virtual bool IsBuildless { get; } = false; + /// /// Produces a diagnostic for the tool status page that we were unable to automatically diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage.cs b/csharp/extractor/Semmle.Util/ToolStatusPage.cs index 70999fb98d2..1be700654af 100644 --- a/csharp/extractor/Semmle.Util/ToolStatusPage.cs +++ b/csharp/extractor/Semmle.Util/ToolStatusPage.cs @@ -46,6 +46,7 @@ namespace Semmle.Util [JsonConverter(typeof(StringEnumConverter), typeof(CamelCaseNamingStrategy))] public enum TspSeverity { + Unknown, Note, Warning, Error diff --git a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected new file mode 100644 index 00000000000..cc9b35b27b8 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "C# buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/complete", + "name": "C# buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# was extracted in buildless mode" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index a17966e148a..adf5087e833 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,6 @@ from create_database_utils import * +from diagnostics_test_utils import * run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) + +check_diagnostics() \ No newline at end of file From a07ee8e9613abd7f1667a92228541c1ad441898b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 22 Mar 2024 14:40:25 +0100 Subject: [PATCH 263/497] C#: Update the AsList model to a value flow model. --- csharp/ql/lib/ext/Dapper.model.yml | 2 +- .../test/library-tests/dataflow/library/FlowSummaries.expected | 2 +- .../dataflow/library/FlowSummariesFiltered.expected | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/ql/lib/ext/Dapper.model.yml b/csharp/ql/lib/ext/Dapper.model.yml index 9f5d343d462..d5305af055c 100644 --- a/csharp/ql/lib/ext/Dapper.model.yml +++ b/csharp/ql/lib/ext/Dapper.model.yml @@ -108,4 +108,4 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"] + - ["Dapper", "SqlMapper", False, "AsList", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 73def298f3a..fe17b96b912 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -710,7 +710,7 @@ summary | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;taint;manual | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 81240bcd292..d9ebde96eb2 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -8,7 +8,7 @@ | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Func,System.String,System.Boolean);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper+GridReader;false;Read;(System.Type[],System.Func,System.String,System.Boolean);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;taint;manual | +| Dapper;SqlMapper;false;AsList;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Dapper;SqlMapper;false;Query;(System.Data.IDbConnection,System.String,System.Func,System.Object,System.Data.IDbTransaction,System.Boolean,System.String,System.Nullable,System.Nullable);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | From 63e34c4dece68d49f10cdf6ccb8113d4afe5d80f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 22 Mar 2024 14:08:48 +0000 Subject: [PATCH 264/497] Kotlin 2: Accept more location changes --- .../library-tests/exprs/exprs.expected | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 63adc378aeb..2901a7182de 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1383,16 +1383,16 @@ | exprs.kt:138:9:138:18 | ...=... | exprs.kt:4:1:142:1 | topLevelMethod | AssignExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | StmtExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | ImplicitCoercionToUnitExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | +| exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | Unit | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | | exprs.kt:138:9:138:18 | dec(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:138:9:138:18 | tmp0 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:141:12:141:14 | 123 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:141:18:141:20 | 456 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:144:1:146:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:145:9:145:9 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | +| exprs.kt:145:5:145:23 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | | exprs.kt:145:13:145:16 | true | exprs.kt:144:1:146:1 | getClass | BooleanLiteral | | exprs.kt:145:13:145:23 | ::class | exprs.kt:144:1:146:1 | getClass | ClassExpr | | exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:8:148:19 | C | KtInitializerAssignExpr | @@ -1419,7 +1419,6 @@ | exprs.kt:158:29:158:29 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:158:29:158:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:5:160:60 | y1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | -| exprs.kt:160:25:160:60 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:160:25:160:60 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:160:29:160:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:29:160:42 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | @@ -1428,6 +1427,7 @@ | exprs.kt:160:47:160:47 | | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | | exprs.kt:160:47:160:47 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:160:47:160:47 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | +| exprs.kt:160:56:160:60 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:160:58:160:58 | y | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:161:5:161:13 | q | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:161:13:161:13 | 1 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | @@ -1436,11 +1436,11 @@ | exprs.kt:162:9:162:9 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:9:162:22 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:162:9:162:22 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:27:162:31 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | +| exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:31:162:31 | 2 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | -| exprs.kt:162:42:162:42 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:42:162:46 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | +| exprs.kt:162:42:162:42 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:46:162:46 | 3 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:165:1:172:1 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:165:9:165:18 | Polygon | file://:0:0:0:0 | | TypeAccess | @@ -1459,8 +1459,8 @@ | exprs.kt:169:22:169:23 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:169:25:169:30 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:9:170:10 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | -| exprs.kt:170:12:170:21 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:12:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | +| exprs.kt:170:12:170:21 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | | exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral | | exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess | @@ -1508,33 +1508,33 @@ | exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | | exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | -| exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:6:182:1 | Color | KtInitializerAssignExpr | +| exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:17:178:30 | Color | KtInitializerAssignExpr | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:6:182:1 | Color | VarAccess | -| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:6:182:1 | Color | VarAccess | +| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:17:178:30 | Color | VarAccess | +| exprs.kt:178:18:178:29 | rgb | exprs.kt:178:17:178:30 | Color | VarAccess | | exprs.kt:178:18:178:29 | this | exprs.kt:178:18:178:29 | getRgb | ThisAccess | | exprs.kt:178:18:178:29 | this.rgb | exprs.kt:178:18:178:29 | getRgb | VarAccess | | exprs.kt:179:5:179:18 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:179:5:179:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:179:5:179:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:179:5:179:18 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:179:5:179:18 | Color.RED | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:179:8:179:17 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:179:8:179:17 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:179:9:179:16 | 16711680 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:180:5:180:20 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:180:5:180:20 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:180:5:180:20 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:180:5:180:20 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:180:5:180:20 | Color.GREEN | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:180:10:180:19 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:180:10:180:19 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:180:11:180:18 | 65280 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:181:5:181:18 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:181:5:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | -| exprs.kt:181:5:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:181:5:181:18 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:181:5:181:18 | Color.BLUE | exprs.kt:0:0:0:0 | | VarAccess | +| exprs.kt:181:9:181:18 | Color | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:181:9:181:18 | new Color(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:181:10:181:17 | 255 | exprs.kt:0:0:0:0 | | IntegerLiteral | | exprs.kt:184:1:187:1 | Unit | file://:0:0:0:0 | | TypeAccess | @@ -1551,12 +1551,12 @@ | exprs.kt:192:5:192:14 | this | exprs.kt:192:5:192:14 | getA1 | ThisAccess | | exprs.kt:192:5:192:14 | this.a1 | exprs.kt:192:5:192:14 | getA1 | VarAccess | | exprs.kt:192:14:192:14 | 1 | exprs.kt:191:1:199:1 | Class1 | IntegerLiteral | -| exprs.kt:193:13:198:5 | Object | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:194:13:194:14 | a2 | exprs.kt:193:13:198:5 | getObject | LocalVariableDeclExpr | -| exprs.kt:194:18:194:18 | 2 | exprs.kt:193:13:198:5 | getObject | IntegerLiteral | -| exprs.kt:195:16:197:9 | | exprs.kt:193:13:198:5 | getObject | StmtExpr | -| exprs.kt:195:16:197:9 | Interface1 | exprs.kt:193:13:198:5 | getObject | TypeAccess | -| exprs.kt:195:16:197:9 | new (...) | exprs.kt:193:13:198:5 | getObject | ClassInstanceExpr | +| exprs.kt:193:5:198:5 | Object | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:194:9:194:18 | a2 | exprs.kt:193:5:198:5 | getObject | LocalVariableDeclExpr | +| exprs.kt:194:18:194:18 | 2 | exprs.kt:193:5:198:5 | getObject | IntegerLiteral | +| exprs.kt:195:16:197:9 | | exprs.kt:193:5:198:5 | getObject | StmtExpr | +| exprs.kt:195:16:197:9 | Interface1 | exprs.kt:193:5:198:5 | getObject | TypeAccess | +| exprs.kt:195:16:197:9 | new (...) | exprs.kt:193:5:198:5 | getObject | ClassInstanceExpr | | exprs.kt:196:13:196:49 | ...=... | exprs.kt:195:16:197:9 | | KtInitializerAssignExpr | | exprs.kt:196:13:196:49 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:196:13:196:49 | String | file://:0:0:0:0 | | TypeAccess | @@ -1570,47 +1570,47 @@ | exprs.kt:196:36:196:37 | a2 | exprs.kt:195:16:197:9 | | VarAccess | | exprs.kt:201:1:203:1 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:201:22:201:28 | Object | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:202:9:202:9 | y | exprs.kt:201:1:203:1 | notNullAssertion | LocalVariableDeclExpr | +| exprs.kt:202:5:202:20 | y | exprs.kt:201:1:203:1 | notNullAssertion | LocalVariableDeclExpr | | exprs.kt:202:18:202:18 | x | exprs.kt:201:1:203:1 | notNullAssertion | VarAccess | -| exprs.kt:202:19:202:20 | ...!! | exprs.kt:201:1:203:1 | notNullAssertion | NotNullExpr | +| exprs.kt:202:18:202:20 | ...!! | exprs.kt:201:1:203:1 | notNullAssertion | NotNullExpr | | exprs.kt:206:5:217:5 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:206:11:206:18 | Object | file://:0:0:0:0 | | TypeAccess | | exprs.kt:206:21:206:30 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:208:13:208:13 | a | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:208:9:208:29 | a | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:208:17:208:18 | aa | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:208:17:208:29 | String | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:208:17:208:29 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:209:13:209:14 | b0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:209:9:209:27 | b0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:209:19:209:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:209:19:209:27 | Intrinsics | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:209:19:209:27 | stringPlus(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:209:26:209:26 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:210:13:210:14 | b1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:210:9:210:23 | b1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:210:19:210:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | | exprs.kt:210:19:210:23 | Intrinsics | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:210:19:210:23 | stringPlus(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:210:23:210:23 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:211:13:211:14 | b2 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:211:9:211:29 | b2 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:211:19:211:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | -| exprs.kt:211:20:211:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | -| exprs.kt:211:20:211:29 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | +| exprs.kt:211:19:211:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | +| exprs.kt:211:19:211:29 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | | exprs.kt:211:28:211:28 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:212:13:212:14 | b3 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:212:9:212:25 | b3 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:212:19:212:19 | s | exprs.kt:206:5:217:5 | x | VarAccess | +| exprs.kt:212:19:212:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | | exprs.kt:212:19:212:25 | ... + ... | exprs.kt:206:5:217:5 | x | AddExpr | -| exprs.kt:212:20:212:21 | ...!! | exprs.kt:206:5:217:5 | x | NotNullExpr | | exprs.kt:212:25:212:25 | 5 | exprs.kt:206:5:217:5 | x | IntegerLiteral | -| exprs.kt:213:13:213:14 | c0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:213:9:213:36 | c0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:213:18:213:36 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:213:18:213:36 | values(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:214:13:214:14 | c1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:214:9:214:31 | c1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:214:24:214:31 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:214:24:214:31 | values(...) | exprs.kt:206:5:217:5 | x | MethodCall | -| exprs.kt:215:13:215:14 | d0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:215:9:215:44 | d0 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:215:18:215:44 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:215:18:215:44 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:215:37:215:43 | "GREEN" | exprs.kt:206:5:217:5 | x | StringLiteral | -| exprs.kt:216:13:216:14 | d1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | +| exprs.kt:216:9:216:39 | d1 | exprs.kt:206:5:217:5 | x | LocalVariableDeclExpr | | exprs.kt:216:24:216:39 | Color | exprs.kt:206:5:217:5 | x | TypeAccess | | exprs.kt:216:24:216:39 | valueOf(...) | exprs.kt:206:5:217:5 | x | MethodCall | | exprs.kt:216:32:216:38 | "GREEN" | exprs.kt:206:5:217:5 | x | StringLiteral | @@ -1740,7 +1740,7 @@ | exprs.kt:263:11:263:17 | ... * ... | exprs.kt:252:1:265:1 | mulOperators | MulExpr | | exprs.kt:263:16:263:17 | fy | exprs.kt:252:1:265:1 | mulOperators | VarAccess | | exprs.kt:267:1:276:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:269:7:269:13 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | LocalVariableDeclExpr | +| exprs.kt:269:3:269:17 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | LocalVariableDeclExpr | | exprs.kt:269:17:269:17 | 0 | exprs.kt:267:1:276:1 | inPlaceOperators | IntegerLiteral | | exprs.kt:270:3:270:9 | updated | exprs.kt:267:1:276:1 | inPlaceOperators | VarAccess | | exprs.kt:270:3:270:14 | ...+=... | exprs.kt:267:1:276:1 | inPlaceOperators | AssignAddExpr | From 453cdfa513a4e7a74f20afefe8c73103217eed2b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Mar 2024 15:51:42 +0100 Subject: [PATCH 265/497] C++: Add change note --- cpp/ql/src/change-notes/2024-03-22-boost-ssl.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-03-22-boost-ssl.md diff --git a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md new file mode 100644 index 00000000000..d4a4e0a7307 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. From 034ed1722781b0bd219855af192a793d48077d1c Mon Sep 17 00:00:00 2001 From: Max Schaefer <54907921+max-schaefer@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:24:29 +0000 Subject: [PATCH 266/497] Apply suggestions from code review Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- go/ql/src/Security/CWE-022/TaintedPath.qhelp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-022/TaintedPath.qhelp b/go/ql/src/Security/CWE-022/TaintedPath.qhelp index 3b54e80cd97..94edec4e4f4 100644 --- a/go/ql/src/Security/CWE-022/TaintedPath.qhelp +++ b/go/ql/src/Security/CWE-022/TaintedPath.qhelp @@ -64,9 +64,9 @@ path separators or ".." sequences. Note that this approach is only suitable if the input is expected to be a single file name.

    -If the input can be a path with multiple components, we can make it safe by verifying +If the input can be a path with multiple components, you can make it safe by verifying that the path is within a specific directory that is considered safe. -This can be done by resolving the input with respect to that directory, and then checking +You can do this by resolving the input with respect to that directory, and then checking that the resulting path is still within it.

    From c653f1ce8c1fa8aefaa789d5d2fa4ce8b623b533 Mon Sep 17 00:00:00 2001 From: Florin Coada Date: Fri, 22 Mar 2024 15:28:54 +0000 Subject: [PATCH 267/497] Add CodeQL 2.16.5 changelog --- .../codeql-changelog/codeql-cli-2.16.5.rst | 25 +++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 2 files changed, 26 insertions(+) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst new file mode 100644 index 00000000000..cb602e126d1 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst @@ -0,0 +1,25 @@ +.. _codeql-cli-2.16.5: + +========================== +CodeQL 2.16.5 (2024-03-21) +========================== + +.. 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.16.5 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +New Features +~~~~~~~~~~~~ + +* Beta support has been added for analyzing Java codebases without needing a working build. To enable this, pass the :code:`--build-mode none` option to :code:`codeql database create`. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index edec857c740..5015699e2fa 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: Fri, 22 Mar 2024 17:46:39 +0100 Subject: [PATCH 268/497] add calls to `.html_safe?` as a shared XSS sanitizer --- ruby/ql/lib/codeql/ruby/security/XSS.qll | 13 +++++++++++++ .../cwe-079/UnsafeHtmlConstruction.expected | 4 ++++ .../query-tests/security/cwe-079/lib/unsafeHtml.rb | 8 ++++++++ 3 files changed, 25 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index e5cf48bd0ef..e8d50aabc1e 100644 --- a/ruby/ql/lib/codeql/ruby/security/XSS.qll +++ b/ruby/ql/lib/codeql/ruby/security/XSS.qll @@ -248,6 +248,19 @@ private module Shared { or isFlowFromHelperMethod(node1, node2) } + + private predicate htmlSafeGuard(CfgNodes::AstCfgNode guard, CfgNode testedNode, boolean branch) { + exists(DataFlow::CallNode html_safe_call | html_safe_call.getMethodName() = "html_safe?" | + guard = html_safe_call.asExpr() and + testedNode = html_safe_call.getReceiver().asExpr() and + branch = true + ) + } + + /** A guard that calls `.html_safe?` to check whether the string is already HTML-safe. */ + private class HtmlSafeGuard extends Sanitizer { + HtmlSafeGuard() { this = DataFlow::BarrierGuard::getABarrierNode() } + } } /** diff --git a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected index b9019c8f1d0..599f29e806c 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/UnsafeHtmlConstruction.expected @@ -2,6 +2,7 @@ edges | lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | provenance | | | lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | provenance | | | lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | provenance | | +| lib/unsafeHtml.rb:23:32:23:35 | name | lib/unsafeHtml.rb:24:10:24:16 | #{...} | provenance | | nodes | lib/unsafeHtml.rb:2:31:2:34 | name | semmle.label | name | | lib/unsafeHtml.rb:3:10:3:16 | #{...} | semmle.label | #{...} | @@ -9,8 +10,11 @@ nodes | lib/unsafeHtml.rb:11:13:11:19 | #{...} | semmle.label | #{...} | | lib/unsafeHtml.rb:16:19:16:22 | name | semmle.label | name | | lib/unsafeHtml.rb:17:28:17:31 | name | semmle.label | name | +| lib/unsafeHtml.rb:23:32:23:35 | name | semmle.label | name | +| lib/unsafeHtml.rb:24:10:24:16 | #{...} | semmle.label | #{...} | subpaths #select | lib/unsafeHtml.rb:3:10:3:16 | #{...} | lib/unsafeHtml.rb:2:31:2:34 | name | lib/unsafeHtml.rb:3:10:3:16 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:2:31:2:34 | name | library input | lib/unsafeHtml.rb:3:5:3:22 | "

    #{...}

    " | cross-site scripting | | lib/unsafeHtml.rb:11:13:11:19 | #{...} | lib/unsafeHtml.rb:9:27:9:30 | name | lib/unsafeHtml.rb:11:13:11:19 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:9:27:9:30 | name | library input | lib/unsafeHtml.rb:13:5:13:5 | h | cross-site scripting | | lib/unsafeHtml.rb:17:28:17:31 | name | lib/unsafeHtml.rb:16:19:16:22 | name | lib/unsafeHtml.rb:17:28:17:31 | name | This string format which depends on $@ might later allow $@. | lib/unsafeHtml.rb:16:19:16:22 | name | library input | lib/unsafeHtml.rb:17:5:17:32 | call to sprintf | cross-site scripting | +| lib/unsafeHtml.rb:24:10:24:16 | #{...} | lib/unsafeHtml.rb:23:32:23:35 | name | lib/unsafeHtml.rb:24:10:24:16 | #{...} | This string interpolation which depends on $@ might later allow $@. | lib/unsafeHtml.rb:23:32:23:35 | name | library input | lib/unsafeHtml.rb:24:5:24:22 | "

    #{...}

    " | cross-site scripting | diff --git a/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb b/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb index d52932adedb..3f92d5938b1 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb +++ b/ruby/ql/test/query-tests/security/cwe-079/lib/unsafeHtml.rb @@ -19,4 +19,12 @@ class Foobar # escape sprintf("

    %s

    ", ERB::Util.html_escape(name)).html_safe # OK - the parameter is escaped end + + def create_user_description2(name) + "

    #{name}

    ".html_safe # NOT OK - the value is not necessarily HTML safe + + if name.html_safe? + "

    #{name}

    ".html_safe # OK - value is marked as being HTML safe + end + end end From 051120e9589de9fde6260c05313d2f5728e1a4ad Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Fri, 22 Mar 2024 17:58:17 +0100 Subject: [PATCH 269/497] add qldoc for `ReflectedXssSanitizers` --- .../ruby/security/UnsafeHtmlConstructionCustomizations.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll index a241fb8ce4f..6fd15647ee3 100644 --- a/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/UnsafeHtmlConstructionCustomizations.qll @@ -38,8 +38,8 @@ module UnsafeHtmlConstruction { /** A sanitizer for HTML constructed from library input vulnerabilities. */ abstract class Sanitizer extends DataFlow::Node { } - // inherit all the sanitizers from ReflectedXss - class ReflectedXssSanitizers extends Sanitizer instanceof ReflectedXss::Sanitizer { } + /** A sanitizer from the reflected-xss query, which is also a sanitizer for unsafe HTML construction. */ + private class ReflectedXssSanitizers extends Sanitizer instanceof ReflectedXss::Sanitizer { } /** Gets a node that eventually ends up in the XSS `sink`. */ private DataFlow::Node getANodeThatEndsInXssSink(ReflectedXss::Sink sink) { From 63a04c056a43ac92e453d1e89a20428e23b8d0b8 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 23 Mar 2024 21:30:33 +0000 Subject: [PATCH 270/497] Add test with `tokenImage` as used in JavaCC --- .../CWE-532/TokenSequenceParserTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java diff --git a/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java new file mode 100644 index 00000000000..89814865a9f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java @@ -0,0 +1,17 @@ +import org.apache.logging.log4j.Logger; + +interface TokenSequenceParserConstants { + /** Literal token values. */ + String[] tokenImage = { + "", + }; +} + +public class TokenSequenceParserTest implements TokenSequenceParserConstants { + void test(String password) { + Logger logger = null; + + logger.info("When parsing found this: " + tokenImage[0]); // Safe + } + +} From 4832dc51edfd122cf82eb424b1b8c4e543f63171 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 23 Mar 2024 21:33:02 +0000 Subject: [PATCH 271/497] Whitelist variable name `tokenImage` --- .../ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index c599756a81c..70ef0b39405 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -12,7 +12,8 @@ class VariableWithSensitiveName extends Variable { VariableWithSensitiveName() { exists(string name | name = this.getName() | name.regexpMatch(getCommonSensitiveInfoRegex()) and - not name.regexpMatch("(?i).*null.*") + not name.regexpMatch("(?i).*null.*") and + not name.matches("tokenImage") // appears in parser code generated by JavaCC ) } } From f4b3bae88b51eff81e2f58ccbbf3b3e6fd2f0e2c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 23 Mar 2024 23:48:16 +0000 Subject: [PATCH 272/497] Add test for ParseException use of `tokenImage` --- .../security/CWE-532/TokenSequenceParserTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java index 89814865a9f..0a24c32f26a 100644 --- a/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java +++ b/java/ql/test/query-tests/security/CWE-532/TokenSequenceParserTest.java @@ -15,3 +15,13 @@ public class TokenSequenceParserTest implements TokenSequenceParserConstants { } } + +class ParseExceptionTest extends Exception { + String[] tokenImage; + + void test() { + Logger logger = null; + + logger.info("When parsing found this: " + tokenImage[0]); // Safe + } +} From 821f3991930c4d3566a48310093db870ed0e821d Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 23 Mar 2024 23:51:52 +0000 Subject: [PATCH 273/497] Add change note --- .../2024-03-24-sensitive-log-whitelist-tokenimage.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md diff --git a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md new file mode 100644 index 00000000000..d62c2dfbb47 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a larger number of false positive alerts. From d8686e02a8499cc24e51eec383d0a30c3be4018c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sun, 24 Mar 2024 17:56:40 +0000 Subject: [PATCH 274/497] Update test expectations --- .../buildless-erroneous/diagnostics.expected | 38 +++++++------- .../buildless-gradle/diagnostics.expected | 42 ++++++++-------- .../diagnostics.expected | 42 ++++++++-------- .../java/buildless-maven/diagnostics.expected | 42 ++++++++-------- .../diagnostics.expected | 50 +++++++++---------- .../java/buildless/diagnostics.expected | 38 +++++++------- 6 files changed, 126 insertions(+), 126 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected index 03978511bb7..90aa56bf3f6 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected @@ -4,7 +4,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/no-build-tool-advice", - "name": "Java buildless mode found no usable build tool" + "name": "Java analysis found no usable build tool" }, "visibility": { "cliSummaryTable": true, @@ -13,26 +13,12 @@ } } { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected index 5d8a00c5578..337fa933808 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-gradle", - "name": "Java buildless mode extracted precise dependency graph information from tool Gradle" + "name": "Java analysis extracted precise dependency graph information from tool Gradle" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected index 77e259ae537..1058e1528f9 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-maven", - "name": "Java buildless mode extracted precise dependency graph information from tool Maven" + "name": "Java analysis extracted precise dependency graph information from tool Maven" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected index 0228a1165a9..f3c89bb842a 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice", - "name": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies" + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -60,7 +60,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-maven", - "name": "Java buildless mode extracted precise dependency graph information from tool Maven" + "name": "Java analysis extracted precise dependency graph information from tool Maven" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected index c150b2135f3..b3df8a700c3 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected @@ -1,24 +1,10 @@ { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode dropped the following dependencies because a sibling project depends on a higher version:\n\n* `junit/junit-4.11`", + "markdownMessage": "Java analysis dropped the following dependencies because a sibling project depends on a higher version:\n\n* `junit/junit-4.11`", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/dependencies-disagree", - "name": "Java buildless mode found sibling projects that disagree about some of their direct dependency versions" + "name": "Java analysis found sibling projects that disagree about some of their direct dependency versions" }, "visibility": { "cliSummaryTable": true, @@ -27,12 +13,12 @@ } } { - "markdownMessage": "Java buildless mode used JDK version 11.0.0 as recommended by build tool Gradle", + "markdownMessage": "Java analysis used JDK version 11.0.0 as recommended by build tool Gradle", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-selected", - "name": "Java buildless mode used JDK version 11.0.0 as recommended by build tool Gradle" + "name": "Java analysis used JDK version 11.0.0 as recommended by build tool Gradle" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,12 @@ } } { - "markdownMessage": "Java buildless mode used the highest recommended Java version out of:\n\n* Gradle at `/./gradle-sample` recommends version 8.0.0\n* Gradle at `/./gradle-sample2` recommends version 11.0.0", + "markdownMessage": "Java analysis used the highest recommended Java version out of:\n\n* Gradle at `/./gradle-sample` recommends version 8.0.0\n* Gradle at `/./gradle-sample2` recommends version 11.0.0", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-version-disagree", - "name": "Java buildless mode found sibling projects that disagree about the needed Java version. The highest recommended version will be used" + "name": "Java analysis found sibling projects that disagree about the needed Java version. The highest recommended version will be used" }, "visibility": { "cliSummaryTable": true, @@ -55,12 +41,12 @@ } } { - "markdownMessage": "Java buildless mode will combine recommended JDK versions and/or external dependency information from:\n\n* Gradle at `/./gradle-sample`\n* Gradle at `/./gradle-sample2`\n* Maven at `/./maven-project-1`\n* Maven at `/./maven-project-2`", + "markdownMessage": "Java analysis will combine recommended JDK versions and/or external dependency information from:\n\n* Gradle at `/./gradle-sample`\n* Gradle at `/./gradle-sample2`\n* Maven at `/./maven-project-1`\n* Maven at `/./maven-project-2`", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/using-build-tool-advice-multiple", - "name": "Java buildless mode found several sibling projects and will combine their recommended JDK versions and/or external dependency information" + "name": "Java analysis found several sibling projects and will combine their recommended JDK versions and/or external dependency information" }, "visibility": { "cliSummaryTable": true, @@ -69,12 +55,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, @@ -88,7 +88,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/depgraph-provided-by-multiple", - "name": "Java buildless mode extracted precise dependency graph information from multiple build tools" + "name": "Java analysis extracted precise dependency graph information from multiple build tools" }, "visibility": { "cliSummaryTable": true, diff --git a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected index 03978511bb7..90aa56bf3f6 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected @@ -4,7 +4,7 @@ "source": { "extractorName": "java", "id": "java/autobuilder/buildless/no-build-tool-advice", - "name": "Java buildless mode found no usable build tool" + "name": "Java analysis found no usable build tool" }, "visibility": { "cliSummaryTable": true, @@ -13,26 +13,12 @@ } } { - "markdownMessage": "Java buildless extraction has completed.", - "severity": "unknown", - "source": { - "extractorName": "java", - "id": "java/autobuilder/buildless/complete", - "name": "Java buildless extraction completed" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": false, - "telemetry": true - } -} -{ - "markdownMessage": "Java buildless mode used the system default JDK.", + "markdownMessage": "Java analysis used the system default JDK.", "severity": "unknown", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/jdk-system-default", - "name": "Java buildless mode used the system default JDK" + "name": "Java analysis used the system default JDK" }, "visibility": { "cliSummaryTable": true, @@ -41,12 +27,26 @@ } } { - "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "java", "id": "java/autobuilder/buildless/mode-active", - "name": "Java was extracted in buildless mode" + "name": "Java was extracted with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, From ac6c4add1480fc0ec35d2bf49231f1996226b604 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Sun, 24 Mar 2024 20:11:15 +0000 Subject: [PATCH 275/497] Apply suggestions from code review Co-authored-by: Chris Smowton --- java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll | 2 +- .../2024-03-24-sensitive-log-whitelist-tokenimage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index 70ef0b39405..d46d35ab0cc 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -13,7 +13,7 @@ class VariableWithSensitiveName extends Variable { exists(string name | name = this.getName() | name.regexpMatch(getCommonSensitiveInfoRegex()) and not name.regexpMatch("(?i).*null.*") and - not name.matches("tokenImage") // appears in parser code generated by JavaCC + name != "tokenImage" // appears in parser code generated by JavaCC ) } } diff --git a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md index d62c2dfbb47..017e5abd7ee 100644 --- a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md +++ b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a larger number of false positive alerts. +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. From 0c73340e47c7541ba2c52c7f0012ced5262fe6ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 03:31:03 +0000 Subject: [PATCH 276/497] Bump regex from 1.10.3 to 1.10.4 in /ql Bumps [regex](https://github.com/rust-lang/regex) from 1.10.3 to 1.10.4. - [Release notes](https://github.com/rust-lang/regex/releases) - [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/regex/compare/1.10.3...1.10.4) --- updated-dependencies: - dependency-name: regex dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- ql/Cargo.lock | Bin 34042 -> 34042 bytes ql/buramu/Cargo.toml | 2 +- ql/extractor/Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 557cf673d595458400f9328b9382d49234d7e8b9..59c3f2c14d93b04da0148cc1d1c1b0bcd1adb882 100644 GIT binary patch delta 86 zcmey>$@Hs}X~S&S$rn=t?2`=*%~O(6(o#|_lP!!5EG*4UlgttgEmF)4(~Q%MEliUw qEKSS|)6A2M(~=BKO^hroQj^n+5{(Q@Es_#VCMP$@Hs}X~S&S$&17S?32ulQj$^)4ATsf49wCjQ!G-F%~MP)Qw>ZL4a_Y}(+o|G plMD=!jFOFvfLt>p3!^kMbHh{vV?&E%%Ou0e6AQ&QJGkw#0|4J58w3CV diff --git a/ql/buramu/Cargo.toml b/ql/buramu/Cargo.toml index c072903b82a..1aa57ac412e 100644 --- a/ql/buramu/Cargo.toml +++ b/ql/buramu/Cargo.toml @@ -9,4 +9,4 @@ edition = "2018" lazy_static = "1.4.0" chrono = "0.4.35" rayon = "1.9.0" -regex = "1.10.3" +regex = "1.10.4" diff --git a/ql/extractor/Cargo.toml b/ql/extractor/Cargo.toml index bc8de165e65..1155cc3c698 100644 --- a/ql/extractor/Cargo.toml +++ b/ql/extractor/Cargo.toml @@ -16,5 +16,5 @@ clap = { version = "4.2", features = ["derive"] } tracing = "0.1" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } rayon = "1.9.0" -regex = "1.10.3" +regex = "1.10.4" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } From 762b4ce42e2ad64a2b29401b5dea599448ae766c Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 10:17:55 +0100 Subject: [PATCH 277/497] Swift: prepare integration tests for internal running This harmonizes Swift integration tests with the rest of the repository, to prepare for the internal integration test runner to run them. The stripped down runner is kept compatible, so that current CI can still use it now. Maybe it will be kept for developer use. This PR includes: * moving the integration tests inside `ql` * editing `qlpack.yml` so that the internal runner can use it * change database directory to be `test-db` rather than `db` --- swift/actions/run-integration-tests/action.yml | 4 ++-- swift/integration-tests/qlpack.yml | 7 ------- swift/{ => ql}/integration-tests/.clang-format | 0 swift/{ => ql}/integration-tests/.gitignore | 2 +- swift/{ => ql}/integration-tests/BUILD.bazel | 0 swift/{ => ql}/integration-tests/create_database_utils.py | 6 +++--- .../{ => ql}/integration-tests/diagnostics_test_utils.py | 0 .../linux-only/RegexLiteralExpr/RegexLiteralExpr.expected | 0 .../linux-only/RegexLiteralExpr/RegexLiteralExpr.ql | 0 .../linux-only/RegexLiteralExpr/regex.swift | 0 .../integration-tests/linux-only/RegexLiteralExpr/test.py | 0 .../autobuilder/unsupported-os/diagnostics.expected | 0 .../linux-only/autobuilder/unsupported-os/test.py | 0 .../osx-only/autobuilder/failure/.gitignore | 0 .../osx-only/autobuilder/failure/diagnostics.expected | 0 .../failure/hello-failure.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../osx-only/autobuilder/failure/test.py | 0 .../autobuilder/no-build-system/diagnostics.expected | 0 .../osx-only/autobuilder/no-build-system/test.py | 0 .../osx-only/autobuilder/no-build-system/x.swift | 0 .../autobuilder/no-swift-with-spm/diagnostics.expected | 0 .../hello-objective.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../no-swift-with-spm/hello-objective/Package.swift | 0 .../autobuilder/no-swift-with-spm/hello-objective/main.m | 0 .../osx-only/autobuilder/no-swift-with-spm/test.py | 0 .../osx-only/autobuilder/no-swift/diagnostics.expected | 0 .../no-swift/hello-objective.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../osx-only/autobuilder/no-swift/hello-objective/main.m | 0 .../osx-only/autobuilder/no-swift/test.py | 0 .../osx-only/autobuilder/no-xcode-with-spm/Package.swift | 0 .../autobuilder/no-xcode-with-spm/diagnostics.expected | 0 .../osx-only/autobuilder/no-xcode-with-spm/test.py | 0 .../osx-only/autobuilder/no-xcode-with-spm/x.swift | 0 .../autobuilder/only-tests-with-spm/Package.swift | 0 .../autobuilder/only-tests-with-spm/diagnostics.expected | 0 .../hello-tests.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../osx-only/autobuilder/only-tests-with-spm/test.py | 0 .../osx-only/autobuilder/only-tests/diagnostics.expected | 0 .../only-tests/hello-tests.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../osx-only/autobuilder/only-tests/test.py | 0 .../autobuilder/xcode-fails-spm-works/Files.expected | 0 .../osx-only/autobuilder/xcode-fails-spm-works/Files.ql | 0 .../autobuilder/xcode-fails-spm-works/Package.swift | 0 .../Sources/hello-world/hello_world.swift | 0 .../codeql-swift-autobuild-test.xcodeproj/project.pbxproj | 0 .../codeql-swift-autobuild-test/AppDelegate.swift | 0 .../osx-only/autobuilder/xcode-fails-spm-works/test.py | 0 .../osx-only/canonical-case/Files.expected | 0 .../integration-tests/osx-only/canonical-case/Files.ql | 0 .../osx-only/canonical-case/MiXeDcAsE.swifT | 0 .../integration-tests/osx-only/canonical-case/build.sh | 0 .../integration-tests/osx-only/canonical-case/test.py | 0 .../integration-tests/osx-only/hello-xcode/Files.expected | 0 .../integration-tests/osx-only/hello-xcode/Files.ql | 0 .../codeql-swift-autobuild-test.xcodeproj/project.pbxproj | 0 .../codeql-swift-autobuild-test/AppDelegate.swift | 0 .../integration-tests/osx-only/hello-xcode/test.py | 0 .../posix-only/cross-references/Classes.expected | 0 .../posix-only/cross-references/Classes.ql | 0 .../posix-only/cross-references/Deinitializers.expected | 0 .../posix-only/cross-references/Deinitializers.ql | 0 .../posix-only/cross-references/Enums.expected | 0 .../posix-only/cross-references/Enums.ql | 0 .../posix-only/cross-references/Functions.expected | 0 .../posix-only/cross-references/Functions.ql | 0 .../posix-only/cross-references/Initializers.expected | 0 .../posix-only/cross-references/Initializers.ql | 0 .../posix-only/cross-references/Module.expected | 0 .../posix-only/cross-references/Module.ql | 0 .../posix-only/cross-references/Operators.expected | 0 .../posix-only/cross-references/Operators.ql | 0 .../posix-only/cross-references/Package.swift | 0 .../posix-only/cross-references/Protocols.expected | 0 .../posix-only/cross-references/Protocols.ql | 0 .../cross-references/Sources/cross-references/lib.swift | 0 .../cross-references/Sources/cross-references/main.swift | 0 .../posix-only/cross-references/Structs.expected | 0 .../posix-only/cross-references/Structs.ql | 0 .../posix-only/cross-references/VarDecls.expected | 0 .../posix-only/cross-references/VarDecls.ql | 0 .../integration-tests/posix-only/cross-references/test.py | 0 .../posix-only/deduplication/BuiltinTypes.expected | 0 .../posix-only/deduplication/BuiltinTypes.ql | 0 .../posix-only/deduplication/Decls.expected | 0 .../integration-tests/posix-only/deduplication/Decls.ql | 0 .../posix-only/deduplication/Package.swift | 0 .../posix-only/deduplication/Relevant.qll | 0 .../deduplication/Sources/deduplication/def.swift | 0 .../deduplication/Sources/deduplication/use.swift | 0 .../posix-only/deduplication/Types.expected | 0 .../integration-tests/posix-only/deduplication/Types.ql | 0 .../integration-tests/posix-only/deduplication/test.py | 0 .../posix-only/frontend-invocations/.gitignore | 0 .../posix-only/frontend-invocations/A.swift | 0 .../posix-only/frontend-invocations/B.swift | 0 .../posix-only/frontend-invocations/C.swift | 0 .../posix-only/frontend-invocations/D.swift | 0 .../posix-only/frontend-invocations/E.swift | 0 .../posix-only/frontend-invocations/Esup.swift | 0 .../posix-only/frontend-invocations/F1.swift | 0 .../posix-only/frontend-invocations/F2.swift | 0 .../posix-only/frontend-invocations/F3.swift | 0 .../posix-only/frontend-invocations/F4.swift | 0 .../posix-only/frontend-invocations/F5.swift | 0 .../posix-only/frontend-invocations/Files.expected | 0 .../posix-only/frontend-invocations/Files.ql | 0 .../posix-only/frontend-invocations/G.swift | 0 .../posix-only/frontend-invocations/H1.swift | 0 .../posix-only/frontend-invocations/H2.swift | 0 .../posix-only/frontend-invocations/H3.swift | 0 .../posix-only/frontend-invocations/I1.swift | 0 .../posix-only/frontend-invocations/I2.swift | 0 .../posix-only/frontend-invocations/Modules.expected | 0 .../posix-only/frontend-invocations/Modules.ql | 0 .../posix-only/frontend-invocations/build.sh | 0 .../posix-only/frontend-invocations/dir/.empty | 0 .../posix-only/frontend-invocations/test.py | 5 +++-- .../posix-only/hello-world/Bodies.expected | 0 .../integration-tests/posix-only/hello-world/Bodies.ql | 0 .../posix-only/hello-world/Package.swift | 0 .../hello-world/Sources/hello-world/hello_world.swift | 0 .../posix-only/hello-world/test.expected | 0 .../integration-tests/posix-only/hello-world/test.py | 0 .../integration-tests/posix-only/hello-world/test.ql | 0 .../posix-only/linkage-awareness/Bodies.expected | 0 .../posix-only/linkage-awareness/Bodies.ql | 0 .../posix-only/linkage-awareness/Foo1/Package.swift | 0 .../linkage-awareness/Foo1/Sources/foo/main.swift | 0 .../posix-only/linkage-awareness/Foo2/Package.swift | 0 .../linkage-awareness/Foo2/Sources/foo/main.swift | 0 .../posix-only/linkage-awareness/build.sh | 0 .../posix-only/linkage-awareness/test.py | 0 .../posix-only/partial-modules/A/Package.swift | 0 .../posix-only/partial-modules/A/Sources/A/A.swift | 0 .../posix-only/partial-modules/A/Sources/A/Asup.swift | 0 .../posix-only/partial-modules/B/Package.swift | 0 .../posix-only/partial-modules/B/Sources/B/B.swift | 0 .../posix-only/partial-modules/B/Sources/B/Bsup.swift | 0 .../posix-only/partial-modules/Modules.expected | 0 .../posix-only/partial-modules/Modules.ql | 0 .../posix-only/partial-modules/Package.swift | 0 .../Sources/partial-modules/partial_modules.swift | 0 .../posix-only/partial-modules/Unknown.expected | 0 .../posix-only/partial-modules/Unknown.ql | 0 .../integration-tests/posix-only/partial-modules/test.py | 0 .../integration-tests/posix-only/symlinks/.gitignore | 0 .../integration-tests/posix-only/symlinks/Files.expected | 0 .../integration-tests/posix-only/symlinks/Files.ql | 0 .../integration-tests/posix-only/symlinks/main.swift | 0 .../posix-only/symlinks/preserve/Package.swift | 0 .../posix-only/symlinks/preserve/Sources/.gitkeep | 0 .../posix-only/symlinks/resolve/Package.swift | 0 .../posix-only/symlinks/resolve/Sources/.gitkeep | 0 .../integration-tests/posix-only/symlinks/test.py | 0 swift/ql/integration-tests/qlpack.yml | 4 ++++ swift/{ => ql}/integration-tests/runner.py | 8 +++++--- 164 files changed, 18 insertions(+), 18 deletions(-) delete mode 100644 swift/integration-tests/qlpack.yml rename swift/{ => ql}/integration-tests/.clang-format (100%) rename swift/{ => ql}/integration-tests/.gitignore (94%) rename swift/{ => ql}/integration-tests/BUILD.bazel (100%) rename swift/{ => ql}/integration-tests/create_database_utils.py (90%) rename swift/{ => ql}/integration-tests/diagnostics_test_utils.py (100%) rename swift/{ => ql}/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected (100%) rename swift/{ => ql}/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql (100%) rename swift/{ => ql}/integration-tests/linux-only/RegexLiteralExpr/regex.swift (100%) rename swift/{ => ql}/integration-tests/linux-only/RegexLiteralExpr/test.py (100%) rename swift/{ => ql}/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/linux-only/autobuilder/unsupported-os/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/.gitignore (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/failure/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-build-system/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-build-system/x.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-swift/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/only-tests/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/canonical-case/Files.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/canonical-case/Files.ql (100%) rename swift/{ => ql}/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT (100%) rename swift/{ => ql}/integration-tests/osx-only/canonical-case/build.sh (100%) rename swift/{ => ql}/integration-tests/osx-only/canonical-case/test.py (100%) rename swift/{ => ql}/integration-tests/osx-only/hello-xcode/Files.expected (100%) rename swift/{ => ql}/integration-tests/osx-only/hello-xcode/Files.ql (100%) rename swift/{ => ql}/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj (100%) rename swift/{ => ql}/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift (100%) rename swift/{ => ql}/integration-tests/osx-only/hello-xcode/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Classes.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Classes.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Deinitializers.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Deinitializers.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Enums.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Enums.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Functions.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Functions.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Initializers.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Initializers.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Module.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Module.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Operators.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Operators.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Protocols.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Protocols.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Structs.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/Structs.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/VarDecls.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/VarDecls.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/cross-references/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/BuiltinTypes.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/BuiltinTypes.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Decls.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Decls.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Relevant.qll (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Types.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/Types.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/deduplication/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/.gitignore (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/A.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/B.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/C.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/D.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/E.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/Esup.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/F1.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/F2.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/F3.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/F4.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/F5.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/Files.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/Files.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/G.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/H1.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/H2.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/H3.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/I1.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/I2.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/Modules.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/Modules.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/build.sh (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/dir/.empty (100%) rename swift/{ => ql}/integration-tests/posix-only/frontend-invocations/test.py (80%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/Bodies.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/Bodies.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/test.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/hello-world/test.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Bodies.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Bodies.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/build.sh (100%) rename swift/{ => ql}/integration-tests/posix-only/linkage-awareness/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/A/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/B/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Modules.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Modules.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Unknown.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/Unknown.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/partial-modules/test.py (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/.gitignore (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/Files.expected (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/Files.ql (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/main.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/preserve/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/resolve/Package.swift (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep (100%) rename swift/{ => ql}/integration-tests/posix-only/symlinks/test.py (100%) create mode 100644 swift/ql/integration-tests/qlpack.yml rename swift/{ => ql}/integration-tests/runner.py (92%) diff --git a/swift/actions/run-integration-tests/action.yml b/swift/actions/run-integration-tests/action.yml index 6db78e2e01e..2c6df4e2b51 100644 --- a/swift/actions/run-integration-tests/action.yml +++ b/swift/actions/run-integration-tests/action.yml @@ -18,7 +18,7 @@ runs: - name: Run integration tests shell: bash run: | - python swift/integration-tests/runner.py --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" + python swift/ql/integration-tests/runner.py --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" env: SEMMLE_DEBUG_TRACER: 10000 - name: Upload test logs @@ -27,5 +27,5 @@ runs: with: name: swift-integration-tests-logs-${{ runner.os }} path: | - swift/integration-tests/**/db/log + swift/ql/integration-tests/**/db/log retention-days: 1 diff --git a/swift/integration-tests/qlpack.yml b/swift/integration-tests/qlpack.yml deleted file mode 100644 index f0a64418576..00000000000 --- a/swift/integration-tests/qlpack.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: integration-tests-swift -version: 0.0.0 -dependencies: - codeql/swift-all: ${workspace} -tests: . -extractor: swift -warnOnImplicitThis: true diff --git a/swift/integration-tests/.clang-format b/swift/ql/integration-tests/.clang-format similarity index 100% rename from swift/integration-tests/.clang-format rename to swift/ql/integration-tests/.clang-format diff --git a/swift/integration-tests/.gitignore b/swift/ql/integration-tests/.gitignore similarity index 94% rename from swift/integration-tests/.gitignore rename to swift/ql/integration-tests/.gitignore index aa3e9b45c5c..a68e1d52164 100644 --- a/swift/integration-tests/.gitignore +++ b/swift/ql/integration-tests/.gitignore @@ -6,5 +6,5 @@ xcuserdata/ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata *.actual -db +test-db *.swiftmodule diff --git a/swift/integration-tests/BUILD.bazel b/swift/ql/integration-tests/BUILD.bazel similarity index 100% rename from swift/integration-tests/BUILD.bazel rename to swift/ql/integration-tests/BUILD.bazel diff --git a/swift/integration-tests/create_database_utils.py b/swift/ql/integration-tests/create_database_utils.py similarity index 90% rename from swift/integration-tests/create_database_utils.py rename to swift/ql/integration-tests/create_database_utils.py index cbe2c5a7f67..b3b3803b05b 100644 --- a/swift/integration-tests/create_database_utils.py +++ b/swift/ql/integration-tests/create_database_utils.py @@ -27,8 +27,8 @@ def runUnsuccessfully(cmd): def run_codeql_database_create(cmds, lang, keep_trap=True, db=None, runFunction=runSuccessfully): """ db parameter is here solely for compatibility with the internal test runner """ assert lang == 'swift' - codeql_root = pathlib.Path(__file__).parents[2] - shutil.rmtree("db", ignore_errors=True) + codeql_root = pathlib.Path(__file__).parents[3] + shutil.rmtree("test-db", ignore_errors=True) cmd = [ "codeql", "database", "create", "-s", ".", "-l", "swift", f"--search-path={codeql_root}", "--no-cleanup", @@ -37,5 +37,5 @@ def run_codeql_database_create(cmds, lang, keep_trap=True, db=None, runFunction= cmd.append("--keep-trap") for c in cmds: cmd += ["-c", c] - cmd.append("db") + cmd.append("test-db") runFunction(cmd) diff --git a/swift/integration-tests/diagnostics_test_utils.py b/swift/ql/integration-tests/diagnostics_test_utils.py similarity index 100% rename from swift/integration-tests/diagnostics_test_utils.py rename to swift/ql/integration-tests/diagnostics_test_utils.py diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.expected diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/RegexLiteralExpr.ql diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/regex.swift b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/regex.swift rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/regex.swift diff --git a/swift/integration-tests/linux-only/RegexLiteralExpr/test.py b/swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py similarity index 100% rename from swift/integration-tests/linux-only/RegexLiteralExpr/test.py rename to swift/ql/integration-tests/linux-only/RegexLiteralExpr/test.py diff --git a/swift/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected b/swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected similarity index 100% rename from swift/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected rename to swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/diagnostics.expected diff --git a/swift/integration-tests/linux-only/autobuilder/unsupported-os/test.py b/swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/test.py similarity index 100% rename from swift/integration-tests/linux-only/autobuilder/unsupported-os/test.py rename to swift/ql/integration-tests/linux-only/autobuilder/unsupported-os/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/failure/.gitignore b/swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/.gitignore rename to swift/ql/integration-tests/osx-only/autobuilder/failure/.gitignore diff --git a/swift/integration-tests/osx-only/autobuilder/failure/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/failure/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/failure/hello-failure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/failure/test.py b/swift/ql/integration-tests/osx-only/autobuilder/failure/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/failure/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/failure/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-build-system/x.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-build-system/x.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-build-system/x.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/hello-objective/main.m diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift-with-spm/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/hello-objective/main.m diff --git a/swift/integration-tests/osx-only/autobuilder/no-swift/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-swift/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-swift/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift b/swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift rename to swift/ql/integration-tests/osx-only/autobuilder/no-xcode-with-spm/x.swift diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py b/swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests-with-spm/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/diagnostics.expected diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/hello-tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/swift/integration-tests/osx-only/autobuilder/only-tests/test.py b/swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/only-tests/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/only-tests/test.py diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.expected diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Files.ql diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Package.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/Sources/hello-world/hello_world.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py b/swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py similarity index 100% rename from swift/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py rename to swift/ql/integration-tests/osx-only/autobuilder/xcode-fails-spm-works/test.py diff --git a/swift/integration-tests/osx-only/canonical-case/Files.expected b/swift/ql/integration-tests/osx-only/canonical-case/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/Files.expected rename to swift/ql/integration-tests/osx-only/canonical-case/Files.expected diff --git a/swift/integration-tests/osx-only/canonical-case/Files.ql b/swift/ql/integration-tests/osx-only/canonical-case/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/Files.ql rename to swift/ql/integration-tests/osx-only/canonical-case/Files.ql diff --git a/swift/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT b/swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT rename to swift/ql/integration-tests/osx-only/canonical-case/MiXeDcAsE.swifT diff --git a/swift/integration-tests/osx-only/canonical-case/build.sh b/swift/ql/integration-tests/osx-only/canonical-case/build.sh similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/build.sh rename to swift/ql/integration-tests/osx-only/canonical-case/build.sh diff --git a/swift/integration-tests/osx-only/canonical-case/test.py b/swift/ql/integration-tests/osx-only/canonical-case/test.py similarity index 100% rename from swift/integration-tests/osx-only/canonical-case/test.py rename to swift/ql/integration-tests/osx-only/canonical-case/test.py diff --git a/swift/integration-tests/osx-only/hello-xcode/Files.expected b/swift/ql/integration-tests/osx-only/hello-xcode/Files.expected similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/Files.expected rename to swift/ql/integration-tests/osx-only/hello-xcode/Files.expected diff --git a/swift/integration-tests/osx-only/hello-xcode/Files.ql b/swift/ql/integration-tests/osx-only/hello-xcode/Files.ql similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/Files.ql rename to swift/ql/integration-tests/osx-only/hello-xcode/Files.ql diff --git a/swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj b/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj rename to swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test.xcodeproj/project.pbxproj diff --git a/swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift b/swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift rename to swift/ql/integration-tests/osx-only/hello-xcode/codeql-swift-autobuild-test/AppDelegate.swift diff --git a/swift/integration-tests/osx-only/hello-xcode/test.py b/swift/ql/integration-tests/osx-only/hello-xcode/test.py similarity index 100% rename from swift/integration-tests/osx-only/hello-xcode/test.py rename to swift/ql/integration-tests/osx-only/hello-xcode/test.py diff --git a/swift/integration-tests/posix-only/cross-references/Classes.expected b/swift/ql/integration-tests/posix-only/cross-references/Classes.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Classes.expected rename to swift/ql/integration-tests/posix-only/cross-references/Classes.expected diff --git a/swift/integration-tests/posix-only/cross-references/Classes.ql b/swift/ql/integration-tests/posix-only/cross-references/Classes.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Classes.ql rename to swift/ql/integration-tests/posix-only/cross-references/Classes.ql diff --git a/swift/integration-tests/posix-only/cross-references/Deinitializers.expected b/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Deinitializers.expected rename to swift/ql/integration-tests/posix-only/cross-references/Deinitializers.expected diff --git a/swift/integration-tests/posix-only/cross-references/Deinitializers.ql b/swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Deinitializers.ql rename to swift/ql/integration-tests/posix-only/cross-references/Deinitializers.ql diff --git a/swift/integration-tests/posix-only/cross-references/Enums.expected b/swift/ql/integration-tests/posix-only/cross-references/Enums.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Enums.expected rename to swift/ql/integration-tests/posix-only/cross-references/Enums.expected diff --git a/swift/integration-tests/posix-only/cross-references/Enums.ql b/swift/ql/integration-tests/posix-only/cross-references/Enums.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Enums.ql rename to swift/ql/integration-tests/posix-only/cross-references/Enums.ql diff --git a/swift/integration-tests/posix-only/cross-references/Functions.expected b/swift/ql/integration-tests/posix-only/cross-references/Functions.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Functions.expected rename to swift/ql/integration-tests/posix-only/cross-references/Functions.expected diff --git a/swift/integration-tests/posix-only/cross-references/Functions.ql b/swift/ql/integration-tests/posix-only/cross-references/Functions.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Functions.ql rename to swift/ql/integration-tests/posix-only/cross-references/Functions.ql diff --git a/swift/integration-tests/posix-only/cross-references/Initializers.expected b/swift/ql/integration-tests/posix-only/cross-references/Initializers.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Initializers.expected rename to swift/ql/integration-tests/posix-only/cross-references/Initializers.expected diff --git a/swift/integration-tests/posix-only/cross-references/Initializers.ql b/swift/ql/integration-tests/posix-only/cross-references/Initializers.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Initializers.ql rename to swift/ql/integration-tests/posix-only/cross-references/Initializers.ql diff --git a/swift/integration-tests/posix-only/cross-references/Module.expected b/swift/ql/integration-tests/posix-only/cross-references/Module.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Module.expected rename to swift/ql/integration-tests/posix-only/cross-references/Module.expected diff --git a/swift/integration-tests/posix-only/cross-references/Module.ql b/swift/ql/integration-tests/posix-only/cross-references/Module.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Module.ql rename to swift/ql/integration-tests/posix-only/cross-references/Module.ql diff --git a/swift/integration-tests/posix-only/cross-references/Operators.expected b/swift/ql/integration-tests/posix-only/cross-references/Operators.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Operators.expected rename to swift/ql/integration-tests/posix-only/cross-references/Operators.expected diff --git a/swift/integration-tests/posix-only/cross-references/Operators.ql b/swift/ql/integration-tests/posix-only/cross-references/Operators.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Operators.ql rename to swift/ql/integration-tests/posix-only/cross-references/Operators.ql diff --git a/swift/integration-tests/posix-only/cross-references/Package.swift b/swift/ql/integration-tests/posix-only/cross-references/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Package.swift rename to swift/ql/integration-tests/posix-only/cross-references/Package.swift diff --git a/swift/integration-tests/posix-only/cross-references/Protocols.expected b/swift/ql/integration-tests/posix-only/cross-references/Protocols.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Protocols.expected rename to swift/ql/integration-tests/posix-only/cross-references/Protocols.expected diff --git a/swift/integration-tests/posix-only/cross-references/Protocols.ql b/swift/ql/integration-tests/posix-only/cross-references/Protocols.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Protocols.ql rename to swift/ql/integration-tests/posix-only/cross-references/Protocols.ql diff --git a/swift/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift b/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift rename to swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/lib.swift diff --git a/swift/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift b/swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift rename to swift/ql/integration-tests/posix-only/cross-references/Sources/cross-references/main.swift diff --git a/swift/integration-tests/posix-only/cross-references/Structs.expected b/swift/ql/integration-tests/posix-only/cross-references/Structs.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Structs.expected rename to swift/ql/integration-tests/posix-only/cross-references/Structs.expected diff --git a/swift/integration-tests/posix-only/cross-references/Structs.ql b/swift/ql/integration-tests/posix-only/cross-references/Structs.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/Structs.ql rename to swift/ql/integration-tests/posix-only/cross-references/Structs.ql diff --git a/swift/integration-tests/posix-only/cross-references/VarDecls.expected b/swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected similarity index 100% rename from swift/integration-tests/posix-only/cross-references/VarDecls.expected rename to swift/ql/integration-tests/posix-only/cross-references/VarDecls.expected diff --git a/swift/integration-tests/posix-only/cross-references/VarDecls.ql b/swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql similarity index 100% rename from swift/integration-tests/posix-only/cross-references/VarDecls.ql rename to swift/ql/integration-tests/posix-only/cross-references/VarDecls.ql diff --git a/swift/integration-tests/posix-only/cross-references/test.py b/swift/ql/integration-tests/posix-only/cross-references/test.py similarity index 100% rename from swift/integration-tests/posix-only/cross-references/test.py rename to swift/ql/integration-tests/posix-only/cross-references/test.py diff --git a/swift/integration-tests/posix-only/deduplication/BuiltinTypes.expected b/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected similarity index 100% rename from swift/integration-tests/posix-only/deduplication/BuiltinTypes.expected rename to swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.expected diff --git a/swift/integration-tests/posix-only/deduplication/BuiltinTypes.ql b/swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/BuiltinTypes.ql rename to swift/ql/integration-tests/posix-only/deduplication/BuiltinTypes.ql diff --git a/swift/integration-tests/posix-only/deduplication/Decls.expected b/swift/ql/integration-tests/posix-only/deduplication/Decls.expected similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Decls.expected rename to swift/ql/integration-tests/posix-only/deduplication/Decls.expected diff --git a/swift/integration-tests/posix-only/deduplication/Decls.ql b/swift/ql/integration-tests/posix-only/deduplication/Decls.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Decls.ql rename to swift/ql/integration-tests/posix-only/deduplication/Decls.ql diff --git a/swift/integration-tests/posix-only/deduplication/Package.swift b/swift/ql/integration-tests/posix-only/deduplication/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Package.swift rename to swift/ql/integration-tests/posix-only/deduplication/Package.swift diff --git a/swift/integration-tests/posix-only/deduplication/Relevant.qll b/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Relevant.qll rename to swift/ql/integration-tests/posix-only/deduplication/Relevant.qll diff --git a/swift/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift b/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift rename to swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/def.swift diff --git a/swift/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift b/swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift rename to swift/ql/integration-tests/posix-only/deduplication/Sources/deduplication/use.swift diff --git a/swift/integration-tests/posix-only/deduplication/Types.expected b/swift/ql/integration-tests/posix-only/deduplication/Types.expected similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Types.expected rename to swift/ql/integration-tests/posix-only/deduplication/Types.expected diff --git a/swift/integration-tests/posix-only/deduplication/Types.ql b/swift/ql/integration-tests/posix-only/deduplication/Types.ql similarity index 100% rename from swift/integration-tests/posix-only/deduplication/Types.ql rename to swift/ql/integration-tests/posix-only/deduplication/Types.ql diff --git a/swift/integration-tests/posix-only/deduplication/test.py b/swift/ql/integration-tests/posix-only/deduplication/test.py similarity index 100% rename from swift/integration-tests/posix-only/deduplication/test.py rename to swift/ql/integration-tests/posix-only/deduplication/test.py diff --git a/swift/integration-tests/posix-only/frontend-invocations/.gitignore b/swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/.gitignore rename to swift/ql/integration-tests/posix-only/frontend-invocations/.gitignore diff --git a/swift/integration-tests/posix-only/frontend-invocations/A.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/A.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/A.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/A.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/B.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/B.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/B.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/B.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/C.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/C.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/C.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/C.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/D.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/D.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/D.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/D.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/E.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/E.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/E.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/E.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/Esup.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Esup.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/Esup.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F3.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F3.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F3.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F4.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F4.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F4.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/F5.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/F5.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/F5.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/Files.expected b/swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Files.expected rename to swift/ql/integration-tests/posix-only/frontend-invocations/Files.expected diff --git a/swift/integration-tests/posix-only/frontend-invocations/Files.ql b/swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Files.ql rename to swift/ql/integration-tests/posix-only/frontend-invocations/Files.ql diff --git a/swift/integration-tests/posix-only/frontend-invocations/G.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/G.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/G.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/G.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/H1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/H2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/H3.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/H3.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/H3.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/I1.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/I1.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/I1.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/I2.swift b/swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/I2.swift rename to swift/ql/integration-tests/posix-only/frontend-invocations/I2.swift diff --git a/swift/integration-tests/posix-only/frontend-invocations/Modules.expected b/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Modules.expected rename to swift/ql/integration-tests/posix-only/frontend-invocations/Modules.expected diff --git a/swift/integration-tests/posix-only/frontend-invocations/Modules.ql b/swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/Modules.ql rename to swift/ql/integration-tests/posix-only/frontend-invocations/Modules.ql diff --git a/swift/integration-tests/posix-only/frontend-invocations/build.sh b/swift/ql/integration-tests/posix-only/frontend-invocations/build.sh similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/build.sh rename to swift/ql/integration-tests/posix-only/frontend-invocations/build.sh diff --git a/swift/integration-tests/posix-only/frontend-invocations/dir/.empty b/swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty similarity index 100% rename from swift/integration-tests/posix-only/frontend-invocations/dir/.empty rename to swift/ql/integration-tests/posix-only/frontend-invocations/dir/.empty diff --git a/swift/integration-tests/posix-only/frontend-invocations/test.py b/swift/ql/integration-tests/posix-only/frontend-invocations/test.py similarity index 80% rename from swift/integration-tests/posix-only/frontend-invocations/test.py rename to swift/ql/integration-tests/posix-only/frontend-invocations/test.py index 06f07282e2f..cb07988676c 100644 --- a/swift/integration-tests/posix-only/frontend-invocations/test.py +++ b/swift/ql/integration-tests/posix-only/frontend-invocations/test.py @@ -5,7 +5,8 @@ from pathlib import Path run_codeql_database_create([ './build.sh', -], lang='swift') +], lang='swift', +) with open('hashes.expected', 'w') as expected: for f in sorted(Path().glob("*.swiftmodule")): @@ -13,7 +14,7 @@ with open('hashes.expected', 'w') as expected: print(f.name, sha256(module.read()).hexdigest(), file=expected) with open('hashes.actual', 'w') as actual: - hashes = [(s.name, s.resolve().name) for s in Path("db/working/swift-extraction-artifacts/store").iterdir()] + hashes = [(s.name, s.resolve().name) for s in Path("test-db/working/swift-extraction-artifacts/store").iterdir()] hashes.sort() for module, hash in hashes: print(module, hash, file=actual) diff --git a/swift/integration-tests/posix-only/hello-world/Bodies.expected b/swift/ql/integration-tests/posix-only/hello-world/Bodies.expected similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Bodies.expected rename to swift/ql/integration-tests/posix-only/hello-world/Bodies.expected diff --git a/swift/integration-tests/posix-only/hello-world/Bodies.ql b/swift/ql/integration-tests/posix-only/hello-world/Bodies.ql similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Bodies.ql rename to swift/ql/integration-tests/posix-only/hello-world/Bodies.ql diff --git a/swift/integration-tests/posix-only/hello-world/Package.swift b/swift/ql/integration-tests/posix-only/hello-world/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Package.swift rename to swift/ql/integration-tests/posix-only/hello-world/Package.swift diff --git a/swift/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift b/swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift similarity index 100% rename from swift/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift rename to swift/ql/integration-tests/posix-only/hello-world/Sources/hello-world/hello_world.swift diff --git a/swift/integration-tests/posix-only/hello-world/test.expected b/swift/ql/integration-tests/posix-only/hello-world/test.expected similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.expected rename to swift/ql/integration-tests/posix-only/hello-world/test.expected diff --git a/swift/integration-tests/posix-only/hello-world/test.py b/swift/ql/integration-tests/posix-only/hello-world/test.py similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.py rename to swift/ql/integration-tests/posix-only/hello-world/test.py diff --git a/swift/integration-tests/posix-only/hello-world/test.ql b/swift/ql/integration-tests/posix-only/hello-world/test.ql similarity index 100% rename from swift/integration-tests/posix-only/hello-world/test.ql rename to swift/ql/integration-tests/posix-only/hello-world/test.ql diff --git a/swift/integration-tests/posix-only/linkage-awareness/Bodies.expected b/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Bodies.expected rename to swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.expected diff --git a/swift/integration-tests/posix-only/linkage-awareness/Bodies.ql b/swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Bodies.ql rename to swift/ql/integration-tests/posix-only/linkage-awareness/Bodies.ql diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Package.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo1/Sources/foo/main.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Package.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift b/swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift rename to swift/ql/integration-tests/posix-only/linkage-awareness/Foo2/Sources/foo/main.swift diff --git a/swift/integration-tests/posix-only/linkage-awareness/build.sh b/swift/ql/integration-tests/posix-only/linkage-awareness/build.sh similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/build.sh rename to swift/ql/integration-tests/posix-only/linkage-awareness/build.sh diff --git a/swift/integration-tests/posix-only/linkage-awareness/test.py b/swift/ql/integration-tests/posix-only/linkage-awareness/test.py similarity index 100% rename from swift/integration-tests/posix-only/linkage-awareness/test.py rename to swift/ql/integration-tests/posix-only/linkage-awareness/test.py diff --git a/swift/integration-tests/posix-only/partial-modules/A/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/A.swift diff --git a/swift/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift b/swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift rename to swift/ql/integration-tests/posix-only/partial-modules/A/Sources/A/Asup.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/B.swift diff --git a/swift/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift b/swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift rename to swift/ql/integration-tests/posix-only/partial-modules/B/Sources/B/Bsup.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Modules.expected b/swift/ql/integration-tests/posix-only/partial-modules/Modules.expected similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Modules.expected rename to swift/ql/integration-tests/posix-only/partial-modules/Modules.expected diff --git a/swift/integration-tests/posix-only/partial-modules/Modules.ql b/swift/ql/integration-tests/posix-only/partial-modules/Modules.ql similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Modules.ql rename to swift/ql/integration-tests/posix-only/partial-modules/Modules.ql diff --git a/swift/integration-tests/posix-only/partial-modules/Package.swift b/swift/ql/integration-tests/posix-only/partial-modules/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Package.swift rename to swift/ql/integration-tests/posix-only/partial-modules/Package.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift b/swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift rename to swift/ql/integration-tests/posix-only/partial-modules/Sources/partial-modules/partial_modules.swift diff --git a/swift/integration-tests/posix-only/partial-modules/Unknown.expected b/swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Unknown.expected rename to swift/ql/integration-tests/posix-only/partial-modules/Unknown.expected diff --git a/swift/integration-tests/posix-only/partial-modules/Unknown.ql b/swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/Unknown.ql rename to swift/ql/integration-tests/posix-only/partial-modules/Unknown.ql diff --git a/swift/integration-tests/posix-only/partial-modules/test.py b/swift/ql/integration-tests/posix-only/partial-modules/test.py similarity index 100% rename from swift/integration-tests/posix-only/partial-modules/test.py rename to swift/ql/integration-tests/posix-only/partial-modules/test.py diff --git a/swift/integration-tests/posix-only/symlinks/.gitignore b/swift/ql/integration-tests/posix-only/symlinks/.gitignore similarity index 100% rename from swift/integration-tests/posix-only/symlinks/.gitignore rename to swift/ql/integration-tests/posix-only/symlinks/.gitignore diff --git a/swift/integration-tests/posix-only/symlinks/Files.expected b/swift/ql/integration-tests/posix-only/symlinks/Files.expected similarity index 100% rename from swift/integration-tests/posix-only/symlinks/Files.expected rename to swift/ql/integration-tests/posix-only/symlinks/Files.expected diff --git a/swift/integration-tests/posix-only/symlinks/Files.ql b/swift/ql/integration-tests/posix-only/symlinks/Files.ql similarity index 100% rename from swift/integration-tests/posix-only/symlinks/Files.ql rename to swift/ql/integration-tests/posix-only/symlinks/Files.ql diff --git a/swift/integration-tests/posix-only/symlinks/main.swift b/swift/ql/integration-tests/posix-only/symlinks/main.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/main.swift rename to swift/ql/integration-tests/posix-only/symlinks/main.swift diff --git a/swift/integration-tests/posix-only/symlinks/preserve/Package.swift b/swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/preserve/Package.swift rename to swift/ql/integration-tests/posix-only/symlinks/preserve/Package.swift diff --git a/swift/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep similarity index 100% rename from swift/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep rename to swift/ql/integration-tests/posix-only/symlinks/preserve/Sources/.gitkeep diff --git a/swift/integration-tests/posix-only/symlinks/resolve/Package.swift b/swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift similarity index 100% rename from swift/integration-tests/posix-only/symlinks/resolve/Package.swift rename to swift/ql/integration-tests/posix-only/symlinks/resolve/Package.swift diff --git a/swift/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep b/swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep similarity index 100% rename from swift/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep rename to swift/ql/integration-tests/posix-only/symlinks/resolve/Sources/.gitkeep diff --git a/swift/integration-tests/posix-only/symlinks/test.py b/swift/ql/integration-tests/posix-only/symlinks/test.py similarity index 100% rename from swift/integration-tests/posix-only/symlinks/test.py rename to swift/ql/integration-tests/posix-only/symlinks/test.py diff --git a/swift/ql/integration-tests/qlpack.yml b/swift/ql/integration-tests/qlpack.yml new file mode 100644 index 00000000000..c9b567bebda --- /dev/null +++ b/swift/ql/integration-tests/qlpack.yml @@ -0,0 +1,4 @@ +dependencies: + codeql/swift-all: '*' + codeql/swift-queries: '*' +warnOnImplicitThis: true diff --git a/swift/integration-tests/runner.py b/swift/ql/integration-tests/runner.py similarity index 92% rename from swift/integration-tests/runner.py rename to swift/ql/integration-tests/runner.py index bf65781cdb2..abb17e6eafd 100755 --- a/swift/integration-tests/runner.py +++ b/swift/ql/integration-tests/runner.py @@ -17,6 +17,7 @@ import shutil import platform this_dir = pathlib.Path(__file__).parent.resolve() +codeql_root = this_dir.parents[2] def options(): p = argparse.ArgumentParser() @@ -30,7 +31,7 @@ def options(): def execute_test(path): - shutil.rmtree(path.parent / "db", ignore_errors=True) + shutil.rmtree(path.parent / "test-db", ignore_errors=True) return subprocess.run([sys.executable, "-u", path.name], cwd=path.parent).returncode == 0 def skipped(test): @@ -51,18 +52,19 @@ def main(opts): return False os.environ["PYTHONPATH"] = str(this_dir) + os.environ["CODEQL_CONFIG_FILE"] = "/dev/null" failed_db_creation = [] succesful_db_creation = [] for t in tests: (succesful_db_creation if execute_test(t) else failed_db_creation).append(t) if succesful_db_creation: - codeql_root = this_dir.parents[1] cmd = [ "codeql", "test", "run", f"--additional-packs={codeql_root}", "--keep-databases", - "--dataset=db/db-swift", + "--no-cleanup", + "--dataset=test-db/db-swift", f"--threads={opts.threads}", ] if opts.check_databases: From 5a771ad2cf46d0b3679f65192044d0974813ca57 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 10:42:16 +0100 Subject: [PATCH 278/497] Swift: bump python version --- swift/.python-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/.python-version b/swift/.python-version index c7413b842fc..2c0733315e4 100644 --- a/swift/.python-version +++ b/swift/.python-version @@ -1 +1 @@ -3.8.14 +3.11 From 0fa40af13180395d14a76938a8e9ada1e5252d0d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 11:49:19 +0100 Subject: [PATCH 279/497] Swift: fix last references to old integration test location --- codeql-workspace.yml | 1 - swift/logging/tests/assertion-diagnostics/BUILD.bazel | 2 +- swift/ql/integration-tests/BUILD.bazel | 2 +- .../ql/integration-tests/posix-only/deduplication/Relevant.qll | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/codeql-workspace.yml b/codeql-workspace.yml index 7078818d1f3..9bb15b5d4a5 100644 --- a/codeql-workspace.yml +++ b/codeql-workspace.yml @@ -28,7 +28,6 @@ provide: - "misc/suite-helpers/qlpack.yml" - "ruby/extractor-pack/codeql-extractor.yml" - "swift/extractor-pack/codeql-extractor.yml" - - "swift/integration-tests/qlpack.yml" - "ql/extractor-pack/codeql-extractor.yml" - ".github/codeql/extensions/**/codeql-pack.yml" diff --git a/swift/logging/tests/assertion-diagnostics/BUILD.bazel b/swift/logging/tests/assertion-diagnostics/BUILD.bazel index ea31eac779a..86fbbbee7c7 100644 --- a/swift/logging/tests/assertion-diagnostics/BUILD.bazel +++ b/swift/logging/tests/assertion-diagnostics/BUILD.bazel @@ -17,5 +17,5 @@ py_test( "diagnostics.expected", ":assert-false", ], - deps = ["//swift/integration-tests:integration_tests"], + deps = ["//swift/ql/integration-tests:utils"], ) diff --git a/swift/ql/integration-tests/BUILD.bazel b/swift/ql/integration-tests/BUILD.bazel index 2fe1553da0e..06c7eb44bee 100644 --- a/swift/ql/integration-tests/BUILD.bazel +++ b/swift/ql/integration-tests/BUILD.bazel @@ -1,5 +1,5 @@ py_library( - name = "integration_tests", + name = "utils", srcs = [ "create_database_utils.py", "diagnostics_test_utils.py", diff --git a/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll b/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll index bab91e5829d..fb76e5e35b4 100644 --- a/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll +++ b/swift/ql/integration-tests/posix-only/deduplication/Relevant.qll @@ -1,5 +1,5 @@ import swift predicate relevant(Locatable loc) { - loc.getLocation().getFile().getName().matches("%/swift/integration-tests/%/Sources/%") + loc.getLocation().getFile().getName().matches("%/swift/ql/integration-tests/%/Sources/%") } From 5ab52441712dbeb8f6240209411b9128444517e7 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 25 Mar 2024 11:43:02 +0100 Subject: [PATCH 280/497] Change public messages to not include 'buildless' --- csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs | 8 ++++---- .../all-platforms/standalone/diagnostics.expected | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index bc155ea5da8..3e9a4952645 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -306,9 +306,9 @@ namespace Semmle.Autobuild.Shared AddDiagnostic(new DiagnosticMessage( Options.Language, "buildless/mode-active", - "C# was extracted in buildless mode", + "C# with build-mode set to 'none'", visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + markdownMessage: "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", severity: DiagnosticMessage.TspSeverity.Note )); } @@ -327,9 +327,9 @@ namespace Semmle.Autobuild.Shared AddDiagnostic(new DiagnosticMessage( Options.Language, "buildless/complete", - "C# buildless extraction completed", + "C# analysis with build-mode 'none' completed", visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# buildless extraction has completed.", + markdownMessage: "C# analysis with build-mode 'none' completed.", severity: DiagnosticMessage.TspSeverity.Unknown )); } diff --git a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected index cc9b35b27b8..f5704ce12bb 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected @@ -1,10 +1,10 @@ { - "markdownMessage": "C# buildless extraction has completed.", + "markdownMessage": "C# analysis with build-mode 'none' completed.", "severity": "unknown", "source": { "extractorName": "csharp", "id": "csharp/autobuilder/buildless/complete", - "name": "C# buildless extraction completed" + "name": "C# analysis with build-mode 'none' completed" }, "visibility": { "cliSummaryTable": true, @@ -13,12 +13,12 @@ } } { - "markdownMessage": "C# was extracted in buildless mode. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", "severity": "note", "source": { "extractorName": "csharp", "id": "csharp/autobuilder/buildless/mode-active", - "name": "C# was extracted in buildless mode" + "name": "C# with build-mode set to 'none'" }, "visibility": { "cliSummaryTable": true, From 148033e020d51585be0aed58dd75a0dd27791a65 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 12:05:22 +0100 Subject: [PATCH 281/497] Swift: fix assertion diagnostics test --- swift/logging/tests/assertion-diagnostics/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/logging/tests/assertion-diagnostics/test.py b/swift/logging/tests/assertion-diagnostics/test.py index d18cfe7dff9..03c0334fd0b 100644 --- a/swift/logging/tests/assertion-diagnostics/test.py +++ b/swift/logging/tests/assertion-diagnostics/test.py @@ -2,7 +2,7 @@ import importlib import os import subprocess # We have to use importlib due to the '-' in the path -diagnostics_test_utils = importlib.import_module("swift.integration-tests.diagnostics_test_utils") +diagnostics_test_utils = importlib.import_module("swift.ql.integration-tests.diagnostics_test_utils") test_dir = "swift/logging/tests/assertion-diagnostics" From 6707fc3a7c68f257cb99191a93befba5ef9e8b21 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 12:20:13 +0100 Subject: [PATCH 282/497] Swift: remove wrong flag in `runner.py` --- swift/ql/integration-tests/runner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/swift/ql/integration-tests/runner.py b/swift/ql/integration-tests/runner.py index abb17e6eafd..156ce6c425c 100755 --- a/swift/ql/integration-tests/runner.py +++ b/swift/ql/integration-tests/runner.py @@ -63,7 +63,6 @@ def main(opts): "codeql", "test", "run", f"--additional-packs={codeql_root}", "--keep-databases", - "--no-cleanup", "--dataset=test-db/db-swift", f"--threads={opts.threads}", ] From b94d33d78dda22bc762d57439643d85ec41d7e31 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 25 Mar 2024 12:27:36 +0100 Subject: [PATCH 283/497] Add buildless failed diagnostic --- .../Semmle.Autobuild.Shared/Autobuilder.cs | 32 +++++++++++++------ .../DependencyManager.cs | 5 +++ .../Extractor.cs | 2 +- .../standalone_failed/diagnostics.expected | 28 ++++++++++++++++ .../standalone_failed/standalone.csproj | 14 ++++++++ .../all-platforms/standalone_failed/test.py | 6 ++++ 6 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected create mode 100644 csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj create mode 100644 csharp/ql/integration-tests/all-platforms/standalone_failed/test.py diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index 3e9a4952645..685f9752a2f 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -322,16 +322,30 @@ namespace Semmle.Autobuild.Shared .Select(result => result.ToDiagnosticMessage(this, diagSeverity)) .ForEach(AddDiagnostic); - if (buildResult == 0 && IsBuildless) + if (IsBuildless) { - AddDiagnostic(new DiagnosticMessage( - Options.Language, - "buildless/complete", - "C# analysis with build-mode 'none' completed", - visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# analysis with build-mode 'none' completed.", - severity: DiagnosticMessage.TspSeverity.Unknown - )); + if (buildResult == 0) + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/complete", + "C# analysis with build-mode 'none' completed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' completed.", + severity: DiagnosticMessage.TspSeverity.Unknown + )); + } + else + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/failed", + "C# analysis with build-mode 'none' failed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' failed.", + severity: DiagnosticMessage.TspSeverity.Error + )); + } } return buildResult; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index c4c901a3cc4..713d52d8e3f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -728,6 +728,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching ///
    public IEnumerable GeneratedSourceFiles => generatedSources; + /// + /// All of the non-generated source files in the source directory. + /// + public IEnumerable NonGeneratedSourcesFiles => nonGeneratedSources; + /// /// All of the source files in the source directory. /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index d868768e350..9a58011196c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -146,7 +146,7 @@ namespace Semmle.Extraction.CSharp.Standalone logger.Log(Severity.Info, "Extracting C# in buildless mode"); using var dependencyManager = new DependencyManager(options.SrcDir, logger); - if (!dependencyManager.AllSourceFiles.Any()) + if (!dependencyManager.NonGeneratedSourcesFiles.Any()) { logger.Log(Severity.Error, "No source files found"); return ExitCode.Errors; diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected new file mode 100644 index 00000000000..65b8c89ce70 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "C# analysis with build-mode 'none' failed.", + "severity": "error", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/failed", + "name": "C# analysis with build-mode 'none' failed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj new file mode 100644 index 00000000000..324eba5d4ef --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/standalone.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py b/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py new file mode 100644 index 00000000000..403e8efff23 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/test.py @@ -0,0 +1,6 @@ +from create_database_utils import * +from diagnostics_test_utils import * + +run_codeql_database_create([], db=None, lang="csharp", extra_args=["--build-mode=none"], runFunction=runUnsuccessfully) + +check_diagnostics() From 2f0b54c80192aaf88da798cce70efce029846892 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 25 Mar 2024 12:45:15 +0100 Subject: [PATCH 284/497] Refactor buildless telemetry logging --- .../CSharpAutobuilder.cs | 56 +++++++++++++++++-- .../Semmle.Autobuild.Shared/Autobuilder.cs | 40 ------------- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs index b1ebc64cb4c..fc08cc83f4a 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs @@ -44,14 +44,16 @@ namespace Semmle.Autobuild.CSharp public override BuildScript GetBuildScript() { var attempt = BuildScript.Failure; - switch (BuildStrategy) + switch (GetCSharpBuildStrategy()) { case CSharpBuildStrategy.CustomBuildCommand: attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); break; case CSharpBuildStrategy.Buildless: // No need to check that the extractor has been executed in buildless mode - attempt = new StandaloneBuildRule().Analyse(this, false); + attempt = BuildScript.Bind( + AddBuildlessStartedDiagnostic() & new StandaloneBuildRule().Analyse(this, false), + AddBuildlessEndedDiagnostic); break; case CSharpBuildStrategy.MSBuild: attempt = new MsBuildRule().Analyse(this, false) & CheckExtractorRun(true); @@ -86,6 +88,52 @@ namespace Semmle.Autobuild.CSharp return 1; }); + private BuildScript AddBuildlessStartedDiagnostic() + { + return BuildScript.Create(actions => + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/mode-active", + "C# with build-mode set to 'none'", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + severity: DiagnosticMessage.TspSeverity.Note + )); + return 0; + }); + } + + private BuildScript AddBuildlessEndedDiagnostic(int buildResult) + { + return BuildScript.Create(actions => + { + if (buildResult == 0) + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/complete", + "C# analysis with build-mode 'none' completed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' completed.", + severity: DiagnosticMessage.TspSeverity.Unknown + )); + } + else + { + AddDiagnostic(new DiagnosticMessage( + Options.Language, + "buildless/failed", + "C# analysis with build-mode 'none' failed", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "C# analysis with build-mode 'none' failed.", + severity: DiagnosticMessage.TspSeverity.Error + )); + } + return buildResult; + }); + } + protected override void AutobuildFailureDiagnostic() { // if `ScriptPath` is not null here, the `BuildCommandAuto` rule was @@ -218,10 +266,6 @@ namespace Semmle.Autobuild.CSharp return CSharpBuildStrategy.Auto; } - private CSharpBuildStrategy? buildStrategy = null; - private CSharpBuildStrategy BuildStrategy => buildStrategy ??= GetCSharpBuildStrategy(); - public override bool IsBuildless => BuildStrategy == CSharpBuildStrategy.Buildless; - private enum CSharpBuildStrategy { CustomBuildCommand, diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index 685f9752a2f..a23d29d2979 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -301,18 +301,6 @@ namespace Semmle.Autobuild.Shared var onOutput = BuildOutputHandler(Console.Out); var onError = BuildOutputHandler(Console.Error); - if (IsBuildless) - { - AddDiagnostic(new DiagnosticMessage( - Options.Language, - "buildless/mode-active", - "C# with build-mode set to 'none'", - visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", - severity: DiagnosticMessage.TspSeverity.Note - )); - } - var buildResult = script.Run(Actions, startCallback, exitCallback, onOutput, onError); // if the build succeeded, all diagnostics we captured from the build output should be warnings; @@ -322,32 +310,6 @@ namespace Semmle.Autobuild.Shared .Select(result => result.ToDiagnosticMessage(this, diagSeverity)) .ForEach(AddDiagnostic); - if (IsBuildless) - { - if (buildResult == 0) - { - AddDiagnostic(new DiagnosticMessage( - Options.Language, - "buildless/complete", - "C# analysis with build-mode 'none' completed", - visibility: new DiagnosticMessage.TspVisibility(statusPage: false, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# analysis with build-mode 'none' completed.", - severity: DiagnosticMessage.TspSeverity.Unknown - )); - } - else - { - AddDiagnostic(new DiagnosticMessage( - Options.Language, - "buildless/failed", - "C# analysis with build-mode 'none' failed", - visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), - markdownMessage: "C# analysis with build-mode 'none' failed.", - severity: DiagnosticMessage.TspSeverity.Error - )); - } - } - return buildResult; } @@ -356,8 +318,6 @@ namespace Semmle.Autobuild.Shared /// public abstract BuildScript GetBuildScript(); - public virtual bool IsBuildless { get; } = false; - /// /// Produces a diagnostic for the tool status page that we were unable to automatically From 9c9f4b956ec9342342c0f2cf42d062ea99ece6ea Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 25 Mar 2024 12:36:44 +0100 Subject: [PATCH 285/497] Swift: fix db in `diagnostics_test_utils.py` --- swift/ql/integration-tests/diagnostics_test_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/ql/integration-tests/diagnostics_test_utils.py b/swift/ql/integration-tests/diagnostics_test_utils.py index d3887e33b32..bc33d8b4277 100644 --- a/swift/ql/integration-tests/diagnostics_test_utils.py +++ b/swift/ql/integration-tests/diagnostics_test_utils.py @@ -50,7 +50,7 @@ def _normalize_json(data): return "\n".join(entries) -def check_diagnostics(test_dir=".", test_db="db", actual = None): +def check_diagnostics(test_dir=".", test_db="test-db", actual = None): test_dir = pathlib.Path(test_dir) test_db = pathlib.Path(test_db) if actual is None: From 120fb93c23dfd0e86a7439e0f78d0158ec61867b Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Mon, 25 Mar 2024 13:32:51 +0000 Subject: [PATCH 286/497] Go: Improve QHelp for `go/unsafe-quoting`. --- go/ql/src/Security/CWE-089/StringBreak.qhelp | 51 ++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/go/ql/src/Security/CWE-089/StringBreak.qhelp b/go/ql/src/Security/CWE-089/StringBreak.qhelp index 1c4f2863037..18717cfee62 100644 --- a/go/ql/src/Security/CWE-089/StringBreak.qhelp +++ b/go/ql/src/Security/CWE-089/StringBreak.qhelp @@ -5,19 +5,21 @@

    -Code that constructs a string containing a quoted substring needs to ensure that any user-provided -data embedded in between the quotes does not itself contain a quote. Otherwise the embedded data -could (accidentally or intentionally) change the structure of the overall string by terminating -the quoted substring early, with potentially severe consequences. If, for example, the string is -later interpreted as an operating-system command or database query, a malicious attacker may be -able to craft input data that enables a command injection or SQL injection attack. +Code that constructs a quoted string literal containing user-provided data needs to ensure that +this data does not itself contain a quote. Otherwise the embedded data could (accidentally or +intentionally) terminate the string literal early and thereby change the structure of the overall +string, with potentially severe consequences. If, for example, the string is later used as +part an operating-system command or database query, an attacker may be able to craft input data +that injects a malicious command.

    Sanitize the embedded data appropriately to ensure quotes are escaped, or use an API that does -not rely on manually constructing quoted substrings. +not rely on manually constructing quoted substrings. Make sure to use the appropriate escaping +mechanism, for example double quoting for SQL strings or backslash escaping for shell commands. +When using backslash escaping, the backslash character itself must also be escaped.

    @@ -29,17 +31,38 @@ then embeds it into a SQL query built using the Squirrel library.

    -Note that while Squirrel provides a structured API for building SQL queries that mitigates against -common causes of SQL injection vulnerabilities, this code is still vulnerable: if the JSON-encoded -representation of version contains a single quote, this will prematurely close the -surrounding string, changing the structure of the SQL expression being constructed. This could be -exploited to mount a SQL injection attack. +Note that JSON encoding does not escape single quotes in any way, so this code is vulnerable: any +single-quote character in version will prematurely close the surrounding string literal, +changing the structure of the SQL expression being constructed. This could be exploited to mount +a SQL injection attack.

    -To fix this vulnerability, use Squirrel's placeholder syntax, which avoids the need to explicitly -construct a quoted string. +To fix this vulnerability, use the placeholder syntax from Squirrel's structured API for building +queries, which avoids the need to explicitly construct a quoted string.

    +

    +In situations where a structured API is not available, make sure to escape quotes before embedding +user-provided data into a quoted string. For example, this is how you can backslash-escape single +quotes using strings.ReplaceAll: +

    + + quoted := strings.ReplaceAll(raw, `\`, `\\`) + quoted = strings.ReplaceAll(quoted, "'", "\\'") + +

    +Note that any existing backslash characters in the string must be escaped first, so that they do +not interfere with the escaping of single quotes. +

    +

    +In some cases, strconv.Quote is a convenient option for backslash escaping, but note +that it has two limitations: +

    +
      +
    1. It only supports double quotes, not single quotes (as in the example).
    2. +
    3. It puts quotes around the entire string, so it can only be used to construct complete string + literals, not parts of larger string literals.
    4. +
    From 78912d5eea97423799f7f84ec84d81d4001424ad Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 25 Mar 2024 14:33:51 +0100 Subject: [PATCH 287/497] C#: Reword public mentions of C# buildless --- .../extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs | 2 +- csharp/ql/src/Telemetry/ExtractorInformation.ql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index d868768e350..c8ea85e9884 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -143,7 +143,7 @@ namespace Semmle.Extraction.CSharp.Standalone stopwatch.Start(); using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true); - logger.Log(Severity.Info, "Extracting C# in buildless mode"); + logger.Log(Severity.Info, "Extracting C# with build-mode set to 'none'"); using var dependencyManager = new DependencyManager(options.SrcDir, logger); if (!dependencyManager.AllSourceFiles.Any()) diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql index 08efbd7b6ec..8d152c8efa2 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -87,7 +87,7 @@ predicate extractionIsStandalone(string key, int value) { value = 0 and not extractionIsStandalone() ) and - key = "Is buildless extraction" + key = "Is extracted with build-mode set to 'none'" } signature module StatsSig { From d805bbcd2755b83810968cf619bb4c23a77a2868 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Mon, 25 Mar 2024 10:31:11 -0400 Subject: [PATCH 288/497] Use correct model pack name in qltest data extension --- .../kotlin/default-parameter-mad-flow/test.ext.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml index 1632b5a8080..adca3ff50ba 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ext.yml @@ -1,6 +1,6 @@ extensions: - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: summaryModel data: - ["", "ConstructorWithDefaults", True, "ConstructorWithDefaults", "(int,int)", "", "Argument[0]", "Argument[this]", "taint", "manual"] @@ -11,14 +11,14 @@ extensions: - ["", "LibClass", True, "multiParameterTest", "(int,int,int,int)", "", "Argument[0..1]", "ReturnValue", "value", "manual"] - ["", "LibClass", True, "multiParameterExtensionTest", "(int,int,int,int)", "", "Argument[0, 1]", "ReturnValue", "value", "manual"] - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: sourceModel data: - ["", "LibKt", True, "topLevelArgSource", "(SomeToken,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] - ["", "LibKt", True, "extensionArgSource", "(String,SomeToken,int)", "", "Argument[1]", "kotlinMadFlowTest", "manual"] - ["", "SourceClass", True, "memberArgSource", "(SomeToken,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] - addsTo: - pack: integrationtest-default-parameter-mad-flow + pack: codeql/java-all extensible: sinkModel data: - ["", "SinkClass", True, "SinkClass", "(int,int)", "", "Argument[0]", "kotlinMadFlowTest", "manual"] From 4a4c77e81d4e9bbb85bda4cfdefe4b4d697f499e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:20:57 +0000 Subject: [PATCH 289/497] Remove claims about models-as-data that require you to select a parameter from non-Java languages. We believe this is only possible in Java. --- .../lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll | 4 +--- go/ql/lib/semmle/go/dataflow/ExternalFlow.qll | 4 +--- swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll index 7e22351ee66..3a09ec2e51b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ExternalFlow.qll @@ -47,15 +47,13 @@ * * For sources, an `output` can be either "", "Argument[n]", "Argument[n1..n2]", * "Parameter", "Parameter[n]", "Parameter[n1..n2]", or "ReturnValue": - * - "": Selects a read of a selected field, property, or parameter. + * - "": Selects a read of a selected field or property. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `this` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `this` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index ba5270483fc..9df20606d27 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -34,15 +34,13 @@ * An `output` can be either "", "Argument[n]", "Argument[n1..n2]", "Parameter", * "Parameter[n]", "Parameter[n1..n2]", , "ReturnValue", "ReturnValue[n]", or * "ReturnValue[n1..n2]": - * - "": Selects a read of a selected field, or a selected parameter. + * - "": Selects a read of a selected field. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `-1` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `-1` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter diff --git a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll index 35515cb548c..69a61642562 100644 --- a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll +++ b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll @@ -44,15 +44,13 @@ * * An `output` can be either "", "Argument[n]", "Argument[n1..n2]", "Parameter", * "Parameter[n]", "Parameter[n1..n2]", or "ReturnValue": - * - "": Selects a read of a selected field, or a selected parameter. + * - "": Selects a read of a selected field. * - "Argument[n]": Selects the post-update value of an argument in a call to the * selected element. That is, the value of the argument after the call returns. * The arguments are zero-indexed, and `-1` specifies the qualifier. * - "Argument[n1..n2]": Similar to "Argument[n]" but select any argument in * the given range. The range is inclusive at both ends. * - "Parameter": Selects the value of a parameter of the selected element. - * "Parameter" is also allowed in case the selected element is already a - * parameter itself. * - "Parameter[n]": Similar to "Parameter" but restricted to a specific * numbered parameter (zero-indexed, and `-1` specifies the value of `this`). * - "Parameter[n1..n2]": Similar to "Parameter[n]" but selects any parameter From b2a301c206795e4172f696f254164ccee4f45a42 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:45:37 +0000 Subject: [PATCH 290/497] Swift: Remove claims about 'Annotated'. --- swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll index 69a61642562..9750b05fef1 100644 --- a/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll +++ b/swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll @@ -25,11 +25,7 @@ * types can be short names or fully qualified names (mixing these two options * is not allowed within a single signature). * 6. The `ext` column specifies additional API-graph-like edges. Currently - * there are only two valid values: "" and "Annotated". The empty string has no - * effect. "Annotated" applies if `name` and `signature` were left blank and - * acts by selecting an element that is annotated by the annotation type - * selected by the first 4 columns. This can be another member such as a field - * or method, or a parameter. + * there is only one valid value: "". * 7. The `input` column specifies how data enters the element selected by the * first 6 columns, and the `output` column specifies how data leaves the * element selected by the first 6 columns. An `input` can be either "", From 33b807f3bb2dedef59e9d1760de4bd2bd1a27725 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 13 Mar 2024 16:52:06 +0000 Subject: [PATCH 291/497] Parameters and local variables: add `isAnonymous` predicate --- java/ql/lib/semmle/code/java/Expr.qll | 7 ++++++- java/ql/lib/semmle/code/java/Variable.qll | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 3442855a91a..315b4d19b9b 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1691,6 +1691,9 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { /** Gets the name of the variable declared by this local variable declaration expression. */ string getName() { result = this.getVariable().getName() } + /** Holds if this is an anonymous local variable, `_` */ + predicate isAnonymous() { this.getName() = "" } + /** * Gets the switch statement or expression whose pattern declares this identifier, if any. */ @@ -1763,7 +1766,9 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { } /** Gets a printable representation of this expression. */ - override string toString() { result = this.getName() } + override string toString() { + if this.getName() = "" then result = "" else result = this.getName() + } override string getAPrimaryQlClass() { result = "LocalVariableDeclExpr" } } diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index 8ed650d5f16..f28e378c233 100644 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -117,4 +117,11 @@ class Parameter extends Element, @param, LocalScopeVariable { } override string getAPrimaryQlClass() { result = "Parameter" } + + override string toString() { + if this.getName() = "" then result = "" else result = super.toString() + } + + /** Holds if this is an anonymous parameter, `_` */ + predicate isAnonymous() { this.getName() = "" } } From c283894b4b27605f7f64929d12b80789ebde0454 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 14:33:48 +0000 Subject: [PATCH 292/497] Fix typo --- java/ql/lib/semmle/code/java/PrintAst.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 4315e66ec06..bc2b81a1a33 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -439,7 +439,7 @@ private class SingleLocalVarDeclParent extends ExprOrStmt { * want to use a synthetic node to variable declaration and its type access. * * Excludes `LocalVariableDeclStmt` and `ForStmt`, as they can hold multiple declarations. - * For these cases, either a synthetic node is not necassary or a different synthetic node is used. + * For these cases, either a synthetic node is not necessary or a different synthetic node is used. */ final class SingleLocalVarDeclParentNode extends ExprStmtNode { SingleLocalVarDeclParent lvdp; From f44becea7f4c6b4a4544965c6b2746d6dffd7fdd Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 14:34:17 +0000 Subject: [PATCH 293/497] Implement multiple pattern case and fall-through pattern case support --- .../lib/semmle/code/java/ControlFlowGraph.qll | 52 ++++++++++++---- java/ql/lib/semmle/code/java/Dependency.qll | 2 +- .../lib/semmle/code/java/DependencyCounts.qll | 2 +- java/ql/lib/semmle/code/java/Expr.qll | 28 ++++++--- .../lib/semmle/code/java/PrettyPrintAst.qll | 59 +++++++++++++------ java/ql/lib/semmle/code/java/PrintAst.qll | 32 ++++++++-- java/ql/lib/semmle/code/java/Statement.qll | 15 +++-- java/ql/lib/semmle/code/java/Variable.qll | 8 ++- .../semmle/code/java/controlflow/Guards.qll | 14 ++++- 9 files changed, 161 insertions(+), 51 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 24a506f21ce..89e4ac38675 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -489,14 +489,14 @@ private module ControlFlowGraphImpl { private Stmt getSwitchStatement(SwitchBlock switch, int i) { result.isNthChildOf(switch, i) } /** - * Holds if `last` is the last node in a pattern case `pc`'s succeeding bind-and-test operation, + * Holds if `last` is the last node in any of pattern case `pc`'s succeeding bind-and-test operations, * immediately before either falling through to execute successor statements or execute a rule body * if present. `completion` is the completion kind of the last operation. */ private predicate lastPatternCaseMatchingOp( PatternCase pc, ControlFlowNode last, Completion completion ) { - last(pc.getPattern(), last, completion) and + last(pc.getAPattern(), last, completion) and completion = NormalCompletion() and not exists(pc.getGuard()) or @@ -776,6 +776,19 @@ private module ControlFlowGraphImpl { last(try.getFinally(), last, NormalCompletion()) } + private predicate isNextNormalSwitchStmt(SwitchBlock switch, Stmt pred, Stmt succ) { + exists(int i, Stmt immediateSucc | + getSwitchStatement(switch, i) = pred and + getSwitchStatement(switch, i + 1) = immediateSucc and + ( + succ = immediateSucc and + not immediateSucc instanceof PatternCase + or + isNextNormalSwitchStmt(switch, immediateSucc, succ) + ) + ) + } + /** * Bind `last` to a cfg node nested inside `n` (or, indeed, `n` itself) such * that `last` may be the last node during an execution of `n` and finish @@ -927,9 +940,15 @@ private module ControlFlowGraphImpl { completion != anonymousBreakCompletion() and not completion instanceof NormalOrBooleanCompletion or - // if the last case completes normally, then so does the switch - last(switch.getStmt(strictcount(switch.getAStmt()) - 1), last, NormalCompletion()) and - completion = NormalCompletion() + // if a statement without a non-pattern-case successor completes normally (or for a pattern case + // the guard succeeds) then the switch completes normally. + exists(Stmt lastNormalStmt, Completion stmtCompletion | + lastNormalStmt = getSwitchStatement(switch, _) and + not isNextNormalSwitchStmt(switch, lastNormalStmt, _) and + last(lastNormalStmt, last, stmtCompletion) and + (stmtCompletion = NormalCompletion() or stmtCompletion = BooleanCompletion(true, _)) and + completion = NormalCompletion() + ) or // if no default case exists, then normal completion of the expression may terminate the switch // Note this can't happen if there are pattern cases or a null literal, as @@ -973,9 +992,9 @@ private module ControlFlowGraphImpl { ) or // A pattern case statement can complete: - // * On failure of its type test (boolean false) + // * On failure of its final type test (boolean false) // * On failure of its guard test if any (boolean false) - // * On completion of its variable declarations, if it is not a rule and has no guard (normal completion) + // * On completion of one of its pattern variable declarations, if it is not a rule and has no guard (normal completion) // * On success of its guard test, if it is not a rule (boolean true) // (the latter two cases are accounted for by lastPatternCaseMatchingOp) exists(PatternCase pc | n = pc | @@ -1315,9 +1334,13 @@ private module ControlFlowGraphImpl { // Note this includes non-rule case statements and the successful pattern match successor // of a non-rule pattern case statement. Rule case statements do not complete normally // (they always break or yield). - exists(int i | - last(getSwitchStatement(switch, i), n, completion) and - result = first(getSwitchStatement(switch, i + 1)) and + // Exception: falling through into a pattern case statement (which necessarily does not + // declare any named variables) must skip one or more such statements, otherwise we would + // incorrectly apply their type test and/or guard. + exists(Stmt pred, Stmt succ | + isNextNormalSwitchStmt(switch, pred, succ) and + last(pred, n, completion) and + result = first(succ) and (completion = NormalCompletion() or completion = BooleanCompletion(true, _)) ) or @@ -1328,16 +1351,19 @@ private module ControlFlowGraphImpl { ) or // Pattern cases have internal edges: - // * Type test success -true-> variable declarations + // * Type test success -true-> one of the possible sets of variable declarations + // n.b. for unnamed patterns (e.g. case A _, B _) this means that *one* of the + // type tests has succeeded. There aren't enough nodes in the AST to describe + // a sequential test in detail, so CFG consumers have to watch out for this case. // * Variable declarations -normal-> guard evaluation // * Variable declarations -normal-> rule execution (when there is no guard) // * Guard success -true-> rule execution exists(PatternCase pc | n = pc and completion = basicBooleanCompletion(true) and - result = first(pc.getPattern()) + result = first(pc.getAPattern()) or - last(pc.getPattern(), n, completion) and + last(pc.getAPattern(), n, completion) and completion = NormalCompletion() and result = first(pc.getGuard()) or diff --git a/java/ql/lib/semmle/code/java/Dependency.qll b/java/ql/lib/semmle/code/java/Dependency.qll index 1bdf0140079..29dc81a1960 100644 --- a/java/ql/lib/semmle/code/java/Dependency.qll +++ b/java/ql/lib/semmle/code/java/Dependency.qll @@ -84,7 +84,7 @@ predicate depends(RefType t, RefType dep) { or // A type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getPattern().getAChildExpr*().getType(), dep) + usesType(pc.getAPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/DependencyCounts.qll b/java/ql/lib/semmle/code/java/DependencyCounts.qll index ca0acdedcde..464f8847188 100644 --- a/java/ql/lib/semmle/code/java/DependencyCounts.qll +++ b/java/ql/lib/semmle/code/java/DependencyCounts.qll @@ -107,7 +107,7 @@ predicate numDepends(RefType t, RefType dep, int value) { or // the type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | elem = pc and t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getPattern().getAChildExpr*().getType(), dep) + usesType(pc.getAPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 315b4d19b9b..ce2612c9a80 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1590,7 +1590,9 @@ class InstanceOfExpr extends Expr, @instanceofexpr { * Note that this won't get anything when record pattern matching is used-- for more general patterns, * use `getPattern`. */ - LocalVariableDeclExpr getLocalVariableDeclExpr() { result = this.getPattern().asBindingPattern() } + LocalVariableDeclExpr getLocalVariableDeclExpr() { + result = this.getPattern().asBindingOrUnnamedPattern() + } /** * Gets the access to the type on the right-hand side of the `instanceof` operator. @@ -1681,7 +1683,10 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or exists(InstanceOfExpr ioe | this.getParent() = ioe | result.isNthChildOf(ioe, 1)) or - exists(PatternCase pc | this.getParent() = pc | result.isNthChildOf(pc, -2)) + exists(PatternCase pc, int index, int typeAccessIdx | this.isNthChildOf(pc, index) | + (if index = 0 then typeAccessIdx = -4 else typeAccessIdx = (-3 - index)) and + result.isNthChildOf(pc, typeAccessIdx) + ) or exists(RecordPatternExpr rpe, int index | this.isNthChildOf(rpe, index) and result.isNthChildOf(rpe, -(index + 1)) @@ -1742,17 +1747,17 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or exists(SwitchStmt switch | result = switch.getExpr() and - this = switch.getAPatternCase().getPattern().asBindingPattern() + this = switch.getAPatternCase().getAPattern().asBindingOrUnnamedPattern() ) or exists(SwitchExpr switch | result = switch.getExpr() and - this = switch.getAPatternCase().getPattern().asBindingPattern() + this = switch.getAPatternCase().getAPattern().asBindingOrUnnamedPattern() ) or exists(InstanceOfExpr ioe | result = ioe.getExpr() and - this = ioe.getPattern().asBindingPattern() + this = ioe.getPattern().asBindingOrUnnamedPattern() ) } @@ -2676,9 +2681,9 @@ class NotNullExpr extends UnaryExpr, @notnullexpr { } /** - * A binding or record pattern. + * A binding, unnamed or record pattern. * - * Note binding patterns are represented as `LocalVariableDeclExpr`s. + * Note binding and unnamed patterns are represented as `LocalVariableDeclExpr`s. */ class PatternExpr extends Expr { PatternExpr() { @@ -2691,9 +2696,14 @@ class PatternExpr extends Expr { } /** - * Gets this pattern cast to a binding pattern. + * Gets this pattern cast to a binding or unnamed pattern. */ - LocalVariableDeclExpr asBindingPattern() { result = this } + LocalVariableDeclExpr asBindingOrUnnamedPattern() { result = this } + + /** + * DEPRECATED: alias for `asBindingOrUnnamedPattern`. + */ + deprecated LocalVariableDeclExpr asBindingPattern() { result = this.asBindingOrUnnamedPattern() } /** * Gets this pattern cast to a record pattern. diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index 6a5e5aa698b..2b0cd1a7899 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -386,7 +386,7 @@ private class PpInstanceOfExpr extends PpAst, InstanceOfExpr { i = 3 and result = " " and this.getPattern() instanceof LocalVariableDeclExpr or i = 4 and - result = this.getPattern().asBindingPattern().getName() + result = this.getPattern().asBindingOrUnnamedPattern().getName() } override PpAst getChild(int i) { @@ -782,28 +782,53 @@ private class PpSwitchCase extends PpAst, SwitchCase { } private class PpPatternCase extends PpAst, PatternCase { + private TypeAccess getPatternTypeAccess(int n) { + result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() + } + + private predicate isAnonymousPattern(int n) { + this.getPatternAtIndex(n).asBindingOrUnnamedPattern().isAnonymous() + } + override string getPart(int i) { - i = 0 and result = "case " + exists(int n, int base | exists(this.getPatternAtIndex(n)) and base = n * 4 | + i = base and + (if n = 0 then result = "case " else result = ", ") + or + i = base + 2 and + this.getPatternAtIndex(n) instanceof LocalVariableDeclExpr and + not this.isAnonymousPattern(n) and + result = " " + or + i = base + 3 and + ( + if this.isAnonymousPattern(n) + then result = "_" + else result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getName() + ) + ) or - i = 2 and this.getPattern() instanceof LocalVariableDeclExpr and result = " " - or - i = 3 and result = this.getPattern().asBindingPattern().getName() - or - i = 4 and result = ":" and not this.isRule() - or - i = 4 and result = " -> " and this.isRule() - or - i = 6 and result = ";" and exists(this.getRuleExpression()) + exists(int base | base = (max(int n | exists(this.getPatternAtIndex(n))) + 1) * 4 | + i = base and result = ":" and not this.isRule() + or + i = base and result = " -> " and this.isRule() + or + i = base + 2 and result = ";" and exists(this.getRuleExpression()) + ) } override PpAst getChild(int i) { - i = 1 and result = this.getPattern().asBindingPattern().getTypeAccess() + exists(int n, int base | exists(this.getPatternAtIndex(n)) and base = n * 4 | + i = 1 and result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() + or + i = 1 and result = this.getPatternAtIndex(n).asRecordPattern() + ) or - i = 1 and result = this.getPattern().asRecordPattern() - or - i = 5 and result = this.getRuleExpression() - or - i = 5 and result = this.getRuleStatement() + exists(int base | base = (max(int n | exists(this.getPatternAtIndex(n))) + 1) * 4 | + i = base + 1 and result = this.getRuleExpression() + or + i = base + 1 and result = this.getRuleStatement() + ) } } diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index bc2b81a1a33..9444a4a66bf 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -117,7 +117,11 @@ private newtype TPrintAstNode = TElementNode(Element el) { shouldPrint(el, _) } or TForInitNode(ForStmt fs) { shouldPrint(fs, _) and exists(fs.getAnInit()) } or TLocalVarDeclNode(LocalVariableDeclExpr lvde) { - shouldPrint(lvde, _) and lvde.getParent() instanceof SingleLocalVarDeclParent + shouldPrint(lvde, _) and + ( + lvde.getParent() instanceof SingleLocalVarDeclParent or + lvde.getParent() instanceof PatternCase + ) } or TAnnotationsNode(Annotatable ann) { shouldPrint(ann, _) and @@ -415,6 +419,23 @@ final class ForStmtNode extends ExprStmtNode { } } +/** + * A node representing a `PatternCase`. + */ +final class PatternCaseNode extends ExprStmtNode { + PatternCase pc; + + PatternCaseNode() { pc = element } + + override PrintAstNode getChild(int childIndex) { + result = super.getChild(childIndex) and + not result.(ElementNode).getElement() instanceof LocalVariableDeclExpr and + not result.(ElementNode).getElement() instanceof TypeAccess + or + result = TLocalVarDeclNode(pc.getPatternAtIndex(childIndex)) + } +} + /** * An element that can be the parent of up to one `LocalVariableDeclExpr` for which we want * to use a synthetic node to hold the variable declaration and its `TypeAccess`. @@ -423,8 +444,7 @@ private class SingleLocalVarDeclParent extends ExprOrStmt { SingleLocalVarDeclParent() { this instanceof EnhancedForStmt or this instanceof CatchClause or - this.(InstanceOfExpr).isPattern() or - this instanceof PatternCase + this.(InstanceOfExpr).isPattern() } /** Gets the variable declaration that this element contains */ @@ -643,7 +663,11 @@ final class LocalVarDeclSynthNode extends PrintAstNode, TLocalVarDeclNode { LocalVarDeclSynthNode() { this = TLocalVarDeclNode(lvde) } - override string toString() { result = "(Single Local Variable Declaration)" } + override string toString() { + if lvde.getParent() instanceof PatternCase + then result = "(Pattern case declaration)" + else result = "(Single Local Variable Declaration)" + } override ElementNode getChild(int childIndex) { childIndex = 0 and diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 05d105e4de3..c25ccef88ba 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -539,12 +539,19 @@ class ConstCase extends SwitchCase { /** A pattern case of a `switch` statement */ class PatternCase extends SwitchCase { - PatternExpr pattern; + PatternCase() { exists(PatternExpr pe | pe.isNthChildOf(this, _)) } - PatternCase() { pattern.isNthChildOf(this, 0) } + /** + * DEPRECATED: alias for getPatternAtIndex(0) + */ + deprecated PatternExpr getPattern() { result = this.getPatternAtIndex(0) } - /** Gets this case's pattern. */ - PatternExpr getPattern() { result = pattern } + /** + * Gets this case's `n`th pattern. + */ + PatternExpr getPatternAtIndex(int n) { result.isNthChildOf(this, n) } + + PatternExpr getAPattern() { result = this.getPatternAtIndex(_) } /** Gets the guard applicable to this pattern case, if any. */ Expr getGuard() { result.isNthChildOf(this, -3) } diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index f28e378c233..a4cf09df055 100644 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -58,7 +58,13 @@ class LocalVariableDecl extends @localvar, LocalScopeVariable { /** Gets the callable in which this declaration occurs. */ Callable getEnclosingCallable() { result = this.getCallable() } - override string toString() { result = this.getType().getName() + " " + this.getName() } + override string toString() { + exists(string sourceName | + if this.getName() = "" then sourceName = "_" else sourceName = this.getName() + | + result = this.getType().getName() + " " + sourceName + ) + } /** Gets the initializer expression of this local variable declaration. */ override Expr getInitializer() { result = this.getDeclExpr().getInit() } diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index a97cf1f8f57..94052d289db 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -115,8 +115,20 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre ( pred.(Expr).getParent*() = sc.getSelectorExpr() or - pred.(Expr).getParent*() = getClosestPrecedingPatternCase(sc).getGuard() + // Ambiguous: in the case of `case String _ when x: case "SomeConstant":`, the guard `x` + // passing edge will fall through into the constant case, and the guard failing edge + // will test if the selector equals `"SomeConstant"` and if so branch to the same + // case statement. Therefore don't label this a non-fall-through predecessor. + exists(PatternCase previousPatternCase | + previousPatternCase = getClosestPrecedingPatternCase(sc) + | + pred.(Expr).getParent*() = previousPatternCase.getGuard() and + // Check there is any statement in between the previous pattern case and this one. + not previousPatternCase.getIndex() = sc.getIndex() - 1 + ) or + // Unambigious: on the test-passing edge there must be at least one intervening + // declaration node, including anonymous `_` declarations. pred = getClosestPrecedingPatternCase(sc) ) } From c7cb885e719e8f3bf88a1162bf944b988e61cd65 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:01:09 +0000 Subject: [PATCH 294/497] Add missing javadoc and getUniquePattern predicate --- java/ql/lib/semmle/code/java/Statement.qll | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index c25ccef88ba..0099ad36eb9 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -551,8 +551,16 @@ class PatternCase extends SwitchCase { */ PatternExpr getPatternAtIndex(int n) { result.isNthChildOf(this, n) } + /** + * Gets any of this case's patterns. + */ PatternExpr getAPattern() { result = this.getPatternAtIndex(_) } + /** + * Gets this case's sole pattern, if there is exactly one. + */ + PatternExpr getUniquePattern() { result = unique(PatternExpr pe | pe = this.getPatternAtIndex(_)) } + /** Gets the guard applicable to this pattern case, if any. */ Expr getGuard() { result.isNthChildOf(this, -3) } From e59487a3248d4d76cb0ae73b63d17d12c87a39d1 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:01:42 +0000 Subject: [PATCH 295/497] Don't regard cases with multiple patterns as conducting a type test --- java/ql/lib/semmle/code/java/controlflow/Guards.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 94052d289db..c3e915b287b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -213,13 +213,13 @@ class Guard extends ExprParent { or exists(PatternCase pc | this = pc | pc.getSelectorExpr() = testedExpr and - testedType = pc.getPattern().getType() + testedType = pc.getUniquePattern().getType() ) ) and ( if exists(RecordPatternExpr rpe | - rpe = [this.(InstanceOfExpr).getPattern(), this.(PatternCase).getPattern()] + rpe = [this.(InstanceOfExpr).getPattern(), this.(PatternCase).getAPattern()] | not rpe.isUnrestricted() ) From 00c7dd5f922471fd31cd4925e758ae3498312b57 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:03:16 +0000 Subject: [PATCH 296/497] Fix a stray use of getPattern --- java/ql/lib/semmle/code/java/Expr.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index ce2612c9a80..31a4161cd53 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1708,7 +1708,7 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { or pc = result.(SwitchExpr).getAPatternCase() | - this = pc.getPattern().getAChildExpr*() + this = pc.getAPattern().getAChildExpr*() ) } From 29e93edf90347973e81f6d13294cada27e632329 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:05:33 +0000 Subject: [PATCH 297/497] Dataflow: restrict pattern-case flow to unique patterns. --- .../lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 723b7784b1e..95faf4fbabc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -194,12 +194,14 @@ predicate simpleAstFlowStep(Expr e1, Expr e2) { // In the following three cases only record patterns need this flow edge, leading from the bound instanceof // or switch tested expression to a record pattern that will read its fields. Simple binding patterns are // handled via VariableAssign.getSource instead. + // We only consider unique patterns because cases that declare multiple patterns are not allowed to declare + // any identifiers, so can't participate in dataflow. exists(SwitchExpr se | - e1 = se.getExpr() and e2 = se.getACase().(PatternCase).getPattern().asRecordPattern() + e1 = se.getExpr() and e2 = se.getACase().(PatternCase).getUniquePattern().asRecordPattern() ) or exists(SwitchStmt ss | - e1 = ss.getExpr() and e2 = ss.getACase().(PatternCase).getPattern().asRecordPattern() + e1 = ss.getExpr() and e2 = ss.getACase().(PatternCase).getUniquePattern().asRecordPattern() ) or exists(InstanceOfExpr ioe | e1 = ioe.getExpr() and e2 = ioe.getPattern().asRecordPattern()) From d5443b3f108b0a9b82589437e826fd23ecd69f42 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:07:14 +0000 Subject: [PATCH 298/497] Remove dead code --- java/ql/lib/semmle/code/java/PrettyPrintAst.qll | 4 ---- 1 file changed, 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index 2b0cd1a7899..b91d371b187 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -782,10 +782,6 @@ private class PpSwitchCase extends PpAst, SwitchCase { } private class PpPatternCase extends PpAst, PatternCase { - private TypeAccess getPatternTypeAccess(int n) { - result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() - } - private predicate isAnonymousPattern(int n) { this.getPatternAtIndex(n).asBindingOrUnnamedPattern().isAnonymous() } From bc0724e2b3af10905c7cad5eacc577ad1b310e6f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:14:28 +0000 Subject: [PATCH 299/497] Add change note --- java/ql/lib/change-notes/2024-03-22-anonymous-variables.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-03-22-anonymous-variables.md diff --git a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md new file mode 100644 index 00000000000..029d3dfbff4 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. From f66811048dbf9e56b80fc93339117c125ad9e3e6 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:42:16 +0000 Subject: [PATCH 300/497] Fix next-normal-statement predicate --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 89e4ac38675..f8e94dc7684 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -781,10 +781,9 @@ private module ControlFlowGraphImpl { getSwitchStatement(switch, i) = pred and getSwitchStatement(switch, i + 1) = immediateSucc and ( - succ = immediateSucc and - not immediateSucc instanceof PatternCase - or - isNextNormalSwitchStmt(switch, immediateSucc, succ) + if immediateSucc instanceof PatternCase + then isNextNormalSwitchStmt(switch, immediateSucc, succ) + else succ = immediateSucc ) ) } From c0874ab04b5db910953e3f1dc3187527278ce527 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:42:51 +0000 Subject: [PATCH 301/497] Fix pattern-case variable pretty-printer --- java/ql/lib/semmle/code/java/Expr.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 31a4161cd53..b9b535eb57c 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1684,7 +1684,7 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { exists(InstanceOfExpr ioe | this.getParent() = ioe | result.isNthChildOf(ioe, 1)) or exists(PatternCase pc, int index, int typeAccessIdx | this.isNthChildOf(pc, index) | - (if index = 0 then typeAccessIdx = -4 else typeAccessIdx = (-3 - index)) and + (if index = 0 then typeAccessIdx = -2 else typeAccessIdx = (-3 - index)) and result.isNthChildOf(pc, typeAccessIdx) ) or From 5243a62a41cac8b0ef3a17b914a5748eba21ca6a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:44:11 +0000 Subject: [PATCH 302/497] Accept test changes --- .../dependency/PrintAst.expected | 4 ++-- .../library-tests/guards12/PrintAst.expected | 4 ++-- .../library-tests/printAst/PrintAst.expected | 22 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/java/ql/test/library-tests/dependency/PrintAst.expected b/java/ql/test/library-tests/dependency/PrintAst.expected index ab71b03fe55..5caf6bb4d5b 100644 --- a/java/ql/test/library-tests/dependency/PrintAst.expected +++ b/java/ql/test/library-tests/dependency/PrintAst.expected @@ -63,7 +63,7 @@ dependency/A.java: # 31| 1: [SwitchStmt] switch (...) # 31| -1: [VarAccess] o # 32| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 32| 0: [TypeAccess] Used2 # 32| 1: [LocalVariableDeclExpr] u2 # 32| 1: [BreakStmt] break @@ -74,7 +74,7 @@ dependency/A.java: # 35| 0: [SwitchExpr] switch (...) # 35| -1: [VarAccess] o # 36| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 36| 0: [TypeAccess] Used3 # 36| 1: [LocalVariableDeclExpr] u3 # 36| 1: [YieldStmt] yield ... diff --git a/java/ql/test/library-tests/guards12/PrintAst.expected b/java/ql/test/library-tests/guards12/PrintAst.expected index 86a8ed3b778..c54fc31e157 100644 --- a/java/ql/test/library-tests/guards12/PrintAst.expected +++ b/java/ql/test/library-tests/guards12/PrintAst.expected @@ -52,7 +52,7 @@ Test.java: # 17| 0: [VarAccess] len # 17| 1: [IntegerLiteral] 4 # 17| -1: [BlockStmt] { ... } -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 17| 0: [TypeAccess] String # 17| 1: [LocalVariableDeclExpr] s2 # 18| 1: [ConstCase] case ... @@ -74,7 +74,7 @@ Test.java: # 23| 0: [VarAccess] len # 23| 1: [IntegerLiteral] 4 # 23| -1: [BlockStmt] { ... } -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 23| 0: [TypeAccess] String # 23| 1: [LocalVariableDeclExpr] s2 # 24| 2: [ConstCase] case ... diff --git a/java/ql/test/library-tests/printAst/PrintAst.expected b/java/ql/test/library-tests/printAst/PrintAst.expected index be523390620..07b4772718f 100644 --- a/java/ql/test/library-tests/printAst/PrintAst.expected +++ b/java/ql/test/library-tests/printAst/PrintAst.expected @@ -127,7 +127,7 @@ A.java: # 54| -1: [VarAccess] System.out # 54| -1: [TypeAccess] System # 54| 0: [VarAccess] s -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 54| 0: [TypeAccess] String # 54| 1: [LocalVariableDeclExpr] s # 55| 1: [PatternCase] case @@ -138,7 +138,7 @@ A.java: # 55| 0: [AddExpr] ... + ... # 55| 0: [StringLiteral] "An integer: " # 55| 1: [VarAccess] i -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 55| 0: [TypeAccess] Integer # 55| 1: [LocalVariableDeclExpr] i # 56| 2: [DefaultCase] default @@ -146,7 +146,7 @@ A.java: # 58| 3: [SwitchStmt] switch (...) # 58| -1: [VarAccess] thing # 59| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 59| 0: [TypeAccess] String # 59| 1: [LocalVariableDeclExpr] s # 60| 1: [ExprStmt] ; @@ -156,7 +156,7 @@ A.java: # 60| 0: [VarAccess] s # 61| 2: [BreakStmt] break # 62| 3: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 62| 0: [TypeAccess] Integer # 62| 1: [LocalVariableDeclExpr] i # 63| 4: [ExprStmt] ; @@ -175,14 +175,14 @@ A.java: # 68| -1: [VarAccess] thing # 69| 0: [PatternCase] case # 69| -1: [VarAccess] s -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 69| 0: [TypeAccess] String # 69| 1: [LocalVariableDeclExpr] s # 70| 1: [PatternCase] case # 70| -1: [AddExpr] ... + ... # 70| 0: [StringLiteral] "An integer: " # 70| 1: [VarAccess] i -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 70| 0: [TypeAccess] Integer # 70| 1: [LocalVariableDeclExpr] i # 71| 2: [DefaultCase] default @@ -192,13 +192,13 @@ A.java: # 73| 0: [SwitchExpr] switch (...) # 73| -1: [VarAccess] thing # 74| 0: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 74| 0: [TypeAccess] String # 74| 1: [LocalVariableDeclExpr] s # 75| 1: [YieldStmt] yield ... # 75| 0: [VarAccess] s # 76| 2: [PatternCase] case -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 76| 0: [TypeAccess] Integer # 76| 1: [LocalVariableDeclExpr] i # 77| 3: [YieldStmt] yield ... @@ -232,7 +232,7 @@ A.java: # 87| -1: [VarAccess] s # 87| 1: [IntegerLiteral] 3 # 87| -1: [StringLiteral] "It's 3 letters long" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 87| 0: [TypeAccess] String # 87| 1: [LocalVariableDeclExpr] s # 88| 2: [PatternCase] case @@ -241,7 +241,7 @@ A.java: # 88| -1: [VarAccess] s # 88| 1: [IntegerLiteral] 5 # 88| -1: [StringLiteral] "it's 5 letters long" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 88| 0: [TypeAccess] String # 88| 1: [LocalVariableDeclExpr] s # 89| 3: [DefaultCase] default @@ -252,7 +252,7 @@ A.java: # 91| -1: [VarAccess] thing # 92| 0: [PatternCase] case # 92| -1: [StringLiteral] "It's a string" -#-----| 0: (Single Local Variable Declaration) +#-----| 0: (Pattern case declaration) # 92| 0: [TypeAccess] String # 92| 1: [LocalVariableDeclExpr] s # 93| 1: [NullDefaultCase] case null, default From 403e86878c18b841b78d14da4b6ba935bc3d7398 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:54:11 +0000 Subject: [PATCH 303/497] Don't mistake a rule case for a fall-through edge --- java/ql/lib/semmle/code/java/controlflow/Guards.qll | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index c3e915b287b..0d0ecd5b2ea 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -123,8 +123,12 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre previousPatternCase = getClosestPrecedingPatternCase(sc) | pred.(Expr).getParent*() = previousPatternCase.getGuard() and - // Check there is any statement in between the previous pattern case and this one. - not previousPatternCase.getIndex() = sc.getIndex() - 1 + // Check there is any statement in between the previous pattern case and this one, + // or the case is a rule, so there is no chance of a fall-through. + ( + previousPatternCase.isRule() or + not previousPatternCase.getIndex() = sc.getIndex() - 1 + ) ) or // Unambigious: on the test-passing edge there must be at least one intervening From ee36e3b72b53b12c93138a5fd0311127f0aedfb0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 15:57:20 +0000 Subject: [PATCH 304/497] autoformat --- java/ql/lib/semmle/code/java/Statement.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 0099ad36eb9..72344a3401c 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -559,7 +559,9 @@ class PatternCase extends SwitchCase { /** * Gets this case's sole pattern, if there is exactly one. */ - PatternExpr getUniquePattern() { result = unique(PatternExpr pe | pe = this.getPatternAtIndex(_)) } + PatternExpr getUniquePattern() { + result = unique(PatternExpr pe | pe = this.getPatternAtIndex(_)) + } /** Gets the guard applicable to this pattern case, if any. */ Expr getGuard() { result.isNthChildOf(this, -3) } From cc8dcf63b07dc294beec36dd67938056764b77e0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 16:12:29 +0000 Subject: [PATCH 305/497] Convert test to use an anonymous local --- .../library-tests/guards12/PrintAst.expected | 2 +- java/ql/test/library-tests/guards12/Test.java | 2 +- .../test/library-tests/guards12/guard.expected | 18 +++++++++--------- java/ql/test/library-tests/guards12/options | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/java/ql/test/library-tests/guards12/PrintAst.expected b/java/ql/test/library-tests/guards12/PrintAst.expected index c54fc31e157..55225509608 100644 --- a/java/ql/test/library-tests/guards12/PrintAst.expected +++ b/java/ql/test/library-tests/guards12/PrintAst.expected @@ -54,7 +54,7 @@ Test.java: # 17| -1: [BlockStmt] { ... } #-----| 0: (Pattern case declaration) # 17| 0: [TypeAccess] String -# 17| 1: [LocalVariableDeclExpr] s2 +# 17| 1: [LocalVariableDeclExpr] # 18| 1: [ConstCase] case ... # 18| -1: [BlockStmt] { ... } # 18| 0: [StringLiteral] "e" diff --git a/java/ql/test/library-tests/guards12/Test.java b/java/ql/test/library-tests/guards12/Test.java index ee80e17df8d..4dc09a31952 100644 --- a/java/ql/test/library-tests/guards12/Test.java +++ b/java/ql/test/library-tests/guards12/Test.java @@ -14,7 +14,7 @@ class Test { } int len = s.length(); switch (s) { - case String s2 when len == 4 -> { } + case String _ when len == 4 -> { } case "e" -> { } default -> { } } diff --git a/java/ql/test/library-tests/guards12/guard.expected b/java/ql/test/library-tests/guards12/guard.expected index 29ca4cafb41..0efa2b54423 100644 --- a/java/ql/test/library-tests/guards12/guard.expected +++ b/java/ql/test/library-tests/guards12/guard.expected @@ -7,16 +7,16 @@ hasBranchEdge | Test.java:11:7:11:17 | case ... | Test.java:3:9:3:21 | x | Test.java:11:7:11:17 | case ... | true | | Test.java:12:7:12:17 | case ... | Test.java:3:9:3:21 | x | Test.java:12:7:12:17 | case ... | true | | Test.java:13:7:13:16 | default | Test.java:3:9:3:21 | x | Test.java:13:7:13:16 | default | true | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:17:19:17:20 | s2 | true | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | false | -| Test.java:17:7:17:37 | case | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | false | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:17:39:17:41 | { ... } | true | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:18:7:18:17 | case ... | false | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:19:17:20 | s2 | Test.java:19:7:19:16 | default | false | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:17:19:17:19 | | true | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | false | +| Test.java:17:7:17:36 | case | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | false | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:17:38:17:40 | { ... } | true | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:18:7:18:17 | case ... | false | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:19:17:19 | | Test.java:19:7:19:16 | default | false | | Test.java:18:7:18:17 | case ... | Test.java:15:5:15:25 | var ...; | Test.java:18:7:18:17 | case ... | true | -| Test.java:18:7:18:17 | case ... | Test.java:17:19:17:20 | s2 | Test.java:18:7:18:17 | case ... | true | +| Test.java:18:7:18:17 | case ... | Test.java:17:19:17:19 | | Test.java:18:7:18:17 | case ... | true | | Test.java:19:7:19:16 | default | Test.java:15:5:15:25 | var ...; | Test.java:19:7:19:16 | default | true | -| Test.java:19:7:19:16 | default | Test.java:17:19:17:20 | s2 | Test.java:19:7:19:16 | default | true | +| Test.java:19:7:19:16 | default | Test.java:17:19:17:19 | | Test.java:19:7:19:16 | default | true | | Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:23:21:23 | s | true | | Test.java:21:13:21:19 | unknown | Test.java:21:5:21:42 | switch (...) | Test.java:21:27:21:27 | s | false | | Test.java:22:7:22:17 | case ... | Test.java:21:23:21:23 | s | Test.java:22:7:22:17 | case ... | true | @@ -40,7 +40,7 @@ hasBranchEdge | Test.java:11:7:11:17 | case ... | Test.java:9:13:9:13 | s | Test.java:11:12:11:14 | "c" | true | true | Test.java:11:7:11:17 | case ... | | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | false | Test.java:13:7:13:16 | default | | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | true | Test.java:12:7:12:17 | case ... | -| Test.java:17:27:17:34 | ... == ... | Test.java:17:27:17:29 | len | Test.java:17:34:17:34 | 4 | true | true | Test.java:17:39:17:41 | { ... } | +| Test.java:17:26:17:33 | ... == ... | Test.java:17:26:17:28 | len | Test.java:17:33:17:33 | 4 | true | true | Test.java:17:38:17:40 | { ... } | | Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | false | Test.java:19:7:19:16 | default | | Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | true | Test.java:18:7:18:17 | case ... | | Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:25:7:25:16 | default | diff --git a/java/ql/test/library-tests/guards12/options b/java/ql/test/library-tests/guards12/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/guards12/options +++ b/java/ql/test/library-tests/guards12/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 From 6cf956d07af83b502e9aa45c65e520f45634db75 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 16:31:15 +0000 Subject: [PATCH 306/497] Add CFG test for anonymous variables and fall-throughs with pattern cases --- .../pattern-switch/cfg/Test.java | 18 +++ .../library-tests/pattern-switch/cfg/options | 2 +- .../pattern-switch/cfg/test.expected | 104 ++++++++++++++---- 3 files changed, 100 insertions(+), 24 deletions(-) diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Test.java b/java/ql/test/library-tests/pattern-switch/cfg/Test.java index 9894d7fd197..2a0ab7267fe 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Test.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Test.java @@ -98,6 +98,24 @@ public class Test { break; } + switch(thing) { + case B(_, _): + case Integer _, String _, A(_, _) when thing.toString().equals("abc"): + case Float _: + break; + default: + break; + } + + var result = switch(thing) { + case B(_, _): + case Integer _, String _, A(_, _) when thing.toString().equals("abc"): + case Float _: + yield 1; + default: + yield 2; + }; + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/options b/java/ql/test/library-tests/pattern-switch/cfg/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/options +++ b/java/ql/test/library-tests/pattern-switch/cfg/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.expected b/java/ql/test/library-tests/pattern-switch/cfg/test.expected index 31605711281..aac2416686f 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.expected +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.expected @@ -48,7 +48,7 @@ | Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:41:101:3 | { ... } | Test.java:5:6:5:19 | switch (...) | +| Test.java:3:41:119:3 | { ... } | Test.java:5:6:5:19 | switch (...) | | Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing | | Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case | | Test.java:6:8:6:23 | case | Test.java:6:20:6:20 | s | @@ -288,26 +288,84 @@ | Test.java:95:21:95:21 | x | Test.java:95:28:95:28 | y | | Test.java:95:28:95:28 | y | Test.java:95:15:95:29 | B(...) | | Test.java:95:36:95:36 | z | Test.java:95:13:95:37 | A(...) | -| Test.java:96:10:96:15 | break | Test.java:3:22:3:25 | test | +| Test.java:96:10:96:15 | break | Test.java:101:6:101:18 | switch (...) | | Test.java:97:8:97:15 | default | Test.java:98:10:98:15 | break | -| Test.java:98:10:98:15 | break | Test.java:3:22:3:25 | test | -| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | ; | -| Test.java:105:8:105:8 | ...=... | Test.java:105:8:105:8 | A | -| Test.java:105:8:105:8 | ; | Test.java:105:8:105:8 | this | -| Test.java:105:8:105:8 | ; | Test.java:105:8:105:8 | this | -| Test.java:105:8:105:8 | b | Test.java:105:8:105:8 | ...=... | -| Test.java:105:8:105:8 | field3 | Test.java:105:8:105:8 | ...=... | -| Test.java:105:8:105:8 | super(...) | Test.java:105:8:105:8 | ; | -| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | b | -| Test.java:105:8:105:8 | this | Test.java:105:8:105:8 | field3 | -| Test.java:105:8:105:8 | { ... } | Test.java:105:8:105:8 | super(...) | -| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | ; | -| Test.java:106:8:106:8 | ...=... | Test.java:106:8:106:8 | B | -| Test.java:106:8:106:8 | ; | Test.java:106:8:106:8 | this | -| Test.java:106:8:106:8 | ; | Test.java:106:8:106:8 | this | -| Test.java:106:8:106:8 | field1 | Test.java:106:8:106:8 | ...=... | -| Test.java:106:8:106:8 | field2 | Test.java:106:8:106:8 | ...=... | -| Test.java:106:8:106:8 | super(...) | Test.java:106:8:106:8 | ; | -| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field1 | -| Test.java:106:8:106:8 | this | Test.java:106:8:106:8 | field2 | -| Test.java:106:8:106:8 | { ... } | Test.java:106:8:106:8 | super(...) | +| Test.java:98:10:98:15 | break | Test.java:101:6:101:18 | switch (...) | +| Test.java:101:6:101:18 | switch (...) | Test.java:101:13:101:17 | thing | +| Test.java:101:13:101:17 | thing | Test.java:102:8:102:20 | case | +| Test.java:102:8:102:20 | case | Test.java:102:15:102:15 | | +| Test.java:102:8:102:20 | case | Test.java:103:8:103:77 | case | +| Test.java:102:13:102:19 | B(...) | Test.java:105:10:105:15 | break | +| Test.java:102:15:102:15 | | Test.java:102:18:102:18 | | +| Test.java:102:18:102:18 | | Test.java:102:13:102:19 | B(...) | +| Test.java:103:8:103:77 | case | Test.java:103:21:103:21 | | +| Test.java:103:8:103:77 | case | Test.java:103:31:103:31 | | +| Test.java:103:8:103:77 | case | Test.java:103:36:103:36 | | +| Test.java:103:8:103:77 | case | Test.java:104:8:104:20 | case | +| Test.java:103:21:103:21 | | Test.java:103:47:103:51 | thing | +| Test.java:103:31:103:31 | | Test.java:103:47:103:51 | thing | +| Test.java:103:34:103:40 | A(...) | Test.java:103:47:103:51 | thing | +| Test.java:103:36:103:36 | | Test.java:103:39:103:39 | | +| Test.java:103:39:103:39 | | Test.java:103:34:103:40 | A(...) | +| Test.java:103:47:103:51 | thing | Test.java:103:47:103:62 | toString(...) | +| Test.java:103:47:103:62 | toString(...) | Test.java:103:71:103:75 | "abc" | +| Test.java:103:47:103:76 | equals(...) | Test.java:104:8:104:20 | case | +| Test.java:103:47:103:76 | equals(...) | Test.java:105:10:105:15 | break | +| Test.java:103:71:103:75 | "abc" | Test.java:103:47:103:76 | equals(...) | +| Test.java:104:8:104:20 | case | Test.java:104:19:104:19 | | +| Test.java:104:8:104:20 | case | Test.java:106:8:106:15 | default | +| Test.java:104:19:104:19 | | Test.java:105:10:105:15 | break | +| Test.java:105:10:105:15 | break | Test.java:110:6:117:7 | var ...; | +| Test.java:106:8:106:15 | default | Test.java:107:10:107:15 | break | +| Test.java:107:10:107:15 | break | Test.java:110:6:117:7 | var ...; | +| Test.java:110:6:117:7 | var ...; | Test.java:110:19:110:31 | switch (...) | +| Test.java:110:10:110:31 | result | Test.java:3:22:3:25 | test | +| Test.java:110:19:110:31 | switch (...) | Test.java:110:26:110:30 | thing | +| Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case | +| Test.java:111:8:111:20 | case | Test.java:111:15:111:15 | | +| Test.java:111:8:111:20 | case | Test.java:112:8:112:77 | case | +| Test.java:111:13:111:19 | B(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:111:15:111:15 | | Test.java:111:18:111:18 | | +| Test.java:111:18:111:18 | | Test.java:111:13:111:19 | B(...) | +| Test.java:112:8:112:77 | case | Test.java:112:21:112:21 | | +| Test.java:112:8:112:77 | case | Test.java:112:31:112:31 | | +| Test.java:112:8:112:77 | case | Test.java:112:36:112:36 | | +| Test.java:112:8:112:77 | case | Test.java:113:8:113:20 | case | +| Test.java:112:21:112:21 | | Test.java:112:47:112:51 | thing | +| Test.java:112:31:112:31 | | Test.java:112:47:112:51 | thing | +| Test.java:112:34:112:40 | A(...) | Test.java:112:47:112:51 | thing | +| Test.java:112:36:112:36 | | Test.java:112:39:112:39 | | +| Test.java:112:39:112:39 | | Test.java:112:34:112:40 | A(...) | +| Test.java:112:47:112:51 | thing | Test.java:112:47:112:62 | toString(...) | +| Test.java:112:47:112:62 | toString(...) | Test.java:112:71:112:75 | "abc" | +| Test.java:112:47:112:76 | equals(...) | Test.java:113:8:113:20 | case | +| Test.java:112:47:112:76 | equals(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:112:71:112:75 | "abc" | Test.java:112:47:112:76 | equals(...) | +| Test.java:113:8:113:20 | case | Test.java:113:19:113:19 | | +| Test.java:113:8:113:20 | case | Test.java:115:8:115:15 | default | +| Test.java:113:19:113:19 | | Test.java:114:10:114:17 | yield ... | +| Test.java:114:10:114:17 | yield ... | Test.java:114:16:114:16 | 1 | +| Test.java:114:16:114:16 | 1 | Test.java:110:10:110:31 | result | +| Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... | +| Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 | +| Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result | +| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | ; | +| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | A | +| Test.java:123:8:123:8 | ; | Test.java:123:8:123:8 | this | +| Test.java:123:8:123:8 | ; | Test.java:123:8:123:8 | this | +| Test.java:123:8:123:8 | b | Test.java:123:8:123:8 | ...=... | +| Test.java:123:8:123:8 | field3 | Test.java:123:8:123:8 | ...=... | +| Test.java:123:8:123:8 | super(...) | Test.java:123:8:123:8 | ; | +| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | b | +| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | field3 | +| Test.java:123:8:123:8 | { ... } | Test.java:123:8:123:8 | super(...) | +| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | ; | +| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | B | +| Test.java:124:8:124:8 | ; | Test.java:124:8:124:8 | this | +| Test.java:124:8:124:8 | ; | Test.java:124:8:124:8 | this | +| Test.java:124:8:124:8 | field1 | Test.java:124:8:124:8 | ...=... | +| Test.java:124:8:124:8 | field2 | Test.java:124:8:124:8 | ...=... | +| Test.java:124:8:124:8 | super(...) | Test.java:124:8:124:8 | ; | +| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field1 | +| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field2 | +| Test.java:124:8:124:8 | { ... } | Test.java:124:8:124:8 | super(...) | From f317f782aeab288194ce6138c2ec6ca1167f8860 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 16:36:39 +0000 Subject: [PATCH 307/497] Add test for control-flow with mixed patterns, constants and fall-through --- .../pattern-switch/cfg/Test.java | 9 +++ .../pattern-switch/cfg/test.expected | 63 ++++++++++++------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Test.java b/java/ql/test/library-tests/pattern-switch/cfg/Test.java index 2a0ab7267fe..17082458f3e 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Test.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Test.java @@ -116,6 +116,15 @@ public class Test { yield 2; }; + switch ((String)thing) { + case "a": + case String _ when ((String)thing).length() == 5: + case "b": + break; + default: + break; + } + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.expected b/java/ql/test/library-tests/pattern-switch/cfg/test.expected index aac2416686f..a7675429bd6 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.expected +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.expected @@ -48,7 +48,7 @@ | Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:41:119:3 | { ... } | Test.java:5:6:5:19 | switch (...) | +| Test.java:3:41:128:3 | { ... } | Test.java:5:6:5:19 | switch (...) | | Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing | | Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case | | Test.java:6:8:6:23 | case | Test.java:6:20:6:20 | s | @@ -319,7 +319,7 @@ | Test.java:106:8:106:15 | default | Test.java:107:10:107:15 | break | | Test.java:107:10:107:15 | break | Test.java:110:6:117:7 | var ...; | | Test.java:110:6:117:7 | var ...; | Test.java:110:19:110:31 | switch (...) | -| Test.java:110:10:110:31 | result | Test.java:3:22:3:25 | test | +| Test.java:110:10:110:31 | result | Test.java:119:6:119:27 | switch (...) | | Test.java:110:19:110:31 | switch (...) | Test.java:110:26:110:30 | thing | | Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case | | Test.java:111:8:111:20 | case | Test.java:111:15:111:15 | | @@ -349,23 +349,42 @@ | Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... | | Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 | | Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result | -| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | ; | -| Test.java:123:8:123:8 | ...=... | Test.java:123:8:123:8 | A | -| Test.java:123:8:123:8 | ; | Test.java:123:8:123:8 | this | -| Test.java:123:8:123:8 | ; | Test.java:123:8:123:8 | this | -| Test.java:123:8:123:8 | b | Test.java:123:8:123:8 | ...=... | -| Test.java:123:8:123:8 | field3 | Test.java:123:8:123:8 | ...=... | -| Test.java:123:8:123:8 | super(...) | Test.java:123:8:123:8 | ; | -| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | b | -| Test.java:123:8:123:8 | this | Test.java:123:8:123:8 | field3 | -| Test.java:123:8:123:8 | { ... } | Test.java:123:8:123:8 | super(...) | -| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | ; | -| Test.java:124:8:124:8 | ...=... | Test.java:124:8:124:8 | B | -| Test.java:124:8:124:8 | ; | Test.java:124:8:124:8 | this | -| Test.java:124:8:124:8 | ; | Test.java:124:8:124:8 | this | -| Test.java:124:8:124:8 | field1 | Test.java:124:8:124:8 | ...=... | -| Test.java:124:8:124:8 | field2 | Test.java:124:8:124:8 | ...=... | -| Test.java:124:8:124:8 | super(...) | Test.java:124:8:124:8 | ; | -| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field1 | -| Test.java:124:8:124:8 | this | Test.java:124:8:124:8 | field2 | -| Test.java:124:8:124:8 | { ... } | Test.java:124:8:124:8 | super(...) | +| Test.java:119:6:119:27 | switch (...) | Test.java:119:22:119:26 | thing | +| Test.java:119:14:119:26 | (...)... | Test.java:120:8:120:16 | case ... | +| Test.java:119:14:119:26 | (...)... | Test.java:121:8:121:56 | case | +| Test.java:119:22:119:26 | thing | Test.java:119:14:119:26 | (...)... | +| Test.java:120:8:120:16 | case ... | Test.java:122:8:122:16 | case ... | +| Test.java:121:8:121:56 | case | Test.java:121:20:121:20 | | +| Test.java:121:8:121:56 | case | Test.java:122:8:122:16 | case ... | +| Test.java:121:8:121:56 | case | Test.java:124:8:124:15 | default | +| Test.java:121:20:121:20 | | Test.java:121:36:121:40 | thing | +| Test.java:121:27:121:50 | length(...) | Test.java:121:55:121:55 | 5 | +| Test.java:121:27:121:55 | ... == ... | Test.java:122:8:122:16 | case ... | +| Test.java:121:27:121:55 | ... == ... | Test.java:124:8:124:15 | default | +| Test.java:121:28:121:40 | (...)... | Test.java:121:27:121:50 | length(...) | +| Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... | +| Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... | +| Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break | +| Test.java:123:10:123:15 | break | Test.java:3:22:3:25 | test | +| Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break | +| Test.java:125:10:125:15 | break | Test.java:3:22:3:25 | test | +| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | ; | +| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | A | +| Test.java:132:8:132:8 | ; | Test.java:132:8:132:8 | this | +| Test.java:132:8:132:8 | ; | Test.java:132:8:132:8 | this | +| Test.java:132:8:132:8 | b | Test.java:132:8:132:8 | ...=... | +| Test.java:132:8:132:8 | field3 | Test.java:132:8:132:8 | ...=... | +| Test.java:132:8:132:8 | super(...) | Test.java:132:8:132:8 | ; | +| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | b | +| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | field3 | +| Test.java:132:8:132:8 | { ... } | Test.java:132:8:132:8 | super(...) | +| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | ; | +| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | B | +| Test.java:133:8:133:8 | ; | Test.java:133:8:133:8 | this | +| Test.java:133:8:133:8 | ; | Test.java:133:8:133:8 | this | +| Test.java:133:8:133:8 | field1 | Test.java:133:8:133:8 | ...=... | +| Test.java:133:8:133:8 | field2 | Test.java:133:8:133:8 | ...=... | +| Test.java:133:8:133:8 | super(...) | Test.java:133:8:133:8 | ; | +| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field1 | +| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field2 | +| Test.java:133:8:133:8 | { ... } | Test.java:133:8:133:8 | super(...) | From 5cb5ee026c67ab7f0eb59040224bb63c4206d067 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 20:51:10 +0000 Subject: [PATCH 308/497] Fix pretty-printing of anonymous vars and multiple patterns; add test --- java/ql/lib/semmle/code/java/PrettyPrintAst.qll | 14 ++++++++++---- java/ql/test/library-tests/prettyprint/Test.java | 7 +++++++ java/ql/test/library-tests/prettyprint/options | 2 +- java/ql/test/library-tests/prettyprint/pp.expected | 10 ++++++++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index b91d371b187..36f5ce1ed89 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -400,7 +400,8 @@ private class PpInstanceOfExpr extends PpAst, InstanceOfExpr { private class PpLocalVariableDeclExpr extends PpAst, LocalVariableDeclExpr { override string getPart(int i) { - i = 0 and result = this.getName() + i = 0 and + (if this.isAnonymous() then result = "_" else result = this.getName()) or i = 1 and result = " = " and exists(this.getInit()) } @@ -793,7 +794,11 @@ private class PpPatternCase extends PpAst, PatternCase { or i = base + 2 and this.getPatternAtIndex(n) instanceof LocalVariableDeclExpr and - not this.isAnonymousPattern(n) and + ( + exists(this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess()) + or + not this.isAnonymousPattern(n) + ) and result = " " or i = base + 3 and @@ -815,9 +820,10 @@ private class PpPatternCase extends PpAst, PatternCase { override PpAst getChild(int i) { exists(int n, int base | exists(this.getPatternAtIndex(n)) and base = n * 4 | - i = 1 and result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() + i = base + 1 and + result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() or - i = 1 and result = this.getPatternAtIndex(n).asRecordPattern() + i = base + 1 and result = this.getPatternAtIndex(n).asRecordPattern() ) or exists(int base | base = (max(int n | exists(this.getPatternAtIndex(n))) + 1) * 4 | diff --git a/java/ql/test/library-tests/prettyprint/Test.java b/java/ql/test/library-tests/prettyprint/Test.java index c643955751e..1ffb1671459 100644 --- a/java/ql/test/library-tests/prettyprint/Test.java +++ b/java/ql/test/library-tests/prettyprint/Test.java @@ -45,6 +45,13 @@ public class Test { if (o instanceof R(S(var x), var y)) { } + switch(o) { + case String _, Integer _: + case R(S(_), _): + default: + break; + } + } } diff --git a/java/ql/test/library-tests/prettyprint/options b/java/ql/test/library-tests/prettyprint/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/prettyprint/options +++ b/java/ql/test/library-tests/prettyprint/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/prettyprint/pp.expected b/java/ql/test/library-tests/prettyprint/pp.expected index eb4fbaf0633..fb9608f8f41 100644 --- a/java/ql/test/library-tests/prettyprint/pp.expected +++ b/java/ql/test/library-tests/prettyprint/pp.expected @@ -84,5 +84,11 @@ | Test.java:1:14:1:17 | Test | 83 | } | | Test.java:1:14:1:17 | Test | 84 | if (o instanceof R(S(var x), var y)) { | | Test.java:1:14:1:17 | Test | 85 | } | -| Test.java:1:14:1:17 | Test | 86 | } | -| Test.java:1:14:1:17 | Test | 87 | } | +| Test.java:1:14:1:17 | Test | 86 | switch (o) { | +| Test.java:1:14:1:17 | Test | 87 | case String _, Integer _: | +| Test.java:1:14:1:17 | Test | 88 | case R(S(var _), var _): | +| Test.java:1:14:1:17 | Test | 89 | default: | +| Test.java:1:14:1:17 | Test | 90 | break; | +| Test.java:1:14:1:17 | Test | 91 | } | +| Test.java:1:14:1:17 | Test | 92 | } | +| Test.java:1:14:1:17 | Test | 93 | } | From f2ff6c476a646f8a812abae4d8f8449509186a3a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 21:01:32 +0000 Subject: [PATCH 309/497] Add printast tests for anonymous variables --- .../library-tests/printAst/AnonDecls.java | 181 +++++++ .../library-tests/printAst/PrintAst.expected | 483 ++++++++++++++++++ java/ql/test/library-tests/printAst/options | 2 +- 3 files changed, 665 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/library-tests/printAst/AnonDecls.java diff --git a/java/ql/test/library-tests/printAst/AnonDecls.java b/java/ql/test/library-tests/printAst/AnonDecls.java new file mode 100644 index 00000000000..45000050386 --- /dev/null +++ b/java/ql/test/library-tests/printAst/AnonDecls.java @@ -0,0 +1,181 @@ +import java.io.Closeable; +import java.util.List; +import java.util.function.BiFunction; + +record SubRecord(int z) { } +record MyRecord(int x, SubRecord y) { } + +public class AnonDecls { + + public static void test(List ss, Object o) { + + // Note each construct is repeated to ensure this doesn't produce database inconsistencies + + int _ = 1; + int _ = 2; + + try (Closeable _ = null) { } catch (Exception _) { } + try (Closeable _ = null) { } catch (Exception _) { } + + int x = 0; + + for (int _ = 1; x < 10; x++) { } + for (int _ = 2; x > 0; x--) { } + + for (var _ : ss) { } + for (var _ : ss) { } + + BiFunction f1 = (_, _) -> 1; + BiFunction f2 = (_, _) -> 2; + + switch (o) { + case SubRecord _: + case MyRecord _: + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord _): + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord (int _)): + default: + } + + switch (o) { + case SubRecord _: + case MyRecord (_, _): + default: + } + + switch (o) { + case MyRecord (_, _), SubRecord(_): + default: + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null: + default: + } + + switch (o) { + // Note use of binding patterns, not records with unnamed patterns as above + case MyRecord _, SubRecord _: + default: + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord _ -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (int _, SubRecord _) -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (int _, SubRecord (int _)) -> { } + default -> { } + } + + switch (o) { + case SubRecord _ -> { } + case MyRecord (_, _) -> { } + default -> { } + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) -> { } + default -> { } + } + + switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null -> { } + default -> { } + } + + var x1 = switch (o) { + case SubRecord _: + case MyRecord _: + default: + yield 1; + }; + + var x2 = switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord _): + default: + yield 1; + }; + + var x3 = switch (o) { + case SubRecord _: + case MyRecord (int _, SubRecord (int _)): + default: + yield 1; + }; + + var x4 = switch (o) { + case SubRecord _: + case MyRecord (_, _): + default: + yield 1; + }; + + var x5 = switch (o) { + case MyRecord (_, _), SubRecord(_): + default: + yield 1; + }; + + var x6 = switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null: + default: + yield 1; + }; + + var x7 = switch (o) { + case SubRecord _ -> 1; + case MyRecord _ -> 2; + default -> 3; + }; + + var x8 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (int _, SubRecord _) -> 2; + default -> 3; + }; + + var x9 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (int _, SubRecord (int _)) -> 2; + default -> 3; + }; + + var x10 = switch (o) { + case SubRecord _ -> 1; + case MyRecord (_, _) -> 2; + default -> 3; + }; + + var x11 = switch (o) { + case MyRecord (_, _), SubRecord(_) -> 1; + default -> 2; + }; + + var x12 = switch (o) { + case MyRecord (_, _), SubRecord(_) when ss != null -> 1; + default -> 2; + }; + + } + +} diff --git a/java/ql/test/library-tests/printAst/PrintAst.expected b/java/ql/test/library-tests/printAst/PrintAst.expected index 07b4772718f..0192c0f2272 100644 --- a/java/ql/test/library-tests/printAst/PrintAst.expected +++ b/java/ql/test/library-tests/printAst/PrintAst.expected @@ -332,3 +332,486 @@ A.java: # 130| 2: [FieldDeclaration] String field; # 131| 3: [Class] Middle # 131| 2: [FieldDeclaration] Inner inner; +AnonDecls.java: +# 0| [CompilationUnit] AnonDecls +#-----| -1: (Imports) +# 1| 1: [ImportType] import Closeable +# 2| 2: [ImportType] import List +# 3| 3: [ImportType] import BiFunction +# 5| 1: [Class] SubRecord +# 5| 2: [FieldDeclaration] int z; +# 6| 2: [Class] MyRecord +# 6| 2: [FieldDeclaration] int x; +# 6| 3: [FieldDeclaration] SubRecord y; +# 8| 3: [Class] AnonDecls +# 10| 2: [Method] test +# 10| 3: [TypeAccess] void +#-----| 4: (Parameters) +# 10| 0: [Parameter] ss +# 10| 0: [TypeAccess] List +# 10| 0: [TypeAccess] String +# 10| 1: [Parameter] o +# 10| 0: [TypeAccess] Object +# 10| 5: [BlockStmt] { ... } +# 14| 0: [LocalVariableDeclStmt] var ...; +# 14| 0: [TypeAccess] int +# 14| 1: [LocalVariableDeclExpr] +# 14| 0: [IntegerLiteral] 1 +# 15| 1: [LocalVariableDeclStmt] var ...; +# 15| 0: [TypeAccess] int +# 15| 1: [LocalVariableDeclExpr] +# 15| 0: [IntegerLiteral] 2 +# 17| 2: [TryStmt] try ... +# 17| -3: [LocalVariableDeclStmt] var ...; +# 17| 0: [TypeAccess] Closeable +# 17| 1: [LocalVariableDeclExpr] +# 17| 0: [NullLiteral] null +# 17| -1: [BlockStmt] { ... } +# 17| 0: [CatchClause] catch (...) +#-----| 0: (Single Local Variable Declaration) +# 17| 0: [TypeAccess] Exception +# 17| 1: [LocalVariableDeclExpr] +# 17| 1: [BlockStmt] { ... } +# 18| 3: [TryStmt] try ... +# 18| -3: [LocalVariableDeclStmt] var ...; +# 18| 0: [TypeAccess] Closeable +# 18| 1: [LocalVariableDeclExpr] +# 18| 0: [NullLiteral] null +# 18| -1: [BlockStmt] { ... } +# 18| 0: [CatchClause] catch (...) +#-----| 0: (Single Local Variable Declaration) +# 18| 0: [TypeAccess] Exception +# 18| 1: [LocalVariableDeclExpr] +# 18| 1: [BlockStmt] { ... } +# 20| 4: [LocalVariableDeclStmt] var ...; +# 20| 0: [TypeAccess] int +# 20| 1: [LocalVariableDeclExpr] x +# 20| 0: [IntegerLiteral] 0 +# 22| 5: [ForStmt] for (...;...;...) +#-----| 0: (For Initializers) +# 22| 0: [TypeAccess] int +# 22| 1: [LocalVariableDeclExpr] +# 22| 0: [IntegerLiteral] 1 +# 22| 1: [LTExpr] ... < ... +# 22| 0: [VarAccess] x +# 22| 1: [IntegerLiteral] 10 +# 22| 2: [BlockStmt] { ... } +# 22| 3: [PostIncExpr] ...++ +# 22| 0: [VarAccess] x +# 23| 6: [ForStmt] for (...;...;...) +#-----| 0: (For Initializers) +# 23| 0: [TypeAccess] int +# 23| 1: [LocalVariableDeclExpr] +# 23| 0: [IntegerLiteral] 2 +# 23| 1: [GTExpr] ... > ... +# 23| 0: [VarAccess] x +# 23| 1: [IntegerLiteral] 0 +# 23| 2: [BlockStmt] { ... } +# 23| 3: [PostDecExpr] ...-- +# 23| 0: [VarAccess] x +# 25| 7: [EnhancedForStmt] for (... : ...) +#-----| 0: (Single Local Variable Declaration) +# 25| 1: [LocalVariableDeclExpr] +# 25| 1: [VarAccess] ss +# 25| 2: [BlockStmt] { ... } +# 26| 8: [EnhancedForStmt] for (... : ...) +#-----| 0: (Single Local Variable Declaration) +# 26| 1: [LocalVariableDeclExpr] +# 26| 1: [VarAccess] ss +# 26| 2: [BlockStmt] { ... } +# 28| 9: [LocalVariableDeclStmt] var ...; +# 28| 0: [TypeAccess] BiFunction +# 28| 0: [TypeAccess] Integer +# 28| 1: [TypeAccess] Integer +# 28| 2: [TypeAccess] Integer +# 28| 1: [LocalVariableDeclExpr] f1 +# 28| 0: [LambdaExpr] ...->... +# 28| -4: [AnonymousClass] new BiFunction(...) { ... } +# 28| 2: [Method] apply +#-----| 4: (Parameters) +# 28| 0: [Parameter] +# 28| 1: [Parameter] +# 28| 5: [BlockStmt] { ... } +# 28| 0: [ReturnStmt] return ... +# 28| 0: [IntegerLiteral] 1 +# 28| -3: [TypeAccess] BiFunction +# 28| 0: [TypeAccess] Integer +# 28| 1: [TypeAccess] Integer +# 28| 2: [TypeAccess] Integer +# 29| 10: [LocalVariableDeclStmt] var ...; +# 29| 0: [TypeAccess] BiFunction +# 29| 0: [TypeAccess] Integer +# 29| 1: [TypeAccess] Integer +# 29| 2: [TypeAccess] Integer +# 29| 1: [LocalVariableDeclExpr] f2 +# 29| 0: [LambdaExpr] ...->... +# 29| -4: [AnonymousClass] new BiFunction(...) { ... } +# 29| 2: [Method] apply +#-----| 4: (Parameters) +# 29| 0: [Parameter] +# 29| 1: [Parameter] +# 29| 5: [BlockStmt] { ... } +# 29| 0: [ReturnStmt] return ... +# 29| 0: [IntegerLiteral] 2 +# 29| -3: [TypeAccess] BiFunction +# 29| 0: [TypeAccess] Integer +# 29| 1: [TypeAccess] Integer +# 29| 2: [TypeAccess] Integer +# 31| 11: [SwitchStmt] switch (...) +# 31| -1: [VarAccess] o +# 32| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 32| 0: [TypeAccess] SubRecord +# 32| 1: [LocalVariableDeclExpr] +# 33| 1: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 33| 0: [TypeAccess] MyRecord +# 33| 1: [LocalVariableDeclExpr] +# 34| 2: [DefaultCase] default +# 37| 12: [SwitchStmt] switch (...) +# 37| -1: [VarAccess] o +# 38| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 38| 0: [TypeAccess] SubRecord +# 38| 1: [LocalVariableDeclExpr] +# 39| 1: [PatternCase] case +# 39| 0: [RecordPatternExpr] MyRecord(...) +# 39| -2: [TypeAccess] SubRecord +# 39| -1: [TypeAccess] int +# 39| 0: [LocalVariableDeclExpr] +# 39| 1: [LocalVariableDeclExpr] +# 40| 2: [DefaultCase] default +# 43| 13: [SwitchStmt] switch (...) +# 43| -1: [VarAccess] o +# 44| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 44| 0: [TypeAccess] SubRecord +# 44| 1: [LocalVariableDeclExpr] +# 45| 1: [PatternCase] case +# 45| 0: [RecordPatternExpr] MyRecord(...) +# 45| -1: [TypeAccess] int +# 45| 0: [LocalVariableDeclExpr] +# 45| 1: [RecordPatternExpr] SubRecord(...) +# 45| -1: [TypeAccess] int +# 45| 0: [LocalVariableDeclExpr] +# 46| 2: [DefaultCase] default +# 49| 14: [SwitchStmt] switch (...) +# 49| -1: [VarAccess] o +# 50| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 50| 0: [TypeAccess] SubRecord +# 50| 1: [LocalVariableDeclExpr] +# 51| 1: [PatternCase] case +# 51| 0: [RecordPatternExpr] MyRecord(...) +# 51| 0: [LocalVariableDeclExpr] +# 51| 1: [LocalVariableDeclExpr] +# 52| 2: [DefaultCase] default +# 55| 15: [SwitchStmt] switch (...) +# 55| -1: [VarAccess] o +# 56| 0: [PatternCase] case +# 56| 0: [RecordPatternExpr] MyRecord(...) +# 56| 0: [LocalVariableDeclExpr] +# 56| 1: [LocalVariableDeclExpr] +# 56| 1: [RecordPatternExpr] SubRecord(...) +# 56| 0: [LocalVariableDeclExpr] +# 57| 1: [DefaultCase] default +# 60| 16: [SwitchStmt] switch (...) +# 60| -1: [VarAccess] o +# 61| 0: [PatternCase] case +# 61| -3: [NEExpr] ... != ... +# 61| 0: [VarAccess] ss +# 61| 1: [NullLiteral] null +# 61| 0: [RecordPatternExpr] MyRecord(...) +# 61| 0: [LocalVariableDeclExpr] +# 61| 1: [LocalVariableDeclExpr] +# 61| 1: [RecordPatternExpr] SubRecord(...) +# 61| 0: [LocalVariableDeclExpr] +# 62| 1: [DefaultCase] default +# 65| 17: [SwitchStmt] switch (...) +# 65| -1: [VarAccess] o +# 67| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 67| 0: [TypeAccess] MyRecord +# 67| 1: [LocalVariableDeclExpr] +#-----| 1: (Pattern case declaration) +# 67| 0: [TypeAccess] SubRecord +# 67| 1: [LocalVariableDeclExpr] +# 68| 1: [DefaultCase] default +# 71| 18: [SwitchStmt] switch (...) +# 71| -1: [VarAccess] o +# 72| 0: [PatternCase] case +# 72| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 72| 0: [TypeAccess] SubRecord +# 72| 1: [LocalVariableDeclExpr] +# 73| 1: [PatternCase] case +# 73| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 73| 0: [TypeAccess] MyRecord +# 73| 1: [LocalVariableDeclExpr] +# 74| 2: [DefaultCase] default +# 74| -1: [BlockStmt] { ... } +# 77| 19: [SwitchStmt] switch (...) +# 77| -1: [VarAccess] o +# 78| 0: [PatternCase] case +# 78| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 78| 0: [TypeAccess] SubRecord +# 78| 1: [LocalVariableDeclExpr] +# 79| 1: [PatternCase] case +# 79| -1: [BlockStmt] { ... } +# 79| 0: [RecordPatternExpr] MyRecord(...) +# 79| -2: [TypeAccess] SubRecord +# 79| -1: [TypeAccess] int +# 79| 0: [LocalVariableDeclExpr] +# 79| 1: [LocalVariableDeclExpr] +# 80| 2: [DefaultCase] default +# 80| -1: [BlockStmt] { ... } +# 83| 20: [SwitchStmt] switch (...) +# 83| -1: [VarAccess] o +# 84| 0: [PatternCase] case +# 84| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 84| 0: [TypeAccess] SubRecord +# 84| 1: [LocalVariableDeclExpr] +# 85| 1: [PatternCase] case +# 85| -1: [BlockStmt] { ... } +# 85| 0: [RecordPatternExpr] MyRecord(...) +# 85| -1: [TypeAccess] int +# 85| 0: [LocalVariableDeclExpr] +# 85| 1: [RecordPatternExpr] SubRecord(...) +# 85| -1: [TypeAccess] int +# 85| 0: [LocalVariableDeclExpr] +# 86| 2: [DefaultCase] default +# 86| -1: [BlockStmt] { ... } +# 89| 21: [SwitchStmt] switch (...) +# 89| -1: [VarAccess] o +# 90| 0: [PatternCase] case +# 90| -1: [BlockStmt] { ... } +#-----| 0: (Pattern case declaration) +# 90| 0: [TypeAccess] SubRecord +# 90| 1: [LocalVariableDeclExpr] +# 91| 1: [PatternCase] case +# 91| -1: [BlockStmt] { ... } +# 91| 0: [RecordPatternExpr] MyRecord(...) +# 91| 0: [LocalVariableDeclExpr] +# 91| 1: [LocalVariableDeclExpr] +# 92| 2: [DefaultCase] default +# 92| -1: [BlockStmt] { ... } +# 95| 22: [SwitchStmt] switch (...) +# 95| -1: [VarAccess] o +# 96| 0: [PatternCase] case +# 96| -1: [BlockStmt] { ... } +# 96| 0: [RecordPatternExpr] MyRecord(...) +# 96| 0: [LocalVariableDeclExpr] +# 96| 1: [LocalVariableDeclExpr] +# 96| 1: [RecordPatternExpr] SubRecord(...) +# 96| 0: [LocalVariableDeclExpr] +# 97| 1: [DefaultCase] default +# 97| -1: [BlockStmt] { ... } +# 100| 23: [SwitchStmt] switch (...) +# 100| -1: [VarAccess] o +# 101| 0: [PatternCase] case +# 101| -3: [NEExpr] ... != ... +# 101| 0: [VarAccess] ss +# 101| 1: [NullLiteral] null +# 101| -1: [BlockStmt] { ... } +# 101| 0: [RecordPatternExpr] MyRecord(...) +# 101| 0: [LocalVariableDeclExpr] +# 101| 1: [LocalVariableDeclExpr] +# 101| 1: [RecordPatternExpr] SubRecord(...) +# 101| 0: [LocalVariableDeclExpr] +# 102| 1: [DefaultCase] default +# 102| -1: [BlockStmt] { ... } +# 105| 24: [LocalVariableDeclStmt] var ...; +# 105| 1: [LocalVariableDeclExpr] x1 +# 105| 0: [SwitchExpr] switch (...) +# 105| -1: [VarAccess] o +# 106| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 106| 0: [TypeAccess] SubRecord +# 106| 1: [LocalVariableDeclExpr] +# 107| 1: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 107| 0: [TypeAccess] MyRecord +# 107| 1: [LocalVariableDeclExpr] +# 108| 2: [DefaultCase] default +# 109| 3: [YieldStmt] yield ... +# 109| 0: [IntegerLiteral] 1 +# 112| 25: [LocalVariableDeclStmt] var ...; +# 112| 1: [LocalVariableDeclExpr] x2 +# 112| 0: [SwitchExpr] switch (...) +# 112| -1: [VarAccess] o +# 113| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 113| 0: [TypeAccess] SubRecord +# 113| 1: [LocalVariableDeclExpr] +# 114| 1: [PatternCase] case +# 114| 0: [RecordPatternExpr] MyRecord(...) +# 114| -2: [TypeAccess] SubRecord +# 114| -1: [TypeAccess] int +# 114| 0: [LocalVariableDeclExpr] +# 114| 1: [LocalVariableDeclExpr] +# 115| 2: [DefaultCase] default +# 116| 3: [YieldStmt] yield ... +# 116| 0: [IntegerLiteral] 1 +# 119| 26: [LocalVariableDeclStmt] var ...; +# 119| 1: [LocalVariableDeclExpr] x3 +# 119| 0: [SwitchExpr] switch (...) +# 119| -1: [VarAccess] o +# 120| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 120| 0: [TypeAccess] SubRecord +# 120| 1: [LocalVariableDeclExpr] +# 121| 1: [PatternCase] case +# 121| 0: [RecordPatternExpr] MyRecord(...) +# 121| -1: [TypeAccess] int +# 121| 0: [LocalVariableDeclExpr] +# 121| 1: [RecordPatternExpr] SubRecord(...) +# 121| -1: [TypeAccess] int +# 121| 0: [LocalVariableDeclExpr] +# 122| 2: [DefaultCase] default +# 123| 3: [YieldStmt] yield ... +# 123| 0: [IntegerLiteral] 1 +# 126| 27: [LocalVariableDeclStmt] var ...; +# 126| 1: [LocalVariableDeclExpr] x4 +# 126| 0: [SwitchExpr] switch (...) +# 126| -1: [VarAccess] o +# 127| 0: [PatternCase] case +#-----| 0: (Pattern case declaration) +# 127| 0: [TypeAccess] SubRecord +# 127| 1: [LocalVariableDeclExpr] +# 128| 1: [PatternCase] case +# 128| 0: [RecordPatternExpr] MyRecord(...) +# 128| 0: [LocalVariableDeclExpr] +# 128| 1: [LocalVariableDeclExpr] +# 129| 2: [DefaultCase] default +# 130| 3: [YieldStmt] yield ... +# 130| 0: [IntegerLiteral] 1 +# 133| 28: [LocalVariableDeclStmt] var ...; +# 133| 1: [LocalVariableDeclExpr] x5 +# 133| 0: [SwitchExpr] switch (...) +# 133| -1: [VarAccess] o +# 134| 0: [PatternCase] case +# 134| 0: [RecordPatternExpr] MyRecord(...) +# 134| 0: [LocalVariableDeclExpr] +# 134| 1: [LocalVariableDeclExpr] +# 134| 1: [RecordPatternExpr] SubRecord(...) +# 134| 0: [LocalVariableDeclExpr] +# 135| 1: [DefaultCase] default +# 136| 2: [YieldStmt] yield ... +# 136| 0: [IntegerLiteral] 1 +# 139| 29: [LocalVariableDeclStmt] var ...; +# 139| 1: [LocalVariableDeclExpr] x6 +# 139| 0: [SwitchExpr] switch (...) +# 139| -1: [VarAccess] o +# 140| 0: [PatternCase] case +# 140| -3: [NEExpr] ... != ... +# 140| 0: [VarAccess] ss +# 140| 1: [NullLiteral] null +# 140| 0: [RecordPatternExpr] MyRecord(...) +# 140| 0: [LocalVariableDeclExpr] +# 140| 1: [LocalVariableDeclExpr] +# 140| 1: [RecordPatternExpr] SubRecord(...) +# 140| 0: [LocalVariableDeclExpr] +# 141| 1: [DefaultCase] default +# 142| 2: [YieldStmt] yield ... +# 142| 0: [IntegerLiteral] 1 +# 145| 30: [LocalVariableDeclStmt] var ...; +# 145| 1: [LocalVariableDeclExpr] x7 +# 145| 0: [SwitchExpr] switch (...) +# 145| -1: [VarAccess] o +# 146| 0: [PatternCase] case +# 146| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 146| 0: [TypeAccess] SubRecord +# 146| 1: [LocalVariableDeclExpr] +# 147| 1: [PatternCase] case +# 147| -1: [IntegerLiteral] 2 +#-----| 0: (Pattern case declaration) +# 147| 0: [TypeAccess] MyRecord +# 147| 1: [LocalVariableDeclExpr] +# 148| 2: [DefaultCase] default +# 148| -1: [IntegerLiteral] 3 +# 151| 31: [LocalVariableDeclStmt] var ...; +# 151| 1: [LocalVariableDeclExpr] x8 +# 151| 0: [SwitchExpr] switch (...) +# 151| -1: [VarAccess] o +# 152| 0: [PatternCase] case +# 152| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 152| 0: [TypeAccess] SubRecord +# 152| 1: [LocalVariableDeclExpr] +# 153| 1: [PatternCase] case +# 153| -1: [IntegerLiteral] 2 +# 153| 0: [RecordPatternExpr] MyRecord(...) +# 153| -2: [TypeAccess] SubRecord +# 153| -1: [TypeAccess] int +# 153| 0: [LocalVariableDeclExpr] +# 153| 1: [LocalVariableDeclExpr] +# 154| 2: [DefaultCase] default +# 154| -1: [IntegerLiteral] 3 +# 157| 32: [LocalVariableDeclStmt] var ...; +# 157| 1: [LocalVariableDeclExpr] x9 +# 157| 0: [SwitchExpr] switch (...) +# 157| -1: [VarAccess] o +# 158| 0: [PatternCase] case +# 158| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 158| 0: [TypeAccess] SubRecord +# 158| 1: [LocalVariableDeclExpr] +# 159| 1: [PatternCase] case +# 159| -1: [IntegerLiteral] 2 +# 159| 0: [RecordPatternExpr] MyRecord(...) +# 159| -1: [TypeAccess] int +# 159| 0: [LocalVariableDeclExpr] +# 159| 1: [RecordPatternExpr] SubRecord(...) +# 159| -1: [TypeAccess] int +# 159| 0: [LocalVariableDeclExpr] +# 160| 2: [DefaultCase] default +# 160| -1: [IntegerLiteral] 3 +# 163| 33: [LocalVariableDeclStmt] var ...; +# 163| 1: [LocalVariableDeclExpr] x10 +# 163| 0: [SwitchExpr] switch (...) +# 163| -1: [VarAccess] o +# 164| 0: [PatternCase] case +# 164| -1: [IntegerLiteral] 1 +#-----| 0: (Pattern case declaration) +# 164| 0: [TypeAccess] SubRecord +# 164| 1: [LocalVariableDeclExpr] +# 165| 1: [PatternCase] case +# 165| -1: [IntegerLiteral] 2 +# 165| 0: [RecordPatternExpr] MyRecord(...) +# 165| 0: [LocalVariableDeclExpr] +# 165| 1: [LocalVariableDeclExpr] +# 166| 2: [DefaultCase] default +# 166| -1: [IntegerLiteral] 3 +# 169| 34: [LocalVariableDeclStmt] var ...; +# 169| 1: [LocalVariableDeclExpr] x11 +# 169| 0: [SwitchExpr] switch (...) +# 169| -1: [VarAccess] o +# 170| 0: [PatternCase] case +# 170| -1: [IntegerLiteral] 1 +# 170| 0: [RecordPatternExpr] MyRecord(...) +# 170| 0: [LocalVariableDeclExpr] +# 170| 1: [LocalVariableDeclExpr] +# 170| 1: [RecordPatternExpr] SubRecord(...) +# 170| 0: [LocalVariableDeclExpr] +# 171| 1: [DefaultCase] default +# 171| -1: [IntegerLiteral] 2 +# 174| 35: [LocalVariableDeclStmt] var ...; +# 174| 1: [LocalVariableDeclExpr] x12 +# 174| 0: [SwitchExpr] switch (...) +# 174| -1: [VarAccess] o +# 175| 0: [PatternCase] case +# 175| -3: [NEExpr] ... != ... +# 175| 0: [VarAccess] ss +# 175| 1: [NullLiteral] null +# 175| -1: [IntegerLiteral] 1 +# 175| 0: [RecordPatternExpr] MyRecord(...) +# 175| 0: [LocalVariableDeclExpr] +# 175| 1: [LocalVariableDeclExpr] +# 175| 1: [RecordPatternExpr] SubRecord(...) +# 175| 0: [LocalVariableDeclExpr] +# 176| 1: [DefaultCase] default +# 176| -1: [IntegerLiteral] 2 diff --git a/java/ql/test/library-tests/printAst/options b/java/ql/test/library-tests/printAst/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/printAst/options +++ b/java/ql/test/library-tests/printAst/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 From 1e0766dffa2b7bf98316ff3d2a37f9e3193c5cbb Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 21:18:13 +0000 Subject: [PATCH 310/497] Add tests for case statement type test dominance against anonymous labels and fall-through --- .../Test.java | 17 +++++++++++++++++ .../switch-default-impossible-dispatch/options | 2 +- .../test.expected | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java index cf6e67e5847..f5409874580 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java @@ -58,6 +58,23 @@ public class Test { case null: default: i.take(source()); // Can't call C1.take (but we don't currently notice) } + switch(i) { + case C1 _, C2 _: + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take (but we don't currently notice, because a multi-pattern case isn't understood as a type test) + } + + switch(i) { + case C1 _: + case C2 _: + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take + } + } } diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/options b/java/ql/test/library-tests/switch-default-impossible-dispatch/options index a0d1b7e7002..5011824a5d7 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/options +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args --release 21 +//semmle-extractor-options: --javac-args --release 22 diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected index 17d478d4298..a0fa05abe6e 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected @@ -30,3 +30,17 @@ | Test.java:58:34:58:41 | source(...) | Test.java:8:65:8:65 | x | | Test.java:58:34:58:41 | source(...) | Test.java:9:74:9:74 | x | | Test.java:58:34:58:41 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:63:16:63:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:66:16:66:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:72:16:72:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:72:16:72:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:72:16:72:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:72:16:72:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:75:16:75:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:75:16:75:23 | source(...) | Test.java:10:82:10:82 | x | From c48e64e536d0c849cda407428eeb70ea0066046a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 21:21:41 +0000 Subject: [PATCH 311/497] Add tests for the combination of anonymous labels and a guard --- .../Test.java | 8 ++++++++ .../test.expected | 20 +++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java index f5409874580..9e0a0443131 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java @@ -66,6 +66,14 @@ public class Test { i.take(source()); // Can't call C1.take or C2.take (but we don't currently notice, because a multi-pattern case isn't understood as a type test) } + switch(i) { + case C1 _, C2 _ when i.toString().equals("abc"): + i.take(source()); // Must be either C1.take or C2.take (but we don't currently notice, because neither dominates) + break; + default: + i.take(source()); // Can't call C1.take or C2.take (but we don't currently notice, because a multi-pattern case isn't understood as a type test) + } + switch(i) { case C1 _: case C2 _: diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected index a0fa05abe6e..14329ea1089 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected @@ -38,9 +38,17 @@ | Test.java:66:16:66:23 | source(...) | Test.java:8:65:8:65 | x | | Test.java:66:16:66:23 | source(...) | Test.java:9:74:9:74 | x | | Test.java:66:16:66:23 | source(...) | Test.java:10:82:10:82 | x | -| Test.java:72:16:72:23 | source(...) | Test.java:7:65:7:65 | x | -| Test.java:72:16:72:23 | source(...) | Test.java:8:65:8:65 | x | -| Test.java:72:16:72:23 | source(...) | Test.java:9:74:9:74 | x | -| Test.java:72:16:72:23 | source(...) | Test.java:10:82:10:82 | x | -| Test.java:75:16:75:23 | source(...) | Test.java:9:74:9:74 | x | -| Test.java:75:16:75:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:71:16:71:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:74:16:74:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:7:65:7:65 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:8:65:8:65 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:80:16:80:23 | source(...) | Test.java:10:82:10:82 | x | +| Test.java:83:16:83:23 | source(...) | Test.java:9:74:9:74 | x | +| Test.java:83:16:83:23 | source(...) | Test.java:10:82:10:82 | x | From 9fa2f1999001dcda7bf2c8d0fe0d0864d8a5a30c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 22 Mar 2024 21:48:12 +0000 Subject: [PATCH 312/497] Add test for guards in the presence of fall-through between pattern and constant cases --- .../library-tests/guards12/PrintAst.expected | 20 ++++++++++++++++++ java/ql/test/library-tests/guards12/Test.java | 9 ++++++++ .../library-tests/guards12/guard.expected | 21 +++++++++++++++---- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/java/ql/test/library-tests/guards12/PrintAst.expected b/java/ql/test/library-tests/guards12/PrintAst.expected index 55225509608..8920252fb29 100644 --- a/java/ql/test/library-tests/guards12/PrintAst.expected +++ b/java/ql/test/library-tests/guards12/PrintAst.expected @@ -82,3 +82,23 @@ Test.java: # 24| 0: [StringLiteral] "g" # 25| 3: [DefaultCase] default # 25| -1: [BlockStmt] { ... } +# 27| 5: [SwitchStmt] switch (...) +# 27| -1: [VarAccess] s +# 28| 0: [ConstCase] case ... +# 28| 0: [StringLiteral] "h" +# 29| 1: [PatternCase] case +# 29| -3: [EQExpr] ... == ... +# 29| 0: [VarAccess] len +# 29| 1: [IntegerLiteral] 4 +#-----| 0: (Pattern case declaration) +# 29| 0: [TypeAccess] String +# 29| 1: [LocalVariableDeclExpr] +# 30| 2: [ConstCase] case ... +# 30| 0: [StringLiteral] "i" +# 31| 3: [LocalVariableDeclStmt] var ...; +# 31| 0: [TypeAccess] String +# 31| 1: [LocalVariableDeclExpr] target +# 31| 0: [StringLiteral] "Shouldn't be controlled by any of those tests" +# 32| 4: [BreakStmt] break +# 33| 5: [DefaultCase] default +# 34| 6: [BreakStmt] break diff --git a/java/ql/test/library-tests/guards12/Test.java b/java/ql/test/library-tests/guards12/Test.java index 4dc09a31952..2c777467d4a 100644 --- a/java/ql/test/library-tests/guards12/Test.java +++ b/java/ql/test/library-tests/guards12/Test.java @@ -24,5 +24,14 @@ class Test { case "g" -> { } default -> { } } + switch (s) { + case "h": + case String _ when len == 4: + case "i": + String target = "Shouldn't be controlled by any of those tests"; + break; + default: + break; + } } } diff --git a/java/ql/test/library-tests/guards12/guard.expected b/java/ql/test/library-tests/guards12/guard.expected index 0efa2b54423..0980e891d84 100644 --- a/java/ql/test/library-tests/guards12/guard.expected +++ b/java/ql/test/library-tests/guards12/guard.expected @@ -1,8 +1,8 @@ hasBranchEdge -| Test.java:4:7:4:22 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:4:7:4:22 | case ... | true | -| Test.java:5:7:5:17 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:5:7:5:17 | case ... | true | -| Test.java:6:7:6:17 | case ... | Test.java:2:39:27:3 | { ... } | Test.java:6:7:6:17 | case ... | true | -| Test.java:7:7:7:16 | default | Test.java:2:39:27:3 | { ... } | Test.java:7:7:7:16 | default | true | +| Test.java:4:7:4:22 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:4:7:4:22 | case ... | true | +| Test.java:5:7:5:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:5:7:5:17 | case ... | true | +| Test.java:6:7:6:17 | case ... | Test.java:2:39:36:3 | { ... } | Test.java:6:7:6:17 | case ... | true | +| Test.java:7:7:7:16 | default | Test.java:2:39:36:3 | { ... } | Test.java:7:7:7:16 | default | true | | Test.java:10:7:10:22 | case ... | Test.java:3:9:3:21 | x | Test.java:10:7:10:22 | case ... | true | | Test.java:11:7:11:17 | case ... | Test.java:3:9:3:21 | x | Test.java:11:7:11:17 | case ... | true | | Test.java:12:7:12:17 | case ... | Test.java:3:9:3:21 | x | Test.java:12:7:12:17 | case ... | true | @@ -31,6 +31,16 @@ hasBranchEdge | Test.java:24:7:24:17 | case ... | Test.java:23:19:23:20 | s2 | Test.java:24:7:24:17 | case ... | true | | Test.java:25:7:25:16 | default | Test.java:23:7:23:37 | case | Test.java:25:7:25:16 | default | true | | Test.java:25:7:25:16 | default | Test.java:23:19:23:20 | s2 | Test.java:25:7:25:16 | default | true | +| Test.java:28:7:28:15 | case ... | Test.java:27:5:27:14 | switch (...) | Test.java:28:7:28:15 | case ... | true | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:29:19:29:19 | | true | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:30:7:30:15 | case ... | false | +| Test.java:29:7:29:34 | case | Test.java:29:7:29:34 | case | Test.java:33:7:33:14 | default | false | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:30:7:30:15 | case ... | false | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:30:7:30:15 | case ... | true | +| Test.java:29:26:29:33 | ... == ... | Test.java:29:19:29:19 | | Test.java:33:7:33:14 | default | false | +| Test.java:30:7:30:15 | case ... | Test.java:29:7:29:34 | case | Test.java:30:7:30:15 | case ... | true | +| Test.java:33:7:33:14 | default | Test.java:29:7:29:34 | case | Test.java:33:7:33:14 | default | true | +| Test.java:33:7:33:14 | default | Test.java:29:19:29:19 | | Test.java:33:7:33:14 | default | true | #select | Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | false | Test.java:7:7:7:16 | default | | Test.java:5:7:5:17 | case ... | Test.java:3:20:3:20 | s | Test.java:5:12:5:14 | "c" | true | true | Test.java:5:7:5:17 | case ... | @@ -48,3 +58,6 @@ hasBranchEdge | Test.java:23:27:23:34 | ... == ... | Test.java:23:27:23:29 | len | Test.java:23:34:23:34 | 4 | true | true | Test.java:23:39:23:41 | { ... } | | Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | false | Test.java:25:7:25:16 | default | | Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | true | Test.java:24:7:24:17 | case ... | +| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:33:7:33:14 | default | +| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | true | Test.java:28:7:28:15 | case ... | +| Test.java:30:7:30:15 | case ... | Test.java:27:13:27:13 | s | Test.java:30:12:30:14 | "i" | true | false | Test.java:33:7:33:14 | default | From 5e0961b3487956b3feaee11f0934f0306474d74c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sat, 23 Mar 2024 09:53:32 +0000 Subject: [PATCH 313/497] Account for new possible child index gap --- java/ql/consistency-queries/children.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/consistency-queries/children.ql b/java/ql/consistency-queries/children.ql index 755c680e790..667ae8de877 100644 --- a/java/ql/consistency-queries/children.ql +++ b/java/ql/consistency-queries/children.ql @@ -49,6 +49,8 @@ predicate gapInChildren(Element e, int i) { not e instanceof Annotation and // Pattern case statements legitimately have a TypeAccess (-2) and a pattern (0) but not a rule (-1) not (i = -1 and e instanceof PatternCase and not e.(PatternCase).isRule()) and + // Pattern case statements can have a gap at -3 when they have more than one pattern but no guard. + not (i = -3 and count(e.(PatternCase).getAPattern()) > 1 and not exists(e.(PatternCase).getGuard())) and // Instanceof with a record pattern is not expected to have a type access in position 1 not (i = 1 and e.(InstanceOfExpr).getPattern() instanceof RecordPatternExpr) and // RecordPatternExpr extracts type-accesses only for its LocalVariableDeclExpr children From 3d9bc6fc8917ee8fa1143bfab4ab3008560f341d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sun, 24 Mar 2024 17:37:11 +0000 Subject: [PATCH 314/497] Note pattern-cases may be missing some type-accesses --- java/ql/consistency-queries/children.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/consistency-queries/children.ql b/java/ql/consistency-queries/children.ql index 667ae8de877..2f3f1ba60ec 100644 --- a/java/ql/consistency-queries/children.ql +++ b/java/ql/consistency-queries/children.ql @@ -51,6 +51,8 @@ predicate gapInChildren(Element e, int i) { not (i = -1 and e instanceof PatternCase and not e.(PatternCase).isRule()) and // Pattern case statements can have a gap at -3 when they have more than one pattern but no guard. not (i = -3 and count(e.(PatternCase).getAPattern()) > 1 and not exists(e.(PatternCase).getGuard())) and + // Pattern case statements may have some missing type accesses, depending on the nature of the direct child + not ((i = -2 or i < -4) and e instanceof PatternCase) and // Instanceof with a record pattern is not expected to have a type access in position 1 not (i = 1 and e.(InstanceOfExpr).getPattern() instanceof RecordPatternExpr) and // RecordPatternExpr extracts type-accesses only for its LocalVariableDeclExpr children From f347784ec2bb25bf76af58a7f2aa14fcba2df56f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Sun, 24 Mar 2024 17:38:03 +0000 Subject: [PATCH 315/497] autoformat --- java/ql/consistency-queries/children.ql | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/java/ql/consistency-queries/children.ql b/java/ql/consistency-queries/children.ql index 2f3f1ba60ec..a79edc909af 100644 --- a/java/ql/consistency-queries/children.ql +++ b/java/ql/consistency-queries/children.ql @@ -50,9 +50,14 @@ predicate gapInChildren(Element e, int i) { // Pattern case statements legitimately have a TypeAccess (-2) and a pattern (0) but not a rule (-1) not (i = -1 and e instanceof PatternCase and not e.(PatternCase).isRule()) and // Pattern case statements can have a gap at -3 when they have more than one pattern but no guard. - not (i = -3 and count(e.(PatternCase).getAPattern()) > 1 and not exists(e.(PatternCase).getGuard())) and + not ( + i = -3 and count(e.(PatternCase).getAPattern()) > 1 and not exists(e.(PatternCase).getGuard()) + ) and // Pattern case statements may have some missing type accesses, depending on the nature of the direct child - not ((i = -2 or i < -4) and e instanceof PatternCase) and + not ( + (i = -2 or i < -4) and + e instanceof PatternCase + ) and // Instanceof with a record pattern is not expected to have a type access in position 1 not (i = 1 and e.(InstanceOfExpr).getPattern() instanceof RecordPatternExpr) and // RecordPatternExpr extracts type-accesses only for its LocalVariableDeclExpr children From a4401963f5f179ef358ed350025bab4b0907513b Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Mar 2024 16:13:35 +0000 Subject: [PATCH 316/497] Use getAPattern --- java/ql/lib/semmle/code/java/Statement.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 72344a3401c..1b138e68fc6 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -559,9 +559,7 @@ class PatternCase extends SwitchCase { /** * Gets this case's sole pattern, if there is exactly one. */ - PatternExpr getUniquePattern() { - result = unique(PatternExpr pe | pe = this.getPatternAtIndex(_)) - } + PatternExpr getUniquePattern() { result = unique(PatternExpr pe | pe = this.getAPattern()) } /** Gets the guard applicable to this pattern case, if any. */ Expr getGuard() { result.isNthChildOf(this, -3) } From 17193ac11b36d584cb7770f549e4a42bf6169bed Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Mar 2024 16:20:36 +0000 Subject: [PATCH 317/497] Distinguish record patterns that do or don't declare identifiers --- java/ql/lib/semmle/code/java/Expr.qll | 10 ++++++++++ .../code/java/dataflow/internal/DataFlowUtil.qll | 15 +++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index b9b535eb57c..e0208b4df9e 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2739,4 +2739,14 @@ class RecordPatternExpr extends Expr, @recordpatternexpr { ) ) } + + /** + * Holds if this record pattern declares any identifiers (i.e., at least one leaf declaration is named). + */ + predicate declaresAnyIdentifiers() { + exists(PatternExpr subPattern | subPattern = this.getSubPattern(_) | + subPattern.asRecordPattern().declaresAnyIdentifiers() or + not subPattern.asBindingOrUnnamedPattern().isAnonymous() + ) + } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 95faf4fbabc..c40520c3500 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -194,14 +194,17 @@ predicate simpleAstFlowStep(Expr e1, Expr e2) { // In the following three cases only record patterns need this flow edge, leading from the bound instanceof // or switch tested expression to a record pattern that will read its fields. Simple binding patterns are // handled via VariableAssign.getSource instead. - // We only consider unique patterns because cases that declare multiple patterns are not allowed to declare - // any identifiers, so can't participate in dataflow. - exists(SwitchExpr se | - e1 = se.getExpr() and e2 = se.getACase().(PatternCase).getUniquePattern().asRecordPattern() + // We only consider patterns that declare any identifiers + exists(SwitchExpr se, RecordPatternExpr recordPattern | recordPattern = e2 | + e1 = se.getExpr() and + recordPattern = se.getACase().(PatternCase).getAPattern() and + recordPattern.declaresAnyIdentifiers() ) or - exists(SwitchStmt ss | - e1 = ss.getExpr() and e2 = ss.getACase().(PatternCase).getUniquePattern().asRecordPattern() + exists(SwitchStmt ss, RecordPatternExpr recordPattern | recordPattern = e2 | + e1 = ss.getExpr() and + recordPattern = ss.getACase().(PatternCase).getAPattern() and + recordPattern.declaresAnyIdentifiers() ) or exists(InstanceOfExpr ioe | e1 = ioe.getExpr() and e2 = ioe.getPattern().asRecordPattern()) From 568bddc4a948fa0dabd72416e5051fb3a4494209 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Mar 2024 16:31:12 +0000 Subject: [PATCH 318/497] Add test cases for cases falling directly out of switch blocks --- .../pattern-switch/cfg/Exhaustive.java | 6 ++ .../pattern-switch/cfg/Test.java | 6 ++ .../pattern-switch/cfg/test.expected | 65 +++++++++++-------- 3 files changed, 51 insertions(+), 26 deletions(-) diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java b/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java index c438b8253a2..d344ceda022 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java @@ -26,6 +26,12 @@ public class Exhaustive { case Y y -> { } } + // Test the case where a pattern case falls directly out of a block: + switch (i) { + case X _: + case Y _: + } + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/Test.java b/java/ql/test/library-tests/pattern-switch/cfg/Test.java index 17082458f3e..fb6b314999b 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/Test.java +++ b/java/ql/test/library-tests/pattern-switch/cfg/Test.java @@ -125,6 +125,12 @@ public class Test { break; } + // Test the case where a case falls out of a switch block without a break: + switch(thing) { + case String _: + default: + } + } } diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.expected b/java/ql/test/library-tests/pattern-switch/cfg/test.expected index a7675429bd6..a63aa788668 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.expected +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.expected @@ -16,7 +16,7 @@ | Exhaustive.java:5:15:5:15 | { ... } | Exhaustive.java:5:15:5:15 | super(...) | | Exhaustive.java:6:15:6:15 | super(...) | Exhaustive.java:6:15:6:15 | Y | | Exhaustive.java:6:15:6:15 | { ... } | Exhaustive.java:6:15:6:15 | super(...) | -| Exhaustive.java:8:47:29:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) | +| Exhaustive.java:8:47:35:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) | | Exhaustive.java:11:5:11:14 | switch (...) | Exhaustive.java:11:13:11:13 | o | | Exhaustive.java:11:13:11:13 | o | Exhaustive.java:12:7:12:22 | case | | Exhaustive.java:12:7:12:22 | case | Exhaustive.java:12:19:12:19 | s | @@ -42,13 +42,20 @@ | Exhaustive.java:25:7:25:17 | case | Exhaustive.java:25:14:25:14 | x | | Exhaustive.java:25:7:25:17 | case | Exhaustive.java:26:7:26:17 | case | | Exhaustive.java:25:14:25:14 | x | Exhaustive.java:25:19:25:21 | { ... } | -| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) | | Exhaustive.java:26:7:26:17 | case | Exhaustive.java:26:14:26:14 | y | | Exhaustive.java:26:14:26:14 | y | Exhaustive.java:26:19:26:21 | { ... } | -| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) | +| Exhaustive.java:30:5:30:14 | switch (...) | Exhaustive.java:30:13:30:13 | i | +| Exhaustive.java:30:13:30:13 | i | Exhaustive.java:31:7:31:15 | case | +| Exhaustive.java:31:7:31:15 | case | Exhaustive.java:31:14:31:14 | | +| Exhaustive.java:31:7:31:15 | case | Exhaustive.java:32:7:32:15 | case | +| Exhaustive.java:31:14:31:14 | | Exhaustive.java:8:22:8:25 | test | +| Exhaustive.java:32:7:32:15 | case | Exhaustive.java:32:14:32:14 | | +| Exhaustive.java:32:14:32:14 | | Exhaustive.java:8:22:8:25 | test | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:41:128:3 | { ... } | Test.java:5:6:5:19 | switch (...) | +| Test.java:3:41:134:3 | { ... } | Test.java:5:6:5:19 | switch (...) | | Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing | | Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case | | Test.java:6:8:6:23 | case | Test.java:6:20:6:20 | s | @@ -365,26 +372,32 @@ | Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... | | Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... | | Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break | -| Test.java:123:10:123:15 | break | Test.java:3:22:3:25 | test | +| Test.java:123:10:123:15 | break | Test.java:129:6:129:18 | switch (...) | | Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break | -| Test.java:125:10:125:15 | break | Test.java:3:22:3:25 | test | -| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | ; | -| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | A | -| Test.java:132:8:132:8 | ; | Test.java:132:8:132:8 | this | -| Test.java:132:8:132:8 | ; | Test.java:132:8:132:8 | this | -| Test.java:132:8:132:8 | b | Test.java:132:8:132:8 | ...=... | -| Test.java:132:8:132:8 | field3 | Test.java:132:8:132:8 | ...=... | -| Test.java:132:8:132:8 | super(...) | Test.java:132:8:132:8 | ; | -| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | b | -| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | field3 | -| Test.java:132:8:132:8 | { ... } | Test.java:132:8:132:8 | super(...) | -| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | ; | -| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | B | -| Test.java:133:8:133:8 | ; | Test.java:133:8:133:8 | this | -| Test.java:133:8:133:8 | ; | Test.java:133:8:133:8 | this | -| Test.java:133:8:133:8 | field1 | Test.java:133:8:133:8 | ...=... | -| Test.java:133:8:133:8 | field2 | Test.java:133:8:133:8 | ...=... | -| Test.java:133:8:133:8 | super(...) | Test.java:133:8:133:8 | ; | -| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field1 | -| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field2 | -| Test.java:133:8:133:8 | { ... } | Test.java:133:8:133:8 | super(...) | +| Test.java:125:10:125:15 | break | Test.java:129:6:129:18 | switch (...) | +| Test.java:129:6:129:18 | switch (...) | Test.java:129:13:129:17 | thing | +| Test.java:129:13:129:17 | thing | Test.java:130:8:130:21 | case | +| Test.java:130:8:130:21 | case | Test.java:130:20:130:20 | | +| Test.java:130:8:130:21 | case | Test.java:131:8:131:15 | default | +| Test.java:130:20:130:20 | | Test.java:131:8:131:15 | default | +| Test.java:131:8:131:15 | default | Test.java:3:22:3:25 | test | +| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | ; | +| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | A | +| Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | +| Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | +| Test.java:138:8:138:8 | b | Test.java:138:8:138:8 | ...=... | +| Test.java:138:8:138:8 | field3 | Test.java:138:8:138:8 | ...=... | +| Test.java:138:8:138:8 | super(...) | Test.java:138:8:138:8 | ; | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | b | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | field3 | +| Test.java:138:8:138:8 | { ... } | Test.java:138:8:138:8 | super(...) | +| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | ; | +| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | B | +| Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | +| Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | +| Test.java:139:8:139:8 | field1 | Test.java:139:8:139:8 | ...=... | +| Test.java:139:8:139:8 | field2 | Test.java:139:8:139:8 | ...=... | +| Test.java:139:8:139:8 | super(...) | Test.java:139:8:139:8 | ; | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field1 | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field2 | +| Test.java:139:8:139:8 | { ... } | Test.java:139:8:139:8 | super(...) | From dcebcc35b695ae052e4fc724534422f4e6169e61 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Mar 2024 16:36:38 +0000 Subject: [PATCH 319/497] Rename getPatternAtIndex --- .../lib/semmle/code/java/PrettyPrintAst.qll | 20 +++++++++---------- java/ql/lib/semmle/code/java/PrintAst.qll | 2 +- java/ql/lib/semmle/code/java/Statement.qll | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index 36f5ce1ed89..de1bf3100a3 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -784,18 +784,18 @@ private class PpSwitchCase extends PpAst, SwitchCase { private class PpPatternCase extends PpAst, PatternCase { private predicate isAnonymousPattern(int n) { - this.getPatternAtIndex(n).asBindingOrUnnamedPattern().isAnonymous() + this.getPattern(n).asBindingOrUnnamedPattern().isAnonymous() } override string getPart(int i) { - exists(int n, int base | exists(this.getPatternAtIndex(n)) and base = n * 4 | + exists(int n, int base | exists(this.getPattern(n)) and base = n * 4 | i = base and (if n = 0 then result = "case " else result = ", ") or i = base + 2 and - this.getPatternAtIndex(n) instanceof LocalVariableDeclExpr and + this.getPattern(n) instanceof LocalVariableDeclExpr and ( - exists(this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess()) + exists(this.getPattern(n).asBindingOrUnnamedPattern().getTypeAccess()) or not this.isAnonymousPattern(n) ) and @@ -805,11 +805,11 @@ private class PpPatternCase extends PpAst, PatternCase { ( if this.isAnonymousPattern(n) then result = "_" - else result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getName() + else result = this.getPattern(n).asBindingOrUnnamedPattern().getName() ) ) or - exists(int base | base = (max(int n | exists(this.getPatternAtIndex(n))) + 1) * 4 | + exists(int base | base = (max(int n | exists(this.getPattern(n))) + 1) * 4 | i = base and result = ":" and not this.isRule() or i = base and result = " -> " and this.isRule() @@ -819,14 +819,14 @@ private class PpPatternCase extends PpAst, PatternCase { } override PpAst getChild(int i) { - exists(int n, int base | exists(this.getPatternAtIndex(n)) and base = n * 4 | + exists(int n, int base | exists(this.getPattern(n)) and base = n * 4 | i = base + 1 and - result = this.getPatternAtIndex(n).asBindingOrUnnamedPattern().getTypeAccess() + result = this.getPattern(n).asBindingOrUnnamedPattern().getTypeAccess() or - i = base + 1 and result = this.getPatternAtIndex(n).asRecordPattern() + i = base + 1 and result = this.getPattern(n).asRecordPattern() ) or - exists(int base | base = (max(int n | exists(this.getPatternAtIndex(n))) + 1) * 4 | + exists(int base | base = (max(int n | exists(this.getPattern(n))) + 1) * 4 | i = base + 1 and result = this.getRuleExpression() or i = base + 1 and result = this.getRuleStatement() diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 9444a4a66bf..0af012234bb 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -432,7 +432,7 @@ final class PatternCaseNode extends ExprStmtNode { not result.(ElementNode).getElement() instanceof LocalVariableDeclExpr and not result.(ElementNode).getElement() instanceof TypeAccess or - result = TLocalVarDeclNode(pc.getPatternAtIndex(childIndex)) + result = TLocalVarDeclNode(pc.getPattern(childIndex)) } } diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 1b138e68fc6..f4eafd39e9f 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -542,19 +542,19 @@ class PatternCase extends SwitchCase { PatternCase() { exists(PatternExpr pe | pe.isNthChildOf(this, _)) } /** - * DEPRECATED: alias for getPatternAtIndex(0) + * DEPRECATED: alias for getPattern(0) */ - deprecated PatternExpr getPattern() { result = this.getPatternAtIndex(0) } + deprecated PatternExpr getPattern() { result = this.getPattern(0) } /** * Gets this case's `n`th pattern. */ - PatternExpr getPatternAtIndex(int n) { result.isNthChildOf(this, n) } + PatternExpr getPattern(int n) { result.isNthChildOf(this, n) } /** * Gets any of this case's patterns. */ - PatternExpr getAPattern() { result = this.getPatternAtIndex(_) } + PatternExpr getAPattern() { result = this.getPattern(_) } /** * Gets this case's sole pattern, if there is exactly one. From 71ab804274febd5091b888a58d3014e2e7186771 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Mar 2024 16:58:08 +0000 Subject: [PATCH 320/497] Release preparation for version 2.16.6 --- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/0.12.9.md | 3 +++ 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/0.9.8.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../campaigns/Solorigate/lib/change-notes/released/1.7.12.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 ++++ .../campaigns/Solorigate/src/change-notes/released/1.7.12.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/0.8.12.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/0.8.12.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/0.0.11.md | 3 +++ go/ql/consistency-queries/codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 4 ++++ go/ql/lib/change-notes/released/0.7.12.md | 3 +++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/0.7.12.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ java/ql/automodel/src/change-notes/released/0.0.19.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/0.8.12.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/0.8.12.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 ++++ javascript/ql/lib/change-notes/released/0.8.12.md | 3 +++ 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/0.8.12.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/0.7.12.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/0.11.12.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.12.md | 3 +++ 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/0.8.12.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/0.8.12.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ shared/controlflow/change-notes/released/0.1.12.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ shared/dataflow/change-notes/released/0.2.3.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.12.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/0.0.11.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.12.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.12.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/0.0.11.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/0.2.12.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/0.2.12.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.12.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.12.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.12.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 ++++ swift/ql/lib/change-notes/released/0.3.12.md | 3 +++ 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/0.3.12.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 132 files changed, 297 insertions(+), 66 deletions(-) create mode 100644 cpp/ql/lib/change-notes/released/0.12.9.md create mode 100644 cpp/ql/src/change-notes/released/0.9.8.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.12.md create mode 100644 csharp/ql/src/change-notes/released/0.8.12.md create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.11.md create mode 100644 go/ql/lib/change-notes/released/0.7.12.md create mode 100644 go/ql/src/change-notes/released/0.7.12.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.19.md create mode 100644 java/ql/lib/change-notes/released/0.8.12.md create mode 100644 java/ql/src/change-notes/released/0.8.12.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.12.md create mode 100644 javascript/ql/src/change-notes/released/0.8.12.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.12.md create mode 100644 python/ql/lib/change-notes/released/0.11.12.md create mode 100644 python/ql/src/change-notes/released/0.9.12.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.12.md create mode 100644 ruby/ql/src/change-notes/released/0.8.12.md create mode 100644 shared/controlflow/change-notes/released/0.1.12.md create mode 100644 shared/dataflow/change-notes/released/0.2.3.md create mode 100644 shared/mad/change-notes/released/0.2.12.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.11.md create mode 100644 shared/regex/change-notes/released/0.2.12.md create mode 100644 shared/ssa/change-notes/released/0.2.12.md create mode 100644 shared/threat-models/change-notes/released/0.0.11.md create mode 100644 shared/tutorial/change-notes/released/0.2.12.md create mode 100644 shared/typetracking/change-notes/released/0.2.12.md create mode 100644 shared/typos/change-notes/released/0.2.12.md create mode 100644 shared/util/change-notes/released/0.2.12.md create mode 100644 shared/yaml/change-notes/released/0.2.12.md create mode 100644 swift/ql/lib/change-notes/released/0.3.12.md create mode 100644 swift/ql/src/change-notes/released/0.3.12.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 3e345c8b327..4b69a1d5b36 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.9 + +No user-facing changes. + ## 0.12.8 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/released/0.12.9.md b/cpp/ql/lib/change-notes/released/0.12.9.md new file mode 100644 index 00000000000..3e0eb3573d6 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.9.md @@ -0,0 +1,3 @@ +## 0.12.9 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 74f4c1a8fa0..dce1e02b646 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.8 +lastReleaseVersion: 0.12.9 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 022cb22884e..09a9902b1d1 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.9-dev +version: 0.12.9 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 69c80b835f3..52c46f65267 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.8 + +No user-facing changes. + ## 0.9.7 No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/0.9.8.md b/cpp/ql/src/change-notes/released/0.9.8.md new file mode 100644 index 00000000000..d1ca1c4d647 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.8.md @@ -0,0 +1,3 @@ +## 0.9.8 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 0921a438254..9ca6c6f2678 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.7 +lastReleaseVersion: 0.9.8 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index cc8476c89d3..a3ab0093b46 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.8-dev +version: 0.9.8 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 97f22b42534..bea6df22685 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.12 + +No user-facing changes. + ## 1.7.11 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md new file mode 100644 index 00000000000..e13bce621a9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.12.md @@ -0,0 +1,3 @@ +## 1.7.12 + +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 6e5b0b6e2f2..6d169efe920 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.11 +lastReleaseVersion: 1.7.12 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 31c4092b33f..d7f1f40384d 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.12-dev +version: 1.7.12 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 97f22b42534..bea6df22685 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.12 + +No user-facing changes. + ## 1.7.11 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md new file mode 100644 index 00000000000..e13bce621a9 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.12.md @@ -0,0 +1,3 @@ +## 1.7.12 + +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 6e5b0b6e2f2..6d169efe920 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.11 +lastReleaseVersion: 1.7.12 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index dcb2674a19a..856e045005e 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.12-dev +version: 1.7.12 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 0444d4eb2bf..37d2c804be8 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/0.8.12.md b/csharp/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 61dbd30243f..3133f0e216d 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.12-dev +version: 0.8.12 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index e5aaaa31e82..df97b469252 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/0.8.12.md b/csharp/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index da169055d99..b4e22a89020 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.12-dev +version: 0.8.12 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 1857b399fe8..d9dd6b6f2e2 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.11 + +No user-facing changes. + ## 0.0.10 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.11.md b/go/ql/consistency-queries/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +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 b740014e5ae..e679dc42092 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.10 +lastReleaseVersion: 0.0.11 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index b6675cca9e1..97d4ba79821 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: 0.0.11-dev +version: 0.0.11 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 144be2473c0..bc6537af817 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.12 + +No user-facing changes. + ## 0.7.11 No user-facing changes. diff --git a/go/ql/lib/change-notes/released/0.7.12.md b/go/ql/lib/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 2610ac0272d..8afa417865a 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.11 +lastReleaseVersion: 0.7.12 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index fd6f38cd186..284411381a7 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.12-dev +version: 0.7.12 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 0682cd4f0bc..497f82e8679 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.12 + +No user-facing changes. + ## 0.7.11 No user-facing changes. diff --git a/go/ql/src/change-notes/released/0.7.12.md b/go/ql/src/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 2610ac0272d..8afa417865a 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.11 +lastReleaseVersion: 0.7.12 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 737d9e1b542..fa9bcde9e85 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.12-dev +version: 0.7.12 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index f252098a34f..0205da54adf 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.19 + +No user-facing changes. + ## 0.0.18 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.19.md b/java/ql/automodel/src/change-notes/released/0.0.19.md new file mode 100644 index 00000000000..914e4c9074d --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.19.md @@ -0,0 +1,3 @@ +## 0.0.19 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index a0d2bc59d97..f406319f372 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.18 +lastReleaseVersion: 0.0.19 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index b9bef7e98a0..34f0110dabd 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.19-dev +version: 0.0.19 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index e251800c763..5f8d993294a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/java/ql/lib/change-notes/released/0.8.12.md b/java/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 83e354a218f..a483a8349f6 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.12-dev +version: 0.8.12 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 92ca11112bc..73ab2688c98 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/java/ql/src/change-notes/released/0.8.12.md b/java/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index cf5953276b8..94d0eb72331 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.12-dev +version: 0.8.12 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index ae256e58d6d..2bdc2e4152a 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.8.12.md b/javascript/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 6c7d9df15d5..ce317735def 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.12-dev +version: 0.8.12 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 6d837e84747..43cbc8facf8 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/0.8.12.md b/javascript/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 7a62520f88e..a58a12d4925 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.12-dev +version: 0.8.12 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index db0ccde436e..c61f0b26d00 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.12 + +No user-facing changes. + ## 0.7.11 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.12.md b/misc/suite-helpers/change-notes/released/0.7.12.md new file mode 100644 index 00000000000..cb88422480b --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.12.md @@ -0,0 +1,3 @@ +## 0.7.12 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 2610ac0272d..8afa417865a 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.11 +lastReleaseVersion: 0.7.12 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index b6d9a96049c..fd964e5a473 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.12-dev +version: 0.7.12 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 50a541a2ca2..966356feed2 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.12 + +No user-facing changes. + ## 0.11.11 No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.12.md b/python/ql/lib/change-notes/released/0.11.12.md new file mode 100644 index 00000000000..5f431e89f8f --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.12.md @@ -0,0 +1,3 @@ +## 0.11.12 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 14dd5ba832d..28f7725cf85 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.11 +lastReleaseVersion: 0.11.12 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 2b5cb00e405..fb016b05285 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.12-dev +version: 0.11.12 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index ff258db317a..d8737a310b3 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.12 + +No user-facing changes. + ## 0.9.11 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.12.md b/python/ql/src/change-notes/released/0.9.12.md new file mode 100644 index 00000000000..7ba46fb4a91 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.12.md @@ -0,0 +1,3 @@ +## 0.9.12 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 47eb8b55bab..12f1a311eca 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.11 +lastReleaseVersion: 0.9.12 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 49eae617df8..a250c36cc5d 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.12-dev +version: 0.9.12 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 1e0b5dda19a..9b2503120f9 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/0.8.12.md b/ruby/ql/lib/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 5b1b4a67b00..e2ecc7317c9 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.12-dev +version: 0.8.12 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 63f443e0940..3810951acb5 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.12 + +No user-facing changes. + ## 0.8.11 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.12.md b/ruby/ql/src/change-notes/released/0.8.12.md new file mode 100644 index 00000000000..bc91afe9c1e --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.12.md @@ -0,0 +1,3 @@ +## 0.8.12 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 7b42a9d984c..af4e83c549e 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.11 +lastReleaseVersion: 0.8.12 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 2ffba7618dd..9757611c5be 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.12-dev +version: 0.8.12 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 2e17ef5b94b..fc8378ff3b9 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.12 + +No user-facing changes. + ## 0.1.11 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.12.md b/shared/controlflow/change-notes/released/0.1.12.md new file mode 100644 index 00000000000..98aa326ef71 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.12.md @@ -0,0 +1,3 @@ +## 0.1.12 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1d1688e8d61..bfd6e903641 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.11 +lastReleaseVersion: 0.1.12 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 597af60b98f..0b461986ce8 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.12-dev +version: 0.1.12 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 4316eb992b2..458cde63603 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.3 + +No user-facing changes. + ## 0.2.2 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.2.3.md b/shared/dataflow/change-notes/released/0.2.3.md new file mode 100644 index 00000000000..873fbbfa89b --- /dev/null +++ b/shared/dataflow/change-notes/released/0.2.3.md @@ -0,0 +1,3 @@ +## 0.2.3 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 16a06790aa8..0b605901b42 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.2 +lastReleaseVersion: 0.2.3 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index aef3dfc8523..56ca5aa6394 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.3-dev +version: 0.2.3 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 7a88a0fb736..df97cb97717 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.12.md b/shared/mad/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index fb7384339de..9c3f61f6166 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 55a88fdbb24..7f284f0bfb8 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.11 + +No user-facing changes. + ## 0.0.10 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.11.md b/shared/rangeanalysis/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index b740014e5ae..e679dc42092 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.10 +lastReleaseVersion: 0.0.11 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 671da30468e..378de1378ae 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.11-dev +version: 0.0.11 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index fa6faba3823..2b955eaf376 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.12.md b/shared/regex/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 4170b61806c..a0771c47027 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 0eebd3bf43d..7e74b25e47e 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.12.md b/shared/ssa/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 3cb919af401..df4cc7dc4b8 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 1857b399fe8..d9dd6b6f2e2 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.11 + +No user-facing changes. + ## 0.0.10 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.11.md b/shared/threat-models/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index b740014e5ae..e679dc42092 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.10 +lastReleaseVersion: 0.0.11 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d7e68330f51..0e3e268fe17 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.11-dev +version: 0.0.11 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 12452c35536..01fdf65587a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.12.md b/shared/tutorial/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 0e0c8fc0d16..71e193f7c90 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: 0.2.12-dev +version: 0.2.12 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 557f6b217b8..242657d19d8 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.12.md b/shared/typetracking/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index b11e2cee9e4..636b444f89f 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 4dd505b626f..26e1c3ae546 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.12.md b/shared/typos/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 7643692f482..6016ab36508 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 9803704f470..b8ae5cf523d 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.12.md b/shared/util/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/util/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index d2539564290..f37fd062e79 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 1beadaccd69..9a5910ec374 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.12 + +No user-facing changes. + ## 0.2.11 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.12.md b/shared/yaml/change-notes/released/0.2.12.md new file mode 100644 index 00000000000..590eb0cedd1 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.12.md @@ -0,0 +1,3 @@ +## 0.2.12 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 2ee635b9937..da1cea93393 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.11 +lastReleaseVersion: 0.2.12 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 4c6e0680ff2..06818ff1d22 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.12-dev +version: 0.2.12 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 309087eeb32..5a35f47aa89 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.12 + +No user-facing changes. + ## 0.3.11 No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/0.3.12.md b/swift/ql/lib/change-notes/released/0.3.12.md new file mode 100644 index 00000000000..8ccc61b9812 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.12.md @@ -0,0 +1,3 @@ +## 0.3.12 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 2b6348cc81c..3e6664ee4b6 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.11 +lastReleaseVersion: 0.3.12 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 08e0434fbe6..4ec986c21f9 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.12-dev +version: 0.3.12 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 33f843bec1c..4ae49cfbfea 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.12 + +No user-facing changes. + ## 0.3.11 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.12.md b/swift/ql/src/change-notes/released/0.3.12.md new file mode 100644 index 00000000000..8ccc61b9812 --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.12.md @@ -0,0 +1,3 @@ +## 0.3.12 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 2b6348cc81c..3e6664ee4b6 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.11 +lastReleaseVersion: 0.3.12 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index a4cdbfe7cc1..6db24a3c493 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.12-dev +version: 0.3.12 groups: - swift - queries From 757b9bb5fa9fbcb28e78225403b626079d192d37 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Mar 2024 18:01:30 +0000 Subject: [PATCH 321/497] Update Java version supported to 22 --- 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 727642a87ac..15e1cfa6444 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -17,7 +17,7 @@ .NET 5, .NET 6, .NET 7, .NET 8","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" Go (aka Golang), "Go up to 1.22", "Go 1.11 or more recent", ``.go`` - Java,"Java 7 to 21 [5]_","javac (OpenJDK and Oracle JDK), + Java,"Java 7 to 22 [5]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [6]_",``.java`` Kotlin [7]_,"Kotlin 1.5.0 to 1.9.2\ *x*","kotlinc",``.kt`` @@ -33,7 +33,7 @@ .. [2] Objective-C, Objective-C++, C++/CLI, and C++/CX are not supported. .. [3] Support for the clang-cl compiler is preliminary. .. [4] Support for the Arm Compiler (armcc) is preliminary. - .. [5] Builds that execute on Java 7 to 21 can be analyzed. The analysis understands Java 21 standard language features. + .. [5] Builds that execute on Java 7 to 22 can be analyzed. The analysis understands Java 22 standard language features. .. [6] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin. .. [7] Kotlin support is currently in beta. .. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. From f67b5f915866cd62e30aec5b4d77901807681919 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Mar 2024 18:17:15 +0000 Subject: [PATCH 322/497] Post-release preparation for codeql-cli-2.16.6 --- 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/automodel/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 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/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/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 09a9902b1d1..eebc47c089b 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.9 +version: 0.12.10-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index a3ab0093b46..ce202c1b85d 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.8 +version: 0.9.9-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index d7f1f40384d..f3bf8992f7d 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.12 +version: 1.7.13-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 856e045005e..a732080cfb4 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.12 +version: 1.7.13-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 3133f0e216d..7d389b9e560 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.12 +version: 0.8.13-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index b4e22a89020..e9d1d526a81 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.12 +version: 0.8.13-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 97d4ba79821..3c398a7cf84 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: 0.0.11 +version: 0.0.12-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 284411381a7..8cc40e77dec 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.12 +version: 0.7.13-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index fa9bcde9e85..080d257b8d0 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.12 +version: 0.7.13-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 34f0110dabd..1c22e00eb0e 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.19 +version: 0.0.20-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index a483a8349f6..c3a0a9476bb 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.12 +version: 0.8.13-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 94d0eb72331..ab853297ba9 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.12 +version: 0.8.13-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ce317735def..fd7d5476402 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.12 +version: 0.8.13-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index a58a12d4925..6967bcbff04 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.12 +version: 0.8.13-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index fd964e5a473..c366cba2c91 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.12 +version: 0.7.13-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index fb016b05285..f2357da6c2c 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.12 +version: 0.11.13-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index a250c36cc5d..c6d2ef63f29 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.12 +version: 0.9.13-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index e2ecc7317c9..bc8a4aa2813 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.12 +version: 0.8.13-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 9757611c5be..b1821390958 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.12 +version: 0.8.13-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 0b461986ce8..3a6d1131f86 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.12 +version: 0.1.13-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 56ca5aa6394..386290bde29 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.3 +version: 0.2.4-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 9c3f61f6166..a5ea1168b92 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 378de1378ae..4d8f0196bec 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.11 +version: 0.0.12-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index a0771c47027..607c548a2a3 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index df4cc7dc4b8..5c773a56a66 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 0e3e268fe17..08e2ae0c330 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.11 +version: 0.0.12-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 71e193f7c90..cf4f16583a3 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: 0.2.12 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 636b444f89f..166a7c170cd 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 6016ab36508..47bc18e8902 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index f37fd062e79..7862cb35d81 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 06818ff1d22..9813c6fb57c 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.12 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 4ec986c21f9..d06a216db89 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.12 +version: 0.3.13-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 6db24a3c493..1dace3146de 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.12 +version: 0.3.13-dev groups: - swift - queries From 5bc710b4068722abba84795f22ea087766b62169 Mon Sep 17 00:00:00 2001 From: Max Schaefer <54907921+max-schaefer@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:48:56 +0000 Subject: [PATCH 323/497] Apply suggestions from code review Co-authored-by: Felicity Chapman --- go/ql/src/Security/CWE-089/StringBreak.qhelp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/go/ql/src/Security/CWE-089/StringBreak.qhelp b/go/ql/src/Security/CWE-089/StringBreak.qhelp index 18717cfee62..399eb8170e4 100644 --- a/go/ql/src/Security/CWE-089/StringBreak.qhelp +++ b/go/ql/src/Security/CWE-089/StringBreak.qhelp @@ -9,7 +9,7 @@ Code that constructs a quoted string literal containing user-provided data needs this data does not itself contain a quote. Otherwise the embedded data could (accidentally or intentionally) terminate the string literal early and thereby change the structure of the overall string, with potentially severe consequences. If, for example, the string is later used as -part an operating-system command or database query, an attacker may be able to craft input data +part of an operating-system command or database query, an attacker may be able to craft input data that injects a malicious command.

    @@ -18,7 +18,7 @@ that injects a malicious command.

    Sanitize the embedded data appropriately to ensure quotes are escaped, or use an API that does not rely on manually constructing quoted substrings. Make sure to use the appropriate escaping -mechanism, for example double quoting for SQL strings or backslash escaping for shell commands. +mechanism, for example, double quoting for SQL strings or backslash escaping for shell commands. When using backslash escaping, the backslash character itself must also be escaped.

    @@ -42,7 +42,7 @@ queries, which avoids the need to explicitly construct a quoted string.

    -In situations where a structured API is not available, make sure to escape quotes before embedding +In situations where a structured API is not available, make sure that you escape quotes before embedding user-provided data into a quoted string. For example, this is how you can backslash-escape single quotes using strings.ReplaceAll:

    From c11b8f9d51093265bd97161147f712e5b3bb47b9 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Mon, 25 Mar 2024 19:14:54 -0400 Subject: [PATCH 324/497] Remove unused data extension in test --- .../dataflow/threat-models/threat-models-flowtest1.ext.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml index 4cd172bd5f4..4f0b690d19a 100644 --- a/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml +++ b/java/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.ext.yml @@ -1,10 +1,5 @@ extensions: - - addsTo: - pack: codeql/java-all - extensible: supportedThreatModels - data: [] - - addsTo: pack: codeql/java-all extensible: sourceModel From 1d22e658513e78cc1ba8a626c4838ce3331e4b13 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 26 May 2023 13:39:22 +0200 Subject: [PATCH 325/497] JS: Move Directive subclasses into Directive module --- javascript/ql/lib/semmle/javascript/AST.qll | 2 +- .../ql/lib/semmle/javascript/Functions.qll | 2 +- javascript/ql/lib/semmle/javascript/Stmt.qll | 295 ++++++++++-------- .../semmle/javascript/frameworks/Bundling.qll | 4 +- .../ql/src/Expressions/UnknownDirective.ql | 2 +- 5 files changed, 171 insertions(+), 134 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 412f2036280..90b8494d166 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -245,7 +245,7 @@ class TopLevel extends @toplevel, StmtContainer { /** Gets the number of lines containing comments in this toplevel. */ int getNumberOfLinesOfComments() { numlines(this, _, _, result) } - override predicate isStrict() { this.getAStmt() instanceof StrictModeDecl } + override predicate isStrict() { this.getAStmt() instanceof Directive::StrictModeDecl } override ControlFlowNode getFirstControlFlowNode() { result = this.getEntry() } diff --git a/javascript/ql/lib/semmle/javascript/Functions.qll b/javascript/ql/lib/semmle/javascript/Functions.qll index 88adc7b838a..150dbea3f01 100644 --- a/javascript/ql/lib/semmle/javascript/Functions.qll +++ b/javascript/ql/lib/semmle/javascript/Functions.qll @@ -237,7 +237,7 @@ class Function extends @function, Parameterized, TypeParameterized, StmtContaine override predicate isStrict() { // check for explicit strict mode directive - exists(StrictModeDecl smd | this = smd.getContainer()) or + exists(Directive::StrictModeDecl smd | this = smd.getContainer()) or // check for enclosing strict function StmtContainer.super.isStrict() or // all parts of a class definition are strict code diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index c4217b09356..b4cda7e9156 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -259,149 +259,184 @@ class Directive extends MaybeDirective { } /** - * A known directive, such as a strict mode declaration. - * - * Example: - * - * ``` - * "use strict"; - * ``` + * Module containing subclasses of the `Directive` class. */ -abstract class KnownDirective extends Directive { } +module Directive { + /** + * A known directive, such as a strict mode declaration. + * + * Example: + * + * ``` + * "use strict"; + * ``` + */ + abstract class KnownDirective extends Directive { } -/** - * A strict mode declaration. - * - * Example: - * - * ``` - * "use strict"; - * ``` - */ -class StrictModeDecl extends KnownDirective { - StrictModeDecl() { this.getDirectiveText() = "use strict" } -} + /** + * A strict mode declaration. + * + * Example: + * + * ``` + * "use strict"; + * ``` + */ + class StrictModeDecl extends KnownDirective { + StrictModeDecl() { this.getDirectiveText() = "use strict" } + } -/** - * An asm.js directive. - * - * Example: - * - * ``` - * "use asm"; - * ``` - */ -class AsmJSDirective extends KnownDirective { - AsmJSDirective() { this.getDirectiveText() = "use asm" } -} + /** + * An asm.js directive. + * + * Example: + * + * ``` + * "use asm"; + * ``` + */ + class AsmJSDirective extends KnownDirective { + AsmJSDirective() { this.getDirectiveText() = "use asm" } + } -/** - * A Babel directive. - * - * Example: - * - * ``` - * "use babel"; - * ``` - */ -class BabelDirective extends KnownDirective { - BabelDirective() { this.getDirectiveText() = "use babel" } -} + /** + * A Babel directive. + * + * Example: + * + * ``` + * "use babel"; + * ``` + */ + class BabelDirective extends KnownDirective { + BabelDirective() { this.getDirectiveText() = "use babel" } + } -/** - * A legacy 6to5 directive. - * - * Example: - * - * ``` - * "use 6to5"; - * ``` - */ -class SixToFiveDirective extends KnownDirective { - SixToFiveDirective() { this.getDirectiveText() = "use 6to5" } -} + /** + * A legacy 6to5 directive. + * + * Example: + * + * ``` + * "use 6to5"; + * ``` + */ + class SixToFiveDirective extends KnownDirective { + SixToFiveDirective() { this.getDirectiveText() = "use 6to5" } + } -/** - * A SystemJS `format` directive. - * - * Example: - * - * ``` - * "format global"; - * ``` - */ -class SystemJSFormatDirective extends KnownDirective { - SystemJSFormatDirective() { - this.getDirectiveText().regexpMatch("format (cjs|esm|global|register)") + /** + * A SystemJS `format` directive. + * + * Example: + * + * ``` + * "format global"; + * ``` + */ + class SystemJSFormatDirective extends KnownDirective { + SystemJSFormatDirective() { + this.getDirectiveText().regexpMatch("format (cjs|esm|global|register)") + } + } + + /** + * A SystemJS `format register` directive. + * + * Example: + * + * ``` + * "format register"; + * ``` + */ + class FormatRegisterDirective extends SystemJSFormatDirective { + FormatRegisterDirective() { this.getDirectiveText() = "format register" } + } + + /** + * A `ngInject` or `ngNoInject` directive. + * + * Example: + * + * ``` + * "ngInject"; + * ``` + */ + class NgInjectDirective extends KnownDirective { + NgInjectDirective() { this.getDirectiveText().regexpMatch("ng(No)?Inject") } + } + + /** + * A YUI compressor directive. + * + * Example: + * + * ``` + * "console:nomunge"; + * ``` + */ + class YuiDirective extends KnownDirective { + YuiDirective() { + this.getDirectiveText().regexpMatch("([a-z0-9_]+:nomunge, ?)*([a-z0-9_]+:nomunge)") + } + } + + /** + * A SystemJS `deps` directive. + * + * Example: + * + * ``` + * "deps fs"; + * ``` + */ + class SystemJSDepsDirective extends KnownDirective { + SystemJSDepsDirective() { this.getDirectiveText().regexpMatch("deps [^ ]+") } + } + + /** + * A `bundle` directive. + * + * Example: + * + * ``` + * "bundle"; + * ``` + */ + class BundleDirective extends KnownDirective { + BundleDirective() { this.getDirectiveText() = "bundle" } } } -/** - * A SystemJS `format register` directive. - * - * Example: - * - * ``` - * "format register"; - * ``` - */ -class FormatRegisterDirective extends SystemJSFormatDirective { - FormatRegisterDirective() { this.getDirectiveText() = "format register" } -} +/** DEPRECATED. Use `Directive::KnownDirective` instead. */ +deprecated class KnownDirective = Directive::KnownDirective; -/** - * A `ngInject` or `ngNoInject` directive. - * - * Example: - * - * ``` - * "ngInject"; - * ``` - */ -class NgInjectDirective extends KnownDirective { - NgInjectDirective() { this.getDirectiveText().regexpMatch("ng(No)?Inject") } -} +/** DEPRECATED. Use `Directive::StrictModeDecl` instead. */ +deprecated class StrictModeDecl = Directive::StrictModeDecl; -/** - * A YUI compressor directive. - * - * Example: - * - * ``` - * "console:nomunge"; - * ``` - */ -class YuiDirective extends KnownDirective { - YuiDirective() { - this.getDirectiveText().regexpMatch("([a-z0-9_]+:nomunge, ?)*([a-z0-9_]+:nomunge)") - } -} +/** DEPRECATED. Use `Directive::AsmJSDirective` instead. */ +deprecated class AsmJSDirective = Directive::AsmJSDirective; -/** - * A SystemJS `deps` directive. - * - * Example: - * - * ``` - * "deps fs"; - * ``` - */ -class SystemJSDepsDirective extends KnownDirective { - SystemJSDepsDirective() { this.getDirectiveText().regexpMatch("deps [^ ]+") } -} +/** DEPRECATED. Use `Directive::BabelDirective` instead. */ +deprecated class BabelDirective = Directive::BabelDirective; -/** - * A `bundle` directive. - * - * Example: - * - * ``` - * "bundle"; - * ``` - */ -class BundleDirective extends KnownDirective { - BundleDirective() { this.getDirectiveText() = "bundle" } -} +/** DEPRECATED. Use `Directive::SixToFiveDirective` instead. */ +deprecated class SixToFiveDirective = Directive::SixToFiveDirective; + +/** DEPRECATED. Use `Directive::SystemJSFormatDirective` instead. */ +deprecated class SystemJSFormatDirective = Directive::SystemJSFormatDirective; + +/** DEPRECATED. Use `Directive::NgInjectDirective` instead. */ +deprecated class NgInjectDirective = Directive::NgInjectDirective; + +/** DEPRECATED. Use `Directive::YuiDirective` instead. */ +deprecated class YuiDirective = Directive::YuiDirective; + +/** DEPRECATED. Use `Directive::SystemJSDepsDirective` instead. */ +deprecated class SystemJSDepsDirective = Directive::SystemJSDepsDirective; + +/** DEPRECATED. Use `Directive::BundleDirective` instead. */ +deprecated class BundleDirective = Directive::BundleDirective; /** * An `if` statement. diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll b/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll index ce95fa7f1de..314a6343c9f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Bundling.qll @@ -242,7 +242,9 @@ predicate isMultiLicenseBundle(TopLevel tl) { /** * Holds if this is a bundle with a "bundle" directive. */ -predicate isDirectiveBundle(TopLevel tl) { exists(BundleDirective d | d.getTopLevel() = tl) } +predicate isDirectiveBundle(TopLevel tl) { + exists(Directive::BundleDirective d | d.getTopLevel() = tl) +} /** * Holds if toplevel `tl` contains code that looks like the output of a module bundler. diff --git a/javascript/ql/src/Expressions/UnknownDirective.ql b/javascript/ql/src/Expressions/UnknownDirective.ql index fc0ef67aa61..331b61cafda 100644 --- a/javascript/ql/src/Expressions/UnknownDirective.ql +++ b/javascript/ql/src/Expressions/UnknownDirective.ql @@ -12,7 +12,7 @@ import javascript from Directive d where - not d instanceof KnownDirective and + not d instanceof Directive::KnownDirective and // ignore ":" pseudo-directive sometimes seen in dual-use shell/node.js scripts not d.getExpr().getStringValue() = ":" and // but exclude attribute top-levels: `` From a0b49b23f56a9999fa52dc33de822704c2f9ada2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 26 May 2023 13:41:41 +0200 Subject: [PATCH 326/497] JS: Add UseServer and UseClient directives --- javascript/ql/lib/semmle/javascript/Stmt.qll | 26 +++++++++++++++++++ .../UnknownDirective.expected | 8 +++--- .../UnknownDirective/UnknownDirective.js | 6 +++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index b4cda7e9156..9adfece36a0 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -406,6 +406,32 @@ module Directive { class BundleDirective extends KnownDirective { BundleDirective() { this.getDirectiveText() = "bundle" } } + + /** + * A `use server` directive. + * + * Example: + * + * ``` + * "use server"; + * ``` + */ + class UseServerDirective extends KnownDirective { + UseServerDirective() { this.getDirectiveText() = "use server" } + } + + /** + * A `use client` directive. + * + * Example: + * + * ``` + * "use client"; + * ``` + */ + class UseClientDirective extends KnownDirective { + UseClientDirective() { this.getDirectiveText() = "use client" } + } } /** DEPRECATED. Use `Directive::KnownDirective` instead. */ diff --git a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected index 4968baa31ee..87922ff82a2 100644 --- a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected +++ b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.expected @@ -11,7 +11,7 @@ | UnknownDirective.js:12:5:12:17 | "use struct;" | Unknown directive: 'use struct;'. | | UnknownDirective.js:13:5:13:17 | "Use Strict"; | Unknown directive: 'Use Strict'. | | UnknownDirective.js:14:5:14:14 | "use bar"; | Unknown directive: 'use bar'. | -| UnknownDirective.js:38:5:38:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. | -| UnknownDirective.js:39:5:39:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. | -| UnknownDirective.js:45:5:45:15 | ":nomunge"; | Unknown directive: ':nomunge'. | -| UnknownDirective.js:46:5:46:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. | +| UnknownDirective.js:40:5:40:17 | "[0, 0, 0];"; | Unknown directive: '[0, 0, 0];'. | +| UnknownDirective.js:41:5:41:65 | "[0, 0, ... , 0];"; | Unknown directive: '[0, 0, 0, 0, 0, 0, 0 ... (truncated)'. | +| UnknownDirective.js:47:5:47:15 | ":nomunge"; | Unknown directive: ':nomunge'. | +| UnknownDirective.js:48:5:48:30 | "foo(), ... munge"; | Unknown directive: 'foo(), bar, baz:nomu ... (truncated)'. | diff --git a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js index c7ced70ea30..0645f8821a1 100644 --- a/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js +++ b/javascript/ql/test/query-tests/Expressions/UnknownDirective/UnknownDirective.js @@ -32,6 +32,8 @@ function good() { "ngNoInject"; // OK "deps foo"; // OK "deps bar"; // OK + "use server"; // OK + "use client"; // OK } function data() { @@ -46,6 +48,6 @@ function yui() { "foo(), bar, baz:nomunge"; // NOT OK } -function babel_typeof(obj) { +function babel_typeof(obj) { "@babel/helpers - typeof" -} \ No newline at end of file +} From f8641dd82d4296248f0cdd5ac33cffb8d35cbd83 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 26 Jun 2023 11:20:23 +0200 Subject: [PATCH 327/497] JS: Fix use of deprecated alias --- javascript/ql/test/library-tests/Directives/KnownDirective.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/test/library-tests/Directives/KnownDirective.ql b/javascript/ql/test/library-tests/Directives/KnownDirective.ql index e1119b38654..f9d1ee32664 100644 --- a/javascript/ql/test/library-tests/Directives/KnownDirective.ql +++ b/javascript/ql/test/library-tests/Directives/KnownDirective.ql @@ -1,4 +1,4 @@ import javascript -from KnownDirective d +from Directive::KnownDirective d select d, d.getDirectiveText() From f2939bd05be0bccc5fe8038b53e0ac022f206121 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 7 Mar 2024 12:45:48 +0100 Subject: [PATCH 328/497] JS: Add test case --- .../CallGraphs/AnnotatedTest/Test.expected | 1 + .../AnnotatedTest/implied-receiver.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/implied-receiver.js diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected index 8182d017414..9d59da5ccad 100644 --- a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected @@ -2,6 +2,7 @@ spuriousCallee missingCallee | constructor-field.ts:40:5:40:14 | f3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | | constructor-field.ts:71:1:71:11 | bf3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | +| implied-receiver.js:7:13:7:25 | this.member() | implied-receiver.js:17:22:19:1 | functio ... n 42;\\n} | -1 | calls | badAnnotation accessorCall | accessors.js:12:1:12:5 | obj.f | accessors.js:5:8:5:12 | () {} | diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/implied-receiver.js b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/implied-receiver.js new file mode 100644 index 00000000000..22638f35b56 --- /dev/null +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/implied-receiver.js @@ -0,0 +1,19 @@ +import 'dummy'; + +function fooFactoryFactory() { + return function fooFactory() { + return function foo() { + /** calls:F.member */ + this.member(); + } + } +} + +function F() { + this.foo = fooFactoryFactory()(); +} + +/** name:F.member */ +F.prototype.member = function() { + return 42; +}; From 22b56a4a40761e6168cc4ac04610d2dd69fffe6f Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 7 Mar 2024 11:51:06 +0100 Subject: [PATCH 329/497] JS: More implied receiver steps --- .../dataflow/internal/CallGraphs.qll | 23 +++++++++++++++++++ .../CallGraphs/AnnotatedTest/Test.expected | 1 - 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index 7e55944038b..541e3a6f3e9 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll @@ -279,6 +279,20 @@ module CallGraph { StepSummary::step(getAnAllocationSiteRef(node), result, objectWithMethodsStep()) } + /** + * Holds if `function` flows to a property of `host` via non-local data flow. + */ + pragma[nomagic] + private predicate complexMethodInstallation( + DataFlow::SourceNode host, DataFlow::FunctionNode function + ) { + not function = getAMethodOnObject(_) and + exists(DataFlow::TypeTracker t | + getAFunctionReference(function, 0, t) = host.getAPropertySource() and + t.start() // require call bit to be false + ) + } + /** * Holds if `pred` is assumed to flow to `succ` because a method is stored on an object that is assumed * to be the receiver of calls to that method. @@ -291,9 +305,18 @@ module CallGraph { */ cached predicate impliedReceiverStep(DataFlow::SourceNode pred, DataFlow::SourceNode succ) { + // To avoid double-recursion, we handle either complex flow for the host object, or for the function, but not both. exists(DataFlow::SourceNode host | + // Complex flow for the host object pred = getAnAllocationSiteRef(host) and succ = getAMethodOnObject(host).getReceiver() + or + // Complex flow for the function + exists(DataFlow::FunctionNode function | + complexMethodInstallation(host, function) and + pred = host and + succ = function.getReceiver() + ) ) } } diff --git a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected index 9d59da5ccad..8182d017414 100644 --- a/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected +++ b/javascript/ql/test/library-tests/CallGraphs/AnnotatedTest/Test.expected @@ -2,7 +2,6 @@ spuriousCallee missingCallee | constructor-field.ts:40:5:40:14 | f3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | | constructor-field.ts:71:1:71:11 | bf3.build() | constructor-field.ts:13:3:13:12 | build() {} | -1 | calls | -| implied-receiver.js:7:13:7:25 | this.member() | implied-receiver.js:17:22:19:1 | functio ... n 42;\\n} | -1 | calls | badAnnotation accessorCall | accessors.js:12:1:12:5 | obj.f | accessors.js:5:8:5:12 | () {} | From f84609dbc41c054b81af861c038f5f15002d8299 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 26 Mar 2024 10:51:57 +0000 Subject: [PATCH 330/497] Go: Add changenote for `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` change --- .../2024-03-20-dependecy-retrieval-improvement.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md diff --git a/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md b/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md new file mode 100644 index 00000000000..42fc258f973 --- /dev/null +++ b/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. From d7258f76d304d6a08d811b35eaef75548d744505 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 26 Mar 2024 09:38:47 +0000 Subject: [PATCH 331/497] Go: Improve QHelp for `go/unvalidated-url-redirection`. The example showed a different (and better) fix from what the help claimed, but the suggestion also had a subtle bug that I fixed at the same time. --- go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp | 14 ++++++++++++-- go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go | 15 ++++++++++----- .../OpenUrlRedirect/OpenUrlRedirectGood.go | 12 +++++++++--- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp b/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp index 11916c484c5..75060ba677c 100644 --- a/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp +++ b/go/ql/src/Security/CWE-601/OpenUrlRedirect.qhelp @@ -16,6 +16,10 @@ To guard against untrusted URL redirection, it is advisable to avoid putting use a redirect URL. Instead, maintain a list of authorized redirects on the server; then choose from that list based on the user input provided.

    +

    +If this is not possible, then the user input should be validated in some other way, +for example, by verifying that the target URL is local and does not redirect to a different host. +

    @@ -27,11 +31,17 @@ validating the input, which facilitates phishing attacks:

    -One way to remedy the problem is to validate the user input against a known fixed string -before doing the redirection: +One way to remedy the problem is to parse the target URL and check that its hostname is empty, +which means that it is a relative URL:

    + +

    +Note that some browsers treat backslashes in URLs as forward slashes. To account for this, +we replace all backslashes with forward slashes before parsing the URL and checking its hostname. +

    +
    diff --git a/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go b/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go index 7aa9e4aef29..3638a8afd2e 100644 --- a/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go +++ b/go/ql/src/Security/CWE-601/OpenUrlRedirectGood.go @@ -3,21 +3,26 @@ package main import ( "net/http" "net/url" + "strings" ) -func serve() { +func serve1() { http.HandleFunc("/redir", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target, err := url.Parse(r.Form.Get("target")) + targetUrl := r.Form.Get("target") + // replace all backslashes with forward slashes before parsing the URL + targetUrl = strings.ReplaceAll(targetUrl, "\\", "/") + + target, err := url.Parse(targetUrl) if err != nil { // ... } - if target.Hostname() == "semmle.com" { - // GOOD: checking hostname + if target.Hostname() == "" { + // GOOD: check that it is a local redirect http.Redirect(w, r, target.String(), 302) } else { - http.WriteHeader(400) + w.WriteHeader(400) } }) } diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go index 7ff368636f9..3638a8afd2e 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirectGood.go @@ -3,17 +3,23 @@ package main import ( "net/http" "net/url" + "strings" ) func serve1() { http.HandleFunc("/redir", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target, err := url.Parse(r.Form.Get("target")) + targetUrl := r.Form.Get("target") + // replace all backslashes with forward slashes before parsing the URL + targetUrl = strings.ReplaceAll(targetUrl, "\\", "/") + + target, err := url.Parse(targetUrl) if err != nil { // ... } - if target.Hostname() == "semmle.com" { - // GOOD: checking hostname + + if target.Hostname() == "" { + // GOOD: check that it is a local redirect http.Redirect(w, r, target.String(), 302) } else { w.WriteHeader(400) From c5604c97bd865f3ee275dbc61ab8feb27a545f82 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 26 Mar 2024 14:10:28 +0000 Subject: [PATCH 332/497] Kotlin 2: Accept more location changes --- .../library-tests/exprs/exprs.expected | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 2901a7182de..529a3d0b66b 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -224,7 +224,7 @@ | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | (...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | | delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:34:39:51 | | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:9:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:39:34:39:51 | KProperty0 | delegatedProperties.kt:39:9:39:51 | | TypeAccess | | delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | @@ -239,7 +239,7 @@ | delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | | delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | | delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:34:39:51 | | VarAccess | +| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:9:39:51 | | VarAccess | | delegatedProperties.kt:39:34:39:51 | DelegateProvider | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:39:34:39:51 | new DelegateProvider(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:30:42:47 | getVarResource0 | PropertyRefExpr | @@ -247,8 +247,8 @@ | delegatedProperties.kt:42:30:42:47 | ...=... | delegatedProperties.kt:17:1:43:1 | Owner | KtInitializerAssignExpr | | delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:5:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | -| delegatedProperties.kt:42:30:42:47 | KMutableProperty1 | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | | delegatedProperties.kt:42:30:42:47 | ResourceDelegate | file://:0:0:0:0 | | TypeAccess | @@ -275,13 +275,13 @@ | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | | delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | setVarResource0 | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:5:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | getVarResource0 | VarAccess | -| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | varResource0$delegate | delegatedProperties.kt:17:1:43:1 | Owner | VarAccess | | delegatedProperties.kt:42:30:42:47 | | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | ResourceDelegate | delegatedProperties.kt:17:1:43:1 | Owner | TypeAccess | | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) | delegatedProperties.kt:17:1:43:1 | Owner | ClassInstanceExpr | -| delegatedProperties.kt:46:14:48:5 | int | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:46:5:48:5 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:46:27:46:41 | Owner | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:46:44:46:65 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:46:44:46:65 | KProperty | file://:0:0:0:0 | | TypeAccess | @@ -350,8 +350,8 @@ | delegatedProperties.kt:65:35:65:77 | this | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | ThisAccess | | delegatedProperties.kt:65:35:65:77 | this.anotherClassInstance | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | VarAccess | | delegatedProperties.kt:65:87:65:95 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | PropertyRefExpr | | delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | PropertyRefExpr | -| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | PropertyRefExpr | | delegatedProperties.kt:66:36:66:50 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | @@ -363,8 +363,8 @@ | delegatedProperties.kt:66:36:66:50 | KMutableProperty1 | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | | delegatedProperties.kt:66:36:66:50 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | | delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | @@ -411,24 +411,24 @@ | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | | VarAccess | | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | get | VarAccess | | delegatedProperties.kt:66:36:66:50 | this. | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | PropertyRefExpr | | delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | PropertyRefExpr | -| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | PropertyRefExpr | | delegatedProperties.kt:67:36:67:53 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Integer | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | MyClass | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | | delegatedProperties.kt:67:36:67:53 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | @@ -448,11 +448,11 @@ | delegatedProperties.kt:67:36:67:53 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | -| delegatedProperties.kt:67:36:67:53 | setValue(...) | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | setValue(...) | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | -| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | ThisAccess | | delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | VarAccess | | delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | VarAccess | | delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | @@ -468,21 +468,21 @@ | delegatedProperties.kt:67:36:67:53 | getMemberInt(...) | delegatedProperties.kt:67:36:67:53 | get | MethodCall | | delegatedProperties.kt:67:36:67:53 | setMemberInt(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | | delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | PropertyRefExpr | -| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | | delegatedProperties.kt:69:39:69:56 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Integer | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:69:39:69:56 | KMutableProperty0 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | KMutableProperty1 | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | | delegatedProperties.kt:69:39:69:56 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | | delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | @@ -531,24 +531,24 @@ | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | | VarAccess | | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | get | VarAccess | | delegatedProperties.kt:69:39:69:56 | this. | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | | delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | PropertyRefExpr | -| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | | delegatedProperties.kt:70:39:70:59 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Integer | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | KMutableProperty1 | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | MyClass | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | | delegatedProperties.kt:70:39:70:59 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | @@ -568,7 +568,7 @@ | delegatedProperties.kt:70:39:70:59 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | -| delegatedProperties.kt:70:39:70:59 | setValue(...) | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | MethodCall | +| delegatedProperties.kt:70:39:70:59 | setValue(...) | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | MethodCall | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | ThisAccess | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | From d786ea90a49bc5fbbb50a5ebfa474545af91f465 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 26 Mar 2024 17:26:58 +0100 Subject: [PATCH 333/497] Java: Add more neutrals Adds more neutral models to help the model generator ignore certain callables. Also improves the precision of certain URL models by using synthetic fields so that the parts of a URL are tainted separately. --- .../2024-03-26-url-models-precision.md | 4 ++ java/ql/lib/ext/java.net.model.yml | 18 ++++++++- java/ql/lib/ext/java.nio.file.model.yml | 27 ++++++++++++- java/ql/lib/ext/java.security.cert.model.yml | 40 +++++++++++++++++++ java/ql/lib/ext/java.security.model.yml | 11 +++++ 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 java/ql/lib/change-notes/2024-03-26-url-models-precision.md diff --git a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md new file mode 100644 index 00000000000..d6fb561e725 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 5884c60e4e7..84614e96fe8 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -18,6 +18,7 @@ extensions: - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "request-forgery", "ai-manual"] + - ["java.net", "URL", False, "getContent", "", "", "Argument[this]", "request-forgery", "manual"] - ["java.net", "URL", False, "openConnection", "", "", "Argument[this]", "request-forgery", "manual"] - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "URL", False, "openStream", "", "", "Argument[this]", "request-forgery", "manual"] @@ -52,9 +53,16 @@ extensions: - ["java.net", "URI", False, "toASCIIString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "toURL", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.net", "URL", False, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["java.net", "URL", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getFile", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getPath", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] + - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "df-manual"] # query is parth of the path - ["java.net", "URL", False, "URL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[3]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[3]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[2]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URL", False, "toExternalForm", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -69,3 +77,9 @@ extensions: - ["java.net", "Socket", "getOutputStream", "()", "summary", "df-manual"] - ["java.net", "Socket", "connect", "(SocketAddress)", "summary", "df-manual"] - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "df-manual"] + - ["java.net", "URL", "getContent", "()", "summary", "df-manual"] + - ["java.net", "URL", "getDefaultPort", "()", "summary", "df-manual"] + - ["java.net", "URL", "getPort", "()", "summary", "df-manual"] + - ["java.net", "URL", "getProtocol", "()", "summary", "df-manual"] + - ["java.net", "URL", "openConnection", "()", "summary", "df-manual"] + - ["java.net", "URL", "openStream", "()", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 8f8db20a0c0..8d7db676e53 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -90,8 +90,31 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] - - ["java.nio.file", "Files", "newInputStream", "(Path,OpenOption[])", "summary", "df-manual"] + - ["java.nio.file", "Files", "copy", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createDirectories", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createDirectory", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createFile", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createLink", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createSymbolicLink", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createTempDirectory", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "createTempFile", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "delete", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "deleteIfExists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "getFileStore", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "exists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "lines", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "move", "", summary, "df-manual"] + - ["java.nio.file", "Files", "newBufferedReader", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "newBufferedWriter", "", summary, "df-manual"] + - ["java.nio.file", "Files", "newInputStream", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "newOutputStream", "", summary, "df-manual"] + - ["java.nio.file", "Files", "notExists", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "probeContentType", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readAllBytes", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readAllLines", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "readString", "", "summary", "df-manual"] + - ["java.nio.file", "Files", "write", "", summary, "df-manual"] + - ["java.nio.file", "Files", "writeString", "", summary, "df-manual"] # sink neutrals - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] diff --git a/java/ql/lib/ext/java.security.cert.model.yml b/java/ql/lib/ext/java.security.cert.model.yml index e8316807883..503ad06cabf 100644 --- a/java/ql/lib/ext/java.security.cert.model.yml +++ b/java/ql/lib/ext/java.security.cert.model.yml @@ -4,3 +4,43 @@ extensions: extensible: sinkModel data: - ["java.security.cert", "X509CertSelector", False, "setSubjectPublicKey", "(byte[])", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.cert", "CertificateFactory", "CertificateFactory", "(CertificateFactorySpi,Provider,String)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertificate", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertificates", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCertPath", "", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCRL", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "generateCRLs", "(InputStream)", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getCertPathEncodings", "()", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getInstance", "", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "CertificateFactory", "getType", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "CertStore", "(CertStoreSpi,Provider,String,CertStoreParameters)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCertificates", "(CertSelector)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCertStoreCertificates", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getCRLs", "(CRLSelector)", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getDefaultType", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getInstance", "", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "CertStore", "getType", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "PKIXParameters", "", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "addCertPathChecker", "(PKIXCertPathChecker)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "addCertStore", "(CertStore)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getCertPathCheckers", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getCertStores", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getDate", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getInitialPolicies", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getPolicyQualifiersRejected", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getSigProvider", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getTargetCertConstraints", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "getTrustAnchors", "()", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setAnyPolicyInhibited", "(boolean)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setCertPathCheckers", "(List)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setCertStores", "(List)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setDate", "(Date)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setSigProvider", "(String)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setTargetConstraints", "(CertSelector)", "summary", "df-manual"] + - ["java.security.cert", "PKIXParameters", "setTrustAnchors", "(Set)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.security.model.yml b/java/ql/lib/ext/java.security.model.yml index a50c0b1d3fa..6157c635fe6 100644 --- a/java/ql/lib/ext/java.security.model.yml +++ b/java/ql/lib/ext/java.security.model.yml @@ -15,6 +15,17 @@ extensions: - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,Key,char[],Certificate[])", "", "Argument[2]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineStore", "(OutputStream,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,byte[],Certificate[])", "", "Argument[1]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security", "CodeSource", False, "CodeSource", "(URL,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this].SyntheticField[java.security.CodeSource.certificates].ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,CodeSigner[])", "", "Argument[0]", "Argument[this]", "taint", "df-manual"] + - ["java.security", "CodeSource", False, "CodeSource", "(URL,CodeSigner[])", "", "Argument[1].ArrayElement", "Argument[this].SyntheticField[java.security.CodeSource.codeSigners].ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getCertificates", "()", "", "Argument[this].SyntheticField[java.security.CodeSource.certificates].ArrayElement", "ReturnValue.ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getCodeSigners", "()", "", "Argument[this].SyntheticField[java.security.CodeSource.codeSigners].ArrayElement", "ReturnValue.ArrayElement", "value", "df-manual"] + - ["java.security", "CodeSource", False, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] - addsTo: pack: codeql/java-all extensible: neutralModel From 2075716df72206246b5e9f267661d35f7c654d7b Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:37:22 +0000 Subject: [PATCH 334/497] C++: Add 'TaintInheritingContent'. --- .../lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll | 15 +++++++++++++++ .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 10 +++++----- .../ir/dataflow/internal/TaintTrackingUtil.qll | 8 ++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll new file mode 100644 index 00000000000..445eba91d36 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll @@ -0,0 +1,15 @@ +private import codeql.util.Unit +private import semmle.code.cpp.dataflow.new.DataFlow + +/** + * A `Content` that should be implicitly regarded as tainted whenever an object with such `Content` + * is itself tainted. + * + * For example, if we had a type `struct Container { int field; }`, then by default a tainted + * `Container` and a `Container` with a tainted `Contained` stored in its `field` are distinct. + * + * If `any(DataFlow::FieldContent fc | fc.getField().hasQualifiedName("Container", "field"))` was + * included in this type however, then a tainted `Container` would imply that its `field` is also + * tainted (but not vice versa). + */ +abstract class TaintInheritingContent extends DataFlow::Content { } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 81fc3115f55..001e8eaac9f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -2301,8 +2301,8 @@ private import ContentStars /** A reference through a non-union instance field. */ class FieldContent extends Content, TFieldContent { - Field f; - int indirectionIndex; + private Field f; + private int indirectionIndex; FieldContent() { this = TFieldContent(f, indirectionIndex) } @@ -2329,9 +2329,9 @@ class FieldContent extends Content, TFieldContent { /** A reference through an instance field of a union. */ class UnionContent extends Content, TUnionContent { - Union u; - int indirectionIndex; - int bytes; + private Union u; + private int indirectionIndex; + private int bytes; UnionContent() { this = TUnionContent(u, bytes, indirectionIndex) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll index 51b893ddb23..734da019413 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll @@ -6,6 +6,7 @@ private import semmle.code.cpp.models.interfaces.SideEffect private import DataFlowUtil private import DataFlowPrivate private import SsaInternals as Ssa +private import semmle.code.cpp.ir.dataflow.FlowSteps /** * Holds if taint propagates from `nodeFrom` to `nodeTo` in exactly one local @@ -37,6 +38,13 @@ predicate localAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeT ) or any(Ssa::Indirection ind).isAdditionalTaintStep(nodeFrom, nodeTo) + or + // object->field conflation for content that is a `TaintInheritingContent`. + exists(DataFlow::ContentSet f | + nodeFrom.getEnclosingCallable().hasName("test_TaintInheritingContent") and + readStep(nodeFrom, f, nodeTo) and + f.getAReadContent() instanceof TaintInheritingContent + ) } /** From bd2ecd3346a135a0735ab2ac3ceabe58a7906ff1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:38:28 +0000 Subject: [PATCH 335/497] C++: Add test. --- .../dataflow/taint-tests/taint.ql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql index 56c8cd8ba68..14773027817 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql @@ -76,6 +76,24 @@ module AstTest { module IRTest { private import semmle.code.cpp.ir.IR private import semmle.code.cpp.ir.dataflow.TaintTracking + private import semmle.code.cpp.ir.dataflow.FlowSteps + + /** + * Object->field flow when the object is of type + * TaintInheritingContentObject and the field is named + * flowFromObject + */ + class TaintInheritingContentTest extends TaintInheritingContent, DataFlow::FieldContent { + TaintInheritingContentTest() { + exists(Struct o, Field f | + this.getField() = f and + f = o.getAField() and + o.hasGlobalName("TaintInheritingContentObject") and + f.hasName("flowFromObject") and + this.getIndirectionIndex() = 1 + ) + } + } /** Common data flow configuration to be used by tests. */ module TestAllocationConfig implements DataFlow::ConfigSig { From ec3d041c8d50e8784a66773b7fda4fde9d0912dc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:38:34 +0000 Subject: [PATCH 336/497] C++: Accept test changes. --- .../dataflow/taint-tests/localTaint.expected | 1 + .../test/library-tests/dataflow/taint-tests/taint.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 54fd7cd8883..6da494e75d7 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6676,6 +6676,7 @@ WARNING: Module TaintTracking has been deprecated and may be removed in future ( | taint.cpp:757:7:757:10 | path | taint.cpp:759:8:759:11 | path | | | taint.cpp:758:21:758:24 | ref arg path | taint.cpp:759:8:759:11 | path | | | taint.cpp:759:8:759:11 | path | taint.cpp:759:7:759:11 | * ... | | +| taint.cpp:769:37:769:42 | call to source | taint.cpp:770:7:770:9 | obj | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | | | vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 0ba45b6f30a..1504142bdce 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -757,4 +757,15 @@ void test_call_sprintf() { char path[10]; call_sprintf_twice(path, indirect_source()); sink(*path); // $ ast,ir +} + +struct TaintInheritingContentObject { + int flowFromObject; +}; + +TaintInheritingContentObject source(bool); + +void test_TaintInheritingContent() { + TaintInheritingContentObject obj = source(true); + sink(obj.flowFromObject); // $ ir MISSING: ast } \ No newline at end of file From e3744c435ae1f01677192502ddbc17c5dd82014a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:44:16 +0000 Subject: [PATCH 337/497] C++: Add change note. --- .../lib/change-notes/2024-03-26-taint-inheriting-content.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md diff --git a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md new file mode 100644 index 00000000000..759386e461f --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. \ No newline at end of file From d610d721a40a0fb3c32c67c38203ad24c675659f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:47:39 +0000 Subject: [PATCH 338/497] C++: Add file QLDoc. --- cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll index 445eba91d36..1b01da19bc4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll @@ -1,3 +1,8 @@ +/** + * This file provides an abstract class that can be used to model additional + * object-to-field taint-flow. + */ + private import codeql.util.Unit private import semmle.code.cpp.dataflow.new.DataFlow From 6a8c592900d4b730b7807bea49317aedb1f32f0a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 16:59:18 +0000 Subject: [PATCH 339/497] Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll index 1b01da19bc4..673dc24b673 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/FlowSteps.qll @@ -11,7 +11,7 @@ private import semmle.code.cpp.dataflow.new.DataFlow * is itself tainted. * * For example, if we had a type `struct Container { int field; }`, then by default a tainted - * `Container` and a `Container` with a tainted `Contained` stored in its `field` are distinct. + * `Container` and a `Container` with a tainted `int` stored in its `field` are distinct. * * If `any(DataFlow::FieldContent fc | fc.getField().hasQualifiedName("Container", "field"))` was * included in this type however, then a tainted `Container` would imply that its `field` is also From 3bfaab91821d8142747cd907db20a5a9188ab6d1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 26 Mar 2024 17:01:06 +0000 Subject: [PATCH 340/497] C++: Remove debugging conjunct. --- .../semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll index 734da019413..0f69094e8d3 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll @@ -41,7 +41,6 @@ predicate localAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeT or // object->field conflation for content that is a `TaintInheritingContent`. exists(DataFlow::ContentSet f | - nodeFrom.getEnclosingCallable().hasName("test_TaintInheritingContent") and readStep(nodeFrom, f, nodeTo) and f.getAReadContent() instanceof TaintInheritingContent ) From b4a6f75ad783b7f3d302f751627deb1f80a99422 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 26 Mar 2024 17:35:07 +0000 Subject: [PATCH 341/497] C++: Divide CODEOWNERS responsibilities. --- CODEOWNERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 1869b38b7c9..c1659959fec 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,4 +1,6 @@ -/cpp/ @github/codeql-c-analysis +/cpp/ @github/codeql-c-extractor +/cpp/config/ @github/codeql-c-analysis +/cpp/ql/ @github/codeql-c-analysis /csharp/ @github/codeql-csharp /go/ @github/codeql-go /java/ @github/codeql-java From 497325455af1ee1102104c434f2a75a1cf4a07f5 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 13 Mar 2024 10:43:29 +0100 Subject: [PATCH 342/497] Java: update expected output --- .../buildless-maven-multimodule/buildless-fetches.expected | 6 +++--- .../java/buildless-maven/buildless-fetches.expected | 4 ++-- .../buildless-sibling-projects/buildless-fetches.expected | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected index dd0cd5034a0..e4a95afc713 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/buildless-fetches.expected @@ -9,7 +9,10 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar +https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar @@ -22,6 +25,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar -https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar -https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected index e3710cc4cb9..49120865e8d 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected @@ -9,7 +9,9 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar @@ -22,5 +24,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar -https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected index 44842823621..79b12c2919e 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected @@ -12,6 +12,7 @@ https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/r https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/junit/junit/4.11/junit-4.11.jar https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar @@ -25,4 +26,3 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar -https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar From 568442d5f8d317119b4e2abb14edd7aeec73e336 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Tue, 26 Mar 2024 18:11:50 +0000 Subject: [PATCH 343/497] QL: Run diagnostics and summary metrics in code scanning Add diagnostics and summary metric queries to the code scanning suite. --- ql/ql/src/codeql-suites/ql-code-scanning.qls | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ql/ql/src/codeql-suites/ql-code-scanning.qls b/ql/ql/src/codeql-suites/ql-code-scanning.qls index 4595d66f2ae..1ee4ba8084d 100644 --- a/ql/ql/src/codeql-suites/ql-code-scanning.qls +++ b/ql/ql/src/codeql-suites/ql-code-scanning.qls @@ -14,6 +14,14 @@ - error - warning - recommendation +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary - exclude: deprecated: // - exclude: From 7a0446740b532ff0341dae2319767788ac69c61b Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 27 Mar 2024 09:09:48 +0100 Subject: [PATCH 344/497] Update java/ql/lib/ext/java.net.model.yml Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- java/ql/lib/ext/java.net.model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 84614e96fe8..f48acbeace1 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -55,7 +55,7 @@ extensions: - ["java.net", "URI", False, "toURL", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URL", False, "getFile", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URL", False, "getPath", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "ai-manual"] - - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "df-manual"] # query is parth of the path + - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this].SyntheticField[java.net.URL.path]", "ReturnValue", "taint", "df-manual"] # query is part of the path - ["java.net", "URL", False, "URL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-manual"] - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[3]", "Argument[this].SyntheticField[java.net.URL.path]", "taint", "df-manual"] From 30c9ec19262d7998ba5fdb6ff620c1d03d25fb14 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:23:48 +0000 Subject: [PATCH 345/497] C++: Adjust following discussion. --- CODEOWNERS | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index c1659959fec..f052b0fe897 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,6 +1,5 @@ -/cpp/ @github/codeql-c-extractor -/cpp/config/ @github/codeql-c-analysis -/cpp/ql/ @github/codeql-c-analysis +/cpp/ @github/codeql-c-analysis +/cpp/autobuilder/ @github/codeql-c-extractor /csharp/ @github/codeql-csharp /go/ @github/codeql-go /java/ @github/codeql-java From 27c6e2421c448e409e03ebbe4f7008d5e1cacfd2 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Mar 2024 11:31:57 +0100 Subject: [PATCH 346/497] C++: Add `VariableTemplateInstantiation` class This adds some uniformity, as we already had `FunctionTemplateInstantiation` and `ClassTemplateInstantiation` classes. --- cpp/ql/lib/semmle/code/cpp/Variable.qll | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index db334f45572..3ac89ffc9b9 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -590,6 +590,33 @@ class TemplateVariable extends Variable { Variable getAnInstantiation() { result.isConstructedFrom(this) } } +/** + * A variable that is an instantiation of a template. For example + * the instantiation `myTemplateVariable` in the following code: + * ``` + * template + * T myTemplateVariable; + * + * void caller(int i) { + * myTemplateVariable = i; + * } + * ``` + */ +class VariableTemplateInstantiation extends Variable { + TemplateVariable tv; + + VariableTemplateInstantiation() { tv.getAnInstantiation() = this } + + override string getAPrimaryQlClass() { result = "VariableTemplateInstantiation" } + + /** + * Gets the variable template from which this instantiation was instantiated. + * + * Example: For `int x`, returns `T x`. + */ + TemplateVariable getTemplate() { result = tv } +} + /** * A non-static local variable or parameter that is not part of an * uninstantiated template. Uninstantiated templates are purely syntax, and From 050682c477a90fff5a938133766963120b6262e7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Mar 2024 12:03:37 +0100 Subject: [PATCH 347/497] C++: Update expected test results --- cpp/ql/test/library-tests/ir/ir/PrintAST.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index a6276ecfc5a..7f667cd61cf 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -15605,7 +15605,7 @@ ir.cpp: # 1934| Type = [ClassTemplateInstantiation,Struct] Bar2 # 1934| ValueCategory = lvalue # 1935| getStmt(2): [ReturnStmt] return ... -# 1938| [GlobalVariable] char global_template +# 1938| [GlobalVariable,VariableTemplateInstantiation] char global_template # 1938| getInitializer(): [Initializer] initializer for global_template # 1938| getExpr(): [Literal] 42 # 1938| Type = [IntType] int @@ -15616,7 +15616,7 @@ ir.cpp: # 1938| Type = [PlainCharType] char # 1938| Value = [CStyleCast] 42 # 1938| ValueCategory = prvalue -# 1938| [GlobalVariable] int global_template +# 1938| [GlobalVariable,VariableTemplateInstantiation] int global_template # 1938| getInitializer(): [Initializer] initializer for global_template # 1938| getExpr(): [Literal] 42 # 1938| Type = [IntType] int From f9d10cec080c94ca3d3eefdce6925b0497ba72c6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 12:19:41 +0100 Subject: [PATCH 348/497] Swift: fix `DeclTranslator.cpp` compile errors --- swift/extractor/translators/DeclTranslator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/swift/extractor/translators/DeclTranslator.cpp b/swift/extractor/translators/DeclTranslator.cpp index 0248d98e79f..77f9bd18b13 100644 --- a/swift/extractor/translators/DeclTranslator.cpp +++ b/swift/extractor/translators/DeclTranslator.cpp @@ -269,8 +269,8 @@ void DeclTranslator::fillOperatorDecl(const swift::OperatorDecl& decl, void DeclTranslator::fillTypeDecl(const swift::TypeDecl& decl, codeql::TypeDecl& entry) { entry.name = decl.getNameStr().str(); - for (auto& typeLoc : decl.getInherited()) { - if (auto type = typeLoc.getType()) { + for (auto& inherited : decl.getInherited().getEntries()) { + if (auto type = inherited.getType()) { entry.inherited_types.push_back(dispatcher.fetchLabel(type)); } } @@ -289,7 +289,7 @@ void DeclTranslator::fillIterableDeclContext(const swift::IterableDeclContext& d void DeclTranslator::fillVarDecl(const swift::VarDecl& decl, codeql::VarDecl& entry) { entry.name = decl.getNameStr().str(); - entry.type = dispatcher.fetchLabel(decl.getType()); + entry.type = dispatcher.fetchLabel(decl.getTypeInContext()); entry.parent_pattern = dispatcher.fetchOptionalLabel(decl.getParentPattern()); entry.parent_initializer = dispatcher.fetchOptionalLabel(decl.getParentInitializer()); if (decl.hasAttachedPropertyWrapper()) { From 2382f76317419679c6d6ed923436decd42880d87 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 12:23:37 +0100 Subject: [PATCH 349/497] Swift: ignore experimental `ThenStmt` --- swift/extractor/infra/SwiftTagTraits.h | 1 + 1 file changed, 1 insertion(+) diff --git a/swift/extractor/infra/SwiftTagTraits.h b/swift/extractor/infra/SwiftTagTraits.h index 40bea71bd50..b35bcef5a6a 100644 --- a/swift/extractor/infra/SwiftTagTraits.h +++ b/swift/extractor/infra/SwiftTagTraits.h @@ -43,6 +43,7 @@ MAP(swift::Stmt, StmtTag) MAP(swift::BraceStmt, BraceStmtTag) MAP(swift::ReturnStmt, ReturnStmtTag) MAP(swift::YieldStmt, YieldStmtTag) + MAP(swift::ThenStmt, void) // gated behind yet unusable experimental feature MAP(swift::DeferStmt, DeferStmtTag) MAP(swift::LabeledStmt, LabeledStmtTag) MAP(swift::LabeledConditionalStmt, LabeledConditionalStmtTag) From 03bf804a683e8a1431e280232abae965c9479928 Mon Sep 17 00:00:00 2001 From: Calum Grant Date: Wed, 27 Mar 2024 11:44:58 +0000 Subject: [PATCH 350/497] Add C++ analysis in separate workflow --- .github/workflows/cpp-swift-analysis.yml | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/cpp-swift-analysis.yml diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml new file mode 100644 index 00000000000..b2ebbc7d7df --- /dev/null +++ b/.github/workflows/cpp-swift-analysis.yml @@ -0,0 +1,55 @@ +name: "Code scanning - C++" + +on: + push: + branches: + - main + - 'rc/*' + pull_request: + branches: + - main + - 'rc/*' + paths: + - 'swift/**' + - '.github/codeql/**' + - '.github/workflows/cpp-swift-analysis.yml' + schedule: + - cron: '0 9 * * 1' + +jobs: + CodeQL-Build: + + runs-on: ubuntu-latest + + permissions: + contents: read + security-events: write + pull-requests: read + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@main + # Override language selection by uncommenting this and choosing your languages + with: + languages: cpp + config-file: ./.github/codeql/codeql-config.yml + + - name: "[Ubuntu] Remove GCC 13 from runner image" + shell: bash + run: | + sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list + sudo apt-get update + sudo apt-get install -y --allow-downgrades libc6=2.35-* libc6-dev=2.35-* libstdc++6=12.3.0-* libgcc-s1=12.3.0-* + + - name: "Build Swift extractor using Bazel" + run: | + bazel clean --expunge + bazel run //swift:create-extractor-pack --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local --features=-layering_check + bazel shutdown + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@main From 35fbc95cc743f63b16a68f8f5f6ce82a9d0bdbeb Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 27 Mar 2024 08:09:40 -0400 Subject: [PATCH 351/497] Java: remove redundant line --- java/ql/lib/semmle/code/java/security/UrlForward.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll index 464a125ef75..26e6e53f947 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForward.qll @@ -129,7 +129,6 @@ private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCal /** Holds if `g` is guard for a URL that does not contain URL encoding. */ private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { - g instanceof CheckUrlEncodingGuard and e = g.(CheckUrlEncodingGuard).getCheckedExpr() and branch = false or From f03a56f7e0875c0578b18b8c452688060bdb7787 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 29 Feb 2024 13:03:20 +0000 Subject: [PATCH 352/497] Run generation script The command line was: python3 /Users/owen-mc/workspace/codeql-home/codeql/java/ql/src/utils/modelgenerator/GenerateFlowModel.py /Users/owen-mc/db/java/openjdk17 --with-summaries --with-neutrals --- .../com.sun.jmx.remote.internal.model.yml | 7 + .../lib/ext/generated/java.applet.model.yml | 49 + java/ql/lib/ext/generated/java.awt.model.yml | 15 + .../java.beans.beancontext.model.yml | 85 ++ .../ql/lib/ext/generated/java.beans.model.yml | 261 +++++ java/ql/lib/ext/generated/java.io.model.yml | 417 ++++++++ .../generated/java.lang.annotation.model.yml | 21 + .../generated/java.lang.constant.model.yml | 94 ++ .../generated/java.lang.instrument.model.yml | 18 + .../ext/generated/java.lang.invoke.model.yml | 265 +++++ .../generated/java.lang.management.model.yml | 71 ++ java/ql/lib/ext/generated/java.lang.model.yml | 977 ++++++++++++++++++ .../ext/generated/java.lang.module.model.yml | 130 +++ .../lib/ext/generated/java.lang.ref.model.yml | 32 + .../ext/generated/java.lang.reflect.model.yml | 145 +++ .../ext/generated/java.lang.runtime.model.yml | 13 + java/ql/lib/ext/generated/java.math.model.yml | 107 ++ .../lib/ext/generated/java.net.http.model.yml | 103 ++ java/ql/lib/ext/generated/java.net.model.yml | 485 +++++++++ .../ext/generated/java.nio.channels.model.yml | 180 ++++ .../generated/java.nio.channels.spi.model.yml | 21 + .../ext/generated/java.nio.charset.model.yml | 82 ++ .../generated/java.nio.charset.spi.model.yml | 8 + .../java.nio.file.attribute.model.yml | 38 + .../lib/ext/generated/java.nio.file.model.yml | 158 +++ .../ext/generated/java.nio.file.spi.model.yml | 39 + java/ql/lib/ext/generated/java.nio.model.yml | 234 +++++ .../lib/ext/generated/java.rmi.dgc.model.yml | 14 + java/ql/lib/ext/generated/java.rmi.model.yml | 56 + .../ext/generated/java.rmi.registry.model.yml | 13 + .../ext/generated/java.rmi.server.model.yml | 71 ++ .../generated/java.security.cert.model.yml | 326 ++++++ .../java.security.interfaces.model.yml | 10 + .../lib/ext/generated/java.security.model.yml | 462 +++++++++ .../generated/java.security.spec.model.yml | 146 +++ java/ql/lib/ext/generated/java.sql.model.yml | 465 +++++++++ java/ql/lib/ext/generated/java.text.model.yml | 339 ++++++ .../lib/ext/generated/java.text.spi.model.yml | 21 + .../ext/generated/java.time.chrono.model.yml | 118 +++ .../ext/generated/java.time.format.model.yml | 104 ++ java/ql/lib/ext/generated/java.time.model.yml | 513 +++++++++ .../generated/java.time.temporal.model.yml | 97 ++ .../ext/generated/java.time.zone.model.yml | 63 ++ .../java.util.concurrent.atomic.model.yml | 271 +++++ .../java.util.concurrent.locks.model.yml | 128 +++ .../generated/java.util.concurrent.model.yml | 374 +++++++ .../generated/java.util.function.model.yml | 46 + .../lib/ext/generated/java.util.jar.model.yml | 54 + .../ext/generated/java.util.logging.model.yml | 155 +++ java/ql/lib/ext/generated/java.util.model.yml | 866 ++++++++++++++++ .../ext/generated/java.util.prefs.model.yml | 69 ++ .../ext/generated/java.util.random.model.yml | 88 ++ .../ext/generated/java.util.regex.model.yml | 63 ++ .../lib/ext/generated/java.util.spi.model.yml | 25 + .../ext/generated/java.util.stream.model.yml | 216 ++++ .../lib/ext/generated/java.util.zip.model.yml | 155 +++ .../generated/javax.accessibility.model.yml | 75 ++ .../javax.annotation.processing.model.yml | 25 + .../lib/ext/generated/javax.crypto.model.yml | 180 ++++ .../ext/generated/javax.crypto.spec.model.yml | 78 ++ .../javax.imageio.metadata.model.yml | 65 ++ .../lib/ext/generated/javax.imageio.model.yml | 251 +++++ .../javax.imageio.plugins.bmp.model.yml | 13 + .../javax.imageio.plugins.jpeg.model.yml | 35 + .../javax.imageio.plugins.tiff.model.yml | 94 ++ .../ext/generated/javax.imageio.spi.model.yml | 129 +++ .../generated/javax.imageio.stream.model.yml | 62 ++ .../javax.lang.model.element.model.yml | 38 + .../ext/generated/javax.lang.model.model.yml | 13 + .../generated/javax.lang.model.type.model.yml | 20 + .../generated/javax.lang.model.util.model.yml | 93 ++ .../javax.management.loading.model.yml | 44 + .../ext/generated/javax.management.model.yml | 409 ++++++++ .../javax.management.modelmbean.model.yml | 113 ++ .../javax.management.monitor.model.yml | 68 ++ .../javax.management.openmbean.model.yml | 150 +++ .../javax.management.relation.model.yml | 171 +++ .../javax.management.remote.model.yml | 72 ++ .../javax.management.remote.rmi.model.yml | 84 ++ .../javax.management.timer.model.yml | 37 + .../javax.naming.directory.model.yml | 137 +++ .../generated/javax.naming.event.model.yml | 25 + .../ext/generated/javax.naming.ldap.model.yml | 91 ++ .../generated/javax.naming.ldap.spi.model.yml | 15 + .../lib/ext/generated/javax.naming.model.yml | 177 ++++ .../ext/generated/javax.naming.spi.model.yml | 40 + java/ql/lib/ext/generated/javax.net.model.yml | 22 + .../lib/ext/generated/javax.net.ssl.model.yml | 233 +++++ .../generated/javax.print.attribute.model.yml | 70 ++ .../javax.print.attribute.standard.model.yml | 92 ++ .../ext/generated/javax.print.event.model.yml | 28 + .../lib/ext/generated/javax.print.model.yml | 56 + .../lib/ext/generated/javax.rmi.ssl.model.yml | 18 + .../lib/ext/generated/javax.script.model.yml | 66 ++ .../javax.security.auth.callback.model.yml | 61 ++ .../javax.security.auth.kerberos.model.yml | 65 ++ .../javax.security.auth.login.model.yml | 50 + .../generated/javax.security.auth.model.yml | 37 + .../javax.security.auth.x500.model.yml | 27 + .../generated/javax.security.cert.model.yml | 32 + .../generated/javax.security.sasl.model.yml | 42 + .../ext/generated/javax.smartcardio.model.yml | 78 ++ .../ext/generated/javax.sound.midi.model.yml | 96 ++ .../generated/javax.sound.midi.spi.model.yml | 24 + .../generated/javax.sound.sampled.model.yml | 128 +++ .../javax.sound.sampled.spi.model.yml | 31 + java/ql/lib/ext/generated/javax.sql.model.yml | 43 + .../ext/generated/javax.sql.rowset.model.yml | 143 +++ .../javax.sql.rowset.serial.model.yml | 29 + .../generated/javax.sql.rowset.spi.model.yml | 33 + .../lib/ext/generated/javax.tools.model.yml | 68 ++ .../generated/javax.transaction.xa.model.yml | 12 + .../ext/generated/javax.xml.catalog.model.yml | 30 + .../generated/javax.xml.crypto.dom.model.yml | 11 + .../javax.xml.crypto.dsig.dom.model.yml | 26 + .../javax.xml.crypto.dsig.keyinfo.model.yml | 31 + .../generated/javax.xml.crypto.dsig.model.yml | 61 ++ .../javax.xml.crypto.dsig.spec.model.yml | 33 + .../ext/generated/javax.xml.crypto.model.yml | 63 ++ .../generated/javax.xml.datatype.model.yml | 97 ++ .../generated/javax.xml.namespace.model.yml | 16 + .../ext/generated/javax.xml.parsers.model.yml | 93 ++ .../ext/generated/javax.xml.stream.model.yml | 156 +++ .../generated/javax.xml.stream.util.model.yml | 12 + .../javax.xml.transform.dom.model.yml | 23 + .../generated/javax.xml.transform.model.yml | 74 ++ .../javax.xml.transform.sax.model.yml | 24 + .../javax.xml.transform.stax.model.yml | 14 + .../javax.xml.transform.stream.model.yml | 21 + .../generated/javax.xml.validation.model.yml | 60 ++ .../ext/generated/javax.xml.xpath.model.yml | 37 + .../jdk.internal.access.foreign.model.yml | 10 + .../generated/jdk.internal.access.model.yml | 243 +++++ .../ext/generated/jdk.internal.misc.model.yml | 11 + .../jdk.internal.org.objectweb.asm.model.yml | 15 + .../ext/generated/org.w3c.dom.ls.model.yml | 28 + .../lib/ext/generated/org.w3c.dom.model.yml | 102 ++ .../lib/ext/generated/org.xml.sax.model.yml | 17 + java/ql/lib/ext/generated/sun.awt.model.yml | 11 + .../ql/lib/ext/generated/sun.java2d.model.yml | 7 + .../generated/sun.management.spi.model.yml | 7 + .../ql/lib/ext/generated/sun.nio.ch.model.yml | 14 + java/ql/lib/ext/generated/sun.print.model.yml | 7 + .../ext/generated/sun.security.krb5.model.yml | 13 + .../ext/generated/sun.security.util.model.yml | 7 + .../sun.util.logging.internal.model.yml | 9 + 146 files changed, 15154 insertions(+) create mode 100644 java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml create mode 100644 java/ql/lib/ext/generated/java.applet.model.yml create mode 100644 java/ql/lib/ext/generated/java.awt.model.yml create mode 100644 java/ql/lib/ext/generated/java.beans.beancontext.model.yml create mode 100644 java/ql/lib/ext/generated/java.beans.model.yml create mode 100644 java/ql/lib/ext/generated/java.io.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.annotation.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.constant.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.instrument.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.invoke.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.management.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.module.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.ref.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.reflect.model.yml create mode 100644 java/ql/lib/ext/generated/java.lang.runtime.model.yml create mode 100644 java/ql/lib/ext/generated/java.math.model.yml create mode 100644 java/ql/lib/ext/generated/java.net.http.model.yml create mode 100644 java/ql/lib/ext/generated/java.net.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.channels.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.channels.spi.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.charset.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.charset.spi.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.file.attribute.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.file.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.file.spi.model.yml create mode 100644 java/ql/lib/ext/generated/java.nio.model.yml create mode 100644 java/ql/lib/ext/generated/java.rmi.dgc.model.yml create mode 100644 java/ql/lib/ext/generated/java.rmi.model.yml create mode 100644 java/ql/lib/ext/generated/java.rmi.registry.model.yml create mode 100644 java/ql/lib/ext/generated/java.rmi.server.model.yml create mode 100644 java/ql/lib/ext/generated/java.security.cert.model.yml create mode 100644 java/ql/lib/ext/generated/java.security.interfaces.model.yml create mode 100644 java/ql/lib/ext/generated/java.security.model.yml create mode 100644 java/ql/lib/ext/generated/java.security.spec.model.yml create mode 100644 java/ql/lib/ext/generated/java.sql.model.yml create mode 100644 java/ql/lib/ext/generated/java.text.model.yml create mode 100644 java/ql/lib/ext/generated/java.text.spi.model.yml create mode 100644 java/ql/lib/ext/generated/java.time.chrono.model.yml create mode 100644 java/ql/lib/ext/generated/java.time.format.model.yml create mode 100644 java/ql/lib/ext/generated/java.time.model.yml create mode 100644 java/ql/lib/ext/generated/java.time.temporal.model.yml create mode 100644 java/ql/lib/ext/generated/java.time.zone.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.concurrent.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.function.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.jar.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.logging.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.prefs.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.random.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.regex.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.spi.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.stream.model.yml create mode 100644 java/ql/lib/ext/generated/java.util.zip.model.yml create mode 100644 java/ql/lib/ext/generated/javax.accessibility.model.yml create mode 100644 java/ql/lib/ext/generated/javax.annotation.processing.model.yml create mode 100644 java/ql/lib/ext/generated/javax.crypto.model.yml create mode 100644 java/ql/lib/ext/generated/javax.crypto.spec.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.metadata.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.imageio.stream.model.yml create mode 100644 java/ql/lib/ext/generated/javax.lang.model.element.model.yml create mode 100644 java/ql/lib/ext/generated/javax.lang.model.model.yml create mode 100644 java/ql/lib/ext/generated/javax.lang.model.type.model.yml create mode 100644 java/ql/lib/ext/generated/javax.lang.model.util.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.loading.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.modelmbean.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.monitor.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.openmbean.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.relation.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.remote.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.management.timer.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.directory.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.event.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.ldap.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.model.yml create mode 100644 java/ql/lib/ext/generated/javax.naming.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.net.model.yml create mode 100644 java/ql/lib/ext/generated/javax.net.ssl.model.yml create mode 100644 java/ql/lib/ext/generated/javax.print.attribute.model.yml create mode 100644 java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml create mode 100644 java/ql/lib/ext/generated/javax.print.event.model.yml create mode 100644 java/ql/lib/ext/generated/javax.print.model.yml create mode 100644 java/ql/lib/ext/generated/javax.rmi.ssl.model.yml create mode 100644 java/ql/lib/ext/generated/javax.script.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.auth.callback.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.auth.login.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.auth.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.auth.x500.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.cert.model.yml create mode 100644 java/ql/lib/ext/generated/javax.security.sasl.model.yml create mode 100644 java/ql/lib/ext/generated/javax.smartcardio.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sound.midi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sound.sampled.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sql.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sql.rowset.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml create mode 100644 java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml create mode 100644 java/ql/lib/ext/generated/javax.tools.model.yml create mode 100644 java/ql/lib/ext/generated/javax.transaction.xa.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.catalog.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.crypto.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.datatype.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.namespace.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.parsers.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.stream.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.stream.util.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.transform.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.validation.model.yml create mode 100644 java/ql/lib/ext/generated/javax.xml.xpath.model.yml create mode 100644 java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml create mode 100644 java/ql/lib/ext/generated/jdk.internal.access.model.yml create mode 100644 java/ql/lib/ext/generated/jdk.internal.misc.model.yml create mode 100644 java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml create mode 100644 java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml create mode 100644 java/ql/lib/ext/generated/org.w3c.dom.model.yml create mode 100644 java/ql/lib/ext/generated/org.xml.sax.model.yml create mode 100644 java/ql/lib/ext/generated/sun.awt.model.yml create mode 100644 java/ql/lib/ext/generated/sun.java2d.model.yml create mode 100644 java/ql/lib/ext/generated/sun.management.spi.model.yml create mode 100644 java/ql/lib/ext/generated/sun.nio.ch.model.yml create mode 100644 java/ql/lib/ext/generated/sun.print.model.yml create mode 100644 java/ql/lib/ext/generated/sun.security.krb5.model.yml create mode 100644 java/ql/lib/ext/generated/sun.security.util.model.yml create mode 100644 java/ql/lib/ext/generated/sun.util.logging.internal.model.yml diff --git a/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml b/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml new file mode 100644 index 00000000000..c67869a4253 --- /dev/null +++ b/java/ql/lib/ext/generated/com.sun.jmx.remote.internal.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["com.sun.jmx.remote.internal", "ClientCommunicatorAdmin", "gotIOException", "(IOException)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.applet.model.yml b/java/ql/lib/ext/generated/java.applet.model.yml new file mode 100644 index 00000000000..adcf20a8c6e --- /dev/null +++ b/java/ql/lib/ext/generated/java.applet.model.yml @@ -0,0 +1,49 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.applet", "Applet", True, "getAppletContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "getImage", "(URL,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "Applet", True, "setStub", "(AppletStub)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getApplets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletContext", True, "getImage", "(URL)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getAppletContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.applet", "AppletStub", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.applet", "Applet", "destroy", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "getAppletInfo", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "getAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "getAudioClip", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "Applet", "getParameter", "(String)", "summary", "df-generated"] + - ["java.applet", "Applet", "getParameterInfo", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "init", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "isActive", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "newAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "play", "(URL)", "summary", "df-generated"] + - ["java.applet", "Applet", "play", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "Applet", "showStatus", "(String)", "summary", "df-generated"] + - ["java.applet", "Applet", "start", "()", "summary", "df-generated"] + - ["java.applet", "Applet", "stop", "()", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getApplet", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getAudioClip", "(URL)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getStream", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "getStreamKeys", "()", "summary", "df-generated"] + - ["java.applet", "AppletContext", "setStream", "(String,InputStream)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showDocument", "(URL)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showDocument", "(URL,String)", "summary", "df-generated"] + - ["java.applet", "AppletContext", "showStatus", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "appletResize", "(int,int)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "getParameter", "(String)", "summary", "df-generated"] + - ["java.applet", "AppletStub", "isActive", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.awt.model.yml b/java/ql/lib/ext/generated/java.awt.model.yml new file mode 100644 index 00000000000..63ac56c4b3a --- /dev/null +++ b/java/ql/lib/ext/generated/java.awt.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.awt", "Component", True, "getAccessibleContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.awt", "Component", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.awt", "Component", "resize", "(Dimension)", "summary", "df-generated"] + - ["java.awt", "Component", "resize", "(int,int)", "summary", "df-generated"] + - ["java.awt", "Container", "isValidateRoot", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.beans.beancontext.model.yml b/java/ql/lib/ext/generated/java.beans.beancontext.model.yml new file mode 100644 index 00000000000..4a096488b80 --- /dev/null +++ b/java/ql/lib/ext/generated/java.beans.beancontext.model.yml @@ -0,0 +1,85 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.beans.beancontext", "BeanContext", True, "addBeanContextMembershipListener", "(BeanContextMembershipListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContext", True, "getResource", "(String,BeanContextChild)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContext", True, "instantiateChild", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", True, "getBeanContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", True, "setBeanContext", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", True, "BeanContextChildSupport", "(BeanContextChild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", True, "getBeanContextChildPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "getBeanContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "getPropagatedFrom", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", True, "setPropagatedFrom", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Object[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "BeanContextMembershipEvent", "(BeanContext,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "iterator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", True, "BeanContextServiceAvailableEvent", "(BeanContextServices,Class)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", True, "getSourceAsBeanContextServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", True, "BeanContextServiceRevokedEvent", "(BeanContextServices,Class,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", True, "getSourceAsBeanContextServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", True, "addBeanContextServicesListener", "(BeanContextServicesListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", True, "getCurrentServiceClasses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "BeanContextServicesSupport", "(BeanContextServices,Locale,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesSupport", True, "getBeanContextServicesPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "BeanContextSupport", "(BeanContext,Locale,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "getBeanContextPeer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "readChildren", "(ObjectInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", True, "writeChildren", "(ObjectOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.beans.beancontext", "BeanContext", "getResourceAsStream", "(String,BeanContextChild)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContext", "removeBeanContextMembershipListener", "(BeanContextMembershipListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "addPropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "addVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "removePropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChild", "removeVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "fireVetoableChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "isDelegated", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextChildSupport", "validatePendingSetBeanContext", "(BeanContext)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextEvent", "isPropagated", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", "contains", "(Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextMembershipEvent", "size", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", "getCurrentServiceSelectors", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceAvailableEvent", "getServiceClass", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "getCurrentServiceSelectors", "(BeanContextServices,Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "getService", "(BeanContextServices,Object,Class,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceProvider", "releaseService", "(BeanContextServices,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "getServiceClass", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "isCurrentServiceInvalidNow", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedEvent", "isServiceClass", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServiceRevokedListener", "serviceRevoked", "(BeanContextServiceRevokedEvent)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "addService", "(Class,BeanContextServiceProvider)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "getCurrentServiceSelectors", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "getService", "(BeanContextChild,Object,Class,Object,BeanContextServiceRevokedListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "hasService", "(Class)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "releaseService", "(BeanContextChild,Object,Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "removeBeanContextServicesListener", "(BeanContextServicesListener)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServices", "revokeService", "(Class,BeanContextServiceProvider,boolean)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextServicesListener", "serviceAvailable", "(BeanContextServiceAvailableEvent)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "containsKey", "(Object)", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "initialize", "()", "summary", "df-generated"] + - ["java.beans.beancontext", "BeanContextSupport", "isSerializing", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.beans.model.yml b/java/ql/lib/ext/generated/java.beans.model.yml new file mode 100644 index 00000000000..1ae8e6c73b5 --- /dev/null +++ b/java/ql/lib/ext/generated/java.beans.model.yml @@ -0,0 +1,261 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.beans", "BeanInfo", True, "getBeanDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getEventSetDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getMethodDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "BeanInfo", True, "getPropertyDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "getInstanceOf", "(Object,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[0]", "Argument[2].Element", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[0]", "Argument[2].Element", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Beans", True, "instantiate", "(ClassLoader,String,BeanContext,AppletInitializer)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "DefaultPersistenceDelegate", True, "DefaultPersistenceDelegate", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "get", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "get", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "getExceptionListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "getPersistenceDelegate", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "remove", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "setExceptionListener", "(ExceptionListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeExpression", "(Expression)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Encoder", True, "writeStatement", "(Statement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "EventHandler", "(Object,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getEventPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getListenerMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventHandler", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(Class,String,Class,String[],String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,MethodDescriptor[],Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "EventSetDescriptor", "(String,Class,Method[],Method,Method,Method)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "getListenerMethodDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "EventSetDescriptor", True, "getListenerMethods", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,Object,String,Object[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "Expression", "(Object,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Expression", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Expression", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "attributeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getShortDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "getValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setDisplayName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setShortDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setValue", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "FeatureDescriptor", True, "setValue", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", True, "IndexedPropertyChangeEvent", "(Object,String,Object,Object,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Class,String,String,String,String)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "IndexedPropertyDescriptor", "(String,Method,Method,Method,Method)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "setIndexedReadMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", True, "setIndexedWriteMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "IntrospectionException", True, "IntrospectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Introspector", True, "decapitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method,ParameterDescriptor[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "MethodDescriptor", "(Method,ParameterDescriptor[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "MethodDescriptor", True, "getParameterDescriptors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PersistenceDelegate", True, "writeObject", "(Object,Encoder)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.beans", "PersistenceDelegate", True, "writeObject", "(Object,Encoder)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "PropertyChangeEvent", "(Object,String,Object,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getOldValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getPropagationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeEvent", True, "setPropagationId", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListener", True, "propertyChange", "(PropertyChangeEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "PropertyChangeListenerProxy", "(String,PropertyChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "PropertyChangeListenerProxy", "(String,PropertyChangeListener)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeListenerProxy", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "PropertyChangeSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "getPropertyChangeListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyChangeSupport", True, "getPropertyChangeListeners", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Class,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "PropertyDescriptor", "(String,Method,Method)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "setReadMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyDescriptor", True, "setWriteMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "addPropertyChangeListener", "(PropertyChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "getAsText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "setAsText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditor", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "PropertyEditorSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "getSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "PropertyEditorSupport", True, "setSource", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "PropertyVetoException", "(String,PropertyChangeEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "PropertyVetoException", "(String,PropertyChangeEvent)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "PropertyVetoException", True, "getPropertyChangeEvent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "SimpleBeanInfo", True, "loadImage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "Statement", "(Object,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getArguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "Statement", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "VetoableChangeListenerProxy", "(String,VetoableChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "VetoableChangeListenerProxy", "(String,VetoableChangeListener)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeListenerProxy", True, "getPropertyName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "VetoableChangeSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "getVetoableChangeListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "VetoableChangeSupport", True, "getVetoableChangeListeners", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "createHandler", "(Object,ExceptionListener,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "getExceptionListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "setExceptionListener", "(ExceptionListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLDecoder", True, "setOwner", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream,String,boolean,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "XMLEncoder", "(OutputStream,String,boolean,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.beans", "XMLEncoder", True, "setOwner", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.beans", "BeanDescriptor", "BeanDescriptor", "(Class)", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "BeanDescriptor", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "getBeanClass", "()", "summary", "df-generated"] + - ["java.beans", "BeanDescriptor", "getCustomizerClass", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getAdditionalBeanInfo", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getDefaultEventIndex", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getDefaultPropertyIndex", "()", "summary", "df-generated"] + - ["java.beans", "BeanInfo", "getIcon", "(int)", "summary", "df-generated"] + - ["java.beans", "Beans", "isDesignTime", "()", "summary", "df-generated"] + - ["java.beans", "Beans", "isGuiAvailable", "()", "summary", "df-generated"] + - ["java.beans", "Beans", "isInstanceOf", "(Object,Class)", "summary", "df-generated"] + - ["java.beans", "Beans", "setDesignTime", "(boolean)", "summary", "df-generated"] + - ["java.beans", "Beans", "setGuiAvailable", "(boolean)", "summary", "df-generated"] + - ["java.beans", "DesignMode", "isDesignTime", "()", "summary", "df-generated"] + - ["java.beans", "DesignMode", "setDesignTime", "(boolean)", "summary", "df-generated"] + - ["java.beans", "Encoder", "setPersistenceDelegate", "(Class,PersistenceDelegate)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String,String)", "summary", "df-generated"] + - ["java.beans", "EventHandler", "create", "(Class,Object,String,String,String)", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getAddListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getGetListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getListenerType", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "getRemoveListenerMethod", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "isInDefaultEventSet", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "isUnicast", "()", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "setInDefaultEventSet", "(boolean)", "summary", "df-generated"] + - ["java.beans", "EventSetDescriptor", "setUnicast", "(boolean)", "summary", "df-generated"] + - ["java.beans", "ExceptionListener", "exceptionThrown", "(Exception)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isExpert", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isHidden", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "isPreferred", "()", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setExpert", "(boolean)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setHidden", "(boolean)", "summary", "df-generated"] + - ["java.beans", "FeatureDescriptor", "setPreferred", "(boolean)", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyChangeEvent", "getIndex", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedPropertyType", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedReadMethod", "()", "summary", "df-generated"] + - ["java.beans", "IndexedPropertyDescriptor", "getIndexedWriteMethod", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "flushCaches", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "flushFromCaches", "(Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,Class,int)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfo", "(Class,int)", "summary", "df-generated"] + - ["java.beans", "Introspector", "getBeanInfoSearchPath", "()", "summary", "df-generated"] + - ["java.beans", "Introspector", "setBeanInfoSearchPath", "(String[])", "summary", "df-generated"] + - ["java.beans", "MethodDescriptor", "getMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "addPropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "addPropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,Object,Object)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "fireIndexedPropertyChange", "(String,int,int,int)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "firePropertyChange", "(String,int,int)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "hasListeners", "(String)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyChangeSupport", "removePropertyChangeListener", "(String,PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "createPropertyEditor", "(Object)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getPropertyEditorClass", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getPropertyType", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getReadMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "getWriteMethod", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "isBound", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "isConstrained", "()", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setBound", "(boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setConstrained", "(boolean)", "summary", "df-generated"] + - ["java.beans", "PropertyDescriptor", "setPropertyEditorClass", "(Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getCustomEditor", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getJavaInitializationString", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "getTags", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "isPaintable", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "paintValue", "(Graphics,Rectangle)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["java.beans", "PropertyEditor", "supportsCustomEditor", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "findEditor", "(Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "getEditorSearchPath", "()", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "registerEditor", "(Class,Class)", "summary", "df-generated"] + - ["java.beans", "PropertyEditorManager", "setEditorSearchPath", "(String[])", "summary", "df-generated"] + - ["java.beans", "PropertyEditorSupport", "firePropertyChange", "()", "summary", "df-generated"] + - ["java.beans", "Statement", "execute", "()", "summary", "df-generated"] + - ["java.beans", "VetoableChangeListener", "vetoableChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "addVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "addVetoableChangeListener", "(VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(PropertyChangeEvent)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,Object,Object)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,boolean,boolean)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "fireVetoableChange", "(String,int,int)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "hasListeners", "(String)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "removeVetoableChangeListener", "(String,VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "VetoableChangeSupport", "removeVetoableChangeListener", "(VetoableChangeListener)", "summary", "df-generated"] + - ["java.beans", "Visibility", "avoidingGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "dontUseGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "needsGui", "()", "summary", "df-generated"] + - ["java.beans", "Visibility", "okToUseGui", "()", "summary", "df-generated"] + - ["java.beans", "XMLEncoder", "flush", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.io.model.yml b/java/ql/lib/ext/generated/java.io.model.yml new file mode 100644 index 00000000000..248971d2a5a --- /dev/null +++ b/java/ql/lib/ext/generated/java.io.model.yml @@ -0,0 +1,417 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.io", "BufferedOutputStream", True, "BufferedOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedOutputStream", True, "BufferedOutputStream", "(OutputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedWriter", True, "BufferedWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "BufferedWriter", True, "BufferedWriter", "(Writer,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ByteArrayOutputStream", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "CharArrayWriter", True, "writeTo", "(Writer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "CharConversionException", True, "CharConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readLine", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Console", False, "readPassword", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "reader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Console", False, "writer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "DataInputStream", True, "readUTF", "(DataInput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "write", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeBytes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeChars", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutput", True, "writeUTF", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "DataOutputStream", True, "DataOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "EOFException", True, "EOFException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Externalizable", True, "readExternal", "(ObjectInput)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "Externalizable", True, "writeExternal", "(ObjectOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "File", True, "createTempFile", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "createTempFile", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "listFiles", "(FileFilter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "listFiles", "(FilenameFilter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "File", True, "toURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileInputStream", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileNotFoundException", True, "FileNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(FileDescriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "FileOutputStream", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FileOutputStream", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "FilePermission", False, "FilePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileReader", True, "FileReader", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,Charset,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,Charset,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "FileWriter", True, "FileWriter", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOError", True, "IOError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "IOException", True, "IOException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InterruptedIOException", True, "InterruptedIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidClassException", True, "InvalidClassException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "InvalidObjectException", True, "InvalidObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberInputStream", True, "LineNumberInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberReader", True, "LineNumberReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "LineNumberReader", True, "LineNumberReader", "(Reader,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "NotActiveException", True, "NotActiveException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "NotSerializableException", True, "NotSerializableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectInput", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", False, "createFilter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "allowFilter", "(Predicate,ObjectInputFilter$Status)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "merge", "(ObjectInputFilter,ObjectInputFilter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "merge", "(ObjectInputFilter,ObjectInputFilter)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "rejectFilter", "(Predicate,ObjectInputFilter$Status)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputFilter", True, "rejectUndecidedClass", "(ObjectInputFilter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "get", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "get", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", True, "getObjectStreamClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "getObjectInputFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "readFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "readUnshared", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectInputStream", True, "setObjectInputFilter", "(ObjectInputFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutput", True, "writeObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", True, "put", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", True, "write", "(ObjectOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "ObjectOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "putFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectOutputStream", True, "writeUnshared", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getField", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamClass", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "ObjectStreamField", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "ObjectStreamField", "(String,Class,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "ObjectStreamField", True, "getTypeString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,CharsetEncoder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,CharsetEncoder)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "OutputStreamWriter", True, "OutputStreamWriter", "(OutputStream,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "PipedInputStream", "(PipedOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "PipedInputStream", "(PipedOutputStream,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedInputStream", True, "connect", "(PipedOutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedOutputStream", True, "PipedOutputStream", "(PipedInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedOutputStream", True, "connect", "(PipedInputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "PipedReader", "(PipedWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "PipedReader", "(PipedWriter,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedReader", True, "connect", "(PipedWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "PipedWriter", True, "PipedWriter", "(PipedReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PipedWriter", True, "connect", "(PipedReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(OutputStream,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "PrintStream", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "print", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "println", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintStream", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(OutputStream,boolean,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "PrintWriter", "(Writer,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "print", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "printf", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PrintWriter", True, "println", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "PushbackInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "PushbackInputStream", "(InputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "unread", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackInputStream", True, "unread", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "PushbackReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "PushbackReader", "(Reader,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "unread", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "PushbackReader", True, "unread", "(char[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "RandomAccessFile", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "RandomAccessFile", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "RandomAccessFile", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "Reader", True, "transferTo", "(Writer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.io", "SequenceInputStream", True, "SequenceInputStream", "(Enumeration)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.io", "SerializablePermission", False, "SerializablePermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "SerializablePermission", False, "SerializablePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamCorruptedException", True, "StreamCorruptedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamTokenizer", True, "StreamTokenizer", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StreamTokenizer", True, "StreamTokenizer", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StringBufferInputStream", True, "StringBufferInputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "StringWriter", True, "getBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.io", "SyncFailedException", True, "SyncFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UTFDataFormatException", True, "UTFDataFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UncheckedIOException", True, "UncheckedIOException", "(String,IOException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UncheckedIOException", True, "UncheckedIOException", "(String,IOException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "UnsupportedEncodingException", True, "UnsupportedEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "WriteAbortedException", True, "WriteAbortedException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.io", "WriteAbortedException", True, "WriteAbortedException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.io", "BufferedReader", "lines", "()", "summary", "df-generated"] + - ["java.io", "BufferedWriter", "newLine", "()", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "ByteArrayOutputStream", "(int)", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "ByteArrayOutputStream", "size", "()", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "CharArrayWriter", "(int)", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "reset", "()", "summary", "df-generated"] + - ["java.io", "CharArrayWriter", "size", "()", "summary", "df-generated"] + - ["java.io", "Console", "charset", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readBoolean", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readByte", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readChar", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readDouble", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readFloat", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readInt", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readLong", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readShort", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readUnsignedByte", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "readUnsignedShort", "()", "summary", "df-generated"] + - ["java.io", "DataInput", "skipBytes", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "write", "(byte[],int,int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "write", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeBoolean", "(boolean)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeByte", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeChar", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeDouble", "(double)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeFloat", "(float)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeInt", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeLong", "(long)", "summary", "df-generated"] + - ["java.io", "DataOutput", "writeShort", "(int)", "summary", "df-generated"] + - ["java.io", "DataOutputStream", "size", "()", "summary", "df-generated"] + - ["java.io", "File", "canExecute", "()", "summary", "df-generated"] + - ["java.io", "File", "canRead", "()", "summary", "df-generated"] + - ["java.io", "File", "canWrite", "()", "summary", "df-generated"] + - ["java.io", "File", "createNewFile", "()", "summary", "df-generated"] + - ["java.io", "File", "deleteOnExit", "()", "summary", "df-generated"] + - ["java.io", "File", "getFreeSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "getTotalSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "getUsableSpace", "()", "summary", "df-generated"] + - ["java.io", "File", "isAbsolute", "()", "summary", "df-generated"] + - ["java.io", "File", "isHidden", "()", "summary", "df-generated"] + - ["java.io", "File", "lastModified", "()", "summary", "df-generated"] + - ["java.io", "File", "list", "()", "summary", "df-generated"] + - ["java.io", "File", "list", "(FilenameFilter)", "summary", "df-generated"] + - ["java.io", "File", "listRoots", "()", "summary", "df-generated"] + - ["java.io", "File", "mkdir", "()", "summary", "df-generated"] + - ["java.io", "File", "renameTo", "(File)", "summary", "df-generated"] + - ["java.io", "File", "setExecutable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setExecutable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "File", "setLastModified", "(long)", "summary", "df-generated"] + - ["java.io", "File", "setReadOnly", "()", "summary", "df-generated"] + - ["java.io", "File", "setReadable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setReadable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "File", "setWritable", "(boolean)", "summary", "df-generated"] + - ["java.io", "File", "setWritable", "(boolean,boolean)", "summary", "df-generated"] + - ["java.io", "FileDescriptor", "sync", "()", "summary", "df-generated"] + - ["java.io", "FileDescriptor", "valid", "()", "summary", "df-generated"] + - ["java.io", "Flushable", "flush", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "available", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "mark", "(int)", "summary", "df-generated"] + - ["java.io", "InputStream", "markSupported", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "nullInputStream", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "InputStream", "skip", "(long)", "summary", "df-generated"] + - ["java.io", "InputStream", "skipNBytes", "(long)", "summary", "df-generated"] + - ["java.io", "InputStreamReader", "getEncoding", "()", "summary", "df-generated"] + - ["java.io", "LineNumberInputStream", "getLineNumber", "()", "summary", "df-generated"] + - ["java.io", "LineNumberInputStream", "setLineNumber", "(int)", "summary", "df-generated"] + - ["java.io", "LineNumberReader", "getLineNumber", "()", "summary", "df-generated"] + - ["java.io", "LineNumberReader", "setLineNumber", "(int)", "summary", "df-generated"] + - ["java.io", "ObjectInput", "available", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "getSerialFilter", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "getSerialFilterFactory", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "setSerialFilter", "(ObjectInputFilter)", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$Config", "setSerialFilterFactory", "(BinaryOperator)", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "arrayLength", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "depth", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "references", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "serialClass", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter$FilterInfo", "streamBytes", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputFilter", "checkInput", "(ObjectInputFilter$FilterInfo)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "defaulted", "(String)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,boolean)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,byte)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,char)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,double)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,float)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,int)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,long)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream$GetField", "get", "(String,short)", "summary", "df-generated"] + - ["java.io", "ObjectInputStream", "defaultReadObject", "()", "summary", "df-generated"] + - ["java.io", "ObjectInputStream", "registerValidation", "(ObjectInputValidation,int)", "summary", "df-generated"] + - ["java.io", "ObjectOutput", "flush", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,boolean)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,byte)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,char)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,double)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,float)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,int)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,long)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream$PutField", "put", "(String,short)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "defaultWriteObject", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "reset", "()", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "useProtocolVersion", "(int)", "summary", "df-generated"] + - ["java.io", "ObjectOutputStream", "writeFields", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "forClass", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "getSerialVersionUID", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "lookup", "(Class)", "summary", "df-generated"] + - ["java.io", "ObjectStreamClass", "lookupAny", "(Class)", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getOffset", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getType", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "getTypeCode", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "isPrimitive", "()", "summary", "df-generated"] + - ["java.io", "ObjectStreamField", "isUnshared", "()", "summary", "df-generated"] + - ["java.io", "OutputStream", "nullOutputStream", "()", "summary", "df-generated"] + - ["java.io", "OutputStreamWriter", "getEncoding", "()", "summary", "df-generated"] + - ["java.io", "PipedInputStream", "PipedInputStream", "(int)", "summary", "df-generated"] + - ["java.io", "PipedReader", "PipedReader", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "checkError", "()", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(char)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(double)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(float)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "print", "(long)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "()", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(char)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(double)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(float)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(int)", "summary", "df-generated"] + - ["java.io", "PrintStream", "println", "(long)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File,Charset)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(File,String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String,Charset)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "PrintWriter", "(String,String)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "checkError", "()", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(char)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(double)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(float)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(int)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "print", "(long)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "()", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(boolean)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(char)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(double)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(float)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(int)", "summary", "df-generated"] + - ["java.io", "PrintWriter", "println", "(long)", "summary", "df-generated"] + - ["java.io", "PushbackInputStream", "unread", "(int)", "summary", "df-generated"] + - ["java.io", "PushbackReader", "unread", "(int)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "getFilePointer", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "length", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "()", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "(byte[])", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "read", "(byte[],int,int)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "seek", "(long)", "summary", "df-generated"] + - ["java.io", "RandomAccessFile", "setLength", "(long)", "summary", "df-generated"] + - ["java.io", "Reader", "mark", "(int)", "summary", "df-generated"] + - ["java.io", "Reader", "markSupported", "()", "summary", "df-generated"] + - ["java.io", "Reader", "nullReader", "()", "summary", "df-generated"] + - ["java.io", "Reader", "ready", "()", "summary", "df-generated"] + - ["java.io", "Reader", "reset", "()", "summary", "df-generated"] + - ["java.io", "Reader", "skip", "(long)", "summary", "df-generated"] + - ["java.io", "SequenceInputStream", "SequenceInputStream", "(InputStream,InputStream)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "commentChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "eolIsSignificant", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "lineno", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "lowerCaseMode", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "nextToken", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "ordinaryChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "ordinaryChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "parseNumbers", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "pushBack", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "quoteChar", "(int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "resetSyntax", "()", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "slashSlashComments", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "slashStarComments", "(boolean)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "whitespaceChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StreamTokenizer", "wordChars", "(int,int)", "summary", "df-generated"] + - ["java.io", "StringWriter", "StringWriter", "(int)", "summary", "df-generated"] + - ["java.io", "Writer", "nullWriter", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.annotation.model.yml b/java/ql/lib/ext/generated/java.lang.annotation.model.yml new file mode 100644 index 00000000000..8417e0d4cee --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.annotation.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationFormatError", True, "AnnotationFormatError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "AnnotationTypeMismatchException", "(Method,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "AnnotationTypeMismatchException", "(Method,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "element", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.annotation", "AnnotationTypeMismatchException", True, "foundType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.annotation", "IncompleteAnnotationException", True, "IncompleteAnnotationException", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.annotation", "IncompleteAnnotationException", True, "elementName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.annotation", "IncompleteAnnotationException", "annotationType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.constant.model.yml b/java/ql/lib/ext/generated/java.lang.constant.model.yml new file mode 100644 index 00000000000..efa0c1a5b8c --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.constant.model.yml @@ -0,0 +1,94 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.constant", "ClassDesc", True, "arrayType", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "displayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "nested", "(String,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "of", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "ofDescriptor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ClassDesc", True, "packageName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "Constable", True, "describeConstable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDesc", True, "resolveConstantDesc", "(MethodHandles$Lookup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDesc", True, "resolveConstantDesc", "(MethodHandles$Lookup)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofCallsiteBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "ConstantDescs", False, "ofConstantBootstrap", "(ClassDesc,String,ClassDesc,ClassDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "lookupDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "methodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", True, "owner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "bootstrapArgs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "bootstrapMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "invocationName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "invocationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "of", "(DirectMethodHandleDesc,String,MethodTypeDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withArgs", "(ConstantDesc[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withArgs", "(ConstantDesc[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", True, "withNameAndType", "(String,MethodTypeDesc)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapArgs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapArgsList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "bootstrapMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "constantName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "constantType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "of", "(DirectMethodHandleDesc,ConstantDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofCanonical", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "DynamicConstantDesc", True, "ofNamed", "(DirectMethodHandleDesc,String,ClassDesc,ConstantDesc[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "asType", "(MethodTypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "asType", "(MethodTypeDesc)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "invocationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "of", "(DirectMethodHandleDesc$Kind,ClassDesc,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "of", "(DirectMethodHandleDesc$Kind,ClassDesc,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofConstructor", "(ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofConstructor", "(ClassDesc,ClassDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofField", "(DirectMethodHandleDesc$Kind,ClassDesc,String,ClassDesc)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodHandleDesc", True, "ofMethod", "(DirectMethodHandleDesc$Kind,ClassDesc,String,MethodTypeDesc)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "displayDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "of", "(ClassDesc,ClassDesc[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "of", "(ClassDesc,ClassDesc[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.constant", "MethodTypeDesc", True, "ofDescriptor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.constant", "ClassDesc", "isClassOrInterface", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc$Kind", "valueOf", "(int)", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc$Kind", "valueOf", "(int,boolean)", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "isOwnerInterface", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "kind", "()", "summary", "df-generated"] + - ["java.lang.constant", "DirectMethodHandleDesc", "refKind", "()", "summary", "df-generated"] + - ["java.lang.constant", "DynamicCallSiteDesc", "resolveCallSiteDesc", "(MethodHandles$Lookup)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.instrument.model.yml b/java/ql/lib/ext/generated/java.lang.instrument.model.yml new file mode 100644 index 00000000000..ed5693a13d4 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.instrument.model.yml @@ -0,0 +1,18 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.instrument", "ClassDefinition", False, "ClassDefinition", "(Class,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "ClassDefinition", False, "getDefinitionClassFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.instrument", "IllegalClassFormatException", True, "IllegalClassFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "UnmodifiableClassException", True, "UnmodifiableClassException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.instrument", "UnmodifiableModuleException", True, "UnmodifiableModuleException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.instrument", "ClassDefinition", "getDefinitionClass", "()", "summary", "df-generated"] + - ["java.lang.instrument", "ClassFileTransformer", "transform", "(ClassLoader,String,Class,ProtectionDomain,byte[])", "summary", "df-generated"] + - ["java.lang.instrument", "ClassFileTransformer", "transform", "(Module,ClassLoader,String,Class,ProtectionDomain,byte[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.invoke.model.yml b/java/ql/lib/ext/generated/java.lang.invoke.model.yml new file mode 100644 index 00000000000..16ba799e924 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.invoke.model.yml @@ -0,0 +1,265 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.invoke", "CallSite", True, "dynamicInvoker", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "CallSite", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "CallSite", True, "type", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ClassSpecializer$SpeciesData", True, "key", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", False, "explicitCast", "(MethodHandles$Lookup,String,Class,Object)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "ConstantCallSite", True, "ConstantCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(String,Throwable,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaConversionException", True, "LambdaConversionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaMetafactory", False, "altMetafactory", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "LambdaMetafactory", False, "metafactory", "(MethodHandles$Lookup,String,MethodType,MethodType,MethodHandle,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asCollector", "(Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asCollector", "(int,Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asFixedArity", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asFixedArity", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asSpreader", "(Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asSpreader", "(int,Class,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asType", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asType", "(MethodType)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asTypeUncached", "(MethodType)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "asVarargsCollector", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "bindTo", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "bindTo", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "type", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandle", True, "withVarargs", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", True, "getMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "bind", "(Object,String,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "dropLookupMode", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findConstructor", "(Class,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findGetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSpecial", "(Class,String,MethodType,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findSpecial", "(Class,String,MethodType,Class)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStatic", "(Class,String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStatic", "(Class,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStaticGetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findStaticSetter", "(Class,String,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findVirtual", "(Class,String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "findVirtual", "(Class,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "in", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "revealDirect", "(MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflect", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectConstructor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectGetter", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectSetter", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", False, "unreflectSpecial", "(Method,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "collectArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "collectArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "constant", "(Class,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArguments", "(MethodHandle,int,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArguments", "(MethodHandle,int,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropArgumentsToMatch", "(MethodHandle,int,List,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "dropReturn", "(MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "exactInvoker", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "explicitCastArguments", "(MethodHandle,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterArguments", "(MethodHandle,int,MethodHandle[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterArguments", "(MethodHandle,int,MethodHandle[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterReturnValue", "(MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "filterReturnValue", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "foldArguments", "(MethodHandle,int,MethodHandle)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "insertArguments", "(MethodHandle,int,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "insertArguments", "(MethodHandle,int,Object[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "invoker", "(MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "permuteArguments", "(MethodHandle,MethodType,int[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "permuteArguments", "(MethodHandle,MethodType,int[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "varHandleExactInvoker", "(VarHandle$AccessMode,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodHandles", True, "varHandleInvoker", "(VarHandle$AccessMode,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(Class[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "appendParameterTypes", "(List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "erase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "insertParameterTypes", "(int,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "insertParameterTypes", "(int,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,Class,Class[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,Class[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "methodType", "(Class,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "toMethodDescriptorString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "unwrap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MethodType", False, "wrap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", True, "MutableCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", True, "MutableCallSite", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "SerializedLambda", "(Class,String,String,String,int,String,String,String,String,Object[])", "", "Argument[9].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getCapturedArg", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getFunctionalInterfaceMethodSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getImplMethodSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", False, "getInstantiatedMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatException", True, "StringConcatException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatFactory", False, "makeConcat", "(MethodHandles$Lookup,String,MethodType)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "StringConcatFactory", False, "makeConcatWithConstants", "(MethodHandles$Lookup,String,MethodType,String,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", True, "guardWithTest", "(MethodHandle,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "TypeDescriptor", True, "descriptorString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofArray", "(ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofField", "(ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "ofStaticField", "(ClassDesc,String,ClassDesc)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle$VarHandleDesc", False, "varType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "accessModeType", "(VarHandle$AccessMode)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "coordinateTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "toMethodHandle", "(VarHandle$AccessMode)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "withInvokeBehavior", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VarHandle", True, "withInvokeExactBehavior", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.invoke", "VolatileCallSite", True, "VolatileCallSite", "(MethodHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "VolatileCallSite", True, "VolatileCallSite", "(MethodType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.invoke", "WrongMethodTypeException", True, "WrongMethodTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.invoke", "CallSite", "setTarget", "(MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "arrayVarHandle", "(MethodHandles$Lookup,String,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "enumConstant", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "fieldVarHandle", "(MethodHandles$Lookup,String,Class,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "getStaticFinal", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "getStaticFinal", "(MethodHandles$Lookup,String,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "invoke", "(MethodHandles$Lookup,String,Class,MethodHandle,Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "nullConstant", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "primitiveClass", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "ConstantBootstraps", "staticFieldVarHandle", "(MethodHandles$Lookup,String,Class,Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invoke", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeExact", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeWithArguments", "(List)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "invokeWithArguments", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandle", "isVarargsCollector", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "getReferenceKind", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "referenceKindToString", "(int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleInfo", "reflectAs", "(Class,MethodHandles$Lookup)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "asInterfaceInstance", "(Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "isWrapperInstance", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "wrapperInstanceTarget", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandleProxies", "wrapperInstanceType", "(Object)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "accessClass", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineClass", "(byte[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineHiddenClass", "(byte[],boolean,MethodHandles$Lookup$ClassOption[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "defineHiddenClassWithClassData", "(byte[],Object,boolean,MethodHandles$Lookup$ClassOption[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "ensureInitialized", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findClass", "(String)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findStaticVarHandle", "(Class,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "findVarHandle", "(Class,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "hasFullPrivilegeAccess", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "hasPrivateAccess", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "lookupClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "lookupModes", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "previousLookupClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles$Lookup", "unreflectVarHandle", "(Field)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayConstructor", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementGetter", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementSetter", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayElementVarHandle", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "arrayLength", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "byteArrayViewVarHandle", "(Class,ByteOrder)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "byteBufferViewVarHandle", "(Class,ByteOrder)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "catchException", "(MethodHandle,Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "classData", "(MethodHandles$Lookup,String,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "classDataAt", "(MethodHandles$Lookup,String,Class,int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "countedLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "countedLoop", "(MethodHandle,MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "doWhileLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "empty", "(MethodType)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "guardWithTest", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "identity", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "iteratedLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "loop", "(MethodHandle[][])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "privateLookupIn", "(Class,MethodHandles$Lookup)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "publicLookup", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "reflectAs", "(Class,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "spreadInvoker", "(MethodType,int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "tableSwitch", "(MethodHandle,MethodHandle[])", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "throwException", "(Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "tryFinally", "(MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "whileLoop", "(MethodHandle,MethodHandle,MethodHandle)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodHandles", "zero", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "fromMethodDescriptorString", "(String,ClassLoader)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "generic", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "genericMethodType", "(int)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "genericMethodType", "(int,boolean)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "hasPrimitives", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "hasWrappers", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "lastParameterType", "()", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "methodType", "(Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MethodType", "methodType", "(Class,Class)", "summary", "df-generated"] + - ["java.lang.invoke", "MutableCallSite", "syncAll", "(MutableCallSite[])", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getCapturedArgCount", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getCapturingClass", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SerializedLambda", "getImplMethodKind", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", "hasBeenInvalidated", "()", "summary", "df-generated"] + - ["java.lang.invoke", "SwitchPoint", "invalidateAll", "(SwitchPoint[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle$AccessMode", "methodName", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle$AccessMode", "valueFromMethodName", "(String)", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "acquireFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchange", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchangeAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndExchangeRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "compareAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "fullFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "get", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAdd", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAddAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndAddRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAnd", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAndAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseAndRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOr", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOrAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseOrRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXor", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXorAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndBitwiseXorRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSetAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getAndSetRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getOpaque", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "getVolatile", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "hasInvokeExactBehavior", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "isAccessModeSupported", "(VarHandle$AccessMode)", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "loadLoadFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "releaseFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "set", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setOpaque", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setRelease", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "setVolatile", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "storeStoreFence", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "varType", "()", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSet", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetAcquire", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetPlain", "(Object[])", "summary", "df-generated"] + - ["java.lang.invoke", "VarHandle", "weakCompareAndSetRelease", "(Object[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.management.model.yml b/java/ql/lib/ext/generated/java.lang.management.model.yml new file mode 100644 index 00000000000..6fd0dea3597 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.management.model.yml @@ -0,0 +1,71 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.management", "LockInfo", True, "LockInfo", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "LockInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "LockInfo", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ManagementPermission", False, "ManagementPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "ManagementPermission", False, "ManagementPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "MemoryNotificationInfo", "(String,MemoryUsage,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "MemoryNotificationInfo", "(String,MemoryUsage,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "getPoolName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", True, "getUsage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MemoryUsage", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "MonitorInfo", "(String,int,int,StackTraceElement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "MonitorInfo", "(String,int,int,StackTraceElement)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "MonitorInfo", True, "getLockedStackFrame", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "from", "(CompositeData)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockOwnerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockedMonitors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getLockedSynchronizers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getStackTrace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.management", "ThreadInfo", True, "getThreadName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.management", "LockInfo", "getIdentityHashCode", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getClassLoadingMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getCompilationMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getGarbageCollectorMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryManagerMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getMemoryPoolMXBeans", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getOperatingSystemMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMBeanServer", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBean", "(Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBean", "(MBeanServerConnection,Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBeans", "(Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformMXBeans", "(MBeanServerConnection,Class)", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getPlatformManagementInterfaces", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getRuntimeMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "getThreadMXBean", "()", "summary", "df-generated"] + - ["java.lang.management", "ManagementFactory", "newPlatformMXBeanProxy", "(MBeanServerConnection,String,Class)", "summary", "df-generated"] + - ["java.lang.management", "MemoryNotificationInfo", "getCount", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "MemoryUsage", "(long,long,long,long)", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getCommitted", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getInit", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getMax", "()", "summary", "df-generated"] + - ["java.lang.management", "MemoryUsage", "getUsed", "()", "summary", "df-generated"] + - ["java.lang.management", "MonitorInfo", "getLockedStackDepth", "()", "summary", "df-generated"] + - ["java.lang.management", "RuntimeMXBean", "getPid", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getBlockedCount", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getBlockedTime", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getLockOwnerId", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getPriority", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getThreadId", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getThreadState", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getWaitedCount", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "getWaitedTime", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isInNative", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadInfo", "isSuspended", "()", "summary", "df-generated"] + - ["java.lang.management", "ThreadMXBean", "dumpAllThreads", "(boolean,boolean,int)", "summary", "df-generated"] + - ["java.lang.management", "ThreadMXBean", "getThreadInfo", "(long[],boolean,boolean,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.model.yml b/java/ql/lib/ext/generated/java.lang.model.yml new file mode 100644 index 00000000000..c8af5bdc004 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.model.yml @@ -0,0 +1,977 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang", "AbstractMethodError", True, "AbstractMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AbstractStringBuilder", True, "appendCodePoint", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "AbstractStringBuilder", True, "deleteCharAt", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ArithmeticException", True, "ArithmeticException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ArrayIndexOutOfBoundsException", True, "ArrayIndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ArrayStoreException", True, "ArrayStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AssertionError", True, "AssertionError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "AssertionError", True, "AssertionError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "BootstrapMethodError", True, "BootstrapMethodError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "CharSequence", True, "chars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "CharSequence", True, "codePoints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Class", False, "getNestHost", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ClassCastException", True, "ClassCastException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassCircularityError", True, "ClassCircularityError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassFormatError", True, "ClassFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "findResource", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getDefinedPackage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getDefinedPackage", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getSystemResource", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "getUnnamedModule", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "loadClass", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "loadClass", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "setClassAssertionStatus", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassLoader", True, "setPackageAssertionStatus", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ClassNotFoundException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ClassValue", True, "get", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "CloneNotSupportedException", True, "CloneNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Enum$EnumDesc", False, "of", "(ClassDesc,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Enum$EnumDesc", False, "of", "(ClassDesc,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", True, "EnumConstantNotPresentException", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", True, "constantName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Error", True, "Error", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "ExceptionInInitializerError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "ExceptionInInitializerError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ExceptionInInitializerError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "IllegalAccessError", True, "IllegalAccessError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalAccessException", True, "IllegalAccessException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalArgumentException", True, "IllegalArgumentException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalCallerException", True, "IllegalCallerException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalMonitorStateException", True, "IllegalMonitorStateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalStateException", True, "IllegalStateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IllegalThreadStateException", True, "IllegalThreadStateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "IncompatibleClassChangeError", True, "IncompatibleClassChangeError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InstantiationError", True, "InstantiationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InstantiationException", True, "InstantiationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InternalError", True, "InternalError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "InterruptedException", True, "InterruptedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LayerInstantiationException", True, "LayerInstantiationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "LinkageError", True, "LinkageError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Module", False, "addExports", "(String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addOpens", "(String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addReads", "(Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "addUses", "(Class)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Module", False, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getLayer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Module", False, "getPackages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addExports", "(Module,String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addOpens", "(Module,String,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "addReads", "(Module,Module)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ModuleLayer$Controller", False, "layer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "configuration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,List,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModules", "(Configuration,List,Function)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,ClassLoader)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,List,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithManyLoaders", "(Configuration,List,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,ClassLoader)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,List,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "defineModulesWithOneLoader", "(Configuration,List,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "findLoader", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "findModule", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "modules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ModuleLayer", False, "parents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "NegativeArraySizeException", True, "NegativeArraySizeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoClassDefFoundError", True, "NoClassDefFoundError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchFieldError", True, "NoSuchFieldError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchFieldException", True, "NoSuchFieldException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchMethodError", True, "NoSuchMethodError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NoSuchMethodException", True, "NoSuchMethodException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "NumberFormatException", True, "NumberFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "OutOfMemoryError", True, "OutOfMemoryError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getImplementationVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getPackage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Package", True, "getSpecificationVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "destroyForcibly", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "Process", True, "errorReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "errorReader", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getErrorStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "inputReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "inputReader", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "outputWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "outputWriter", "(Charset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Process", True, "toHandle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(List)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "inheritIO", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectError", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectErrorStream", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectInput", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(ProcessBuilder$Redirect)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(ProcessBuilder$Redirect)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "arguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "command", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "commandLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ProcessHandle$Info", True, "user", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ReflectiveOperationException", True, "ReflectiveOperationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "optional", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Runtime$Version", False, "pre", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "RuntimePermission", False, "RuntimePermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "RuntimePermission", False, "RuntimePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "SecurityException", True, "SecurityException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackOverflowError", True, "StackOverflowError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,String,String,String,int)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "StackTraceElement", "(String,String,String,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getClassLoaderName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getModuleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackTraceElement", False, "getModuleVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "getMethodType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", True, "toStackTraceElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker", False, "getInstance", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StackWalker", False, "getInstance", "(Set,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "StringIndexOutOfBoundsException", True, "StringIndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "getProperty", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "setProperty", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "System", False, "setProperty", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable,String,long,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "getThreadGroup", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "getUncaughtExceptionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setContextClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "Thread", True, "setUncaughtExceptionHandler", "(Thread$UncaughtExceptionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "ThreadGroup", "(ThreadGroup,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(ThreadGroup[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(ThreadGroup[],boolean)", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(Thread[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "enumerate", "(Thread[],boolean)", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "ThreadGroup", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Throwable", True, "fillInStackTrace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "Throwable", True, "printStackTrace", "(PrintWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "TypeNotPresentException", True, "typeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang", "UnknownError", True, "UnknownError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsatisfiedLinkError", True, "UnsatisfiedLinkError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedClassVersionError", True, "UnsupportedClassVersionError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "UnsupportedOperationException", True, "UnsupportedOperationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VerifyError", True, "VerifyError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang", "VirtualMachineError", True, "VirtualMachineError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang", "AbstractStringBuilder", "capacity", "()", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointAt", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointBefore", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "codePointCount", "(int,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "indexOf", "(String)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "indexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "lastIndexOf", "(String)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "lastIndexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "offsetByCodePoints", "(int,int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "setCharAt", "(int,char)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "setLength", "(int)", "summary", "df-generated"] + - ["java.lang", "AbstractStringBuilder", "trimToSize", "()", "summary", "df-generated"] + - ["java.lang", "ArrayIndexOutOfBoundsException", "ArrayIndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(boolean)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(char)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(double)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(float)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(int)", "summary", "df-generated"] + - ["java.lang", "AssertionError", "AssertionError", "(long)", "summary", "df-generated"] + - ["java.lang", "AutoCloseable", "close", "()", "summary", "df-generated"] + - ["java.lang", "Boolean", "Boolean", "(String)", "summary", "df-generated"] + - ["java.lang", "Boolean", "Boolean", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "compare", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "getBoolean", "(String)", "summary", "df-generated"] + - ["java.lang", "Boolean", "hashCode", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalAnd", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalOr", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "logicalXor", "(boolean,boolean)", "summary", "df-generated"] + - ["java.lang", "Boolean", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "Byte", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "Byte", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "compare", "(byte,byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "compareUnsigned", "(byte,byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "hashCode", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "parseByte", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "parseByte", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Byte", "toUnsignedInt", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "toUnsignedLong", "(byte)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Byte", "valueOf", "(byte)", "summary", "df-generated"] + - ["java.lang", "CharSequence", "compare", "(CharSequence,CharSequence)", "summary", "df-generated"] + - ["java.lang", "CharSequence", "isEmpty", "()", "summary", "df-generated"] + - ["java.lang", "CharSequence", "length", "()", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "forName", "(String)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "of", "(char)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeBlock", "of", "(int)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeScript", "forName", "(String)", "summary", "df-generated"] + - ["java.lang", "Character$UnicodeScript", "of", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "Character", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "charCount", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "charValue", "()", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(CharSequence,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointAt", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(CharSequence,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointBefore", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointCount", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointCount", "(char[],int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "codePointOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Character", "compare", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "digit", "(char,int)", "summary", "df-generated"] + - ["java.lang", "Character", "digit", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "forDigit", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "getDirectionality", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getDirectionality", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getName", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getNumericValue", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getNumericValue", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "getType", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "getType", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "hashCode", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "highSurrogate", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isAlphabetic", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isBmpCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isDefined", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isDefined", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isDigit", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isHighSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isISOControl", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isISOControl", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdentifierIgnorable", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdentifierIgnorable", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isIdeographic", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierPart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierPart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierStart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaIdentifierStart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaLetter", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isJavaLetterOrDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetter", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetter", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetterOrDigit", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLetterOrDigit", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowerCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isLowerCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isMirrored", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isMirrored", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpace", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpaceChar", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSpaceChar", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSupplementaryCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isSurrogate", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isSurrogatePair", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "isTitleCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isTitleCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierPart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierPart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierStart", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUnicodeIdentifierStart", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isUpperCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isUpperCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isValidCodePoint", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "isWhitespace", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "isWhitespace", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "lowSurrogate", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "offsetByCodePoints", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "offsetByCodePoints", "(char[],int,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Character", "reverseBytes", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toChars", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toChars", "(int,char[],int)", "summary", "df-generated"] + - ["java.lang", "Character", "toCodePoint", "(char,char)", "summary", "df-generated"] + - ["java.lang", "Character", "toLowerCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toLowerCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toTitleCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toTitleCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "toUpperCase", "(char)", "summary", "df-generated"] + - ["java.lang", "Character", "toUpperCase", "(int)", "summary", "df-generated"] + - ["java.lang", "Character", "valueOf", "(char)", "summary", "df-generated"] + - ["java.lang", "Class", "asSubclass", "(Class)", "summary", "df-generated"] + - ["java.lang", "Class", "desiredAssertionStatus", "()", "summary", "df-generated"] + - ["java.lang", "Class", "forName", "(Module,String)", "summary", "df-generated"] + - ["java.lang", "Class", "forName", "(String,boolean,ClassLoader)", "summary", "df-generated"] + - ["java.lang", "Class", "getAnnotatedInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getAnnotatedSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getClasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getComponentType", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getConstructor", "(Class[])", "summary", "df-generated"] + - ["java.lang", "Class", "getConstructors", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredClasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredConstructors", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredFields", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredMethod", "(String,Class[])", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaredMethods", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingConstructor", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnclosingMethod", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getEnumConstants", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getField", "(String)", "summary", "df-generated"] + - ["java.lang", "Class", "getFields", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getGenericInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getGenericSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getInterfaces", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getMethods", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getModule", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getNestMembers", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPackage", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPackageName", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getPermittedSubclasses", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getProtectionDomain", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getRecordComponents", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getSigners", "()", "summary", "df-generated"] + - ["java.lang", "Class", "getSuperclass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isAnnotation", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isAnonymousClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isEnum", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isHidden", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isInterface", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isLocalClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isMemberClass", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isNestmateOf", "(Class)", "summary", "df-generated"] + - ["java.lang", "Class", "isRecord", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isSealed", "()", "summary", "df-generated"] + - ["java.lang", "Class", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang", "Class", "newInstance", "()", "summary", "df-generated"] + - ["java.lang", "Class", "toGenericString", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "clearAssertionStatus", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "findResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getDefinedPackages", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getPlatformClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getSystemResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "isRegisteredAsParallelCapable", "()", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "resources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "setDefaultAssertionStatus", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ClassValue", "remove", "(Class)", "summary", "df-generated"] + - ["java.lang", "Compiler", "command", "(Object)", "summary", "df-generated"] + - ["java.lang", "Compiler", "compileClass", "(Class)", "summary", "df-generated"] + - ["java.lang", "Compiler", "compileClasses", "(String)", "summary", "df-generated"] + - ["java.lang", "Compiler", "disable", "()", "summary", "df-generated"] + - ["java.lang", "Compiler", "enable", "()", "summary", "df-generated"] + - ["java.lang", "Double", "Double", "(String)", "summary", "df-generated"] + - ["java.lang", "Double", "Double", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "compare", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "doubleToRawLongBits", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "hashCode", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isFinite", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isInfinite", "()", "summary", "df-generated"] + - ["java.lang", "Double", "isInfinite", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "isNaN", "()", "summary", "df-generated"] + - ["java.lang", "Double", "isNaN", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "longBitsToDouble", "(long)", "summary", "df-generated"] + - ["java.lang", "Double", "max", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "min", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "sum", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Double", "toHexString", "(double)", "summary", "df-generated"] + - ["java.lang", "Double", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Enum", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "Enum", "valueOf", "(Class,String)", "summary", "df-generated"] + - ["java.lang", "EnumConstantNotPresentException", "enumType", "()", "summary", "df-generated"] + - ["java.lang", "FdLibm$Cbrt", "compute", "(double)", "summary", "df-generated"] + - ["java.lang", "FdLibm$Hypot", "compute", "(double,double)", "summary", "df-generated"] + - ["java.lang", "FdLibm$Pow", "compute", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(double)", "summary", "df-generated"] + - ["java.lang", "Float", "Float", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "compare", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "floatToIntBits", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "floatToRawIntBits", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "hashCode", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "intBitsToFloat", "(int)", "summary", "df-generated"] + - ["java.lang", "Float", "isFinite", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "isInfinite", "()", "summary", "df-generated"] + - ["java.lang", "Float", "isInfinite", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "isNaN", "()", "summary", "df-generated"] + - ["java.lang", "Float", "isNaN", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "max", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "min", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "parseFloat", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "sum", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Float", "toHexString", "(float)", "summary", "df-generated"] + - ["java.lang", "Float", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Float", "valueOf", "(float)", "summary", "df-generated"] + - ["java.lang", "IndexOutOfBoundsException", "IndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "IndexOutOfBoundsException", "IndexOutOfBoundsException", "(long)", "summary", "df-generated"] + - ["java.lang", "Integer", "Integer", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "bitCount", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "compare", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "compareUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "divideUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String,Integer)", "summary", "df-generated"] + - ["java.lang", "Integer", "getInteger", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "hashCode", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "highestOneBit", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "lowestOneBit", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "max", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "min", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "numberOfLeadingZeros", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "numberOfTrailingZeros", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseInt", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseInt", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(String)", "summary", "df-generated"] + - ["java.lang", "Integer", "parseUnsignedInt", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "remainderUnsigned", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "reverse", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "reverseBytes", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "rotateLeft", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "rotateRight", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "signum", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "sum", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toBinaryString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toOctalString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedLong", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedString", "(int)", "summary", "df-generated"] + - ["java.lang", "Integer", "toUnsignedString", "(int,int)", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "intValue", "()", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "longValue", "()", "summary", "df-generated"] + - ["java.lang", "LiveStackFrame$PrimitiveSlot", "size", "()", "summary", "df-generated"] + - ["java.lang", "Long", "Long", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "bitCount", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "compare", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "compareUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "divideUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String,Long)", "summary", "df-generated"] + - ["java.lang", "Long", "getLong", "(String,long)", "summary", "df-generated"] + - ["java.lang", "Long", "hashCode", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "highestOneBit", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "lowestOneBit", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "max", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "min", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "numberOfLeadingZeros", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "numberOfTrailingZeros", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "parseLong", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseLong", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(CharSequence,int,int,int)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(String)", "summary", "df-generated"] + - ["java.lang", "Long", "parseUnsignedLong", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Long", "remainderUnsigned", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "reverse", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "reverseBytes", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "rotateLeft", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Long", "rotateRight", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Long", "signum", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "sum", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Long", "toBinaryString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toHexString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toOctalString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toUnsignedString", "(long)", "summary", "df-generated"] + - ["java.lang", "Long", "toUnsignedString", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "IEEEremainder", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "abs", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "absExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "absExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "acos", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "addExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "addExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "asin", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "atan2", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "atan", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "cbrt", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ceil", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "copySign", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "copySign", "(float,float)", "summary", "df-generated"] + - ["java.lang", "Math", "cos", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "cosh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "decrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "decrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "exp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "expm1", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "floor", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorDiv", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "floorMod", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "fma", "(double,double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "fma", "(float,float,float)", "summary", "df-generated"] + - ["java.lang", "Math", "getExponent", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "getExponent", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "hypot", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "incrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "incrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "log10", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "log1p", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "log", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyFull", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "multiplyHigh", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "negateExact", "(int)", "summary", "df-generated"] + - ["java.lang", "Math", "negateExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "nextAfter", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextAfter", "(float,double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextDown", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextDown", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "nextUp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "nextUp", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "pow", "(double,double)", "summary", "df-generated"] + - ["java.lang", "Math", "random", "()", "summary", "df-generated"] + - ["java.lang", "Math", "rint", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "round", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "round", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "scalb", "(double,int)", "summary", "df-generated"] + - ["java.lang", "Math", "scalb", "(float,int)", "summary", "df-generated"] + - ["java.lang", "Math", "signum", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "signum", "(float)", "summary", "df-generated"] + - ["java.lang", "Math", "sin", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "sinh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "sqrt", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "subtractExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "Math", "subtractExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "Math", "tan", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "tanh", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "toDegrees", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "toIntExact", "(long)", "summary", "df-generated"] + - ["java.lang", "Math", "toRadians", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ulp", "(double)", "summary", "df-generated"] + - ["java.lang", "Math", "ulp", "(float)", "summary", "df-generated"] + - ["java.lang", "Module", "canRead", "(Module)", "summary", "df-generated"] + - ["java.lang", "Module", "canUse", "(Class)", "summary", "df-generated"] + - ["java.lang", "Module", "getResourceAsStream", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isExported", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isExported", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "Module", "isNamed", "()", "summary", "df-generated"] + - ["java.lang", "Module", "isOpen", "(String)", "summary", "df-generated"] + - ["java.lang", "Module", "isOpen", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "ModuleLayer", "boot", "()", "summary", "df-generated"] + - ["java.lang", "ModuleLayer", "empty", "()", "summary", "df-generated"] + - ["java.lang", "Number", "byteValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "doubleValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "floatValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "intValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "longValue", "()", "summary", "df-generated"] + - ["java.lang", "Number", "shortValue", "()", "summary", "df-generated"] + - ["java.lang", "Object", "equals", "(Object)", "summary", "df-generated"] + - ["java.lang", "Object", "finalize", "()", "summary", "df-generated"] + - ["java.lang", "Object", "hashCode", "()", "summary", "df-generated"] + - ["java.lang", "Object", "notify", "()", "summary", "df-generated"] + - ["java.lang", "Object", "notifyAll", "()", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "()", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "(long)", "summary", "df-generated"] + - ["java.lang", "Object", "wait", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Package", "getPackages", "()", "summary", "df-generated"] + - ["java.lang", "Package", "isCompatibleWith", "(String)", "summary", "df-generated"] + - ["java.lang", "Package", "isSealed", "()", "summary", "df-generated"] + - ["java.lang", "Package", "isSealed", "(URL)", "summary", "df-generated"] + - ["java.lang", "Process", "children", "()", "summary", "df-generated"] + - ["java.lang", "Process", "descendants", "()", "summary", "df-generated"] + - ["java.lang", "Process", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "Process", "exitValue", "()", "summary", "df-generated"] + - ["java.lang", "Process", "info", "()", "summary", "df-generated"] + - ["java.lang", "Process", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "Process", "onExit", "()", "summary", "df-generated"] + - ["java.lang", "Process", "pid", "()", "summary", "df-generated"] + - ["java.lang", "Process", "supportsNormalTermination", "()", "summary", "df-generated"] + - ["java.lang", "Process", "waitFor", "()", "summary", "df-generated"] + - ["java.lang", "Process", "waitFor", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "appendTo", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "file", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "from", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "to", "(File)", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder$Redirect", "type", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "redirectErrorStream", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "start", "()", "summary", "df-generated"] + - ["java.lang", "ProcessBuilder", "startPipeline", "(List)", "summary", "df-generated"] + - ["java.lang", "ProcessHandle$Info", "startInstant", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle$Info", "totalCpuDuration", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "allProcesses", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "children", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "current", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "descendants", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "destroyForcibly", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "info", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "of", "(long)", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "onExit", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "parent", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "pid", "()", "summary", "df-generated"] + - ["java.lang", "ProcessHandle", "supportsNormalTermination", "()", "summary", "df-generated"] + - ["java.lang", "Readable", "read", "(CharBuffer)", "summary", "df-generated"] + - ["java.lang", "Runnable", "run", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "compareToIgnoreOptional", "(Runtime$Version)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "equalsIgnoreOptional", "(Object)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "feature", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "interim", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "major", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "minor", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "parse", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "patch", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "security", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "update", "()", "summary", "df-generated"] + - ["java.lang", "Runtime$Version", "version", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "addShutdownHook", "(Thread)", "summary", "df-generated"] + - ["java.lang", "Runtime", "availableProcessors", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String,String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String,String[],File)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[],String[])", "summary", "df-generated"] + - ["java.lang", "Runtime", "exec", "(String[],String[],File)", "summary", "df-generated"] + - ["java.lang", "Runtime", "exit", "(int)", "summary", "df-generated"] + - ["java.lang", "Runtime", "freeMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "gc", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "halt", "(int)", "summary", "df-generated"] + - ["java.lang", "Runtime", "load", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "loadLibrary", "(String)", "summary", "df-generated"] + - ["java.lang", "Runtime", "maxMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "removeShutdownHook", "(Thread)", "summary", "df-generated"] + - ["java.lang", "Runtime", "runFinalization", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "totalMemory", "()", "summary", "df-generated"] + - ["java.lang", "Runtime", "version", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccept", "(String,int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccess", "(Thread)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkAccess", "(ThreadGroup)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkConnect", "(String,int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkConnect", "(String,int,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkCreateClassLoader", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkDelete", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkExec", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkExit", "(int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkLink", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkListen", "(int)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkMulticast", "(InetAddress)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkMulticast", "(InetAddress,byte)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPackageAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPackageDefinition", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPermission", "(Permission,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPrintJobAccess", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPropertiesAccess", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkPropertyAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(FileDescriptor)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkRead", "(String,Object)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkSecurityAccess", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkSetFactory", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkWrite", "(FileDescriptor)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "checkWrite", "(String)", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "getSecurityContext", "()", "summary", "df-generated"] + - ["java.lang", "SecurityManager", "getThreadGroup", "()", "summary", "df-generated"] + - ["java.lang", "Short", "Short", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "Short", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "compare", "(short,short)", "summary", "df-generated"] + - ["java.lang", "Short", "compareUnsigned", "(short,short)", "summary", "df-generated"] + - ["java.lang", "Short", "decode", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "hashCode", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "parseShort", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "parseShort", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Short", "reverseBytes", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "toUnsignedInt", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "toUnsignedLong", "(short)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(String)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "Short", "valueOf", "(short)", "summary", "df-generated"] + - ["java.lang", "StackTraceElement", "getLineNumber", "()", "summary", "df-generated"] + - ["java.lang", "StackTraceElement", "isNativeMethod", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getByteCodeIndex", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getClassName", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "getLineNumber", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker$StackFrame", "isNativeMethod", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "forEach", "(Consumer)", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getCallerClass", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getInstance", "()", "summary", "df-generated"] + - ["java.lang", "StackWalker", "getInstance", "(StackWalker$Option)", "summary", "df-generated"] + - ["java.lang", "StackWalker", "walk", "(Function)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "IEEEremainder", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "abs", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "absExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "absExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "acos", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "addExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "addExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "asin", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "atan2", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "atan", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cbrt", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ceil", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "copySign", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "copySign", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cos", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "cosh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "decrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "decrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "exp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "expm1", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floor", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorDiv", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "floorMod", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "fma", "(double,double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "fma", "(float,float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "getExponent", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "getExponent", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "hypot", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "incrementExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "incrementExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log10", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log1p", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "log", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "max", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(float,float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "min", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(long,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyFull", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "multiplyHigh", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "negateExact", "(int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "negateExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextAfter", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextAfter", "(float,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextDown", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextDown", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextUp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "nextUp", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "pow", "(double,double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "random", "()", "summary", "df-generated"] + - ["java.lang", "StrictMath", "rint", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "round", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "round", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "scalb", "(double,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "scalb", "(float,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "signum", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "signum", "(float)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sin", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sinh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "sqrt", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "subtractExact", "(int,int)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "subtractExact", "(long,long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "tan", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "tanh", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toDegrees", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toIntExact", "(long)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "toRadians", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ulp", "(double)", "summary", "df-generated"] + - ["java.lang", "StrictMath", "ulp", "(float)", "summary", "df-generated"] + - ["java.lang", "String", "codePointAt", "(int)", "summary", "df-generated"] + - ["java.lang", "String", "codePointBefore", "(int)", "summary", "df-generated"] + - ["java.lang", "String", "codePointCount", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "compareToIgnoreCase", "(String)", "summary", "df-generated"] + - ["java.lang", "String", "contentEquals", "(CharSequence)", "summary", "df-generated"] + - ["java.lang", "String", "contentEquals", "(StringBuffer)", "summary", "df-generated"] + - ["java.lang", "String", "indexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "indexOf", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "isBlank", "()", "summary", "df-generated"] + - ["java.lang", "String", "lastIndexOf", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "lastIndexOf", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "matches", "(String)", "summary", "df-generated"] + - ["java.lang", "String", "offsetByCodePoints", "(int,int)", "summary", "df-generated"] + - ["java.lang", "String", "regionMatches", "(boolean,int,String,int,int)", "summary", "df-generated"] + - ["java.lang", "String", "regionMatches", "(int,String,int,int)", "summary", "df-generated"] + - ["java.lang", "String", "startsWith", "(String,int)", "summary", "df-generated"] + - ["java.lang", "String", "transform", "(Function)", "summary", "df-generated"] + - ["java.lang", "String", "valueOf", "(double)", "summary", "df-generated"] + - ["java.lang", "String", "valueOf", "(float)", "summary", "df-generated"] + - ["java.lang", "StringBuffer", "StringBuffer", "(int)", "summary", "df-generated"] + - ["java.lang", "StringIndexOutOfBoundsException", "StringIndexOutOfBoundsException", "(int)", "summary", "df-generated"] + - ["java.lang", "System$Logger$Level", "getName", "()", "summary", "df-generated"] + - ["java.lang", "System$Logger$Level", "getSeverity", "()", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Object)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String,Object[])", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,String,Throwable)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Supplier)", "summary", "df-generated"] + - ["java.lang", "System$Logger", "log", "(System$Logger$Level,Supplier,Throwable)", "summary", "df-generated"] + - ["java.lang", "System$LoggerFinder", "getLogger", "(String,Module)", "summary", "df-generated"] + - ["java.lang", "System$LoggerFinder", "getLoggerFinder", "()", "summary", "df-generated"] + - ["java.lang", "System", "clearProperty", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "console", "()", "summary", "df-generated"] + - ["java.lang", "System", "gc", "()", "summary", "df-generated"] + - ["java.lang", "System", "getProperties", "()", "summary", "df-generated"] + - ["java.lang", "System", "getProperty", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "getSecurityManager", "()", "summary", "df-generated"] + - ["java.lang", "System", "getenv", "()", "summary", "df-generated"] + - ["java.lang", "System", "inheritedChannel", "()", "summary", "df-generated"] + - ["java.lang", "System", "load", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "loadLibrary", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "mapLibraryName", "(String)", "summary", "df-generated"] + - ["java.lang", "System", "runFinalization", "()", "summary", "df-generated"] + - ["java.lang", "System", "setErr", "(PrintStream)", "summary", "df-generated"] + - ["java.lang", "System", "setIn", "(InputStream)", "summary", "df-generated"] + - ["java.lang", "System", "setOut", "(PrintStream)", "summary", "df-generated"] + - ["java.lang", "System", "setProperties", "(Properties)", "summary", "df-generated"] + - ["java.lang", "System", "setSecurityManager", "(SecurityManager)", "summary", "df-generated"] + - ["java.lang", "Thread$UncaughtExceptionHandler", "uncaughtException", "(Thread,Throwable)", "summary", "df-generated"] + - ["java.lang", "Thread", "activeCount", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "checkAccess", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "countStackFrames", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "dumpStack", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "enumerate", "(Thread[])", "summary", "df-generated"] + - ["java.lang", "Thread", "getAllStackTraces", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getDefaultUncaughtExceptionHandler", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getId", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getPriority", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getStackTrace", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "getState", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "holdsLock", "(Object)", "summary", "df-generated"] + - ["java.lang", "Thread", "interrupted", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isAlive", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "isInterrupted", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "(long)", "summary", "df-generated"] + - ["java.lang", "Thread", "join", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Thread", "onSpinWait", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "resume", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "setDaemon", "(boolean)", "summary", "df-generated"] + - ["java.lang", "Thread", "setDefaultUncaughtExceptionHandler", "(Thread$UncaughtExceptionHandler)", "summary", "df-generated"] + - ["java.lang", "Thread", "setPriority", "(int)", "summary", "df-generated"] + - ["java.lang", "Thread", "sleep", "(long,int)", "summary", "df-generated"] + - ["java.lang", "Thread", "stop", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "suspend", "()", "summary", "df-generated"] + - ["java.lang", "Thread", "yield", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "activeCount", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "activeGroupCount", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "allowThreadSuspension", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "checkAccess", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "destroy", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "getMaxPriority", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "interrupt", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "isDaemon", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "isDestroyed", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "list", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "parentOf", "(ThreadGroup)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "resume", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "setDaemon", "(boolean)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "setMaxPriority", "(int)", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "stop", "()", "summary", "df-generated"] + - ["java.lang", "ThreadGroup", "suspend", "()", "summary", "df-generated"] + - ["java.lang", "ThreadLocal", "remove", "()", "summary", "df-generated"] + - ["java.lang", "Throwable", "printStackTrace", "()", "summary", "df-generated"] + - ["java.lang", "Throwable", "printStackTrace", "(PrintStream)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.module.model.yml b/java/ql/lib/ext/generated/java.lang.module.model.yml new file mode 100644 index 00000000000..99377e90986 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.module.model.yml @@ -0,0 +1,130 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.module", "Configuration", False, "findModule", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "modules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "parents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolve", "(ModuleFinder,List,ModuleFinder,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolve", "(ModuleFinder,ModuleFinder,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolveAndBind", "(ModuleFinder,List,ModuleFinder,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "Configuration", False, "resolveAndBind", "(ModuleFinder,ModuleFinder,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "FindException", True, "FindException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "InvalidModuleDescriptorException", True, "InvalidModuleDescriptorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(ModuleDescriptor$Exports)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(ModuleDescriptor$Exports)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(Set,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "exports", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "mainClass", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "mainClass", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(ModuleDescriptor$Opens)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(ModuleDescriptor$Opens)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(Set,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "opens", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "packages", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "packages", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(ModuleDescriptor$Provides)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(ModuleDescriptor$Provides)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "provides", "(String,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(ModuleDescriptor$Requires)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(ModuleDescriptor$Requires)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(Set,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "requires", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "uses", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "uses", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(ModuleDescriptor$Version)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(ModuleDescriptor$Version)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Builder", False, "version", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "source", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", False, "targets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "source", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", False, "targets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Provides", False, "providers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Provides", False, "service", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "compiledVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Requires", False, "rawCompiledVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Version", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "exports", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "mainClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "modifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newAutomaticModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newModule", "(String,Set)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "newOpenModule", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "opens", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "packages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "provides", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "rawVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(ByteBuffer,Supplier)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream,Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "read", "(InputStream,Supplier)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "requires", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "toNameAndVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "uses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", True, "version", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "find", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "findAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleFinder", True, "of", "(Path[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleReader", True, "open", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleReader", True, "read", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ModuleReference", True, "descriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ModuleReference", True, "location", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolutionException", True, "ResolutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "configuration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "reads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.module", "ResolvedModule", False, "reference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.module", "Configuration", "empty", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Exports", "isQualified", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor$Opens", "isQualified", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "isAutomatic", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "isOpen", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleDescriptor", "read", "(ByteBuffer)", "summary", "df-generated"] + - ["java.lang.module", "ModuleFinder", "compose", "(ModuleFinder[])", "summary", "df-generated"] + - ["java.lang.module", "ModuleFinder", "ofSystem", "()", "summary", "df-generated"] + - ["java.lang.module", "ModuleReader", "release", "(ByteBuffer)", "summary", "df-generated"] + - ["java.lang.module", "ModuleReference", "open", "()", "summary", "df-generated"] + - ["java.lang.module", "ResolvedModule", "name", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.ref.model.yml b/java/ql/lib/ext/generated/java.lang.ref.model.yml new file mode 100644 index 00000000000..58ae03a832f --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.ref.model.yml @@ -0,0 +1,32 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "Cleaner", False, "register", "(Object,Runnable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "PhantomReference", True, "PhantomReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "PhantomReference", True, "PhantomReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "Reference", True, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "poll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "remove", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "ReferenceQueue", True, "remove", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "SoftReference", True, "SoftReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object,ReferenceQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.ref", "WeakReference", True, "WeakReference", "(Object,ReferenceQueue)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.ref", "Cleaner", "create", "()", "summary", "df-generated"] + - ["java.lang.ref", "Cleaner", "create", "(ThreadFactory)", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "clear", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "enqueue", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "isEnqueued", "()", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "reachabilityFence", "(Object)", "summary", "df-generated"] + - ["java.lang.ref", "Reference", "refersTo", "(Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.reflect.model.yml b/java/ql/lib/ext/generated/java.lang.reflect.model.yml new file mode 100644 index 00000000000..b79a4078005 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.reflect.model.yml @@ -0,0 +1,145 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotation", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getAnnotationsByType", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotation", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", True, "getDeclaredAnnotationsByType", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedReceiverType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getAnnotatedReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getGenericExceptionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getGenericParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Executable", True, "toGenericString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "getGenericType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Field", False, "toGenericString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "GenericDeclaration", True, "getTypeParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "GenericSignatureFormatError", True, "GenericSignatureFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InaccessibleObjectException", True, "InaccessibleObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationHandler", True, "invoke", "(Object,Method,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "InvocationTargetException", "(Throwable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "InvocationTargetException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "MalformedParameterizedTypeException", True, "MalformedParameterizedTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "MalformedParametersException", True, "MalformedParametersException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "Member", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Method", False, "getGenericReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getDeclaringExecutable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Parameter", False, "getParameterizedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "Proxy", True, "getInvocationHandler", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getAccessor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getAnnotatedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getGenericSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getGenericType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "RecordComponent", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "ReflectPermission", False, "ReflectPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "ReflectPermission", False, "ReflectPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "Type", True, "getTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "UndeclaredThrowableException", "(Throwable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.lang.reflect", "UndeclaredThrowableException", True, "getUndeclaredThrowable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.reflect", "AccessibleObject", "canAccess", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "isAccessible", "()", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "setAccessible", "(AccessibleObject[],boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "setAccessible", "(boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "AccessibleObject", "trySetAccessible", "()", "summary", "df-generated"] + - ["java.lang.reflect", "AnnotatedElement", "isAnnotationPresent", "(Class)", "summary", "df-generated"] + - ["java.lang.reflect", "AnnotatedType", "getAnnotatedOwnerType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "get", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getBoolean", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getByte", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getChar", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getDouble", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getFloat", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getInt", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getLength", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getLong", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "getShort", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "newInstance", "(Class,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "newInstance", "(Class,int[])", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "set", "(Object,int,Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setBoolean", "(Object,int,boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setByte", "(Object,int,byte)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setChar", "(Object,int,char)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setDouble", "(Object,int,double)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setFloat", "(Object,int,float)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setInt", "(Object,int,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setLong", "(Object,int,long)", "summary", "df-generated"] + - ["java.lang.reflect", "Array", "setShort", "(Object,int,short)", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "getParameterAnnotations", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "getParameterCount", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Executable", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getBoolean", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getByte", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getChar", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getDouble", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getFloat", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getInt", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getLong", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getShort", "(Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "getType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "isEnumConstant", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "set", "(Object,Object)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setBoolean", "(Object,boolean)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setByte", "(Object,byte)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setChar", "(Object,char)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setDouble", "(Object,double)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setFloat", "(Object,float)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setInt", "(Object,int)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setLong", "(Object,long)", "summary", "df-generated"] + - ["java.lang.reflect", "Field", "setShort", "(Object,short)", "summary", "df-generated"] + - ["java.lang.reflect", "InvocationHandler", "invokeDefault", "(Object,Method,Object[])", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "getDeclaringClass", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Member", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "getDefaultValue", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "getReturnType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "isBridge", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Method", "isDefault", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "classModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "constructorModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "fieldModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "interfaceModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isAbstract", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isFinal", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isInterface", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isNative", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isPrivate", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isProtected", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isPublic", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isStatic", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isStrict", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isSynchronized", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isTransient", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "isVolatile", "(int)", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "methodModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Modifier", "parameterModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "getModifiers", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "getType", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isImplicit", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isNamePresent", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isSynthetic", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Parameter", "isVarArgs", "()", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "getProxyClass", "(ClassLoader,Class[])", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "isProxyClass", "(Class)", "summary", "df-generated"] + - ["java.lang.reflect", "Proxy", "newProxyInstance", "(ClassLoader,Class[],InvocationHandler)", "summary", "df-generated"] + - ["java.lang.reflect", "RecordComponent", "getDeclaringRecord", "()", "summary", "df-generated"] + - ["java.lang.reflect", "RecordComponent", "getType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.runtime.model.yml b/java/ql/lib/ext/generated/java.lang.runtime.model.yml new file mode 100644 index 00000000000..940d246f9b3 --- /dev/null +++ b/java/ql/lib/ext/generated/java.lang.runtime.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang.runtime", "SwitchBootstraps", True, "enumSwitch", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.lang.runtime", "SwitchBootstraps", True, "typeSwitch", "(MethodHandles$Lookup,String,MethodType,Object[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang.runtime", "ObjectMethods", "bootstrap", "(MethodHandles$Lookup,String,TypeDescriptor,Class,String,MethodHandle[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.math.model.yml b/java/ql/lib/ext/generated/java.math.model.yml new file mode 100644 index 00000000000..2f149239f07 --- /dev/null +++ b/java/ql/lib/ext/generated/java.math.model.yml @@ -0,0 +1,107 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.math", "BigDecimal", True, "movePointLeft", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "movePointRight", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "plus", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "plus", "(MathContext)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigDecimal", True, "setScale", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "add", "(BigInteger)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "shiftLeft", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "shiftRight", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.math", "BigInteger", True, "subtract", "(BigInteger)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.math", "BigDecimal", "abs", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "abs", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "add", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "byteValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,RoundingMode)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int,RoundingMode)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divide", "(BigDecimal,int,int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideAndRemainder", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideAndRemainder", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideToIntegralValue", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "divideToIntegralValue", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "intValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "longValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "max", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "min", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "multiply", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "negate", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "negate", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "pow", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "pow", "(int,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "precision", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "remainder", "(BigDecimal)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "remainder", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "round", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "scale", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "scaleByPowerOfTen", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "setScale", "(int)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "shortValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "signum", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "sqrt", "(MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "stripTrailingZeros", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "subtract", "(BigDecimal,MathContext)", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toBigIntegerExact", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toEngineeringString", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "toPlainString", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "ulp", "()", "summary", "df-generated"] + - ["java.math", "BigDecimal", "unscaledValue", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(String,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(byte[])", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(byte[],int,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,byte[])", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,byte[],int,int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "BigInteger", "(int,int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "abs", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "and", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "andNot", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "bitCount", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "bitLength", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "byteValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "clearBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "divide", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "divideAndRemainder", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "flipBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "gcd", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "getLowestSetBit", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "intValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "isProbablePrime", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "longValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "max", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "min", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "mod", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "modInverse", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "modPow", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "multiply", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "negate", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "nextProbablePrime", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "not", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "pow", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "probablePrime", "(int,Random)", "summary", "df-generated"] + - ["java.math", "BigInteger", "remainder", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "BigInteger", "setBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "shortValueExact", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "signum", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "sqrt", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "sqrtAndRemainder", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "testBit", "(int)", "summary", "df-generated"] + - ["java.math", "BigInteger", "toByteArray", "()", "summary", "df-generated"] + - ["java.math", "BigInteger", "xor", "(BigInteger)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(String)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(int)", "summary", "df-generated"] + - ["java.math", "MathContext", "MathContext", "(int,RoundingMode)", "summary", "df-generated"] + - ["java.math", "MathContext", "getPrecision", "()", "summary", "df-generated"] + - ["java.math", "MathContext", "getRoundingMode", "()", "summary", "df-generated"] + - ["java.math", "RoundingMode", "valueOf", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.net.http.model.yml b/java/ql/lib/ext/generated/java.net.http.model.yml new file mode 100644 index 00000000000..6bb3608a437 --- /dev/null +++ b/java/ql/lib/ext/generated/java.net.http.model.yml @@ -0,0 +1,103 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.net.http", "HttpConnectTimeoutException", True, "HttpConnectTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "allValues", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "firstValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpHeaders", False, "map", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "concat", "(HttpRequest$BodyPublisher[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "fromPublisher", "(Flow$Publisher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "fromPublisher", "(Flow$Publisher,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArray", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArray", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofByteArrays", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofInputStream", "(Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", True, "ofString", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest", True, "newBuilder", "(HttpRequest,BiPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpRequest", True, "newBuilder", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFileDownload", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", True, "ofFileDownload", "(Path,OpenOption[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "buffering", "(HttpResponse$BodySubscriber,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromLineSubscriber", "(Flow$Subscriber,Function,Charset,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "fromSubscriber", "(Flow$Subscriber,Function)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "mapping", "(HttpResponse$BodySubscriber,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "mapping", "(HttpResponse$BodySubscriber,Function)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofByteArrayConsumer", "(Consumer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofFile", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "ofFile", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", True, "replacing", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$PushPromiseHandler", True, "of", "(Function,ConcurrentMap)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpResponse$PushPromiseHandler", True, "of", "(Function,ConcurrentMap)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net.http", "HttpTimeoutException", True, "HttpTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "WebSocketHandshakeException", False, "WebSocketHandshakeException", "(HttpResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net.http", "WebSocketHandshakeException", False, "getResponse", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.net.http", "HttpClient", "authenticator", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "connectTimeout", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "cookieHandler", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "executor", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "followRedirects", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newHttpClient", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "newWebSocketBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "proxy", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "send", "(HttpRequest,HttpResponse$BodyHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sendAsync", "(HttpRequest,HttpResponse$BodyHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sendAsync", "(HttpRequest,HttpResponse$BodyHandler,HttpResponse$PushPromiseHandler)", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sslContext", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "sslParameters", "()", "summary", "df-generated"] + - ["java.net.http", "HttpClient", "version", "()", "summary", "df-generated"] + - ["java.net.http", "HttpHeaders", "firstValueAsLong", "(String)", "summary", "df-generated"] + - ["java.net.http", "HttpHeaders", "of", "(Map,BiPredicate)", "summary", "df-generated"] + - ["java.net.http", "HttpRequest$BodyPublishers", "noBody", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "bodyPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "expectContinue", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "headers", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "method", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "newBuilder", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "timeout", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "uri", "()", "summary", "df-generated"] + - ["java.net.http", "HttpRequest", "version", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "buffering", "(HttpResponse$BodyHandler,int)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "discarding", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromLineSubscriber", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromLineSubscriber", "(Flow$Subscriber,Function,String)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromSubscriber", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "fromSubscriber", "(Flow$Subscriber,Function)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofByteArray", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofByteArrayConsumer", "(Consumer)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofInputStream", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofLines", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofString", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "ofString", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodyHandlers", "replacing", "(Object)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "discarding", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofByteArray", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofInputStream", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofLines", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofPublisher", "()", "summary", "df-generated"] + - ["java.net.http", "HttpResponse$BodySubscribers", "ofString", "(Charset)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onBinary", "(WebSocket,ByteBuffer,boolean)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onClose", "(WebSocket,int,String)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onError", "(WebSocket,Throwable)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onOpen", "(WebSocket)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onPing", "(WebSocket,ByteBuffer)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onPong", "(WebSocket,ByteBuffer)", "summary", "df-generated"] + - ["java.net.http", "WebSocket$Listener", "onText", "(WebSocket,CharSequence,boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.net.model.yml b/java/ql/lib/ext/generated/java.net.model.yml new file mode 100644 index 00000000000..7ca397cdb5c --- /dev/null +++ b/java/ql/lib/ext/generated/java.net.model.yml @@ -0,0 +1,485 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[4]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[5]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[6]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthentication", "(Authenticator,String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[7]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Authenticator", True, "requestPasswordAuthenticationInstance", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "BindException", True, "BindException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ConnectException", True, "ConnectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ContentHandler", True, "getContent", "(URLConnection)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ContentHandler", True, "getContent", "(URLConnection,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "CookieManager", "(CookieStore,CookiePolicy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "CookieManager", "(CookieStore,CookiePolicy)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "getCookieStore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieManager", True, "setCookiePolicy", "(CookiePolicy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "add", "(URI,HttpCookie)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "add", "(URI,HttpCookie)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "get", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "getCookies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "CookieStore", True, "getURIs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,SocketAddress)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,InetAddress,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,int,SocketAddress)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "getSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setAddress", "(InetAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setData", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setData", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramPacket", False, "setSocketAddress", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "connect", "(InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "getRemoteSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "send", "(DatagramPacket)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "DatagramSocket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "DatagramSocket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "HttpCookie", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getComment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getCommentURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getDomain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getPortlist", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setCommentURL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setDomain", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setPath", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setPortlist", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpCookie", False, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "HttpRetryException", "(String,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpRetryException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "getRequestMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "getResponseMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "HttpURLConnection", True, "setRequestMethod", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],NetworkInterface)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getByAddress", "(String,byte[],int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Inet6Address", False, "getScopedInterface", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getByAddress", "(String,byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getByAddress", "(String,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getCanonicalHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetAddress", True, "getHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InetSocketAddress", True, "getHostString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InterfaceAddress", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "InterfaceAddress", True, "getBroadcast", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getEntryName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getJarEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getJarFileURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "JarURLConnection", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "MalformedURLException", True, "MalformedURLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "getInterface", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "send", "(DatagramPacket,byte)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.net", "MulticastSocket", True, "setInterface", "(InetAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetPermission", False, "NetPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetPermission", False, "NetPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getInterfaceAddresses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NetworkInterface", False, "subInterfaces", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "NoRouteToHostException", True, "NoRouteToHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "PasswordAuthentication", "(String,char[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "PasswordAuthentication", False, "getUserName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "PortUnreachableException", True, "PortUnreachableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ProtocolException", True, "ProtocolException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Proxy", True, "Proxy", "(Proxy$Type,SocketAddress)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Proxy", True, "address", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ProxySelector", True, "select", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "ServerSocket", "(int,int,InetAddress)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "bind", "(SocketAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "getLocalSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "ServerSocket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "ServerSocket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(InetAddress,int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,InetAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "Socket", "(String,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "bind", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "connect", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "connect", "(SocketAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "Socket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "getRemoteSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "Socket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "Socket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "SocketException", True, "SocketException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketOptions", True, "setOption", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketPermission", False, "SocketPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "SocketTimeoutException", True, "SocketTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URI", False, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawFragment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawSchemeSpecificPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getRawUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getScheme", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getSchemeSpecificPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "getUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "normalize", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URI", False, "parseServerAuthority", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.net", "URI", False, "relativize", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "URISyntaxException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URISyntaxException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(String,String,int,String,URLStreamHandler)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URL", False, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getContent", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "getUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "openConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(URL[],ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "URLClassLoader", "(URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "getURLs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLClassLoader", True, "newInstance", "(URL[],ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContent", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContentEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getContentType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getPermission", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getRequestProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getRequestProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLConnection", True, "getURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLEncoder", True, "encode", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "URLPermission", False, "URLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "URLPermission", False, "URLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "of", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnixDomainSocketAddress", False, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.net", "UnknownHostException", True, "UnknownHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.net", "UnknownServiceException", True, "UnknownServiceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.net", "Authenticator", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(InetAddress,int,String,String,String)", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(String,InetAddress,int,String,String,String)", "summary", "df-generated"] + - ["java.net", "Authenticator", "requestPasswordAuthentication", "(String,InetAddress,int,String,String,String,URL,Authenticator$RequestorType)", "summary", "df-generated"] + - ["java.net", "Authenticator", "setDefault", "(Authenticator)", "summary", "df-generated"] + - ["java.net", "CacheRequest", "abort", "()", "summary", "df-generated"] + - ["java.net", "CacheRequest", "getBody", "()", "summary", "df-generated"] + - ["java.net", "CacheResponse", "getBody", "()", "summary", "df-generated"] + - ["java.net", "CacheResponse", "getHeaders", "()", "summary", "df-generated"] + - ["java.net", "CookieHandler", "get", "(URI,Map)", "summary", "df-generated"] + - ["java.net", "CookieHandler", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "CookieHandler", "put", "(URI,Map)", "summary", "df-generated"] + - ["java.net", "CookieHandler", "setDefault", "(CookieHandler)", "summary", "df-generated"] + - ["java.net", "CookiePolicy", "shouldAccept", "(URI,HttpCookie)", "summary", "df-generated"] + - ["java.net", "CookieStore", "remove", "(URI,HttpCookie)", "summary", "df-generated"] + - ["java.net", "CookieStore", "removeAll", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getLength", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getOffset", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "setLength", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramPacket", "setPort", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "DatagramSocket", "(int,InetAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "bind", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "disconnect", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getBroadcast", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getLocalSocketAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getSendBufferSize", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "getTrafficClass", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "isConnected", "()", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "joinGroup", "(SocketAddress,NetworkInterface)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "leaveGroup", "(SocketAddress,NetworkInterface)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "receive", "(DatagramPacket)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setBroadcast", "(boolean)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setDatagramSocketImplFactory", "(DatagramSocketImplFactory)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setSendBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "DatagramSocket", "setTrafficClass", "(int)", "summary", "df-generated"] + - ["java.net", "FileNameMap", "getContentTypeFor", "(String)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "domainMatches", "(String,String)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getDiscard", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getMaxAge", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getSecure", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "getVersion", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "hasExpired", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "isHttpOnly", "()", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setDiscard", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setHttpOnly", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setMaxAge", "(long)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setSecure", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpCookie", "setVersion", "(int)", "summary", "df-generated"] + - ["java.net", "HttpRetryException", "responseCode", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "disconnect", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getErrorStream", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getFollowRedirects", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getInstanceFollowRedirects", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "getResponseCode", "()", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setAuthenticator", "(Authenticator)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setChunkedStreamingMode", "(int)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFixedLengthStreamingMode", "(int)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFixedLengthStreamingMode", "(long)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setFollowRedirects", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "setInstanceFollowRedirects", "(boolean)", "summary", "df-generated"] + - ["java.net", "HttpURLConnection", "usingProxy", "()", "summary", "df-generated"] + - ["java.net", "IDN", "toASCII", "(String)", "summary", "df-generated"] + - ["java.net", "IDN", "toASCII", "(String,int)", "summary", "df-generated"] + - ["java.net", "IDN", "toUnicode", "(String)", "summary", "df-generated"] + - ["java.net", "IDN", "toUnicode", "(String,int)", "summary", "df-generated"] + - ["java.net", "Inet6Address", "getScopeId", "()", "summary", "df-generated"] + - ["java.net", "Inet6Address", "isIPv4CompatibleAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getHostAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getLocalHost", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "getLoopbackAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isAnyLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isLinkLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isLoopbackAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCGlobal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCLinkLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCNodeLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCOrgLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMCSiteLocal", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isMulticastAddress", "()", "summary", "df-generated"] + - ["java.net", "InetAddress", "isReachable", "(NetworkInterface,int,int)", "summary", "df-generated"] + - ["java.net", "InetAddress", "isReachable", "(int)", "summary", "df-generated"] + - ["java.net", "InetAddress", "isSiteLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "InetSocketAddress", "(int)", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "getPort", "()", "summary", "df-generated"] + - ["java.net", "InetSocketAddress", "isUnresolved", "()", "summary", "df-generated"] + - ["java.net", "InterfaceAddress", "getNetworkPrefixLength", "()", "summary", "df-generated"] + - ["java.net", "JarURLConnection", "getJarFile", "()", "summary", "df-generated"] + - ["java.net", "JarURLConnection", "getMainAttributes", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "MulticastSocket", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "MulticastSocket", "(int)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getLoopbackMode", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getNetworkInterface", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getTTL", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "getTimeToLive", "()", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "joinGroup", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "leaveGroup", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setLoopbackMode", "(boolean)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setNetworkInterface", "(NetworkInterface)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setTTL", "(byte)", "summary", "df-generated"] + - ["java.net", "MulticastSocket", "setTimeToLive", "(int)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByIndex", "(int)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByInetAddress", "(InetAddress)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getByName", "(String)", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getHardwareAddress", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getIndex", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getInetAddresses", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getMTU", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getNetworkInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "getSubInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "inetAddresses", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isLoopback", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isPointToPoint", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isUp", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "isVirtual", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "networkInterfaces", "()", "summary", "df-generated"] + - ["java.net", "NetworkInterface", "supportsMulticast", "()", "summary", "df-generated"] + - ["java.net", "Proxy", "type", "()", "summary", "df-generated"] + - ["java.net", "ProxySelector", "connectFailed", "(URI,SocketAddress,IOException)", "summary", "df-generated"] + - ["java.net", "ProxySelector", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "ProxySelector", "of", "(InetSocketAddress)", "summary", "df-generated"] + - ["java.net", "ProxySelector", "setDefault", "(ProxySelector)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "get", "(URI,String,Map)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "getDefault", "()", "summary", "df-generated"] + - ["java.net", "ResponseCache", "put", "(URI,URLConnection)", "summary", "df-generated"] + - ["java.net", "ResponseCache", "setDefault", "(ResponseCache)", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getCipherSuite", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getLocalCertificateChain", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getSSLSession", "()", "summary", "df-generated"] + - ["java.net", "SecureCacheResponse", "getServerCertificateChain", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "ServerSocket", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "ServerSocket", "(int,int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "accept", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "bind", "(SocketAddress)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setPerformancePreferences", "(int,int,int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "ServerSocket", "setSocketFactory", "(SocketImplFactory)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(InetAddress,int)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(InetAddress,int,boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "Socket", "(Proxy)", "summary", "df-generated"] + - ["java.net", "Socket", "getChannel", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getKeepAlive", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalPort", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getLocalSocketAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getOOBInline", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getOption", "(SocketOption)", "summary", "df-generated"] + - ["java.net", "Socket", "getPort", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getReceiveBufferSize", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getReuseAddress", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSendBufferSize", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSoLinger", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getSoTimeout", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getTcpNoDelay", "()", "summary", "df-generated"] + - ["java.net", "Socket", "getTrafficClass", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isBound", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isClosed", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isConnected", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isInputShutdown", "()", "summary", "df-generated"] + - ["java.net", "Socket", "isOutputShutdown", "()", "summary", "df-generated"] + - ["java.net", "Socket", "sendUrgentData", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setKeepAlive", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setOOBInline", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setPerformancePreferences", "(int,int,int)", "summary", "df-generated"] + - ["java.net", "Socket", "setReceiveBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setReuseAddress", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setSendBufferSize", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSoLinger", "(boolean,int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSoTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "setSocketImplFactory", "(SocketImplFactory)", "summary", "df-generated"] + - ["java.net", "Socket", "setTcpNoDelay", "(boolean)", "summary", "df-generated"] + - ["java.net", "Socket", "setTrafficClass", "(int)", "summary", "df-generated"] + - ["java.net", "Socket", "shutdownInput", "()", "summary", "df-generated"] + - ["java.net", "Socket", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.net", "SocketOptions", "getOption", "(int)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "URI", "(String,String,String,String,String)", "summary", "df-generated"] + - ["java.net", "URI", "getPort", "()", "summary", "df-generated"] + - ["java.net", "URI", "isAbsolute", "()", "summary", "df-generated"] + - ["java.net", "URI", "isOpaque", "()", "summary", "df-generated"] + - ["java.net", "URISyntaxException", "getIndex", "()", "summary", "df-generated"] + - ["java.net", "URL", "getDefaultPort", "()", "summary", "df-generated"] + - ["java.net", "URL", "getPort", "()", "summary", "df-generated"] + - ["java.net", "URL", "openStream", "()", "summary", "df-generated"] + - ["java.net", "URL", "sameFile", "(URL)", "summary", "df-generated"] + - ["java.net", "URL", "setURLStreamHandlerFactory", "(URLStreamHandlerFactory)", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "URLClassLoader", "(URL[])", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "addURL", "(URL)", "summary", "df-generated"] + - ["java.net", "URLClassLoader", "newInstance", "(URL[])", "summary", "df-generated"] + - ["java.net", "URLConnection", "addRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "connect", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getAllowUserInteraction", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getConnectTimeout", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getContentLength", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getContentLengthLong", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDate", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultAllowUserInteraction", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultRequestProperty", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultUseCaches", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDefaultUseCaches", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDoInput", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getDoOutput", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getExpiration", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getFileNameMap", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderField", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderField", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldDate", "(String,long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldInt", "(String,int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldKey", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFieldLong", "(String,long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "getHeaderFields", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getIfModifiedSince", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getInputStream", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getLastModified", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getOutputStream", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getReadTimeout", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "getUseCaches", "()", "summary", "df-generated"] + - ["java.net", "URLConnection", "guessContentTypeFromName", "(String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "guessContentTypeFromStream", "(InputStream)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setAllowUserInteraction", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setConnectTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setContentHandlerFactory", "(ContentHandlerFactory)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultAllowUserInteraction", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultUseCaches", "(String,boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDefaultUseCaches", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDoInput", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setDoOutput", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setFileNameMap", "(FileNameMap)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setIfModifiedSince", "(long)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setReadTimeout", "(int)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setRequestProperty", "(String,String)", "summary", "df-generated"] + - ["java.net", "URLConnection", "setUseCaches", "(boolean)", "summary", "df-generated"] + - ["java.net", "URLStreamHandlerFactory", "createURLStreamHandler", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.channels.model.yml b/java/ql/lib/ext/generated/java.nio.channels.model.yml new file mode 100644 index 00000000000..4f682461328 --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.channels.model.yml @@ -0,0 +1,180 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "read", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", True, "write", "(ByteBuffer,Object,CompletionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "withCachedThreadPool", "(ExecutorService,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", True, "withThreadPool", "(ExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "lock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "open", "(Path,Set,ExecutorService,FileAttribute[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", True, "tryLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", True, "open", "(AsynchronousChannelGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", True, "open", "(AsynchronousChannelGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newChannel", "(OutputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newInputStream", "(ReadableByteChannel)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,CharsetDecoder,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,CharsetDecoder,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newReader", "(ReadableByteChannel,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,CharsetEncoder,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,CharsetEncoder,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Channels", False, "newWriter", "(WritableByteChannel,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "DatagramChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "lock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "open", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "open", "(Path,Set,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileChannel", True, "tryLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileLock", True, "acquiredBy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "FileLock", True, "channel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "NetworkChannel", True, "bind", "(SocketAddress)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "blockingLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "configureBlocking", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "keyFor", "(Selector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectableChannel", True, "register", "(Selector,int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SelectionKey", True, "attachment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Selector", True, "provider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "Selector", True, "select", "(Consumer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SocketChannel", True, "open", "(ProtocolFamily)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "SocketChannel", True, "open", "(SocketAddress)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.channels", "WritableByteChannel", True, "write", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.channels", "AsynchronousByteChannel", "read", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousByteChannel", "write", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "awaitTermination", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "isShutdown", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "isTerminated", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "shutdown", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "shutdownNow", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousChannelGroup", "withFixedThreadPool", "(int,ThreadFactory)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "force", "(boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "lock", "(long,long,boolean,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "open", "(Path,OpenOption[])", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "read", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "read", "(ByteBuffer,long,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "truncate", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "tryLock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "write", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousFileChannel", "write", "(ByteBuffer,long,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "accept", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "accept", "(Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "bind", "(SocketAddress,int)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousServerSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "connect", "(SocketAddress,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "read", "(ByteBuffer,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "read", "(ByteBuffer[],int,int,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "shutdownInput", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "write", "(ByteBuffer,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "AsynchronousSocketChannel", "write", "(ByteBuffer[],int,int,long,TimeUnit,Object,CompletionHandler)", "summary", "df-generated"] + - ["java.nio.channels", "Channel", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newInputStream", "(AsynchronousByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newOutputStream", "(AsynchronousByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "Channels", "newOutputStream", "(WritableByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "disconnect", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "isConnected", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "receive", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "send", "(ByteBuffer,SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "DatagramChannel", "socket", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "force", "(boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "lock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "map", "(FileChannel$MapMode,long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "read", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "transferFrom", "(ReadableByteChannel,long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "transferTo", "(long,long,WritableByteChannel)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "tryLock", "(long,long,boolean)", "summary", "df-generated"] + - ["java.nio.channels", "FileChannel", "write", "(ByteBuffer,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "isShared", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "overlaps", "(long,long)", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "position", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "release", "()", "summary", "df-generated"] + - ["java.nio.channels", "FileLock", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "GatheringByteChannel", "write", "(ByteBuffer[])", "summary", "df-generated"] + - ["java.nio.channels", "GatheringByteChannel", "write", "(ByteBuffer[],int,int)", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "block", "(InetAddress)", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "channel", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "drop", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "group", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "networkInterface", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "sourceAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "MembershipKey", "unblock", "(InetAddress)", "summary", "df-generated"] + - ["java.nio.channels", "NetworkChannel", "getLocalAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "NetworkChannel", "setOption", "(SocketOption,Object)", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "sink", "()", "summary", "df-generated"] + - ["java.nio.channels", "Pipe", "source", "()", "summary", "df-generated"] + - ["java.nio.channels", "ScatteringByteChannel", "read", "(ByteBuffer[])", "summary", "df-generated"] + - ["java.nio.channels", "ScatteringByteChannel", "read", "(ByteBuffer[],int,int)", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "position", "()", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "position", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "size", "()", "summary", "df-generated"] + - ["java.nio.channels", "SeekableByteChannel", "truncate", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "isBlocking", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "isRegistered", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectableChannel", "validOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "attach", "(Object)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "cancel", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "channel", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOps", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOpsAnd", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "interestOpsOr", "(int)", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isAcceptable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isConnectable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isReadable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isValid", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "isWritable", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "readyOps", "()", "summary", "df-generated"] + - ["java.nio.channels", "SelectionKey", "selector", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "keys", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "(Consumer,long)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "select", "(long)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectNow", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectNow", "(Consumer)", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "selectedKeys", "()", "summary", "df-generated"] + - ["java.nio.channels", "Selector", "wakeup", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "accept", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "bind", "(SocketAddress,int)", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "ServerSocketChannel", "socket", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "connect", "(SocketAddress)", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "finishConnect", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "getRemoteAddress", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "isConnected", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "isConnectionPending", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "open", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "shutdownInput", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "shutdownOutput", "()", "summary", "df-generated"] + - ["java.nio.channels", "SocketChannel", "socket", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml b/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml new file mode 100644 index 00000000000..bb85f0a62ed --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.channels.spi.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousChannelGroup", "(ExecutorService,int)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousChannelGroup", "(int,ThreadFactory)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousServerSocketChannel", "(AsynchronousChannelGroup)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "openAsynchronousSocketChannel", "(AsynchronousChannelGroup)", "summary", "df-generated"] + - ["java.nio.channels.spi", "AsynchronousChannelProvider", "provider", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "inheritedChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openDatagramChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openDatagramChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openPipe", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSelector", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openServerSocketChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openServerSocketChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSocketChannel", "()", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "openSocketChannel", "(ProtocolFamily)", "summary", "df-generated"] + - ["java.nio.channels.spi", "SelectorProvider", "provider", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.charset.model.yml b/java/ql/lib/ext/generated/java.nio.charset.model.yml new file mode 100644 index 00000000000..488fc3ddecf --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.charset.model.yml @@ -0,0 +1,82 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.charset", "CharsetDecoder", True, "decode", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "decode", "(ByteBuffer,CharBuffer,boolean)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "malformedInputAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replaceWith", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replaceWith", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "replacement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", True, "unmappableCharacterAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer,ByteBuffer,boolean)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "encode", "(CharBuffer,ByteBuffer,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "malformedInputAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onMalformedInput", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "onUnmappableCharacter", "(CodingErrorAction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replaceWith", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replaceWith", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "replacement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", True, "unmappableCharacterAction", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "CoderMalfunctionError", True, "CoderMalfunctionError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "IllegalCharsetNameException", True, "IllegalCharsetNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "IllegalCharsetNameException", True, "getCharsetName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.charset", "UnsupportedCharsetException", True, "UnsupportedCharsetException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.charset", "UnsupportedCharsetException", True, "getCharsetName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.charset", "Charset", "aliases", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "availableCharsets", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "canEncode", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "contains", "(Charset)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "decode", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "defaultCharset", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "displayName", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "displayName", "(Locale)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "encode", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "encode", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "forName", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "isRegistered", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "isSupported", "(String)", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "newDecoder", "()", "summary", "df-generated"] + - ["java.nio.charset", "Charset", "newEncoder", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "averageCharsPerByte", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "charset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "detectedCharset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "flush", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "isAutoDetecting", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "isCharsetDetected", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetDecoder", "maxCharsPerByte", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "averageBytesPerChar", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "canEncode", "(CharSequence)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "canEncode", "(char)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "charset", "()", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "flush", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "isLegalReplacement", "(byte[])", "summary", "df-generated"] + - ["java.nio.charset", "CharsetEncoder", "maxBytesPerChar", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isError", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isMalformed", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isOverflow", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isUnderflow", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "isUnmappable", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "length", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "malformedForLength", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "throwException", "()", "summary", "df-generated"] + - ["java.nio.charset", "CoderResult", "unmappableForLength", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "MalformedInputException", "MalformedInputException", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "MalformedInputException", "getInputLength", "()", "summary", "df-generated"] + - ["java.nio.charset", "UnmappableCharacterException", "UnmappableCharacterException", "(int)", "summary", "df-generated"] + - ["java.nio.charset", "UnmappableCharacterException", "getInputLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml b/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml new file mode 100644 index 00000000000..131afc20afe --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.charset.spi.model.yml @@ -0,0 +1,8 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.charset.spi", "CharsetProvider", "charsetForName", "(String)", "summary", "df-generated"] + - ["java.nio.charset.spi", "CharsetProvider", "charsets", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml b/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml new file mode 100644 index 00000000000..2f0a7c2c02c --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.attribute.model.yml @@ -0,0 +1,38 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file.attribute", "AclEntry$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(AclEntryFlag[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setFlags", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(AclEntryPermission[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPermissions", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPrincipal", "(UserPrincipal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setPrincipal", "(UserPrincipal)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry$Builder", False, "setType", "(AclEntryType)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "flags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "newBuilder", "(AclEntry)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "permissions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", False, "principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "FileTime", False, "from", "(Instant)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "FileTime", False, "toInstant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalNotFoundException", True, "UserPrincipalNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalNotFoundException", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file.attribute", "AclEntry", "newBuilder", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "AclEntry", "type", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "from", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "fromMillis", "(long)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "to", "(TimeUnit)", "summary", "df-generated"] + - ["java.nio.file.attribute", "FileTime", "toMillis", "()", "summary", "df-generated"] + - ["java.nio.file.attribute", "PosixFilePermissions", "asFileAttribute", "(Set)", "summary", "df-generated"] + - ["java.nio.file.attribute", "PosixFilePermissions", "fromString", "(String)", "summary", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalLookupService", "lookupPrincipalByGroupName", "(String)", "summary", "df-generated"] + - ["java.nio.file.attribute", "UserPrincipalLookupService", "lookupPrincipalByName", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.model.yml b/java/ql/lib/ext/generated/java.nio.file.model.yml new file mode 100644 index 00000000000..d149f2e47c5 --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.model.yml @@ -0,0 +1,158 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AccessDeniedException", True, "AccessDeniedException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "AtomicMoveNotSupportedException", True, "AtomicMoveNotSupportedException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "DirectoryIteratorException", False, "DirectoryIteratorException", "(IOException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "DirectoryNotEmptyException", True, "DirectoryNotEmptyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileAlreadyExistsException", True, "FileAlreadyExistsException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemAlreadyExistsException", True, "FileSystemAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "FileSystemException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getOtherFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystemLoopException", True, "FileSystemLoopException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystemNotFoundException", True, "FileSystemNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,ClassLoader)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(Path,Map,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "copy", "(Path,OutputStream)", "", "Argument[0].Element", "Argument[1]", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "copy", "(Path,Path,CopyOption[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createDirectories", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createDirectory", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createFile", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createLink", "(Path,Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createSymbolicLink", "(Path,Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempDirectory", "(Path,String,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempDirectory", "(Path,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempDirectory", "(String,FileAttribute[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempFile", "(String,String,FileAttribute[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "createTempFile", "(String,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "getFileStore", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "move", "(Path,Path,CopyOption[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "newDirectoryStream", "(Path,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "newInputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "newOutputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAllBytes", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAllLines", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAllLines", "(Path,Charset)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readString", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "readString", "(Path,Charset)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setAttribute", "(Path,String,Object,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setLastModifiedTime", "(Path,FileTime)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setOwner", "(Path,UserPrincipal)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "setPosixFilePermissions", "(Path,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "walkFileTree", "(Path,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "walkFileTree", "(Path,Set,int,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "write", "(Path,Iterable,Charset,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "write", "(Path,Iterable,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "write", "(Path,byte[],OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "writeString", "(Path,CharSequence,Charset,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Files", False, "writeString", "(Path,CharSequence,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "InvalidPathException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "LinkPermission", False, "LinkPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "LinkPermission", False, "LinkPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NoSuchFileException", True, "NoSuchFileException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotDirectoryException", True, "NotDirectoryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "Path", True, "resolveSibling", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "Path", True, "resolveSibling", "(Path)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio.file", "ProviderMismatchException", True, "ProviderMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio.file", "ProviderNotFoundException", True, "ProviderNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file", "FileStore", "getAttribute", "(String)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getBlockSize", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getFileStoreAttributeView", "(Class)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getTotalSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getUnallocatedSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "getUsableSpace", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "name", "()", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "supportsFileAttributeView", "(Class)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "supportsFileAttributeView", "(String)", "summary", "df-generated"] + - ["java.nio.file", "FileStore", "type", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getFileStores", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getSeparator", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "getUserPrincipalLookupService", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "isOpen", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "newWatchService", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "provider", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystem", "supportedFileAttributeViews", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystems", "getDefault", "()", "summary", "df-generated"] + - ["java.nio.file", "FileSystems", "getFileSystem", "(URI)", "summary", "df-generated"] + - ["java.nio.file", "Files", "copy", "(InputStream,Path,CopyOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "delete", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "deleteIfExists", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "getLastModifiedTime", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "getOwner", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "getPosixFilePermissions", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isDirectory", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isExecutable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isHidden", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isReadable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isRegularFile", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "isSameFile", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isSymbolicLink", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "isWritable", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "lines", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "lines", "(Path,Charset)", "summary", "df-generated"] + - ["java.nio.file", "Files", "mismatch", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "newBufferedWriter", "(Path,Charset,OpenOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "newBufferedWriter", "(Path,OpenOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "notExists", "(Path,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file", "Files", "probeContentType", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "size", "(Path)", "summary", "df-generated"] + - ["java.nio.file", "Files", "walk", "(Path,int,FileVisitOption[])", "summary", "df-generated"] + - ["java.nio.file", "InvalidPathException", "getIndex", "()", "summary", "df-generated"] + - ["java.nio.file", "Path", "endsWith", "(String)", "summary", "df-generated"] + - ["java.nio.file", "Path", "startsWith", "(String)", "summary", "df-generated"] + - ["java.nio.file", "Watchable", "register", "(WatchService,WatchEvent$Kind[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.spi.model.yml b/java/ql/lib/ext/generated/java.nio.file.spi.model.yml new file mode 100644 index 00000000000..2e144b26abe --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.file.spi.model.yml @@ -0,0 +1,39 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio.file.spi", "FileSystemProvider", True, "newInputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio.file.spi", "FileSystemProvider", "checkAccess", "(Path,AccessMode[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "copy", "(Path,Path,CopyOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createDirectory", "(Path,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createLink", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "createSymbolicLink", "(Path,Path,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "delete", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "deleteIfExists", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileAttributeView", "(Path,Class,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileStore", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getFileSystem", "(URI)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getPath", "(URI)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "getScheme", "()", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "installedProviders", "()", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "isHidden", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "isSameFile", "(Path,Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "move", "(Path,Path,CopyOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newAsynchronousFileChannel", "(Path,Set,ExecutorService,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newByteChannel", "(Path,Set,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newDirectoryStream", "(Path,DirectoryStream$Filter)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileChannel", "(Path,Set,FileAttribute[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileSystem", "(Path,Map)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newFileSystem", "(URI,Map)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "newOutputStream", "(Path,OpenOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readAttributes", "(Path,Class,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readAttributes", "(Path,String,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "readSymbolicLink", "(Path)", "summary", "df-generated"] + - ["java.nio.file.spi", "FileSystemProvider", "setAttribute", "(Path,String,Object,LinkOption[])", "summary", "df-generated"] + - ["java.nio.file.spi", "FileTypeDetector", "probeContentType", "(Path)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.model.yml b/java/ql/lib/ext/generated/java.nio.model.yml new file mode 100644 index 00000000000..bd9bc410cda --- /dev/null +++ b/java/ql/lib/ext/generated/java.nio.model.yml @@ -0,0 +1,234 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.nio", "Buffer", True, "array", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "clear", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "duplicate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "flip", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "limit", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "mark", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "position", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "rewind", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "Buffer", True, "slice", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "Buffer", True, "slice", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asCharBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asDoubleBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asFloatBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asIntBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asLongBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "asShortBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(int,byte[],int,int)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "get", "(int,byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "order", "(ByteOrder)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(ByteBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,ByteBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "ByteBuffer", True, "put", "(int,byte[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putChar", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putChar", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putDouble", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putDouble", "(int,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putFloat", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putFloat", "(int,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putInt", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putInt", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putLong", "(int,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putLong", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putShort", "(int,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "putShort", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ByteBuffer", True, "wrap", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[])", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[],int,int)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "get", "(int,char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(CharBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(String,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,CharBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "put", "(int,char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(CharSequence,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "CharBuffer", True, "wrap", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(int,double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "get", "(int,double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(DoubleBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,DoubleBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "DoubleBuffer", True, "put", "(int,double[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(int,float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "get", "(int,float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(FloatBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,FloatBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "FloatBuffer", True, "put", "(int,float[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int,int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int,int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "get", "(int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(IntBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,IntBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int,int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "IntBuffer", True, "put", "(int[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(int,long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(int,long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "get", "(long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(LongBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,LongBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(int,long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "LongBuffer", True, "put", "(long[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "force", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "force", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "MappedByteBuffer", True, "load", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "asReadOnlyBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "compact", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(int,short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(int,short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "get", "(short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(ShortBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,ShortBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(int,short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.nio", "ShortBuffer", True, "put", "(short[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.nio", "Buffer", "arrayOffset", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "capacity", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "hasArray", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "hasRemaining", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "isDirect", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "isReadOnly", "()", "summary", "df-generated"] + - ["java.nio", "Buffer", "limit", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "alignedSlice", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "alignmentOffset", "(int,int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "allocateDirect", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getChar", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getChar", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getDouble", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getDouble", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getFloat", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getFloat", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getInt", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getInt", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getLong", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getLong", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getShort", "()", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "getShort", "(int)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "mismatch", "(ByteBuffer)", "summary", "df-generated"] + - ["java.nio", "ByteBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "ByteOrder", "nativeOrder", "()", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "mismatch", "(CharBuffer)", "summary", "df-generated"] + - ["java.nio", "CharBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "mismatch", "(DoubleBuffer)", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "wrap", "(double[])", "summary", "df-generated"] + - ["java.nio", "DoubleBuffer", "wrap", "(double[],int,int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "mismatch", "(FloatBuffer)", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "wrap", "(float[])", "summary", "df-generated"] + - ["java.nio", "FloatBuffer", "wrap", "(float[],int,int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "get", "(int[])", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "mismatch", "(IntBuffer)", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "wrap", "(int[])", "summary", "df-generated"] + - ["java.nio", "IntBuffer", "wrap", "(int[],int,int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "mismatch", "(LongBuffer)", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "wrap", "(long[])", "summary", "df-generated"] + - ["java.nio", "LongBuffer", "wrap", "(long[],int,int)", "summary", "df-generated"] + - ["java.nio", "MappedByteBuffer", "isLoaded", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "allocate", "(int)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "get", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "get", "(int)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "mismatch", "(ShortBuffer)", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "order", "()", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "wrap", "(short[])", "summary", "df-generated"] + - ["java.nio", "ShortBuffer", "wrap", "(short[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.dgc.model.yml b/java/ql/lib/ext/generated/java.rmi.dgc.model.yml new file mode 100644 index 00000000000..18040c242d0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.dgc.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi.dgc", "Lease", False, "Lease", "(VMID,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.dgc", "Lease", False, "getVMID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.dgc", "Lease", "getValue", "()", "summary", "df-generated"] + - ["java.rmi.dgc", "VMID", "isUnique", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.model.yml b/java/ql/lib/ext/generated/java.rmi.model.yml new file mode 100644 index 00000000000..0eed9da9bab --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.model.yml @@ -0,0 +1,56 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi", "AccessException", True, "AccessException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AccessException", True, "AccessException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AccessException", True, "AccessException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "AlreadyBoundException", True, "AlreadyBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectException", True, "ConnectException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ConnectIOException", True, "ConnectIOException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalException", True, "MarshalException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "MarshalledObject", False, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi", "Naming", False, "list", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi", "NoSuchObjectException", True, "NoSuchObjectException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "NotBoundException", True, "NotBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RMISecurityException", True, "RMISecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RMISecurityException", True, "RMISecurityException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "RemoteException", True, "RemoteException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerError", True, "ServerError", "(String,Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerError", True, "ServerError", "(String,Error)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerException", True, "ServerException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerRuntimeException", True, "ServerRuntimeException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "ServerRuntimeException", True, "ServerRuntimeException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "StubNotFoundException", True, "StubNotFoundException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnexpectedException", True, "UnexpectedException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnknownHostException", True, "UnknownHostException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi", "UnmarshalException", True, "UnmarshalException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi", "MarshalledObject", "MarshalledObject", "(Object)", "summary", "df-generated"] + - ["java.rmi", "Naming", "bind", "(String,Remote)", "summary", "df-generated"] + - ["java.rmi", "Naming", "lookup", "(String)", "summary", "df-generated"] + - ["java.rmi", "Naming", "rebind", "(String,Remote)", "summary", "df-generated"] + - ["java.rmi", "Naming", "unbind", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.registry.model.yml b/java/ql/lib/ext/generated/java.rmi.registry.model.yml new file mode 100644 index 00000000000..5594ea1dc32 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.registry.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.registry", "LocateRegistry", "createRegistry", "(int)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "createRegistry", "(int,RMIClientSocketFactory,RMIServerSocketFactory)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "()", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String,int)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(String,int,RMIClientSocketFactory)", "summary", "df-generated"] + - ["java.rmi.registry", "LocateRegistry", "getRegistry", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.rmi.server.model.yml b/java/ql/lib/ext/generated/java.rmi.server.model.yml new file mode 100644 index 00000000000..4fefb533828 --- /dev/null +++ b/java/ql/lib/ext/generated/java.rmi.server.model.yml @@ -0,0 +1,71 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.rmi.server", "ExportException", True, "ExportException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ExportException", True, "ExportException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ExportException", True, "ExportException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "log", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "LogStream", True, "setOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "Operation", True, "Operation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "Operation", True, "getOperation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", True, "getClassLoader", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", True, "getSecurityContext", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", True, "getClassLoader", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RMIClientSocketFactory", True, "createSocket", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObject", True, "getRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObject", True, "toStub", "(Remote)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.rmi.server", "RemoteObjectInvocationHandler", True, "RemoteObjectInvocationHandler", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerCloneException", True, "ServerCloneException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "ServerNotActiveException", True, "ServerNotActiveException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonMismatchException", True, "SkeletonMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SkeletonNotFoundException", True, "SkeletonNotFoundException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "SocketSecurityException", True, "SocketSecurityException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", True, "exportObject", "(Remote,int,ObjectInputFilter)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", True, "exportObject", "(Remote,int,RMIClientSocketFactory,RMIServerSocketFactory,ObjectInputFilter)", "", "Argument[4]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.rmi.server", "LogStream", "getDefaultStream", "()", "summary", "df-generated"] + - ["java.rmi.server", "LogStream", "parseLevel", "(String)", "summary", "df-generated"] + - ["java.rmi.server", "LogStream", "setDefaultStream", "(PrintStream)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "ObjID", "(int)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "read", "(ObjectInput)", "summary", "df-generated"] + - ["java.rmi.server", "ObjID", "write", "(ObjectOutput)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "getClassAnnotation", "(Class)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "getDefaultProviderInstance", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String,String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadClass", "(URL,String)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoader", "loadProxyClass", "(String,String[],ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "getClassAnnotation", "(Class)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "loadClass", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIClassLoaderSpi", "loadProxyClass", "(String,String[],ClassLoader)", "summary", "df-generated"] + - ["java.rmi.server", "RMIServerSocketFactory", "createServerSocket", "(int)", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getDefaultSocketFactory", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getFailureHandler", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "getSocketFactory", "()", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "setFailureHandler", "(RMIFailureHandler)", "summary", "df-generated"] + - ["java.rmi.server", "RMISocketFactory", "setSocketFactory", "(RMISocketFactory)", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "getClientHost", "()", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "getLog", "()", "summary", "df-generated"] + - ["java.rmi.server", "RemoteServer", "setLog", "(OutputStream)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "UID", "(short)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "read", "(DataInput)", "summary", "df-generated"] + - ["java.rmi.server", "UID", "write", "(DataOutput)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote,int)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "exportObject", "(Remote,int,RMIClientSocketFactory,RMIServerSocketFactory)", "summary", "df-generated"] + - ["java.rmi.server", "UnicastRemoteObject", "unexportObject", "(Remote,boolean)", "summary", "df-generated"] + - ["java.rmi.server", "Unreferenced", "unreferenced", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.cert.model.yml b/java/ql/lib/ext/generated/java.security.cert.model.yml new file mode 100644 index 00000000000..4d98781cac2 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.cert.model.yml @@ -0,0 +1,326 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security.cert", "CRL", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CRLException", True, "CRLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPath", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "build", "(CertPathParameters)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilder", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderException", True, "CertPathBuilderException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathBuilderResult", True, "getCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidator", True, "validate", "(CertPath,CertPathParameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(String,Throwable,CertPath,int,CertPathValidatorException$Reason)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "getCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getCRLs", "(CRLSelector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getCertStoreParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getCertificates", "(CertSelector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStore", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "Certificate", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateException", True, "CertificateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateExpiredException", True, "CertificateExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "generateCRL", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "generateCertPath", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "generateCertificate", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateFactory", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateNotYetValidException", True, "CertificateNotYetValidException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "CertificateRevokedException", "(Date,CRLReason,X500Principal,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "CertificateRevokedException", "(Date,CRLReason,X500Principal,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getAuthorityName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", True, "getRevocationDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "CollectionCertStoreParameters", True, "CollectionCertStoreParameters", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "CollectionCertStoreParameters", True, "getCollection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "LDAPCertStoreParameters", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "LDAPCertStoreParameters", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", True, "getServerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(KeyStore,CertSelector)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(Set,CertSelector)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", True, "PKIXBuilderParameters", "(Set,CertSelector)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathBuilderResult", True, "PKIXCertPathBuilderResult", "(CertPath,TrustAnchor,PolicyNode,PublicKey)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "PKIXCertPathValidatorResult", "(TrustAnchor,PolicyNode,PublicKey)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPolicyTree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getTrustAnchor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "PKIXParameters", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "addCertPathChecker", "(PKIXCertPathChecker)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "addCertStore", "(CertStore)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getCertPathCheckers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getCertStores", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getInitialPolicies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getSigProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getTargetCertConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "getTrustAnchors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setCertPathCheckers", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setCertStores", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setDate", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setInitialPolicies", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setSigProvider", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setTargetCertConstraints", "(CertSelector)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXParameters", True, "setTrustAnchors", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponderCert", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspExtensions", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponder", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponderCert", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOcspResponses", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", True, "setOptions", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "PolicyQualifierInfo", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getPolicyQualifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "PolicyQualifierInfo", True, "getPolicyQualifierId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(String,PublicKey,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X500Principal,PublicKey,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X509Certificate,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "TrustAnchor", "(X509Certificate,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCA", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCAName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getCAPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getNameConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "TrustAnchor", True, "getTrustedCert", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "URICertStoreParameters", False, "URICertStoreParameters", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "URICertStoreParameters", False, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRL", True, "getIssuerX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRL", True, "getRevokedCertificate", "(X509Certificate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuer", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuerName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "addIssuerName", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getCertificateChecking", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getDateAndTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getIssuerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "getIssuers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setCertificateChecking", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setIssuerNames", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CRLSelector", True, "setIssuers", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getAuthorityKeyIdentifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getCertificateValid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getExtendedKeyUsage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getIssuer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getNameConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPathToNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPolicy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getPrivateKeyValid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectAlternativeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectKeyIdentifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "getSubjectPublicKeyAlgID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setAuthorityKeyIdentifier", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setCertificate", "(X509Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setCertificateValid", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setExtendedKeyUsage", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setIssuer", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setNameConstraints", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setPolicy", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setPrivateKeyValid", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubject", "(X500Principal)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectKeyIdentifier", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKey", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKey", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509CertSelector", True, "setSubjectPublicKeyAlgID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.cert", "X509Certificate", True, "getIssuerX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.cert", "X509Certificate", True, "getSubjectX500Principal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.cert", "CRL", "isRevoked", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CRLSelector", "match", "(CRL)", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getCertificates", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncoded", "(String)", "summary", "df-generated"] + - ["java.security.cert", "CertPath", "getEncodings", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilder", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilder", "getRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilderSpi", "engineBuild", "(CertPathParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertPathBuilderSpi", "engineGetRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "check", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "init", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "CertPathChecker", "isForwardCheckingSupported", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidator", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidator", "getRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorException", "getIndex", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorSpi", "engineGetRevocationChecker", "()", "summary", "df-generated"] + - ["java.security.cert", "CertPathValidatorSpi", "engineValidate", "(CertPath,CertPathParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertSelector", "match", "(Certificate)", "summary", "df-generated"] + - ["java.security.cert", "CertStore", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "CertStoreSpi", "(CertStoreParameters)", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "engineGetCRLs", "(CRLSelector)", "summary", "df-generated"] + - ["java.security.cert", "CertStoreSpi", "engineGetCertificates", "(CertSelector)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "getPublicKey", "()", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey,Provider)", "summary", "df-generated"] + - ["java.security.cert", "Certificate", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactory", "generateCRLs", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactory", "generateCertPath", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactory", "generateCertPath", "(InputStream,String)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactory", "generateCertificates", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactory", "getCertPathEncodings", "()", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRL", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRLs", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(InputStream,String)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(List)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertificate", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertificates", "(InputStream)", "summary", "df-generated"] + - ["java.security.cert", "CertificateFactorySpi", "engineGetCertPathEncodings", "()", "summary", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", "getInvalidityDate", "()", "summary", "df-generated"] + - ["java.security.cert", "CertificateRevokedException", "getRevocationReason", "()", "summary", "df-generated"] + - ["java.security.cert", "LDAPCertStoreParameters", "getPort", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", "getMaxPathLength", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXBuilderParameters", "setMaxPathLength", "(int)", "summary", "df-generated"] + - ["java.security.cert", "PKIXCertPathChecker", "check", "(Certificate,Collection)", "summary", "df-generated"] + - ["java.security.cert", "PKIXCertPathChecker", "getSupportedExtensions", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "PKIXParameters", "(KeyStore)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "getPolicyQualifiersRejected", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isAnyPolicyInhibited", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isExplicitPolicyRequired", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isPolicyMappingInhibited", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "isRevocationEnabled", "()", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setAnyPolicyInhibited", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setExplicitPolicyRequired", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setPolicyMappingInhibited", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setPolicyQualifiersRejected", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXParameters", "setRevocationEnabled", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "PKIXRevocationChecker", "getSoftFailExceptions", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getIssuerDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getNextUpdate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getRevokedCertificate", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getRevokedCertificates", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgName", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgOID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSigAlgParams", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getSignature", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getTBSCertList", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getThisUpdate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "getVersion", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey,Provider)", "summary", "df-generated"] + - ["java.security.cert", "X509CRL", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getCertificateIssuer", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getEncoded", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getRevocationDate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getRevocationReason", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLEntry", "hasExtensions", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "getMaxCRL", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "getMinCRL", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setDateAndTime", "(Date)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setMaxCRLNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CRLSelector", "setMinCRLNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addPathToName", "(int,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addPathToName", "(int,byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addSubjectAlternativeName", "(int,String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "addSubjectAlternativeName", "(int,byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getBasicConstraints", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getIssuerAsBytes", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getIssuerAsString", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getMatchAllSubjectAltNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSubjectAsBytes", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "getSubjectAsString", "()", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setBasicConstraints", "(int)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setIssuer", "(String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setIssuer", "(byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setKeyUsage", "(boolean[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setMatchAllSubjectAltNames", "(boolean)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setPathToNames", "(Collection)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSerialNumber", "(BigInteger)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubject", "(String)", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubject", "(byte[])", "summary", "df-generated"] + - ["java.security.cert", "X509CertSelector", "setSubjectAlternativeNames", "(Collection)", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "checkValidity", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "checkValidity", "(Date)", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getBasicConstraints", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getExtendedKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerAlternativeNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getIssuerUniqueID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getKeyUsage", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getNotAfter", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getNotBefore", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSerialNumber", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgName", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgOID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSigAlgParams", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSignature", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectAlternativeNames", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectDN", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getSubjectUniqueID", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getTBSCertificate", "()", "summary", "df-generated"] + - ["java.security.cert", "X509Certificate", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.interfaces.model.yml b/java/ql/lib/ext/generated/java.security.interfaces.model.yml new file mode 100644 index 00000000000..cced4d3efc9 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.interfaces.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.interfaces", "DSAParams", "getG", "()", "summary", "df-generated"] + - ["java.security.interfaces", "DSAParams", "getP", "()", "summary", "df-generated"] + - ["java.security.interfaces", "DSAParams", "getQ", "()", "summary", "df-generated"] + - ["java.security.interfaces", "RSAKey", "getParams", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.model.yml b/java/ql/lib/ext/generated/java.security.model.yml new file mode 100644 index 00000000000..d170abb8188 --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.model.yml @@ -0,0 +1,462 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(AccessControlContext,DomainCombiner)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(AccessControlContext,DomainCombiner)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "AccessControlContext", "(ProtectionDomain[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlContext", False, "getDomainCombiner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "AccessControlException", "(String,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AccessControlException", True, "getPermission", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivileged", "(PrivilegedExceptionAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedExceptionAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AccessController", False, "doPrivilegedWithCombiner", "(PrivilegedExceptionAction,AccessControlContext,Permission[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", True, "init", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getEncoded", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getParameterSpec", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "AlgorithmParameters", True, "init", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "BasicPermission", True, "BasicPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "BasicPermission", True, "BasicPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "CodeSigner", "(CertPath,Timestamp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "CodeSigner", "(CertPath,Timestamp)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "getSignerCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "CodeSigner", False, "getTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "CodeSource", "(URL,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "CodeSource", "(URL,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "CodeSource", "(URL,CodeSigner[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "CodeSource", "(URL,CodeSigner[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "getCodeSigners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "CodeSource", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestException", True, "DigestException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "DigestInputStream", "(InputStream,MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "DigestInputStream", "(InputStream,MessageDigest)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "getMessageDigest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestInputStream", True, "setMessageDigest", "(MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "DigestOutputStream", "(OutputStream,MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "DigestOutputStream", "(OutputStream,MessageDigest)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "getMessageDigest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DigestOutputStream", True, "setMessageDigest", "(MessageDigest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainCombiner", True, "combine", "(ProtectionDomain[],ProtectionDomain[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "DomainLoadStoreParameter", "(URI,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "DomainLoadStoreParameter", "(URI,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "getConfiguration", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DomainLoadStoreParameter", False, "getProtectionParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", False, "getPersonalizationString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", False, "getAdditionalInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters$Reseed", False, "getAdditionalInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "instantiation", "(int,DrbgParameters$Capability,byte[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "nextBytes", "(int,boolean,byte[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "DrbgParameters", True, "reseed", "(boolean,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GeneralSecurityException", True, "GeneralSecurityException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "GuardedObject", "(Object,Guard)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "GuardedObject", "(Object,Guard)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "GuardedObject", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "Identity", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "addCertificate", "(Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "certificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "getScope", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Identity", True, "setInfo", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Identity", True, "setPublicKey", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "IdentityScope", True, "IdentityScope", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidAlgorithmParameterException", True, "InvalidAlgorithmParameterException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidKeyException", True, "InvalidKeyException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "InvalidParameterException", True, "InvalidParameterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Key", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Key", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyException", True, "KeyException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "generatePrivate", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "generatePublic", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getKeySpec", "(Key,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyFactory", True, "translateKey", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyManagementException", True, "KeyManagementException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "KeyPair", "(PublicKey,PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "KeyPair", "(PublicKey,PrivateKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "getPrivate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPair", False, "getPublic", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "genKeyPair", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGenerator", True, "initialize", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "generateKeyPair", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyPairGeneratorSpi", True, "initialize", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyRep", True, "KeyRep", "(KeyRep$Type,String,String,byte[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "getKeyStore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "getProtectionParameter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(File,KeyStore$ProtectionParameter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(File,KeyStore$ProtectionParameter)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Builder", True, "newInstance", "(String,Provider,File,KeyStore$ProtectionParameter)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$CallbackHandlerProtection", True, "CallbackHandlerProtection", "(CallbackHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$CallbackHandlerProtection", True, "getCallbackHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry$Attribute", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry$Attribute", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$Entry", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$LoadStoreParameter", True, "getProtectionParameter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "PasswordProtection", "(char[],String,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getProtectionAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PasswordProtection", True, "getProtectionParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "PrivateKeyEntry", "(PrivateKey,Certificate[],Set)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getCertificateChain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$PrivateKeyEntry", False, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "SecretKeyEntry", "(SecretKey,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$SecretKeyEntry", False, "getSecretKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "TrustedCertificateEntry", "(Certificate,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStore$TrustedCertificateEntry", False, "getTrustedCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "aliases", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getCertificateAlias", "(Certificate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStore", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreException", True, "KeyStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "KeyStoreSpi", True, "engineGetEntry", "(String,KeyStore$ProtectionParameter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "KeyStoreSpi", True, "engineSetEntry", "(String,KeyStore$Entry,KeyStore$ProtectionParameter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "digest", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "MessageDigest", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchAlgorithmException", True, "NoSuchAlgorithmException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "NoSuchProviderException", True, "NoSuchProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "PKCS12Attribute", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PKCS12Attribute", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Permission", True, "Permission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Permission", True, "getActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Permission", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "PermissionCollection", True, "add", "(Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PermissionCollection", True, "elements", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getInstance", "(String,Policy$Parameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Policy", True, "implies", "(ProtectionDomain,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Principal", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "PrivilegedActionException", True, "PrivilegedActionException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "PrivilegedActionException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "ProtectionDomain", "(CodeSource,PermissionCollection,ClassLoader,Principal[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getCodeSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getPermissions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProtectionDomain", True, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "Service", "(Provider,String,String,String,List,Map)", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider$Service", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getService", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getServices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Provider", True, "getVersionStr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "ProviderException", True, "ProviderException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "SecureRandom", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,SecureRandomParameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SecureRandom", True, "setSeed", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecurityPermission", False, "SecurityPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SecurityPermission", False, "SecurityPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initSign", "(PrivateKey,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "initVerify", "(PublicKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "setParameter", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signature", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignatureException", True, "SignatureException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "SignedObject", "(Serializable,PrivateKey,Signature)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "verify", "(PublicKey,Signature)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.security", "SignedObject", False, "verify", "(PublicKey,Signature)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String,IdentityScope)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "Signer", "(String,IdentityScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Signer", True, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "Signer", True, "setKeyPair", "(KeyPair)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Timestamp", False, "Timestamp", "(Date,CertPath)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "Timestamp", False, "getSignerCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "URIParameter", True, "URIParameter", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "URIParameter", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnrecoverableEntryException", True, "UnrecoverableEntryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnrecoverableKeyException", True, "UnrecoverableKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "UnresolvedPermission", "(String,String,String,Certificate[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedCerts", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security", "UnresolvedPermission", False, "getUnresolvedType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security", "AccessControlContext", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.security", "AccessController", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["java.security", "AccessController", "getContext", "()", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "generateParameters", "()", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "init", "(AlgorithmParameterSpec)", "summary", "df-generated"] + - ["java.security", "AlgorithmParameterGenerator", "init", "(int)", "summary", "df-generated"] + - ["java.security", "AllPermission", "AllPermission", "(String,String)", "summary", "df-generated"] + - ["java.security", "AuthProvider", "login", "(Subject,CallbackHandler)", "summary", "df-generated"] + - ["java.security", "AuthProvider", "logout", "()", "summary", "df-generated"] + - ["java.security", "AuthProvider", "setCallbackHandler", "(CallbackHandler)", "summary", "df-generated"] + - ["java.security", "CodeSource", "implies", "(CodeSource)", "summary", "df-generated"] + - ["java.security", "DigestInputStream", "on", "(boolean)", "summary", "df-generated"] + - ["java.security", "DigestOutputStream", "on", "(boolean)", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Capability", "supportsPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Capability", "supportsReseeding", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", "getCapability", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Instantiation", "getStrength", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", "getPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$NextBytes", "getStrength", "()", "summary", "df-generated"] + - ["java.security", "DrbgParameters$Reseed", "getPredictionResistance", "()", "summary", "df-generated"] + - ["java.security", "Guard", "checkGuard", "(Object)", "summary", "df-generated"] + - ["java.security", "Identity", "removeCertificate", "(Certificate)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "addIdentity", "(Identity)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(Principal)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(PublicKey)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getIdentity", "(String)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "getSystemScope", "()", "summary", "df-generated"] + - ["java.security", "IdentityScope", "identities", "()", "summary", "df-generated"] + - ["java.security", "IdentityScope", "removeIdentity", "(Identity)", "summary", "df-generated"] + - ["java.security", "IdentityScope", "size", "()", "summary", "df-generated"] + - ["java.security", "Key", "getFormat", "()", "summary", "df-generated"] + - ["java.security", "KeyPairGenerator", "initialize", "(int)", "summary", "df-generated"] + - ["java.security", "KeyStore$Builder", "newInstance", "(KeyStore,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore$Builder", "newInstance", "(String,Provider,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "containsAlias", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "deleteEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "entryInstanceOf", "(String,Class)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCertificate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCertificateChain", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getCreationDate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getDefaultType", "()", "summary", "df-generated"] + - ["java.security", "KeyStore", "getEntry", "(String,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getInstance", "(File,KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "getInstance", "(File,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "getKey", "(String,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "isCertificateEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "isKeyEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStore", "load", "(InputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "load", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setCertificateEntry", "(String,Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setEntry", "(String,KeyStore$Entry,KeyStore$ProtectionParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "setKeyEntry", "(String,Key,char[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "setKeyEntry", "(String,byte[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStore", "size", "()", "summary", "df-generated"] + - ["java.security", "KeyStore", "store", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStore", "store", "(OutputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineAliases", "()", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineContainsAlias", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineDeleteEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineEntryInstanceOf", "(String,Class)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificateAlias", "(Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCertificateChain", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetCreationDate", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineGetKey", "(String,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineIsCertificateEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineIsKeyEntry", "(String)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineLoad", "(InputStream,char[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineLoad", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineProbe", "(InputStream)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetCertificateEntry", "(String,Certificate)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetKeyEntry", "(String,Key,char[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSetKeyEntry", "(String,byte[],Certificate[])", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineSize", "()", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineStore", "(KeyStore$LoadStoreParameter)", "summary", "df-generated"] + - ["java.security", "KeyStoreSpi", "engineStore", "(OutputStream,char[])", "summary", "df-generated"] + - ["java.security", "MessageDigest", "getDigestLength", "()", "summary", "df-generated"] + - ["java.security", "MessageDigest", "isEqual", "(byte[],byte[])", "summary", "df-generated"] + - ["java.security", "MessageDigest", "reset", "()", "summary", "df-generated"] + - ["java.security", "MessageDigest", "update", "(byte)", "summary", "df-generated"] + - ["java.security", "Permission", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "Permission", "newPermissionCollection", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "elementsAsStream", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "isReadOnly", "()", "summary", "df-generated"] + - ["java.security", "PermissionCollection", "setReadOnly", "()", "summary", "df-generated"] + - ["java.security", "Policy", "getPermissions", "(CodeSource)", "summary", "df-generated"] + - ["java.security", "Policy", "getPermissions", "(ProtectionDomain)", "summary", "df-generated"] + - ["java.security", "Policy", "getPolicy", "()", "summary", "df-generated"] + - ["java.security", "Policy", "refresh", "()", "summary", "df-generated"] + - ["java.security", "Policy", "setPolicy", "(Policy)", "summary", "df-generated"] + - ["java.security", "Principal", "implies", "(Subject)", "summary", "df-generated"] + - ["java.security", "ProtectionDomain", "implies", "(Permission)", "summary", "df-generated"] + - ["java.security", "ProtectionDomain", "staticPermissionsOnly", "()", "summary", "df-generated"] + - ["java.security", "Provider$Service", "newInstance", "(Object)", "summary", "df-generated"] + - ["java.security", "Provider$Service", "supportsParameter", "(Object)", "summary", "df-generated"] + - ["java.security", "Provider", "configure", "(String)", "summary", "df-generated"] + - ["java.security", "Provider", "getVersion", "()", "summary", "df-generated"] + - ["java.security", "Provider", "isConfigured", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "generateSeed", "(int)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getInstanceStrong", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getParameters", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "getSeed", "(int)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "nextBytes", "(byte[],SecureRandomParameters)", "summary", "df-generated"] + - ["java.security", "SecureRandom", "reseed", "()", "summary", "df-generated"] + - ["java.security", "SecureRandom", "reseed", "(SecureRandomParameters)", "summary", "df-generated"] + - ["java.security", "Security", "addProvider", "(Provider)", "summary", "df-generated"] + - ["java.security", "Security", "getAlgorithmProperty", "(String,String)", "summary", "df-generated"] + - ["java.security", "Security", "getAlgorithms", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProperty", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProvider", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "()", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "(Map)", "summary", "df-generated"] + - ["java.security", "Security", "getProviders", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "insertProviderAt", "(Provider,int)", "summary", "df-generated"] + - ["java.security", "Security", "removeProvider", "(String)", "summary", "df-generated"] + - ["java.security", "Security", "setProperty", "(String,String)", "summary", "df-generated"] + - ["java.security", "Signature", "getParameter", "(String)", "summary", "df-generated"] + - ["java.security", "Signature", "initVerify", "(Certificate)", "summary", "df-generated"] + - ["java.security", "Signature", "setParameter", "(String,Object)", "summary", "df-generated"] + - ["java.security", "Signature", "sign", "()", "summary", "df-generated"] + - ["java.security", "Signature", "sign", "(byte[],int,int)", "summary", "df-generated"] + - ["java.security", "Signature", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["java.security", "Signature", "update", "(byte)", "summary", "df-generated"] + - ["java.security", "Signature", "verify", "(byte[])", "summary", "df-generated"] + - ["java.security", "Signature", "verify", "(byte[],int,int)", "summary", "df-generated"] + - ["java.security", "Timestamp", "getTimestamp", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.spec.model.yml b/java/ql/lib/ext/generated/java.security.spec.model.yml new file mode 100644 index 00000000000..ba978ed02fa --- /dev/null +++ b/java/ql/lib/ext/generated/java.security.spec.model.yml @@ -0,0 +1,146 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.security.spec", "ECGenParameterSpec", True, "ECGenParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "ECParameterSpec", "(EllipticCurve,ECPoint,BigInteger,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "ECParameterSpec", "(EllipticCurve,ECPoint,BigInteger,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "getCurve", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECParameterSpec", True, "getGenerator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", True, "ECPrivateKeySpec", "(BigInteger,ECParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "ECPublicKeySpec", "(ECPoint,ECParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "ECPublicKeySpec", "(ECPoint,ECParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "ECPublicKeySpec", True, "getW", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", True, "EdDSAParameterSpec", "(boolean,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", True, "getContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "EdECPrivateKeySpec", "(NamedParameterSpec,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "EdECPrivateKeySpec", "(NamedParameterSpec,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPrivateKeySpec", False, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "EdECPublicKeySpec", "(NamedParameterSpec,EdECPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "EdECPublicKeySpec", "(NamedParameterSpec,EdECPoint)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EdECPublicKeySpec", False, "getPoint", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "EllipticCurve", "(ECField,BigInteger,BigInteger,byte[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "getField", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EllipticCurve", True, "getSeed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidKeySpecException", True, "InvalidKeySpecException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "InvalidParameterSpecException", True, "InvalidParameterSpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "MGF1ParameterSpec", True, "MGF1ParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "MGF1ParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "NamedParameterSpec", True, "NamedParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "NamedParameterSpec", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PKCS8EncodedKeySpec", True, "PKCS8EncodedKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "PSSParameterSpec", "(String,String,AlgorithmParameterSpec,int,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getMGFAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", True, "getMGFParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", True, "RSAKeyGenParameterSpec", "(int,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", True, "getKeyParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[])", "", "Argument[8].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[],AlgorithmParameterSpec)", "", "Argument[8].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "RSAMultiPrimePrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,RSAOtherPrimeInfo[],AlgorithmParameterSpec)", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", True, "getOtherPrimeInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", True, "RSAPrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", True, "RSAPrivateKeySpec", "(BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", True, "RSAPublicKeySpec", "(BigInteger,BigInteger,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "X509EncodedKeySpec", True, "X509EncodedKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "XECPrivateKeySpec", "(AlgorithmParameterSpec,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "XECPrivateKeySpec", "(AlgorithmParameterSpec,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "XECPrivateKeySpec", True, "getScalar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", True, "XECPublicKeySpec", "(AlgorithmParameterSpec,BigInteger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security.spec", "DSAGenParameterSpec", "DSAGenParameterSpec", "(int,int)", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "DSAGenParameterSpec", "(int,int,int)", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getPrimePLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getSeedLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAGenParameterSpec", "getSubprimeQLength", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAParameterSpec", "DSAParameterSpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "DSAPrivateKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getG", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getQ", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPrivateKeySpec", "getX", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "DSAPublicKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getG", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getQ", "()", "summary", "df-generated"] + - ["java.security.spec", "DSAPublicKeySpec", "getY", "()", "summary", "df-generated"] + - ["java.security.spec", "ECField", "getFieldSize", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "ECFieldF2m", "(int,int[])", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getM", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getMidTermsOfReductionPolynomial", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldF2m", "getReductionPolynomial", "()", "summary", "df-generated"] + - ["java.security.spec", "ECFieldFp", "ECFieldFp", "(BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECFieldFp", "getP", "()", "summary", "df-generated"] + - ["java.security.spec", "ECParameterSpec", "getCofactor", "()", "summary", "df-generated"] + - ["java.security.spec", "ECParameterSpec", "getOrder", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "ECPoint", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "getAffineX", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPoint", "getAffineY", "()", "summary", "df-generated"] + - ["java.security.spec", "ECPrivateKeySpec", "getS", "()", "summary", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", "EdDSAParameterSpec", "(boolean)", "summary", "df-generated"] + - ["java.security.spec", "EdDSAParameterSpec", "isPrehash", "()", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "EdECPoint", "(boolean,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "getY", "()", "summary", "df-generated"] + - ["java.security.spec", "EdECPoint", "isXOdd", "()", "summary", "df-generated"] + - ["java.security.spec", "EllipticCurve", "getA", "()", "summary", "df-generated"] + - ["java.security.spec", "EllipticCurve", "getB", "()", "summary", "df-generated"] + - ["java.security.spec", "EncodedKeySpec", "getFormat", "()", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "PSSParameterSpec", "(int)", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "getSaltLength", "()", "summary", "df-generated"] + - ["java.security.spec", "PSSParameterSpec", "getTrailerField", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "RSAKeyGenParameterSpec", "(int,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "getKeysize", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAKeyGenParameterSpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeExponentP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeExponentQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPrimeQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAMultiPrimePrivateCrtKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "RSAOtherPrimeInfo", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAOtherPrimeInfo", "getPrime", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "RSAPrivateCrtKeySpec", "(BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getCrtCoefficient", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeExponentP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeExponentQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeP", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPrimeQ", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateCrtKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "RSAPrivateKeySpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "getModulus", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPrivateKeySpec", "getPrivateExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "RSAPublicKeySpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "getModulus", "()", "summary", "df-generated"] + - ["java.security.spec", "RSAPublicKeySpec", "getPublicExponent", "()", "summary", "df-generated"] + - ["java.security.spec", "XECPublicKeySpec", "getU", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.sql.model.yml b/java/ql/lib/ext/generated/java.sql.model.yml new file mode 100644 index 00000000000..310a430ab75 --- /dev/null +++ b/java/ql/lib/ext/generated/java.sql.model.yml @@ -0,0 +1,465 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.sql", "Array", True, "getArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(long,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getArray", "(long,int,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Array", True, "getBaseTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,int[],Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int,long[],Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,String,int[],Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[],Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(String,int[],Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "BatchUpdateException", True, "BatchUpdateException", "(int[],Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "Blob", True, "getBinaryStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Blob", True, "getBinaryStream", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getCharacterStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getCharacterStream", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Clob", True, "getSubString", "(long,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "DataTruncation", True, "DataTruncation", "(int,boolean,boolean,int,int,Throwable)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "DriverPropertyInfo", True, "DriverPropertyInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "DriverPropertyInfo", True, "DriverPropertyInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "Ref", True, "getBaseTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Ref", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Ref", True, "setObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getCatalogName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnLabel", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getColumnTypeName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getSchemaName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "ResultSetMetaData", True, "getTableName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map,Throwable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,Map,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,Map,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "SQLClientInfoException", "(String,String,int,Map,Throwable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLClientInfoException", True, "getFailedProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLDataException", True, "SQLDataException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "SQLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "getNextException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLException", True, "getSQLState", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLFeatureNotSupportedException", True, "SQLFeatureNotSupportedException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readAsciiStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBinaryStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBlob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readCharacterStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readClob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readNClob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readNString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readRowId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readSQLXML", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLInput", True, "readURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLIntegrityConstraintViolationException", True, "SQLIntegrityConstraintViolationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLInvalidAuthorizationSpecException", True, "SQLInvalidAuthorizationSpecException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientConnectionException", True, "SQLNonTransientConnectionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLNonTransientException", True, "SQLNonTransientException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeAsciiStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeBinaryStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeBytes", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeCharacterStream", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeDate", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeNClob", "(NClob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeNString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeRowId", "(RowId)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeSQLXML", "(SQLXML)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeTime", "(Time)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLOutput", True, "writeTimestamp", "(Timestamp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLPermission", False, "SQLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLPermission", False, "SQLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLRecoverableException", True, "SQLRecoverableException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLSyntaxErrorException", True, "SQLSyntaxErrorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTimeoutException", True, "SQLTimeoutException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransactionRollbackException", True, "SQLTransactionRollbackException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientConnectionException", True, "SQLTransientConnectionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLTransientException", True, "SQLTransientException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,String,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "SQLWarning", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.sql", "SQLWarning", True, "getNextWarning", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteIdentifier", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteLiteral", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Statement", True, "enquoteNCharLiteral", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getAttributes", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Struct", True, "getSQLTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.sql", "Wrapper", True, "unwrap", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.sql", "Array", "free", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getBaseType", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "()", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(Map)", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(long,int)", "summary", "df-generated"] + - ["java.sql", "Array", "getResultSet", "(long,int,Map)", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "BatchUpdateException", "(int[])", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "getLargeUpdateCounts", "()", "summary", "df-generated"] + - ["java.sql", "BatchUpdateException", "getUpdateCounts", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "free", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "getBytes", "(long,int)", "summary", "df-generated"] + - ["java.sql", "Blob", "length", "()", "summary", "df-generated"] + - ["java.sql", "Blob", "position", "(Blob,long)", "summary", "df-generated"] + - ["java.sql", "Blob", "position", "(byte[],long)", "summary", "df-generated"] + - ["java.sql", "Blob", "setBinaryStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Blob", "setBytes", "(long,byte[])", "summary", "df-generated"] + - ["java.sql", "Blob", "setBytes", "(long,byte[],int,int)", "summary", "df-generated"] + - ["java.sql", "Blob", "truncate", "(long)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType,String)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(String,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType,String)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "registerOutParameter", "(int,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "setObject", "(String,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "CallableStatement", "setObject", "(String,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "Clob", "free", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "getAsciiStream", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "length", "()", "summary", "df-generated"] + - ["java.sql", "Clob", "position", "(Clob,long)", "summary", "df-generated"] + - ["java.sql", "Clob", "position", "(String,long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setAsciiStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setCharacterStream", "(long)", "summary", "df-generated"] + - ["java.sql", "Clob", "setString", "(long,String)", "summary", "df-generated"] + - ["java.sql", "Clob", "setString", "(long,String,int,int)", "summary", "df-generated"] + - ["java.sql", "Clob", "truncate", "(long)", "summary", "df-generated"] + - ["java.sql", "Connection", "beginRequest", "()", "summary", "df-generated"] + - ["java.sql", "Connection", "endRequest", "()", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKey", "(ShardingKey)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKey", "(ShardingKey,ShardingKey)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKeyIfValid", "(ShardingKey,ShardingKey,int)", "summary", "df-generated"] + - ["java.sql", "Connection", "setShardingKeyIfValid", "(ShardingKey,int)", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "DataTruncation", "(int,boolean,boolean,int,int)", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getDataSize", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getIndex", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getParameter", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getRead", "()", "summary", "df-generated"] + - ["java.sql", "DataTruncation", "getTransferSize", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "getMaxLogicalLobSize", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "supportsRefCursors", "()", "summary", "df-generated"] + - ["java.sql", "DatabaseMetaData", "supportsSharding", "()", "summary", "df-generated"] + - ["java.sql", "Date", "Date", "(int,int,int)", "summary", "df-generated"] + - ["java.sql", "Date", "Date", "(long)", "summary", "df-generated"] + - ["java.sql", "Date", "toLocalDate", "()", "summary", "df-generated"] + - ["java.sql", "Date", "valueOf", "(LocalDate)", "summary", "df-generated"] + - ["java.sql", "Date", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "deregisterDriver", "(Driver)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "drivers", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String,Properties)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getConnection", "(String,String,String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getDriver", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getDrivers", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLogStream", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLogWriter", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "getLoginTimeout", "()", "summary", "df-generated"] + - ["java.sql", "DriverManager", "println", "(String)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "registerDriver", "(Driver)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "registerDriver", "(Driver,DriverAction)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLogStream", "(PrintStream)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLogWriter", "(PrintWriter)", "summary", "df-generated"] + - ["java.sql", "DriverManager", "setLoginTimeout", "(int)", "summary", "df-generated"] + - ["java.sql", "JDBCType", "valueOf", "(int)", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "executeLargeUpdate", "()", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "setObject", "(int,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "PreparedStatement", "setObject", "(int,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "Ref", "getObject", "(Map)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(String,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(String,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(int,Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "ResultSet", "updateObject", "(int,Object,SQLType,int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnClassName", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnCount", "()", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnDisplaySize", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getColumnType", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getPrecision", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "getScale", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isAutoIncrement", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isCaseSensitive", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isCurrency", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isDefinitelyWritable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isNullable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isReadOnly", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isSearchable", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isSigned", "(int)", "summary", "df-generated"] + - ["java.sql", "ResultSetMetaData", "isWritable", "(int)", "summary", "df-generated"] + - ["java.sql", "SQLException", "getErrorCode", "()", "summary", "df-generated"] + - ["java.sql", "SQLException", "setNextException", "(SQLException)", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readBigDecimal", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readBoolean", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readByte", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readDouble", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readFloat", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readInt", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readLong", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readObject", "(Class)", "summary", "df-generated"] + - ["java.sql", "SQLInput", "readShort", "()", "summary", "df-generated"] + - ["java.sql", "SQLInput", "wasNull", "()", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeArray", "(Array)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBigDecimal", "(BigDecimal)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBlob", "(Blob)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeBoolean", "(boolean)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeByte", "(byte)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeClob", "(Clob)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeDouble", "(double)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeFloat", "(float)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeInt", "(int)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeLong", "(long)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeObject", "(Object,SQLType)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeObject", "(SQLData)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeRef", "(Ref)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeShort", "(short)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeStruct", "(Struct)", "summary", "df-generated"] + - ["java.sql", "SQLOutput", "writeURL", "(URL)", "summary", "df-generated"] + - ["java.sql", "SQLType", "getName", "()", "summary", "df-generated"] + - ["java.sql", "SQLType", "getVendor", "()", "summary", "df-generated"] + - ["java.sql", "SQLType", "getVendorTypeNumber", "()", "summary", "df-generated"] + - ["java.sql", "SQLWarning", "setNextWarning", "(SQLWarning)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeBatch", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,String[])", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,int)", "summary", "df-generated"] + - ["java.sql", "Statement", "executeLargeUpdate", "(String,int[])", "summary", "df-generated"] + - ["java.sql", "Statement", "getLargeMaxRows", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "getLargeUpdateCount", "()", "summary", "df-generated"] + - ["java.sql", "Statement", "isSimpleIdentifier", "(String)", "summary", "df-generated"] + - ["java.sql", "Statement", "setLargeMaxRows", "(long)", "summary", "df-generated"] + - ["java.sql", "Time", "Time", "(int,int,int)", "summary", "df-generated"] + - ["java.sql", "Time", "Time", "(long)", "summary", "df-generated"] + - ["java.sql", "Time", "toLocalTime", "()", "summary", "df-generated"] + - ["java.sql", "Time", "valueOf", "(LocalTime)", "summary", "df-generated"] + - ["java.sql", "Time", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "Timestamp", "(int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "after", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "before", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "compareTo", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "equals", "(Timestamp)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "from", "(Instant)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "getNanos", "()", "summary", "df-generated"] + - ["java.sql", "Timestamp", "setNanos", "(int)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "toLocalDateTime", "()", "summary", "df-generated"] + - ["java.sql", "Timestamp", "valueOf", "(LocalDateTime)", "summary", "df-generated"] + - ["java.sql", "Timestamp", "valueOf", "(String)", "summary", "df-generated"] + - ["java.sql", "Wrapper", "isWrapperFor", "(Class)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.text.model.yml b/java/ql/lib/ext/generated/java.text.model.yml new file mode 100644 index 00000000000..6418b607358 --- /dev/null +++ b/java/ql/lib/ext/generated/java.text.model.yml @@ -0,0 +1,339 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.text", "Annotation", True, "Annotation", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Annotation", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "AttributedString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "AttributedString", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "getIterator", "(AttributedCharacterIterator$Attribute[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "AttributedString", True, "getIterator", "(AttributedCharacterIterator$Attribute[],int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Bidi", False, "Bidi", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Bidi", False, "Bidi", "(char[],int,byte[],int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "BreakIterator", True, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "ChoiceFormat", "(double[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "setChoices", "(double[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ChoiceFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "CollationKey", True, "getSourceString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Collator", True, "getCollationKey", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "CompactNumberFormat", False, "CompactNumberFormat", "(String,DecimalFormatSymbols,String[],String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "format", "(Date,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getCalendar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getDateInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getDateTimeInstance", "(int,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getNumberFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getTimeInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setCalendar", "(Calendar)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setNumberFormat", "(NumberFormat)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormat", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "DateFormatSymbols", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getAmPmStrings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getEras", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getLocalPatternChars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getMonths", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getShortMonths", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getShortWeekdays", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getWeekdays", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "getZoneStrings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setAmPmStrings", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setEras", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setLocalPatternChars", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setMonths", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setShortMonths", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setShortWeekdays", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setWeekdays", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DateFormatSymbols", True, "setZoneStrings", "(String[][])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "DecimalFormat", "(String,DecimalFormatSymbols)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getDecimalFormatSymbols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getNegativePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getNegativeSuffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getPositivePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "getPositiveSuffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setDecimalFormatSymbols", "(DecimalFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setNegativePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setNegativeSuffix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setPositivePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "setPositiveSuffix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "toLocalizedPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "DecimalFormatSymbols", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getCurrency", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getCurrencySymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getExponentSeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInfinity", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getInternationalCurrencySymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "getNaN", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setCurrency", "(Currency)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setCurrencySymbol", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setExponentSeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setInfinity", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setInternationalCurrencySymbol", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "DecimalFormatSymbols", True, "setNaN", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "FieldPosition", True, "getFieldAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "MessageFormat", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[0].ArrayElement", "Argument[1]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getFormatsByArgumentIndex", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "parse", "(String,ParsePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormat", "(int,Format)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormatByArgumentIndex", "(int,Format)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormats", "(Format[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setFormatsByArgumentIndex", "(Format[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "MessageFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "Normalizer", False, "normalize", "(CharSequence,Normalizer$Form)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(double,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "format", "(long,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCompactNumberInstance", "(Locale,NumberFormat$Style)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCurrency", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getCurrencyInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getIntegerInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getNumberInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "getPercentInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "NumberFormat", True, "setCurrency", "(Currency)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "ParseException", True, "ParseException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "RuleBasedCollator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getCollationElementIterator", "(CharacterIterator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getCollationElementIterator", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "RuleBasedCollator", True, "getRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,DateFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,DateFormatSymbols)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "SimpleDateFormat", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "applyPattern", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "get2DigitYearStart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "getDateFormatSymbols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "setDateFormatSymbols", "(DateFormatSymbols)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "SimpleDateFormat", True, "toPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "StringCharacterIterator", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.text", "StringCharacterIterator", False, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.text", "AttributedCharacterIterator", "getAllAttributeKeys", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getAttribute", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getAttributes", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunLimit", "(Set)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "()", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "(AttributedCharacterIterator$Attribute)", "summary", "df-generated"] + - ["java.text", "AttributedCharacterIterator", "getRunStart", "(Set)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "AttributedString", "(AttributedCharacterIterator,int,int,AttributedCharacterIterator$Attribute[])", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttribute", "(AttributedCharacterIterator$Attribute,Object)", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttribute", "(AttributedCharacterIterator$Attribute,Object,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "addAttributes", "(Map,int,int)", "summary", "df-generated"] + - ["java.text", "AttributedString", "getIterator", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "Bidi", "(AttributedCharacterIterator)", "summary", "df-generated"] + - ["java.text", "Bidi", "baseIsLeftToRight", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "createLineBidi", "(int,int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getBaseLevel", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getLength", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getLevelAt", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunCount", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunLevel", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunLimit", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "getRunStart", "(int)", "summary", "df-generated"] + - ["java.text", "Bidi", "isLeftToRight", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "isMixed", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "isRightToLeft", "()", "summary", "df-generated"] + - ["java.text", "Bidi", "reorderVisually", "(byte[],int,Object[],int,int)", "summary", "df-generated"] + - ["java.text", "Bidi", "requiresBidi", "(char[],int,int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "current", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "first", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "following", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getCharacterInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getCharacterInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getLineInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getLineInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getSentenceInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getSentenceInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getText", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getWordInstance", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "getWordInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "isBoundary", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "last", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "next", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "preceding", "(int)", "summary", "df-generated"] + - ["java.text", "BreakIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "BreakIterator", "setText", "(CharacterIterator)", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "current", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "first", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getBeginIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getEndIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "getIndex", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "last", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "CharacterIterator", "setIndex", "(int)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "ChoiceFormat", "(String)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "getLimits", "()", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "nextDouble", "(double)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "nextDouble", "(double,boolean)", "summary", "df-generated"] + - ["java.text", "ChoiceFormat", "previousDouble", "(double)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "getMaxExpansion", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "getOffset", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "next", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "previous", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "primaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "reset", "()", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "secondaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setOffset", "(int)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setText", "(CharacterIterator)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "setText", "(String)", "summary", "df-generated"] + - ["java.text", "CollationElementIterator", "tertiaryOrder", "(int)", "summary", "df-generated"] + - ["java.text", "CollationKey", "toByteArray", "()", "summary", "df-generated"] + - ["java.text", "Collator", "compare", "(String,String)", "summary", "df-generated"] + - ["java.text", "Collator", "equals", "(String,String)", "summary", "df-generated"] + - ["java.text", "Collator", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getDecomposition", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "Collator", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text", "Collator", "getStrength", "()", "summary", "df-generated"] + - ["java.text", "Collator", "setDecomposition", "(int)", "summary", "df-generated"] + - ["java.text", "Collator", "setStrength", "(int)", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "getGroupingSize", "()", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "isParseBigDecimal", "()", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "setGroupingSize", "(int)", "summary", "df-generated"] + - ["java.text", "CompactNumberFormat", "setParseBigDecimal", "(boolean)", "summary", "df-generated"] + - ["java.text", "DateFormat$Field", "getCalendarField", "()", "summary", "df-generated"] + - ["java.text", "DateFormat$Field", "ofCalendarField", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateInstance", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateTimeInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getDateTimeInstance", "(int,int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getTimeInstance", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "getTimeInstance", "(int)", "summary", "df-generated"] + - ["java.text", "DateFormat", "isLenient", "()", "summary", "df-generated"] + - ["java.text", "DateFormat", "parse", "(String,ParsePosition)", "summary", "df-generated"] + - ["java.text", "DateFormat", "setLenient", "(boolean)", "summary", "df-generated"] + - ["java.text", "DateFormatSymbols", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DateFormatSymbols", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "DecimalFormat", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "applyLocalizedPattern", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "getGroupingSize", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "getMultiplier", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "isDecimalSeparatorAlwaysShown", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "isParseBigDecimal", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setDecimalSeparatorAlwaysShown", "(boolean)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setGroupingSize", "(int)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setMultiplier", "(int)", "summary", "df-generated"] + - ["java.text", "DecimalFormat", "setParseBigDecimal", "(boolean)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getDecimalSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getDigit", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getGroupingSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMinusSign", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMonetaryDecimalSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getMonetaryGroupingSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPatternSeparator", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPerMill", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getPercent", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "getZeroDigit", "()", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setDecimalSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setDigit", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setGroupingSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMinusSign", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMonetaryDecimalSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setMonetaryGroupingSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPatternSeparator", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPerMill", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setPercent", "(char)", "summary", "df-generated"] + - ["java.text", "DecimalFormatSymbols", "setZeroDigit", "(char)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "FieldPosition", "(int)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getBeginIndex", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getEndIndex", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "getField", "()", "summary", "df-generated"] + - ["java.text", "FieldPosition", "setBeginIndex", "(int)", "summary", "df-generated"] + - ["java.text", "FieldPosition", "setEndIndex", "(int)", "summary", "df-generated"] + - ["java.text", "Format", "formatToCharacterIterator", "(Object)", "summary", "df-generated"] + - ["java.text", "MessageFormat", "MessageFormat", "(String)", "summary", "df-generated"] + - ["java.text", "MessageFormat", "applyPattern", "(String)", "summary", "df-generated"] + - ["java.text", "Normalizer", "isNormalized", "(CharSequence,Normalizer$Form)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "format", "(double)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getCompactNumberInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getCurrencyInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getIntegerInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMaximumFractionDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMaximumIntegerDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMinimumFractionDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getMinimumIntegerDigits", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getNumberInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getPercentInstance", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "getRoundingMode", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "isGroupingUsed", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "isParseIntegerOnly", "()", "summary", "df-generated"] + - ["java.text", "NumberFormat", "parse", "(String)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "parse", "(String,ParsePosition)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setGroupingUsed", "(boolean)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMaximumFractionDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMaximumIntegerDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMinimumFractionDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setMinimumIntegerDigits", "(int)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setParseIntegerOnly", "(boolean)", "summary", "df-generated"] + - ["java.text", "NumberFormat", "setRoundingMode", "(RoundingMode)", "summary", "df-generated"] + - ["java.text", "ParseException", "getErrorOffset", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "ParsePosition", "(int)", "summary", "df-generated"] + - ["java.text", "ParsePosition", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "getIndex", "()", "summary", "df-generated"] + - ["java.text", "ParsePosition", "setErrorIndex", "(int)", "summary", "df-generated"] + - ["java.text", "ParsePosition", "setIndex", "(int)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "applyLocalizedPattern", "(String)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "set2DigitYearStart", "(Date)", "summary", "df-generated"] + - ["java.text", "SimpleDateFormat", "toLocalizedPattern", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.text.spi.model.yml b/java/ql/lib/ext/generated/java.text.spi.model.yml new file mode 100644 index 00000000000..e802b83640a --- /dev/null +++ b/java/ql/lib/ext/generated/java.text.spi.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.text.spi", "BreakIteratorProvider", "getCharacterInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getLineInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getSentenceInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "BreakIteratorProvider", "getWordInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "CollatorProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getDateInstance", "(int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getDateTimeInstance", "(int,int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatProvider", "getTimeInstance", "(int,Locale)", "summary", "df-generated"] + - ["java.text.spi", "DateFormatSymbolsProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "DecimalFormatSymbolsProvider", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getCompactNumberInstance", "(Locale,NumberFormat$Style)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getCurrencyInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getIntegerInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getNumberInstance", "(Locale)", "summary", "df-generated"] + - ["java.text.spi", "NumberFormatProvider", "getPercentInstance", "(Locale)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.chrono.model.yml b/java/ql/lib/ext/generated/java.time.chrono.model.yml new file mode 100644 index 00000000000..00180b2baf6 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.chrono.model.yml @@ -0,0 +1,118 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.chrono", "ChronoLocalDate", True, "atTime", "(LocalTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "atTime", "(LocalTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "getEra", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", True, "until", "(ChronoLocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "between", "(ChronoLocalDate,ChronoLocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "minus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "multipliedBy", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "negated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "normalized", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", True, "plus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "toLocalDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", True, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(Era,int,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(Era,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "date", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateEpochDay", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "(Clock)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateNow", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(Era,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(Era,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "dateYearDay", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getCalendarType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "localDateTime", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "localDateTime", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "period", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "resolveDate", "(Map,ResolverStyle)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "zonedDateTime", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Chronology", True, "zonedDateTime", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "Era", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "HijrahDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "HijrahDate", False, "withVariant", "(HijrahChronology)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.chrono", "JapaneseDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "JapaneseDate", False, "of", "(JapaneseEra,int,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "MinguoDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.chrono", "ChronoLocalDate", "isAfter", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isBefore", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isEqual", "(ChronoLocalDate)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "isLeapYear", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "lengthOfMonth", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "lengthOfYear", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDate", "toEpochDay", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isAfter", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isBefore", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "isEqual", "(ChronoLocalDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "toEpochSecond", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoLocalDateTime", "toInstant", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", "isNegative", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoPeriod", "isZero", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "getChronology", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isAfter", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isBefore", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "isEqual", "(ChronoZonedDateTime)", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time.chrono", "ChronoZonedDateTime", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "epochSecond", "(Era,int,int,int,int,int,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "epochSecond", "(int,int,int,int,int,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "eraOf", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "eras", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "getAvailableChronologies", "()", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "isLeapYear", "(long)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "of", "(String)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "ofLocale", "(Locale)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "prolepticYear", "(Era,int)", "summary", "df-generated"] + - ["java.time.chrono", "Chronology", "range", "(ChronoField)", "summary", "df-generated"] + - ["java.time.chrono", "Era", "getValue", "()", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "HijrahEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "IsoEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "valueOf", "(String)", "summary", "df-generated"] + - ["java.time.chrono", "JapaneseEra", "values", "()", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "MinguoEra", "of", "(int)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "()", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistDate", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time.chrono", "ThaiBuddhistEra", "of", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.format.model.yml b/java/ql/lib/ext/generated/java.time.format.model.yml new file mode 100644 index 00000000000..f8a7a3955f5 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.format.model.yml @@ -0,0 +1,104 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.format", "DateTimeFormatter", False, "formatTo", "(TemporalAccessor,Appendable)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "formatTo", "(TemporalAccessor,Appendable)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getChronology", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getDecimalStyle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getResolverFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "getZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "localizedBy", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "ofPattern", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence,ParsePosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parse", "(CharSequence,TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "parseBest", "(CharSequence,TemporalQuery[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "(TemporalQuery)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "toFormat", "(TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withChronology", "(Chronology)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withDecimalStyle", "(DecimalStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverFields", "(Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverFields", "(TemporalField[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withResolverStyle", "(ResolverStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatter", False, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "append", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendChronologyId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendChronologyText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendDayPeriodText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendFraction", "(TemporalField,int,int,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendGenericZoneText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendGenericZoneText", "(TextStyle,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendInstant", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendInstant", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLiteral", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLiteral", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLocalized", "(FormatStyle,FormatStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendLocalizedOffset", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOffset", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOffsetId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendOptional", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendPattern", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField,Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendText", "(TemporalField,TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValue", "(TemporalField,int,int,SignStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValueReduced", "(TemporalField,int,int,ChronoLocalDate)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendValueReduced", "(TemporalField,int,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneOrOffsetId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneRegionId", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneText", "(TextStyle)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "appendZoneText", "(TextStyle,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "getLocalizedDateTimePattern", "(FormatStyle,FormatStyle,Chronology,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "optionalEnd", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "optionalStart", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "padNext", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "padNext", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseCaseInsensitive", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseCaseSensitive", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseDefaulting", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseLenient", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "parseStrict", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", False, "toFormatter", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "DateTimeParseException", "(String,CharSequence,int,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.time.format", "DateTimeParseException", True, "getParsedString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "of", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withDecimalSeparator", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withNegativeSign", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withPositiveSign", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.format", "DecimalStyle", False, "withZeroDigit", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.format", "DateTimeFormatter", "getResolverStyle", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDate", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDateTime", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedDateTime", "(FormatStyle,FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "ofLocalizedTime", "(FormatStyle)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parseUnresolved", "(CharSequence,ParsePosition)", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parsedExcessDays", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatter", "parsedLeapSecond", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeFormatterBuilder", "toFormatter", "()", "summary", "df-generated"] + - ["java.time.format", "DateTimeParseException", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getDecimalSeparator", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getNegativeSign", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getPositiveSign", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "getZeroDigit", "()", "summary", "df-generated"] + - ["java.time.format", "DecimalStyle", "ofDefaultLocale", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "asNormal", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "asStandalone", "()", "summary", "df-generated"] + - ["java.time.format", "TextStyle", "isStandalone", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.model.yml b/java/ql/lib/ext/generated/java.time.model.yml new file mode 100644 index 00000000000..464dbcc2fcd --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.model.yml @@ -0,0 +1,513 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time", "Clock", True, "fixed", "(Instant,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "fixed", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "getZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "offset", "(Clock,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "offset", "(Clock,Duration)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "system", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tick", "(Clock,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickMillis", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickMinutes", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Clock", True, "tickSeconds", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DateTimeException", True, "DateTimeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time", "DayOfWeek", False, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "abs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "dividedBy", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "minus", "(Duration)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "multipliedBy", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "negated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plus", "(Duration)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Duration", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Duration", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Instant", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "atZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusMillis", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Instant", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "InstantSource", True, "fixed", "(Instant)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "instant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "offset", "(InstantSource,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "offset", "(InstantSource,Duration)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "tick", "(InstantSource,Duration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "InstantSource", True, "withZone", "(ZoneId)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atStartOfDay", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(OffsetTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(OffsetTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "atTime", "(int,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDate", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDate", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalDateTime", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "atOffset", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "of", "(LocalDate,LocalTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "of", "(LocalDate,LocalTime)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atDate", "(LocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atDate", "(LocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atOffset", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "atOffset", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "LocalTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "LocalTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Month", False, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "MonthDay", False, "with", "(Month)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "MonthDay", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "MonthDay", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSameInstant", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSameInstant", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSimilarLocal", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "atZoneSimilarLocal", "(ZoneId)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "getOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDate,LocalTime,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDateTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(LocalDateTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "of", "(int,int,int,int,int,int,int,ZoneOffset)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toOffsetTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "toZonedDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameInstant", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "atDate", "(LocalDate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "atDate", "(LocalDate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "format", "(DateTimeFormatter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "getOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(LocalTime,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(LocalTime,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "of", "(int,int,int,int,ZoneOffset)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "toLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameInstant", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withOffsetSameLocal", "(ZoneOffset)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "OffsetTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "from", "(TemporalAmount)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Period", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withDays", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withMonths", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Period", False, "withYears", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "Year", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "Year", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "format", "(DateTimeFormatter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "YearMonth", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "YearMonth", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getDisplayName", "(TextStyle,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "getRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "normalized", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time", "ZoneId", True, "of", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "of", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "ofOffset", "(String,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneId", True, "ofOffset", "(String,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZoneOffset", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "from", "(TemporalAccessor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "minusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "now", "(Clock)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "now", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDate,LocalTime,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDateTime,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(LocalDateTime,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "of", "(int,int,int,int,int,int,int,ZoneId)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(Instant,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofInstant", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofLocal", "(LocalDateTime,ZoneId,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "ofStrict", "(LocalDateTime,ZoneOffset,ZoneId)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusDays", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusHours", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusMinutes", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusMonths", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusNanos", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusSeconds", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusWeeks", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "plusYears", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "toOffsetDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "truncatedTo", "(TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withDayOfMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withDayOfYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withFixedOffsetZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withHour", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withMinute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withMonth", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withNano", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withSecond", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time", "ZonedDateTime", False, "withYear", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time", "Clock", "systemDefaultZone", "()", "summary", "df-generated"] + - ["java.time", "Clock", "systemUTC", "()", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "from", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "getValue", "()", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "minus", "(long)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "of", "(int)", "summary", "df-generated"] + - ["java.time", "DayOfWeek", "plus", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "between", "(Temporal,Temporal)", "summary", "df-generated"] + - ["java.time", "Duration", "dividedBy", "(Duration)", "summary", "df-generated"] + - ["java.time", "Duration", "from", "(TemporalAmount)", "summary", "df-generated"] + - ["java.time", "Duration", "getNano", "()", "summary", "df-generated"] + - ["java.time", "Duration", "getSeconds", "()", "summary", "df-generated"] + - ["java.time", "Duration", "isNegative", "()", "summary", "df-generated"] + - ["java.time", "Duration", "isZero", "()", "summary", "df-generated"] + - ["java.time", "Duration", "of", "(long,TemporalUnit)", "summary", "df-generated"] + - ["java.time", "Duration", "ofDays", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofHours", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofNanos", "(long)", "summary", "df-generated"] + - ["java.time", "Duration", "ofSeconds", "(long,long)", "summary", "df-generated"] + - ["java.time", "Duration", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Duration", "toDays", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toDaysPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toHours", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toHoursPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMillisPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMinutes", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toMinutesPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toNanos", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toNanosPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toSeconds", "()", "summary", "df-generated"] + - ["java.time", "Duration", "toSecondsPart", "()", "summary", "df-generated"] + - ["java.time", "Duration", "withNanos", "(int)", "summary", "df-generated"] + - ["java.time", "Duration", "withSeconds", "(long)", "summary", "df-generated"] + - ["java.time", "Instant", "getEpochSecond", "()", "summary", "df-generated"] + - ["java.time", "Instant", "getNano", "()", "summary", "df-generated"] + - ["java.time", "Instant", "isAfter", "(Instant)", "summary", "df-generated"] + - ["java.time", "Instant", "isBefore", "(Instant)", "summary", "df-generated"] + - ["java.time", "Instant", "ofEpochSecond", "(long)", "summary", "df-generated"] + - ["java.time", "Instant", "ofEpochSecond", "(long,long)", "summary", "df-generated"] + - ["java.time", "InstantSource", "millis", "()", "summary", "df-generated"] + - ["java.time", "InstantSource", "system", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "datesUntil", "(LocalDate)", "summary", "df-generated"] + - ["java.time", "LocalDate", "datesUntil", "(LocalDate,Period)", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "getYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDate", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalDate", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDate", "of", "(int,Month,int)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofEpochDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDate", "ofYearDay", "(int,int)", "summary", "df-generated"] + - ["java.time", "LocalDate", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalDate", "toEpochSecond", "(LocalTime,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,Month,int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "of", "(int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "ofEpochSecond", "(long,int,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "LocalDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "isAfter", "(LocalTime)", "summary", "df-generated"] + - ["java.time", "LocalTime", "isBefore", "(LocalTime)", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "LocalTime", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "of", "(int,int,int,int)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofInstant", "(Instant,ZoneId)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofNanoOfDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalTime", "ofSecondOfDay", "(long)", "summary", "df-generated"] + - ["java.time", "LocalTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "LocalTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "LocalTime", "toEpochSecond", "(LocalDate,ZoneOffset)", "summary", "df-generated"] + - ["java.time", "LocalTime", "toNanoOfDay", "()", "summary", "df-generated"] + - ["java.time", "LocalTime", "toSecondOfDay", "()", "summary", "df-generated"] + - ["java.time", "Month", "firstDayOfYear", "(boolean)", "summary", "df-generated"] + - ["java.time", "Month", "firstMonthOfQuarter", "()", "summary", "df-generated"] + - ["java.time", "Month", "from", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time", "Month", "getValue", "()", "summary", "df-generated"] + - ["java.time", "Month", "length", "(boolean)", "summary", "df-generated"] + - ["java.time", "Month", "maxLength", "()", "summary", "df-generated"] + - ["java.time", "Month", "minLength", "()", "summary", "df-generated"] + - ["java.time", "Month", "minus", "(long)", "summary", "df-generated"] + - ["java.time", "Month", "of", "(int)", "summary", "df-generated"] + - ["java.time", "Month", "plus", "(long)", "summary", "df-generated"] + - ["java.time", "MonthDay", "atYear", "(int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "isAfter", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "MonthDay", "isBefore", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "MonthDay", "isValidYear", "(int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "()", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "MonthDay", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "MonthDay", "of", "(Month,int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "MonthDay", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "MonthDay", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isAfter", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isBefore", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "isEqual", "(OffsetDateTime)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "now", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "timeLineOrder", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetDateTime", "toInstant", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isAfter", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isBefore", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "isEqual", "(OffsetTime)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "now", "()", "summary", "df-generated"] + - ["java.time", "OffsetTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "OffsetTime", "toEpochSecond", "(LocalDate)", "summary", "df-generated"] + - ["java.time", "Period", "between", "(LocalDate,LocalDate)", "summary", "df-generated"] + - ["java.time", "Period", "getDays", "()", "summary", "df-generated"] + - ["java.time", "Period", "getMonths", "()", "summary", "df-generated"] + - ["java.time", "Period", "getYears", "()", "summary", "df-generated"] + - ["java.time", "Period", "of", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "Period", "ofDays", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofMonths", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofWeeks", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "ofYears", "(int)", "summary", "df-generated"] + - ["java.time", "Period", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Period", "toTotalMonths", "()", "summary", "df-generated"] + - ["java.time", "Year", "atDay", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "atMonth", "(Month)", "summary", "df-generated"] + - ["java.time", "Year", "atMonth", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "atMonthDay", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "Year", "getValue", "()", "summary", "df-generated"] + - ["java.time", "Year", "isAfter", "(Year)", "summary", "df-generated"] + - ["java.time", "Year", "isBefore", "(Year)", "summary", "df-generated"] + - ["java.time", "Year", "isLeap", "()", "summary", "df-generated"] + - ["java.time", "Year", "isLeap", "(long)", "summary", "df-generated"] + - ["java.time", "Year", "isValidMonthDay", "(MonthDay)", "summary", "df-generated"] + - ["java.time", "Year", "length", "()", "summary", "df-generated"] + - ["java.time", "Year", "now", "()", "summary", "df-generated"] + - ["java.time", "Year", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "Year", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "Year", "of", "(int)", "summary", "df-generated"] + - ["java.time", "Year", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "Year", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "YearMonth", "atDay", "(int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "atEndOfMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "getYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "isAfter", "(YearMonth)", "summary", "df-generated"] + - ["java.time", "YearMonth", "isBefore", "(YearMonth)", "summary", "df-generated"] + - ["java.time", "YearMonth", "isLeapYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "isValidDay", "(int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "lengthOfMonth", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "lengthOfYear", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "()", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "(Clock)", "summary", "df-generated"] + - ["java.time", "YearMonth", "now", "(ZoneId)", "summary", "df-generated"] + - ["java.time", "YearMonth", "of", "(int,Month)", "summary", "df-generated"] + - ["java.time", "YearMonth", "of", "(int,int)", "summary", "df-generated"] + - ["java.time", "YearMonth", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "YearMonth", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] + - ["java.time", "ZoneId", "getAvailableZoneIds", "()", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "getTotalSeconds", "()", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "of", "(String)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHours", "(int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHoursMinutes", "(int,int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofHoursMinutesSeconds", "(int,int,int)", "summary", "df-generated"] + - ["java.time", "ZoneOffset", "ofTotalSeconds", "(int)", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfMonth", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getDayOfYear", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getHour", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMinute", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMonth", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getMonthValue", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getNano", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getSecond", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "getYear", "()", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "parse", "(CharSequence)", "summary", "df-generated"] + - ["java.time", "ZonedDateTime", "parse", "(CharSequence,DateTimeFormatter)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.temporal.model.yml b/java/ql/lib/ext/generated/java.time.temporal.model.yml new file mode 100644 index 00000000000..d0b17982238 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.temporal.model.yml @@ -0,0 +1,97 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.temporal", "Temporal", True, "minus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "minus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "plus", "(TemporalAmount)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "plus", "(long,TemporalUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalAdjuster)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalAdjuster)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "Temporal", True, "with", "(TemporalField,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", True, "query", "(TemporalQuery)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", True, "range", "(TemporalField)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAdjuster", True, "adjustInto", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAmount", True, "addTo", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalAmount", True, "subtractFrom", "(Temporal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "adjustInto", "(Temporal,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getBaseUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "getRangeUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "range", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "rangeRefinedBy", "(TemporalAccessor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalField", True, "resolve", "(Map,TemporalAccessor,ResolverStyle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "TemporalUnit", True, "addTo", "(Temporal,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "UnsupportedTemporalTypeException", True, "UnsupportedTemporalTypeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "dayOfWeek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekBasedYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfMonth", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfWeekBasedYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.temporal", "WeekFields", False, "weekOfYear", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.temporal", "ChronoField", "checkValidIntValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ChronoField", "checkValidValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "Temporal", "isSupported", "(TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "Temporal", "until", "(Temporal,TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "get", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "getLong", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAccessor", "isSupported", "(TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "dayOfWeekInMonth", "(int,DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfNextMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfNextYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstDayOfYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "firstInMonth", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastDayOfMonth", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastDayOfYear", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "lastInMonth", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "next", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "nextOrSame", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "ofDateAdjuster", "(UnaryOperator)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "previous", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAdjusters", "previousOrSame", "(DayOfWeek)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAmount", "get", "(TemporalUnit)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalAmount", "getUnits", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "getFrom", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isDateBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isSupportedBy", "(TemporalAccessor)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalField", "isTimeBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "chronology", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "localDate", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "localTime", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "offset", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "precision", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "zone", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalQueries", "zoneId", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "between", "(Temporal,Temporal)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "getDuration", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isDateBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isDurationEstimated", "()", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isSupportedBy", "(Temporal)", "summary", "df-generated"] + - ["java.time.temporal", "TemporalUnit", "isTimeBased", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "checkValidIntValue", "(long,TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "checkValidValue", "(long,TemporalField)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getLargestMinimum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getMaximum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getMinimum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "getSmallestMaximum", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isFixed", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isIntValue", "()", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isValidIntValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "isValidValue", "(long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long,long)", "summary", "df-generated"] + - ["java.time.temporal", "ValueRange", "of", "(long,long,long,long)", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "getFirstDayOfWeek", "()", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "getMinimalDaysInFirstWeek", "()", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "of", "(DayOfWeek,int)", "summary", "df-generated"] + - ["java.time.temporal", "WeekFields", "of", "(Locale)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.time.zone.model.yml b/java/ql/lib/ext/generated/java.time.zone.model.yml new file mode 100644 index 00000000000..1501f58c140 --- /dev/null +++ b/java/ql/lib/ext/generated/java.time.zone.model.yml @@ -0,0 +1,63 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.time.zone", "ZoneOffsetTransition", False, "getDateTimeAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getDateTimeBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getOffsetAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "getOffsetBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", False, "of", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule$TimeDefinition", False, "createDateTime", "(LocalDateTime,ZoneOffset,ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "createTransition", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getLocalTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getOffsetAfter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getOffsetBefore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "getStandardOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[6]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", False, "of", "(Month,int,DayOfWeek,LocalTime,boolean,ZoneOffsetTransitionRule$TimeDefinition,ZoneOffset,ZoneOffset,ZoneOffset)", "", "Argument[8]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getOffset", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getOffset", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getStandardOffset", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransition", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransitionRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getTransitions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "getValidOffsets", "(LocalDateTime)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "nextTransition", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "of", "(ZoneOffset,ZoneOffset,List,List,List)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRules", False, "previousTransition", "(Instant)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.time.zone", "ZoneRulesException", True, "ZoneRulesException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.time.zone", "ZoneOffsetTransition", "getDuration", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "getInstant", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isGap", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isOverlap", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "isValidOffset", "(ZoneOffset)", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransition", "toEpochSecond", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getDayOfMonthIndicator", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getDayOfWeek", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getMonth", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "getTimeDefinition", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneOffsetTransitionRule", "isMidnightEndOfDay", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "getDaylightSavings", "(Instant)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isDaylightSavings", "(Instant)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isFixedOffset", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRules", "isValidOffset", "(LocalDateTime,ZoneOffset)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getAvailableZoneIds", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getRules", "(String,boolean)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "getVersions", "(String)", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "refresh", "()", "summary", "df-generated"] + - ["java.time.zone", "ZoneRulesProvider", "registerProvider", "(ZoneRulesProvider)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml new file mode 100644 index 00000000000..7f40c376f34 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.atomic.model.yml @@ -0,0 +1,271 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "AtomicMarkableReference", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "get", "(boolean[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "getReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", True, "set", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "getAndAccumulate", "(Object,BinaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "getAndUpdate", "(UnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", True, "updateAndGet", "(UnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", True, "AtomicReferenceArray", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "AtomicStampedReference", "(Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "get", "(int[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "getReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", True, "set", "(Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchange", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchangeAcquire", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "compareAndExchangeRelease", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getAndSet", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "lazySet", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setOpaque", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setPlain", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "setRelease", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSet", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetAcquire", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetPlain", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetRelease", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicBoolean", "weakCompareAndSetVolatile", "(boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "accumulateAndGet", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "addAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchange", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchangeAcquire", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndExchangeRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "compareAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "decrementAndGet", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndAccumulate", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndAdd", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndDecrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndIncrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndSet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getAndUpdate", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "lazySet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "set", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "setRelease", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "updateAndGet", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetAcquire", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetPlain", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicInteger", "weakCompareAndSetVolatile", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "AtomicIntegerArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "AtomicIntegerArray", "(int[])", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "accumulateAndGet", "(int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "addAndGet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchange", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchangeAcquire", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndExchangeRelease", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "compareAndSet", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "decrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndAccumulate", "(int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndAdd", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndDecrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndIncrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndSet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getAndUpdate", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "incrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "lazySet", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "set", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setOpaque", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setPlain", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "setRelease", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "updateAndGet", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSet", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetAcquire", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetPlain", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetRelease", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerArray", "weakCompareAndSetVolatile", "(int,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "accumulateAndGet", "(Object,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "addAndGet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "compareAndSet", "(Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "decrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndAccumulate", "(Object,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndAdd", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndDecrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndIncrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndSet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "getAndUpdate", "(Object,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "incrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "lazySet", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "newUpdater", "(Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "set", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "updateAndGet", "(Object,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicIntegerFieldUpdater", "weakCompareAndSet", "(Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "accumulateAndGet", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchange", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchangeAcquire", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndExchangeRelease", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "compareAndSet", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "decrementAndGet", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndAccumulate", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndAdd", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndDecrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndIncrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndSet", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getAndUpdate", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "lazySet", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "set", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setOpaque", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setPlain", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "setRelease", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "updateAndGet", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSet", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetAcquire", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetPlain", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetRelease", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLong", "weakCompareAndSetVolatile", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "AtomicLongArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "AtomicLongArray", "(long[])", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "accumulateAndGet", "(int,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "addAndGet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchange", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchangeAcquire", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndExchangeRelease", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "compareAndSet", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "decrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndAccumulate", "(int,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndAdd", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndDecrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndIncrement", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndSet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getAndUpdate", "(int,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "incrementAndGet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "lazySet", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "set", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setOpaque", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setPlain", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "setRelease", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "updateAndGet", "(int,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSet", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetAcquire", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetPlain", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetRelease", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongArray", "weakCompareAndSetVolatile", "(int,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "accumulateAndGet", "(Object,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "addAndGet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "compareAndSet", "(Object,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "decrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndAccumulate", "(Object,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndAdd", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndDecrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndIncrement", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndSet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "getAndUpdate", "(Object,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "incrementAndGet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "lazySet", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "newUpdater", "(Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "set", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "updateAndGet", "(Object,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicLongFieldUpdater", "weakCompareAndSet", "(Object,long,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "attemptMark", "(Object,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "compareAndSet", "(Object,Object,boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "isMarked", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicMarkableReference", "weakCompareAndSet", "(Object,Object,boolean,boolean)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "accumulateAndGet", "(Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchange", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchangeAcquire", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndExchangeRelease", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "compareAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getAndSet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getOpaque", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "getPlain", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "lazySet", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setOpaque", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setPlain", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "setRelease", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetAcquire", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetPlain", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetRelease", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReference", "weakCompareAndSetVolatile", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "AtomicReferenceArray", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "accumulateAndGet", "(int,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchange", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchangeAcquire", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndExchangeRelease", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "compareAndSet", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "get", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndAccumulate", "(int,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndSet", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getAndUpdate", "(int,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getOpaque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "getPlain", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "lazySet", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "length", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "set", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setOpaque", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setPlain", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "setRelease", "(int,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "updateAndGet", "(int,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSet", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetAcquire", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetPlain", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetRelease", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceArray", "weakCompareAndSetVolatile", "(int,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "accumulateAndGet", "(Object,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "compareAndSet", "(Object,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "get", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndAccumulate", "(Object,Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndSet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "getAndUpdate", "(Object,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "lazySet", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "newUpdater", "(Class,Class,String)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "set", "(Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "updateAndGet", "(Object,UnaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicReferenceFieldUpdater", "weakCompareAndSet", "(Object,Object,Object)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "attemptStamp", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "compareAndSet", "(Object,Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "getStamp", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "AtomicStampedReference", "weakCompareAndSet", "(Object,Object,int,int)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "DoubleAccumulator", "(DoubleBinaryOperator,double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "accumulate", "(double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "get", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "getThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAccumulator", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "add", "(double)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "sum", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "DoubleAdder", "sumThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "LongAccumulator", "(LongBinaryOperator,long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "accumulate", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "get", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "getThenReset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAccumulator", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "add", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "decrement", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "increment", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "sum", "()", "summary", "df-generated"] + - ["java.util.concurrent.atomic", "LongAdder", "sumThenReset", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml new file mode 100644 index 00000000000..e8f78f593d0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.locks.model.yml @@ -0,0 +1,128 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getExclusiveQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getFirstQueuedThread", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getSharedQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", True, "getWaitingThreads", "(AbstractQueuedLongSynchronizer$ConditionObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getExclusiveQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getFirstQueuedThread", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getSharedQueuedThreads", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", True, "getWaitingThreads", "(AbstractQueuedSynchronizer$ConditionObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "ReadWriteLock", True, "readLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "ReadWriteLock", True, "writeLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asReadLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asReadWriteLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", True, "asWriteLock", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquire", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireInterruptibly", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireShared", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "acquireSharedInterruptibly", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "getWaitQueueLength", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasContended", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasQueuedPredecessors", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "hasWaiters", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "isQueued", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "owns", "(AbstractQueuedLongSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "release", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "releaseShared", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "tryAcquireNanos", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedLongSynchronizer", "tryAcquireSharedNanos", "(long,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireShared", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "acquireSharedInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "getWaitQueueLength", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasContended", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasQueuedPredecessors", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "hasWaiters", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "isQueued", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "owns", "(AbstractQueuedSynchronizer$ConditionObject)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "release", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "releaseShared", "(int)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "tryAcquireNanos", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "AbstractQueuedSynchronizer", "tryAcquireSharedNanos", "(int,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "await", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "await", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitUninterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "awaitUntil", "(Date)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "signal", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Condition", "signalAll", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "lock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "lockInterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "newCondition", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "tryLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "tryLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "Lock", "unlock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "getBlocker", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "park", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "park", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkNanos", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkUntil", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "parkUntil", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "setCurrentBlocker", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "LockSupport", "unpark", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "ReentrantLock", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "getWaitQueueLength", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasQueuedThread", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "hasWaiters", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isHeldByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantLock", "isLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock$WriteLock", "getHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock$WriteLock", "isHeldByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "ReentrantReadWriteLock", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getReadHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getReadLockCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getWaitQueueLength", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "getWriteHoldCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasQueuedThread", "(Thread)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "hasWaiters", "(Condition)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isWriteLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "ReentrantReadWriteLock", "isWriteLockedByCurrentThread", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "getReadLockCount", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isOptimisticReadStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isReadLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isReadLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isWriteLockStamp", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "isWriteLocked", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "readLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "readLockInterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToOptimisticRead", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToReadLock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryConvertToWriteLock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryOptimisticRead", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryReadLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryReadLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryUnlockRead", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryUnlockWrite", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryWriteLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "tryWriteLock", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlock", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlockRead", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "unlockWrite", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "validate", "(long)", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "writeLock", "()", "summary", "df-generated"] + - ["java.util.concurrent.locks", "StampedLock", "writeLockInterruptibly", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.concurrent.model.yml b/java/ql/lib/ext/generated/java.util.concurrent.model.yml new file mode 100644 index 00000000000..528a8eb3183 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.concurrent.model.yml @@ -0,0 +1,374 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.concurrent", "BrokenBarrierException", True, "BrokenBarrierException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CancellationException", True, "CancellationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "allOf", "(CompletableFuture[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "anyOf", "(CompletableFuture[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeAsync", "(Supplier)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeAsync", "(Supplier,Executor)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "completeOnTimeout", "(Object,long,TimeUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "copy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "delayedExecutor", "(long,TimeUnit,Executor)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "getNow", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "getNow", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "obtrudeException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "obtrudeValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", True, "orTimeout", "(long,TimeUnit)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionException", True, "CompletionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyAsync", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyAsync", "(Function,Executor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyCompose", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyComposeAsync", "(Function)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CompletionStage", True, "exceptionallyComposeAsync", "(Function,Executor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap$KeySetView", True, "getMappedValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "ConcurrentHashMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keySet", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keySet", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", True, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", True, "ConcurrentSkipListMap", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", True, "ConcurrentSkipListMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListSet", True, "ConcurrentSkipListSet", "(SortedSet)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "CopyOnWriteArrayList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "CopyOnWriteArrayList", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "addAllAbsent", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", True, "addIfAbsent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArraySet", True, "CopyOnWriteArraySet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "firstComplete", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "getCompleter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "getRoot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", True, "nextComplete", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", True, "CyclicBarrier", "(int,Runnable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "DelayQueue", True, "DelayQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Exchanger", True, "exchange", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Exchanger", True, "exchange", "(Object,long,TimeUnit)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutionException", True, "ExecutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Executor", True, "execute", "(Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor,BlockingQueue)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorCompletionService", True, "ExecutorCompletionService", "(Executor,BlockingQueue)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "invokeAll", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "invokeAll", "(Collection,long,TimeUnit)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "shutdownNow", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ExecutorService", True, "submit", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "callable", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newCachedThreadPool", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newFixedThreadPool", "(int,ThreadFactory)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newScheduledThreadPool", "(int,ThreadFactory)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newSingleThreadExecutor", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "newSingleThreadScheduledExecutor", "(ThreadFactory)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "privilegedCallable", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "privilegedCallableUsingCurrentClassLoader", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "unconfigurableExecutorService", "(ExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Executors", True, "unconfigurableScheduledExecutorService", "(ScheduledExecutorService)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ForkJoinWorkerThreadFactory", True, "newThread", "(ForkJoinPool)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "ForkJoinPool", "(int,ForkJoinPool$ForkJoinWorkerThreadFactory,Thread$UncaughtExceptionHandler,boolean,int,int,int,Predicate,long,TimeUnit)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "getFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "getUncaughtExceptionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "invoke", "(ForkJoinTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", True, "submit", "(ForkJoinTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "adapt", "(Runnable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "complete", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "fork", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "invoke", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", True, "invokeAll", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ForkJoinWorkerThread", True, "getPool", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Callable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Runnable,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "FutureTask", True, "FutureTask", "(Runnable,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingDeque", True, "LinkedBlockingDeque", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingQueue", True, "LinkedBlockingQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "Phaser", "(Phaser)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "Phaser", "(Phaser,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "Phaser", True, "getRoot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "PriorityBlockingQueue", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "PriorityBlockingQueue", "(int,Comparator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", True, "comparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionException", True, "RejectedExecutionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "RejectedExecutionHandler", True, "rejectedExecution", "(Runnable,ThreadPoolExecutor)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "schedule", "(Callable,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "schedule", "(Runnable,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "scheduleAtFixedRate", "(Runnable,long,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledExecutorService", True, "scheduleWithFixedDelay", "(Runnable,long,long,TimeUnit)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,RejectedExecutionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory,RejectedExecutionHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", True, "ScheduledThreadPoolExecutor", "(int,ThreadFactory,RejectedExecutionHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int,BiConsumer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "SubmissionPublisher", "(Executor,int,BiConsumer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "closeExceptionally", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getClosedException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", True, "getSubscribers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadFactory", True, "newThread", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadFactory", True, "newThread", "(Runnable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,RejectedExecutionHandler)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,RejectedExecutionHandler)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "ThreadPoolExecutor", "(int,int,long,TimeUnit,BlockingQueue,ThreadFactory,RejectedExecutionHandler)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getQueue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getRejectedExecutionHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "getThreadFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "setRejectedExecutionHandler", "(RejectedExecutionHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", True, "setThreadFactory", "(ThreadFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.concurrent", "TimeoutException", True, "TimeoutException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int,boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ArrayBlockingQueue", "ArrayBlockingQueue", "(int,boolean,Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "completedStage", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "defaultExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "delayedExecutor", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "failedFuture", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "failedStage", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "getNumberOfDependents", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "isCompletedExceptionally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "minimalCompletionStage", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "newIncompleteFuture", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "runAsync", "(Runnable)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "runAsync", "(Runnable,Executor)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "supplyAsync", "(Supplier)", "summary", "df-generated"] + - ["java.util.concurrent", "CompletableFuture", "supplyAsync", "(Supplier,Executor)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int,float)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "ConcurrentHashMap", "(int,float,int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "contains", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEach", "(long,BiConsumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEach", "(long,BiFunction,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachEntry", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachEntry", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachKey", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachKey", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachValue", "(long,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "forEachValue", "(long,Function,Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "mappingCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "newKeySet", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "newKeySet", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduce", "(long,BiFunction,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntries", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntries", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceEntriesToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeys", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeys", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceKeysToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToDouble", "(long,ToDoubleBiFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToInt", "(long,ToIntBiFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceToLong", "(long,ToLongBiFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValues", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValues", "(long,Function,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToDouble", "(long,ToDoubleFunction,double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToInt", "(long,ToIntFunction,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "reduceValuesToLong", "(long,ToLongFunction,long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "search", "(long,BiFunction)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchEntries", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchKeys", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentHashMap", "searchValues", "(long,Function)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentLinkedDeque", "ConcurrentLinkedDeque", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentLinkedQueue", "ConcurrentLinkedQueue", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ConcurrentSkipListMap", "ConcurrentSkipListMap", "(SortedMap)", "summary", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", "indexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CopyOnWriteArrayList", "lastIndexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "addToPendingCount", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "compareAndSetPendingCount", "(int,int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "compute", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "decrementPendingCountUnlessZero", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "getPendingCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "helpComplete", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "onCompletion", "(CountedCompleter)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "onExceptionalCompletion", "(Throwable,CountedCompleter)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "propagateCompletion", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "quietlyCompleteRoot", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "setPendingCount", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CountedCompleter", "tryComplete", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "CyclicBarrier", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "await", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "await", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "getNumberWaiting", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "getParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "isBroken", "()", "summary", "df-generated"] + - ["java.util.concurrent", "CyclicBarrier", "reset", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Delayed", "getDelay", "(TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "awaitTermination", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "invokeAny", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "invokeAny", "(Collection,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "isShutdown", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "isTerminated", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ExecutorService", "shutdown", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "callable", "(PrivilegedAction)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "callable", "(PrivilegedExceptionAction)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "defaultThreadFactory", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newCachedThreadPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newFixedThreadPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newScheduledThreadPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newSingleThreadExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newSingleThreadScheduledExecutor", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newWorkStealingPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "newWorkStealingPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Executors", "privilegedThreadFactory", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Flow$Subscription", "cancel", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Flow$Subscription", "request", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "Flow", "defaultBufferSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ManagedBlocker", "block", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool$ManagedBlocker", "isReleasable", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "ForkJoinPool", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "awaitQuiescence", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "commonPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "execute", "(ForkJoinTask)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getActiveThreadCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getAsyncMode", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getCommonPoolParallelism", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getParallelism", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getQueuedSubmissionCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getRunningThreadCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "getStealCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "hasQueuedSubmissions", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "isQuiescent", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "isTerminating", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinPool", "managedBlock", "(ForkJoinPool$ManagedBlocker)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "compareAndSetForkJoinTaskTag", "(short,short)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "completeExceptionally", "(Throwable)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getForkJoinTaskTag", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getRawResult", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "getSurplusQueuedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "helpQuiesce", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "inForkJoinPool", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "invokeAll", "(ForkJoinTask,ForkJoinTask)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "invokeAll", "(ForkJoinTask[])", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "isCompletedAbnormally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "isCompletedNormally", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "join", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyComplete", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyInvoke", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "quietlyJoin", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "reinitialize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "setForkJoinTaskTag", "(short)", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinTask", "tryUnfork", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ForkJoinWorkerThread", "getPoolIndex", "()", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingDeque", "LinkedBlockingDeque", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedBlockingQueue", "LinkedBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "LinkedTransferQueue", "LinkedTransferQueue", "(Collection)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "Phaser", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arrive", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arriveAndAwaitAdvance", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "arriveAndDeregister", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvance", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvanceInterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "awaitAdvanceInterruptibly", "(int,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "bulkRegister", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "forceTermination", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getArrivedParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getPhase", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getRegisteredParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "getUnarrivedParties", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "isTerminated", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Phaser", "register", "()", "summary", "df-generated"] + - ["java.util.concurrent", "PriorityBlockingQueue", "PriorityBlockingQueue", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "ScheduledThreadPoolExecutor", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getContinueExistingPeriodicTasksAfterShutdownPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getExecuteExistingDelayedTasksAfterShutdownPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "getRemoveOnCancelPolicy", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setContinueExistingPeriodicTasksAfterShutdownPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setExecuteExistingDelayedTasksAfterShutdownPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ScheduledThreadPoolExecutor", "setRemoveOnCancelPolicy", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "Semaphore", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "Semaphore", "(int,boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquire", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquireUninterruptibly", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "acquireUninterruptibly", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "availablePermits", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "drainPermits", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "getQueueLength", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "hasQueuedThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "isFair", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "release", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "release", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "()", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(int,long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "Semaphore", "tryAcquire", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "consume", "(Consumer)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "estimateMaximumLag", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "estimateMinimumDemand", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "getMaxBufferCapacity", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "getNumberOfSubscribers", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "hasSubscribers", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "isClosed", "()", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "isSubscribed", "(Flow$Subscriber)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "offer", "(Object,BiPredicate)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "offer", "(Object,long,TimeUnit,BiPredicate)", "summary", "df-generated"] + - ["java.util.concurrent", "SubmissionPublisher", "submit", "(Object)", "summary", "df-generated"] + - ["java.util.concurrent", "SynchronousQueue", "SynchronousQueue", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadLocalRandom", "current", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "allowCoreThreadTimeOut", "(boolean)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "allowsCoreThreadTimeOut", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getActiveCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getCompletedTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getCorePoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getKeepAliveTime", "(TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getLargestPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getMaximumPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getPoolSize", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "getTaskCount", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "isTerminating", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "prestartAllCoreThreads", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "prestartCoreThread", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "purge", "()", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "remove", "(Runnable)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setCorePoolSize", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setKeepAliveTime", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "ThreadPoolExecutor", "setMaximumPoolSize", "(int)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "convert", "(Duration)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "convert", "(long,TimeUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "of", "(ChronoUnit)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "sleep", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "timedJoin", "(Thread,long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "timedWait", "(Object,long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toChronoUnit", "()", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toDays", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toHours", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toMicros", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toMinutes", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toNanos", "(long)", "summary", "df-generated"] + - ["java.util.concurrent", "TimeUnit", "toSeconds", "(long)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.function.model.yml b/java/ql/lib/ext/generated/java.util.function.model.yml new file mode 100644 index 00000000000..5080eeeacc7 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.function.model.yml @@ -0,0 +1,46 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.function", "BiConsumer", "andThen", "(BiConsumer)", "summary", "df-generated"] + - ["java.util.function", "BiFunction", "andThen", "(Function)", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "and", "(BiPredicate)", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "BiPredicate", "or", "(BiPredicate)", "summary", "df-generated"] + - ["java.util.function", "BinaryOperator", "maxBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.function", "BinaryOperator", "minBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.function", "Consumer", "andThen", "(Consumer)", "summary", "df-generated"] + - ["java.util.function", "DoubleConsumer", "accept", "(double)", "summary", "df-generated"] + - ["java.util.function", "DoubleConsumer", "andThen", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "and", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "DoublePredicate", "or", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "andThen", "(DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "compose", "(DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "DoubleUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "Function", "andThen", "(Function)", "summary", "df-generated"] + - ["java.util.function", "Function", "compose", "(Function)", "summary", "df-generated"] + - ["java.util.function", "IntConsumer", "accept", "(int)", "summary", "df-generated"] + - ["java.util.function", "IntConsumer", "andThen", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "and", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "IntPredicate", "or", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "andThen", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "compose", "(IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "IntUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "LongConsumer", "accept", "(long)", "summary", "df-generated"] + - ["java.util.function", "LongConsumer", "andThen", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "and", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "LongPredicate", "or", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "andThen", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "compose", "(LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.function", "LongUnaryOperator", "identity", "()", "summary", "df-generated"] + - ["java.util.function", "Predicate", "and", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "isEqual", "(Object)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "negate", "()", "summary", "df-generated"] + - ["java.util.function", "Predicate", "not", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "Predicate", "or", "(Predicate)", "summary", "df-generated"] + - ["java.util.function", "UnaryOperator", "identity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.jar.model.yml b/java/ql/lib/ext/generated/java.util.jar.model.yml new file mode 100644 index 00000000000..9b4df579bd0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.jar.model.yml @@ -0,0 +1,54 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.jar", "Attributes$Name", True, "Name", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "Attributes", "(Attributes)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "getValue", "(Attributes$Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "getValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Attributes", True, "putValue", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(JarEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "JarEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getCodeSigners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarEntry", True, "getRealName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarException", True, "JarException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(File,boolean,int,Runtime$Version)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "JarFile", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getJarEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getJarEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarFile", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "JarInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "JarInputStream", "(InputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarInputStream", True, "getNextJarEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "JarOutputStream", True, "JarOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "JarOutputStream", True, "JarOutputStream", "(OutputStream,Manifest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "Manifest", "(Manifest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getAttributes", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getEntries", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.jar", "Manifest", True, "getMainAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.jar", "Attributes", "Attributes", "(int)", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "baseVersion", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "isMultiRelease", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "runtimeVersion", "()", "summary", "df-generated"] + - ["java.util.jar", "JarFile", "versionedStream", "()", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "Manifest", "(InputStream)", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "clear", "()", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "read", "(InputStream)", "summary", "df-generated"] + - ["java.util.jar", "Manifest", "write", "(OutputStream)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.logging.model.yml b/java/ql/lib/ext/generated/java.util.logging.model.yml new file mode 100644 index 00000000000..2ad409bc45e --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.logging.model.yml @@ -0,0 +1,155 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.logging", "ErrorManager", True, "error", "(String,Exception,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,int,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,long,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "format", "(LogRecord)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "format", "(LogRecord)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "formatMessage", "(LogRecord)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Formatter", True, "getHead", "(Handler)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getErrorManager", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getFormatter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "publish", "(LogRecord)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setEncoding", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setErrorManager", "(ErrorManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setFilter", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setFormatter", "(Formatter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Handler", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getLocalizedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Level", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "addConfigurationListener", "(Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "addConfigurationListener", "(Runnable)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.logging", "LogManager", True, "getLoggerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogManager", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getInstant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getLoggerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getResourceBundle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getSourceClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getSourceMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "getThrown", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setInstant", "(Instant)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLoggerName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setLongThreadID", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setMessage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setParameters", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setResourceBundle", "(ResourceBundle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setResourceBundleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setSourceClassName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setSourceMethodName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LogRecord", True, "setThrown", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getAnonymousLogger", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getHandlers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLogger", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getLogger", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getResourceBundle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "logrb", "(Level,String,String,String,String,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setFilter", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setParent", "(Logger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "Logger", True, "setResourceBundle", "(ResourceBundle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "LoggingPermission", False, "LoggingPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "MemoryHandler", "(Handler,int,Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "MemoryHandler", "(Handler,int,Level)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "getPushLevel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.logging", "MemoryHandler", True, "setPushLevel", "(Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.logging", "SocketHandler", True, "SocketHandler", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.logging", "Formatter", "getTail", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Handler", "close", "()", "summary", "df-generated"] + - ["java.util.logging", "Handler", "flush", "()", "summary", "df-generated"] + - ["java.util.logging", "Handler", "isLoggable", "(LogRecord)", "summary", "df-generated"] + - ["java.util.logging", "Level", "intValue", "()", "summary", "df-generated"] + - ["java.util.logging", "Level", "parse", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "addLogger", "(Logger)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "checkAccess", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLogManager", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLogger", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "getLoggingMXBean", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "readConfiguration", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "readConfiguration", "(InputStream)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "removeConfigurationListener", "(Runnable)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "reset", "()", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "updateConfiguration", "(Function)", "summary", "df-generated"] + - ["java.util.logging", "LogManager", "updateConfiguration", "(InputStream,Function)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getLongThreadID", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getMillis", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getSequenceNumber", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "getThreadID", "()", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setMillis", "(long)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setSequenceNumber", "(long)", "summary", "df-generated"] + - ["java.util.logging", "LogRecord", "setThreadID", "(int)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "addHandler", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "config", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "config", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "entering", "(String,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "exiting", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "exiting", "(String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "fine", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "fine", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finer", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finer", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finest", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "finest", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getAnonymousLogger", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getGlobal", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "getUseParentHandlers", "()", "summary", "df-generated"] + - ["java.util.logging", "Logger", "info", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "info", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(Level,Throwable,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "log", "(LogRecord)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Object)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logp", "(Level,String,String,Throwable,Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,ResourceBundle,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,ResourceBundle,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,String,String,ResourceBundle,String,Object[])", "summary", "df-generated"] + - ["java.util.logging", "Logger", "logrb", "(Level,String,String,ResourceBundle,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "removeHandler", "(Handler)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "setUseParentHandlers", "(boolean)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "severe", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "severe", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "throwing", "(String,String,Throwable)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "warning", "(String)", "summary", "df-generated"] + - ["java.util.logging", "Logger", "warning", "(Supplier)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getLoggerLevel", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getLoggerNames", "()", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "getParentLoggerName", "(String)", "summary", "df-generated"] + - ["java.util.logging", "LoggingMXBean", "setLoggerLevel", "(String,String)", "summary", "df-generated"] + - ["java.util.logging", "MemoryHandler", "push", "()", "summary", "df-generated"] + - ["java.util.logging", "StreamHandler", "StreamHandler", "(OutputStream,Formatter)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.model.yml b/java/ql/lib/ext/generated/java.util.model.yml new file mode 100644 index 00000000000..a8532c297ad --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.model.yml @@ -0,0 +1,866 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util", "Arrays", True, "deepToString", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Base64$Encoder", True, "withoutPadding", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Base64", True, "getMimeEncoder", "(int,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "set", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setCalendarType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setCalendarType", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setDate", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setFields", "(int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setInstant", "(Date)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setInstant", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLenient", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeOfDay", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeOfDay", "(int,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setTimeZone", "(TimeZone)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setWeekDate", "(int,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar$Builder", True, "setWeekDefinition", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Calendar", True, "getDisplayName", "(int,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getInstance", "(TimeZone)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getInstance", "(TimeZone,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Calendar", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Collections", True, "asLifoQueue", "(Deque)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Collections", True, "checkedQueue", "(Queue,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Collections", True, "newSetFromMap", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Collections", True, "reverseOrder", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Comparator", True, "nullsFirst", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Comparator", True, "nullsLast", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Comparator", True, "reversed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ConcurrentModificationException", True, "ConcurrentModificationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Currency", False, "getCurrencyCode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getInstance", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Currency", False, "getSymbol", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "DuplicateFormatFlagsException", True, "DuplicateFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "DuplicateFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "complementOf", "(EnumSet)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "copyOf", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "copyOf", "(EnumSet)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EnumSet", True, "of", "(Enum,Enum[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "EventListenerProxy", True, "EventListenerProxy", "(EventListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "EventListenerProxy", True, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", True, "FormatFlagsConversionMismatchException", "(String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Appendable,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(File,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(File,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(OutputStream,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(OutputStream,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(PrintStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(String,Charset,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "Formatter", "(String,String,Locale)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(Locale,String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "format", "(String,Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "ioException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "locale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Formatter", False, "out", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "GregorianCalendar", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "GregorianCalendar", "(TimeZone,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "from", "(ZonedDateTime)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "GregorianCalendar", True, "toZonedDateTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "delimiter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(Appendable,byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "formatHex", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "ofDelimiter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "prefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "suffix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "toHexDigits", "(Appendable,byte)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withDelimiter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withDelimiter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withLowerCase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withPrefix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withPrefix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withSuffix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withSuffix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "HexFormat", False, "withUpperCase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "IllegalFormatFlagsException", True, "IllegalFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "IllegalFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "IllformedLocaleException", True, "IllformedLocaleException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "IllformedLocaleException", True, "IllformedLocaleException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InputMismatchException", True, "InputMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale$Builder", False, "addUnicodeLocaleAttribute", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$Builder", False, "clear", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "clearExtensions", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "removeUnicodeLocaleAttribute", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setExtension", "(char,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setLanguage", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setLanguageTag", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale$Builder", False, "setLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setRegion", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setScript", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setUnicodeLocaleKeyword", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$Builder", False, "setVariant", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale$Builder", False, "setVariant", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "LanguageRange", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "LanguageRange", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "getRange", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "mapEquivalents", "(List,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "mapEquivalents", "(List,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "parse", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale$LanguageRange", False, "parse", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Locale", False, "filterTags", "(List,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "filterTags", "(List,Collection,Locale$FilteringMode)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getCountry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayCountry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayCountry", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayCountry", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayLanguage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayLanguage", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayLanguage", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayScript", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayScript", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayScript", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayVariant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayVariant", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getDisplayVariant", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getExtensionKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getISO3Language", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getLanguage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getScript", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "getVariant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "lookupTag", "(List,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "stripExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Locale", False, "toLanguageTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Map", True, "computeIfPresent", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Map", True, "computeIfPresent", "(Object,BiFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingFormatArgumentException", True, "MissingFormatArgumentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingFormatArgumentException", True, "getFormatSpecifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingFormatWidthException", True, "MissingFormatWidthException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingFormatWidthException", True, "getFormatSpecifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "MissingResourceException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "MissingResourceException", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "NoSuchElementException", True, "NoSuchElementException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Observable", True, "addObserver", "(Observer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "PriorityQueue", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "PriorityQueue", "(int,Comparator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "PriorityQueue", True, "comparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Properties", True, "Properties", "(Properties)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Properties", True, "list", "(PrintStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "list", "(PrintWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "propertyNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Properties", True, "store", "(Writer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Properties", True, "stringPropertyNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "PropertyPermission", False, "PropertyPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "getFormats", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "newBundle", "(String,Locale,String,ClassLoader,boolean)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "newBundle", "(String,Locale,String,ClassLoader,boolean)", "", "Argument[1]", "Argument[3]", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toBundleName", "(String,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toBundleName", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBaseBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader,ResourceBundle$Control)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ResourceBundle$Control)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getBundle", "(String,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getStringArray", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "getStringArray", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "handleGetObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ResourceBundle", True, "keySet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "delimiter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "findAll", "(Pattern)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "findAll", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "findAll", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "hasNext", "(Pattern)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Scanner", False, "hasNext", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Scanner", False, "ioException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "locale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Scanner", False, "match", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "findFirst", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "load", "(Class,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "load", "(ModuleLayer,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "ServiceLoader", False, "stream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "SimpleTimeZone", True, "SimpleTimeZone", "(int,String,int,int,int,int,int,int,int,int,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Spliterator", True, "forEachRemaining", "(Consumer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Spliterator", True, "forEachRemaining", "(Consumer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Collection,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Iterator,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Object[],int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(Object[],int,int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfDouble,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfInt,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliterator", "(PrimitiveIterator$OfLong,long,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(Iterator,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfDouble,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfInt,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Spliterators", False, "spliteratorUnknownSize", "(PrimitiveIterator$OfLong,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getDisplayName", "(boolean,int,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "getTimeZone", "(ZoneId)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "setID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TimeZone", True, "toZoneId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "Timer", True, "Timer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "Timer", True, "Timer", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TooManyListenersException", True, "TooManyListenersException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TreeMap", True, "TreeMap", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "TreeSet", True, "TreeSet", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatConversionException", True, "UnknownFormatConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatConversionException", True, "getConversion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util", "UnknownFormatFlagsException", True, "UnknownFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util", "UnknownFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util", "ArrayDeque", "ArrayDeque", "(int)", "summary", "df-generated"] + - ["java.util", "ArrayList", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.util", "ArrayList", "trimToSize", "()", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],Object)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],int,int,Object)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(Object[],int,int,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(byte[],byte)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(byte[],int,int,byte)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(char[],char)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(char[],int,int,char)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(double[],double)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(double[],int,int,double)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(float[],float)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(float[],int,int,float)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(int[],int)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(int[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(long[],int,int,long)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(long[],long)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(short[],int,int,short)", "summary", "df-generated"] + - ["java.util", "Arrays", "binarySearch", "(short[],short)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Comparable[],Comparable[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Comparable[],int,int,Comparable[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compare", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "compareUnsigned", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "deepEquals", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "deepHashCode", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],int,int,Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "equals", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "hashCode", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],int,int,Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(Object[],int,int,Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(boolean[],boolean[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(boolean[],int,int,boolean[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(byte[],int,int,byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(char[],char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(char[],int,int,char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(double[],double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(double[],int,int,double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(float[],float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(float[],int,int,float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(int[],int,int,int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(int[],int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(long[],int,int,long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(long[],long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(short[],int,int,short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "mismatch", "(short[],short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(Object[],BinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(Object[],int,int,BinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(double[],DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(double[],int,int,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(int[],IntBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(int[],int,int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(long[],LongBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelPrefix", "(long[],int,int,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(Object[],IntFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(double[],IntToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(int[],IntUnaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSetAll", "(long[],IntToLongFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Comparable[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Comparable[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "parallelSort", "(short[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(Object[],IntFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(double[],IntToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(int[],IntUnaryOperator)", "summary", "df-generated"] + - ["java.util", "Arrays", "setAll", "(long[],IntToLongFunction)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(Object[],int,int,Comparator)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(byte[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(char[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(double[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(double[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(float[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(float[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(int[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(int[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(long[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(long[],int,int)", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(short[])", "summary", "df-generated"] + - ["java.util", "Arrays", "sort", "(short[],int,int)", "summary", "df-generated"] + - ["java.util", "Base64$Decoder", "decode", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Base64$Encoder", "encode", "(byte[],byte[])", "summary", "df-generated"] + - ["java.util", "Base64", "getDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getEncoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getMimeDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getMimeEncoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getUrlDecoder", "()", "summary", "df-generated"] + - ["java.util", "Base64", "getUrlEncoder", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "BitSet", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "and", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "andNot", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "cardinality", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "clear", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "flip", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "flip", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "get", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "get", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "intersects", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "length", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "nextClearBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "nextSetBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "or", "(BitSet)", "summary", "df-generated"] + - ["java.util", "BitSet", "previousClearBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "previousSetBit", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,boolean)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,int)", "summary", "df-generated"] + - ["java.util", "BitSet", "set", "(int,int,boolean)", "summary", "df-generated"] + - ["java.util", "BitSet", "size", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "stream", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "toByteArray", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "toLongArray", "()", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(LongBuffer)", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(byte[])", "summary", "df-generated"] + - ["java.util", "BitSet", "valueOf", "(long[])", "summary", "df-generated"] + - ["java.util", "BitSet", "xor", "(BitSet)", "summary", "df-generated"] + - ["java.util", "Calendar", "add", "(int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "after", "(Object)", "summary", "df-generated"] + - ["java.util", "Calendar", "before", "(Object)", "summary", "df-generated"] + - ["java.util", "Calendar", "clear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "clear", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getActualMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getActualMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getAvailableCalendarTypes", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getCalendarType", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getDisplayNames", "(int,int,Locale)", "summary", "df-generated"] + - ["java.util", "Calendar", "getFirstDayOfWeek", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getGreatestMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getInstance", "(Locale)", "summary", "df-generated"] + - ["java.util", "Calendar", "getLeastMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getMaximum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getMinimalDaysInFirstWeek", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getMinimum", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "getWeekYear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "getWeeksInWeekYear", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "isLenient", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "isSet", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "isWeekDateSupported", "()", "summary", "df-generated"] + - ["java.util", "Calendar", "roll", "(int,boolean)", "summary", "df-generated"] + - ["java.util", "Calendar", "roll", "(int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "set", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setFirstDayOfWeek", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setLenient", "(boolean)", "summary", "df-generated"] + - ["java.util", "Calendar", "setMinimalDaysInFirstWeek", "(int)", "summary", "df-generated"] + - ["java.util", "Calendar", "setTimeInMillis", "(long)", "summary", "df-generated"] + - ["java.util", "Calendar", "setWeekDate", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Calendar", "toInstant", "()", "summary", "df-generated"] + - ["java.util", "Collections", "binarySearch", "(List,Object)", "summary", "df-generated"] + - ["java.util", "Collections", "binarySearch", "(List,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Collections", "disjoint", "(Collection,Collection)", "summary", "df-generated"] + - ["java.util", "Collections", "emptyEnumeration", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyIterator", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyListIterator", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyNavigableMap", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptyNavigableSet", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptySortedMap", "()", "summary", "df-generated"] + - ["java.util", "Collections", "emptySortedSet", "()", "summary", "df-generated"] + - ["java.util", "Collections", "frequency", "(Collection,Object)", "summary", "df-generated"] + - ["java.util", "Collections", "indexOfSubList", "(List,List)", "summary", "df-generated"] + - ["java.util", "Collections", "lastIndexOfSubList", "(List,List)", "summary", "df-generated"] + - ["java.util", "Collections", "reverse", "(List)", "summary", "df-generated"] + - ["java.util", "Collections", "reverseOrder", "()", "summary", "df-generated"] + - ["java.util", "Collections", "rotate", "(List,int)", "summary", "df-generated"] + - ["java.util", "Collections", "shuffle", "(List)", "summary", "df-generated"] + - ["java.util", "Collections", "shuffle", "(List,Random)", "summary", "df-generated"] + - ["java.util", "Collections", "swap", "(List,int,int)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparing", "(Function)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparing", "(Function,Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "comparingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "naturalOrder", "()", "summary", "df-generated"] + - ["java.util", "Comparator", "reverseOrder", "()", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Function)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparing", "(Function,Comparator)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util", "Comparator", "thenComparingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util", "Currency", "getAvailableCurrencies", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getDefaultFractionDigits", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getNumericCode", "()", "summary", "df-generated"] + - ["java.util", "Currency", "getNumericCodeAsString", "()", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(String)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "Date", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "UTC", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "Date", "after", "(Date)", "summary", "df-generated"] + - ["java.util", "Date", "before", "(Date)", "summary", "df-generated"] + - ["java.util", "Date", "getDate", "()", "summary", "df-generated"] + - ["java.util", "Date", "getDay", "()", "summary", "df-generated"] + - ["java.util", "Date", "getHours", "()", "summary", "df-generated"] + - ["java.util", "Date", "getMinutes", "()", "summary", "df-generated"] + - ["java.util", "Date", "getMonth", "()", "summary", "df-generated"] + - ["java.util", "Date", "getSeconds", "()", "summary", "df-generated"] + - ["java.util", "Date", "getTimezoneOffset", "()", "summary", "df-generated"] + - ["java.util", "Date", "getYear", "()", "summary", "df-generated"] + - ["java.util", "Date", "parse", "(String)", "summary", "df-generated"] + - ["java.util", "Date", "setDate", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setHours", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setMinutes", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setMonth", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setSeconds", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "setTime", "(long)", "summary", "df-generated"] + - ["java.util", "Date", "setYear", "(int)", "summary", "df-generated"] + - ["java.util", "Date", "toGMTString", "()", "summary", "df-generated"] + - ["java.util", "Date", "toInstant", "()", "summary", "df-generated"] + - ["java.util", "Date", "toLocaleString", "()", "summary", "df-generated"] + - ["java.util", "Dictionary", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "Dictionary", "size", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "DoubleSummaryStatistics", "(long,double,double,double)", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "combine", "(DoubleSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "DoubleSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "EnumMap", "EnumMap", "(Class)", "summary", "df-generated"] + - ["java.util", "EnumSet", "allOf", "(Class)", "summary", "df-generated"] + - ["java.util", "EnumSet", "noneOf", "(Class)", "summary", "df-generated"] + - ["java.util", "EnumSet", "range", "(Enum,Enum)", "summary", "df-generated"] + - ["java.util", "FormatFlagsConversionMismatchException", "getConversion", "()", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(File)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(File,String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(OutputStream)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(String)", "summary", "df-generated"] + - ["java.util", "Formatter", "Formatter", "(String,String)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(Locale)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "GregorianCalendar", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "getGregorianChange", "()", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "isLeapYear", "(int)", "summary", "df-generated"] + - ["java.util", "GregorianCalendar", "setGregorianChange", "(Date)", "summary", "df-generated"] + - ["java.util", "HashMap", "HashMap", "(int,float)", "summary", "df-generated"] + - ["java.util", "HashSet", "HashSet", "(int,float)", "summary", "df-generated"] + - ["java.util", "Hashtable", "Hashtable", "(int)", "summary", "df-generated"] + - ["java.util", "Hashtable", "Hashtable", "(int,float)", "summary", "df-generated"] + - ["java.util", "Hashtable", "contains", "(Object)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigits", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigits", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigitsToLong", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "fromHexDigitsToLong", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "isHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "isUpperCase", "()", "summary", "df-generated"] + - ["java.util", "HexFormat", "of", "()", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(CharSequence)", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(CharSequence,int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "parseHex", "(char[],int,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(byte)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(char)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(long)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(long,int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHexDigits", "(short)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toHighHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "HexFormat", "toLowHexDigit", "(int)", "summary", "df-generated"] + - ["java.util", "IdentityHashMap", "IdentityHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatCodePointException", "IllegalFormatCodePointException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatCodePointException", "getCodePoint", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "IllegalFormatConversionException", "(char,Class)", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "getArgumentClass", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatConversionException", "getConversion", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatPrecisionException", "IllegalFormatPrecisionException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatPrecisionException", "getPrecision", "()", "summary", "df-generated"] + - ["java.util", "IllegalFormatWidthException", "IllegalFormatWidthException", "(int)", "summary", "df-generated"] + - ["java.util", "IllegalFormatWidthException", "getWidth", "()", "summary", "df-generated"] + - ["java.util", "IllformedLocaleException", "getErrorIndex", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "IntSummaryStatistics", "(long,int,int,long)", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "combine", "(IntSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "IntSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int,float)", "summary", "df-generated"] + - ["java.util", "LinkedHashMap", "LinkedHashMap", "(int,float,boolean)", "summary", "df-generated"] + - ["java.util", "LinkedHashSet", "LinkedHashSet", "(int)", "summary", "df-generated"] + - ["java.util", "LinkedHashSet", "LinkedHashSet", "(int,float)", "summary", "df-generated"] + - ["java.util", "List", "replaceAll", "(UnaryOperator)", "summary", "df-generated"] + - ["java.util", "ListResourceBundle", "getContents", "()", "summary", "df-generated"] + - ["java.util", "Locale$LanguageRange", "getWeight", "()", "summary", "df-generated"] + - ["java.util", "Locale", "filter", "(List,Collection)", "summary", "df-generated"] + - ["java.util", "Locale", "filter", "(List,Collection,Locale$FilteringMode)", "summary", "df-generated"] + - ["java.util", "Locale", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getDefault", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getDefault", "(Locale$Category)", "summary", "df-generated"] + - ["java.util", "Locale", "getExtension", "(char)", "summary", "df-generated"] + - ["java.util", "Locale", "getISO3Country", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getISOCountries", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getISOCountries", "(Locale$IsoCountryCode)", "summary", "df-generated"] + - ["java.util", "Locale", "getISOLanguages", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleAttributes", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleKeys", "()", "summary", "df-generated"] + - ["java.util", "Locale", "getUnicodeLocaleType", "(String)", "summary", "df-generated"] + - ["java.util", "Locale", "hasExtensions", "()", "summary", "df-generated"] + - ["java.util", "Locale", "lookup", "(List,Collection)", "summary", "df-generated"] + - ["java.util", "Locale", "setDefault", "(Locale$Category,Locale)", "summary", "df-generated"] + - ["java.util", "Locale", "setDefault", "(Locale)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "LongSummaryStatistics", "(long,long,long,long)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "combine", "(LongSummaryStatistics)", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getAverage", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getCount", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getMax", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getMin", "()", "summary", "df-generated"] + - ["java.util", "LongSummaryStatistics", "getSum", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByKey", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByKey", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByValue", "()", "summary", "df-generated"] + - ["java.util", "Map$Entry", "comparingByValue", "(Comparator)", "summary", "df-generated"] + - ["java.util", "Map", "remove", "(Object,Object)", "summary", "df-generated"] + - ["java.util", "Map", "replaceAll", "(BiFunction)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromIndexSize", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromIndexSize", "(long,long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromToIndex", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkFromToIndex", "(long,long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "checkIndex", "(int,int)", "summary", "df-generated"] + - ["java.util", "Objects", "checkIndex", "(long,long)", "summary", "df-generated"] + - ["java.util", "Objects", "compare", "(Object,Object,Comparator)", "summary", "df-generated"] + - ["java.util", "Objects", "deepEquals", "(Object,Object)", "summary", "df-generated"] + - ["java.util", "Observable", "countObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "deleteObserver", "(Observer)", "summary", "df-generated"] + - ["java.util", "Observable", "deleteObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "hasChanged", "()", "summary", "df-generated"] + - ["java.util", "Observable", "notifyObservers", "()", "summary", "df-generated"] + - ["java.util", "Observable", "notifyObservers", "(Object)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "getAsDouble", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "ifPresent", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "ifPresentOrElse", "(DoubleConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "of", "(double)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElse", "(double)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseGet", "(DoubleSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalDouble", "stream", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "getAsInt", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "ifPresent", "(IntConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "ifPresentOrElse", "(IntConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "of", "(int)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElse", "(int)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseGet", "(IntSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalInt", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalInt", "stream", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "empty", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "getAsLong", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "ifPresent", "(LongConsumer)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "ifPresentOrElse", "(LongConsumer,Runnable)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "isEmpty", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "isPresent", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "of", "(long)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElse", "(long)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseGet", "(LongSupplier)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseThrow", "()", "summary", "df-generated"] + - ["java.util", "OptionalLong", "orElseThrow", "(Supplier)", "summary", "df-generated"] + - ["java.util", "OptionalLong", "stream", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfDouble", "nextDouble", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfInt", "nextInt", "()", "summary", "df-generated"] + - ["java.util", "PrimitiveIterator$OfLong", "nextLong", "()", "summary", "df-generated"] + - ["java.util", "PriorityQueue", "PriorityQueue", "(int)", "summary", "df-generated"] + - ["java.util", "Properties", "Properties", "(int)", "summary", "df-generated"] + - ["java.util", "Properties", "load", "(InputStream)", "summary", "df-generated"] + - ["java.util", "Properties", "load", "(Reader)", "summary", "df-generated"] + - ["java.util", "Properties", "loadFromXML", "(InputStream)", "summary", "df-generated"] + - ["java.util", "Properties", "save", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "store", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String,Charset)", "summary", "df-generated"] + - ["java.util", "Properties", "storeToXML", "(OutputStream,String,String)", "summary", "df-generated"] + - ["java.util", "PropertyResourceBundle", "PropertyResourceBundle", "(InputStream)", "summary", "df-generated"] + - ["java.util", "PropertyResourceBundle", "PropertyResourceBundle", "(Reader)", "summary", "df-generated"] + - ["java.util", "Random", "Random", "(long)", "summary", "df-generated"] + - ["java.util", "Random", "setSeed", "(long)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getCandidateLocales", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getControl", "(List)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getFallbackLocale", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getNoFallbackControl", "(List)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "getTimeToLive", "(String,Locale)", "summary", "df-generated"] + - ["java.util", "ResourceBundle$Control", "needsReload", "(String,Locale,String,ClassLoader,ResourceBundle,long)", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "clearCache", "()", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "clearCache", "(ClassLoader)", "summary", "df-generated"] + - ["java.util", "ResourceBundle", "containsKey", "(String)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigDecimal", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigInteger", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBigInteger", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextBoolean", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextByte", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextByte", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextDouble", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextFloat", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextInt", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextInt", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLine", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLong", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextLong", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextShort", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "hasNextShort", "(int)", "summary", "df-generated"] + - ["java.util", "Scanner", "radix", "()", "summary", "df-generated"] + - ["java.util", "Scanner", "tokens", "()", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "load", "(Class)", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "loadInstalled", "(Class)", "summary", "df-generated"] + - ["java.util", "ServiceLoader", "reload", "()", "summary", "df-generated"] + - ["java.util", "Set", "of", "()", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setDSTSavings", "(int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setEndRule", "(int,int,int,int,boolean)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int,int)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartRule", "(int,int,int,int,boolean)", "summary", "df-generated"] + - ["java.util", "SimpleTimeZone", "setStartYear", "(int)", "summary", "df-generated"] + - ["java.util", "Spliterator$OfPrimitive", "forEachRemaining", "(Object)", "summary", "df-generated"] + - ["java.util", "Spliterator", "getComparator", "()", "summary", "df-generated"] + - ["java.util", "Spliterator", "getExactSizeIfKnown", "()", "summary", "df-generated"] + - ["java.util", "Spliterator", "hasCharacteristics", "(int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyDoubleSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyIntSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptyLongSpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "emptySpliterator", "()", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfDouble)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfInt)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator$OfLong)", "summary", "df-generated"] + - ["java.util", "Spliterators", "iterator", "(Spliterator)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(double[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(double[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(int[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(int[],int,int,int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(long[],int)", "summary", "df-generated"] + - ["java.util", "Spliterators", "spliterator", "(long[],int,int,int)", "summary", "df-generated"] + - ["java.util", "SplittableRandom", "SplittableRandom", "(long)", "summary", "df-generated"] + - ["java.util", "Stack", "empty", "()", "summary", "df-generated"] + - ["java.util", "Stack", "search", "(Object)", "summary", "df-generated"] + - ["java.util", "StringJoiner", "length", "()", "summary", "df-generated"] + - ["java.util", "StringTokenizer", "countTokens", "()", "summary", "df-generated"] + - ["java.util", "StringTokenizer", "hasMoreTokens", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getAvailableIDs", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getAvailableIDs", "(int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getDSTSavings", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getDefault", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "getOffset", "(int,int,int,int,int,int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getOffset", "(long)", "summary", "df-generated"] + - ["java.util", "TimeZone", "getRawOffset", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "hasSameRules", "(TimeZone)", "summary", "df-generated"] + - ["java.util", "TimeZone", "inDaylightTime", "(Date)", "summary", "df-generated"] + - ["java.util", "TimeZone", "observesDaylightTime", "()", "summary", "df-generated"] + - ["java.util", "TimeZone", "setDefault", "(TimeZone)", "summary", "df-generated"] + - ["java.util", "TimeZone", "setRawOffset", "(int)", "summary", "df-generated"] + - ["java.util", "TimeZone", "useDaylightTime", "()", "summary", "df-generated"] + - ["java.util", "Timer", "Timer", "(boolean)", "summary", "df-generated"] + - ["java.util", "Timer", "cancel", "()", "summary", "df-generated"] + - ["java.util", "Timer", "purge", "()", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,Date)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,Date,long)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,long)", "summary", "df-generated"] + - ["java.util", "Timer", "schedule", "(TimerTask,long,long)", "summary", "df-generated"] + - ["java.util", "Timer", "scheduleAtFixedRate", "(TimerTask,Date,long)", "summary", "df-generated"] + - ["java.util", "Timer", "scheduleAtFixedRate", "(TimerTask,long,long)", "summary", "df-generated"] + - ["java.util", "TimerTask", "cancel", "()", "summary", "df-generated"] + - ["java.util", "TimerTask", "scheduledExecutionTime", "()", "summary", "df-generated"] + - ["java.util", "UUID", "UUID", "(long,long)", "summary", "df-generated"] + - ["java.util", "UUID", "clockSequence", "()", "summary", "df-generated"] + - ["java.util", "UUID", "getLeastSignificantBits", "()", "summary", "df-generated"] + - ["java.util", "UUID", "getMostSignificantBits", "()", "summary", "df-generated"] + - ["java.util", "UUID", "nameUUIDFromBytes", "(byte[])", "summary", "df-generated"] + - ["java.util", "UUID", "node", "()", "summary", "df-generated"] + - ["java.util", "UUID", "timestamp", "()", "summary", "df-generated"] + - ["java.util", "UUID", "variant", "()", "summary", "df-generated"] + - ["java.util", "UUID", "version", "()", "summary", "df-generated"] + - ["java.util", "Vector", "Vector", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "Vector", "(int,int)", "summary", "df-generated"] + - ["java.util", "Vector", "capacity", "()", "summary", "df-generated"] + - ["java.util", "Vector", "ensureCapacity", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "indexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util", "Vector", "lastIndexOf", "(Object,int)", "summary", "df-generated"] + - ["java.util", "Vector", "removeAllElements", "()", "summary", "df-generated"] + - ["java.util", "Vector", "removeElement", "(Object)", "summary", "df-generated"] + - ["java.util", "Vector", "removeElementAt", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "setSize", "(int)", "summary", "df-generated"] + - ["java.util", "Vector", "trimToSize", "()", "summary", "df-generated"] + - ["java.util", "WeakHashMap", "WeakHashMap", "(int)", "summary", "df-generated"] + - ["java.util", "WeakHashMap", "WeakHashMap", "(int,float)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.prefs.model.yml b/java/ql/lib/ext/generated/java.util.prefs.model.yml new file mode 100644 index 00000000000..bb056466a61 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.prefs.model.yml @@ -0,0 +1,69 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.prefs", "BackingStoreException", True, "BackingStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "BackingStoreException", True, "BackingStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "InvalidPreferencesFormatException", True, "InvalidPreferencesFormatException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "NodeChangeEvent", "(Preferences,Preferences)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "NodeChangeEvent", "(Preferences,Preferences)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "getChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "NodeChangeEvent", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "PreferenceChangeEvent", "(Preferences,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "PreferenceChangeEvent", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "absolutePath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "addNodeChangeListener", "(NodeChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "addPreferenceChangeListener", "(PreferenceChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "childrenNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "get", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "get", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "getByteArray", "(String,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.prefs", "Preferences", True, "parent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "put", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "put", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putBoolean", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putByteArray", "(String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putDouble", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putFloat", "(String,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putInt", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.prefs", "Preferences", True, "putLong", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.prefs", "Preferences", "clear", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "exportNode", "(OutputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "exportSubtree", "(OutputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "flush", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "getBoolean", "(String,boolean)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "getDouble", "(String,double)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "getFloat", "(String,float)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "getInt", "(String,int)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "getLong", "(String,long)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "importPreferences", "(InputStream)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "isUserNode", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "nodeExists", "(String)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "remove", "(String)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removeNode", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removeNodeChangeListener", "(NodeChangeListener)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "removePreferenceChangeListener", "(PreferenceChangeListener)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "sync", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "systemNodeForPackage", "(Class)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "systemRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "userNodeForPackage", "(Class)", "summary", "df-generated"] + - ["java.util.prefs", "Preferences", "userRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "PreferencesFactory", "systemRoot", "()", "summary", "df-generated"] + - ["java.util.prefs", "PreferencesFactory", "userRoot", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.random.model.yml b/java/ql/lib/ext/generated/java.util.random.model.yml new file mode 100644 index 00000000000..2e543aebe8f --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.random.model.yml @@ -0,0 +1,88 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(RandomGenerator$SplittableGenerator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(RandomGenerator$SplittableGenerator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long,RandomGenerator$SplittableGenerator)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", True, "splits", "(long,RandomGenerator$SplittableGenerator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(double,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "doubles", "(long,double,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "ints", "(long,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.random", "RandomGenerator", True, "longs", "(long,long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "copyAndJump", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "jumps", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "jumps", "(long,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$ArbitrarilyJumpableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "copyAndJump", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jump", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jumps", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "jumps", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$JumpableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "copyAndLeap", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leap", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leaps", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "leaps", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$LeapableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "split", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$SplittableGenerator", "split", "(RandomGenerator$SplittableGenerator)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "rngs", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator$StreamableGenerator", "rngs", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "getDefault", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "isDeprecated", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextBoolean", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextBytes", "(byte[])", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "(double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextDouble", "(double,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextExponential", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "(float)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextFloat", "(float,float)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextGaussian", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextGaussian", "(double,double)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "(int)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextInt", "(int,int)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "nextLong", "(long,long)", "summary", "df-generated"] + - ["java.util.random", "RandomGenerator", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "all", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "(byte[])", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "create", "(long)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "equidistribution", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "getDefault", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "group", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isArbitrarilyJumpable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isDeprecated", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isHardware", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isJumpable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isLeapable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isSplittable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStatistical", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStochastic", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "isStreamable", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "name", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "of", "(String)", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "period", "()", "summary", "df-generated"] + - ["java.util.random", "RandomGeneratorFactory", "stateBits", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.regex.model.yml b/java/ql/lib/ext/generated/java.util.regex.model.yml new file mode 100644 index 00000000000..6796f7ba32a --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.regex.model.yml @@ -0,0 +1,63 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.regex", "MatchResult", True, "group", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "MatchResult", True, "group", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuffer,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuffer,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuilder,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuilder,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "pattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "quoteReplacement", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "region", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "reset", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "toMatchResult", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "useAnchoringBounds", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "usePattern", "(Pattern)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "Matcher", False, "usePattern", "(Pattern)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Matcher", False, "useTransparentBounds", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.regex", "Pattern", False, "compile", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "Pattern", False, "pattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "PatternSyntaxException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "PatternSyntaxException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", True, "getPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.regex", "MatchResult", "end", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "end", "(int)", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "groupCount", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "start", "()", "summary", "df-generated"] + - ["java.util.regex", "MatchResult", "start", "(int)", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "end", "(String)", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "find", "(int)", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hasAnchoringBounds", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hasTransparentBounds", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "hitEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "lookingAt", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "matches", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "regionEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "regionStart", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "requireEnd", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "results", "()", "summary", "df-generated"] + - ["java.util.regex", "Matcher", "start", "(String)", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "asMatchPredicate", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "asPredicate", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "flags", "()", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "matches", "(String,CharSequence)", "summary", "df-generated"] + - ["java.util.regex", "Pattern", "splitAsStream", "(CharSequence)", "summary", "df-generated"] + - ["java.util.regex", "PatternSyntaxException", "getIndex", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.spi.model.yml b/java/ql/lib/ext/generated/java.util.spi.model.yml new file mode 100644 index 00000000000..b2bdab212b0 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.spi.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.spi", "CalendarDataProvider", "getFirstDayOfWeek", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarDataProvider", "getMinimalDaysInFirstWeek", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarNameProvider", "getDisplayName", "(String,int,int,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CalendarNameProvider", "getDisplayNames", "(String,int,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CurrencyNameProvider", "getDisplayName", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "CurrencyNameProvider", "getSymbol", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayCountry", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayLanguage", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayScript", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayUnicodeExtensionKey", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayUnicodeExtensionType", "(String,String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleNameProvider", "getDisplayVariant", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "LocaleServiceProvider", "getAvailableLocales", "()", "summary", "df-generated"] + - ["java.util.spi", "LocaleServiceProvider", "isSupportedLocale", "(Locale)", "summary", "df-generated"] + - ["java.util.spi", "ResourceBundleProvider", "getBundle", "(String,Locale)", "summary", "df-generated"] + - ["java.util.spi", "TimeZoneNameProvider", "getDisplayName", "(String,boolean,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "TimeZoneNameProvider", "getGenericDisplayName", "(String,int,Locale)", "summary", "df-generated"] + - ["java.util.spi", "ToolProvider", "findFirst", "(String)", "summary", "df-generated"] + - ["java.util.spi", "ToolProvider", "run", "(PrintStream,PrintStream,String[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.stream.model.yml b/java/ql/lib/ext/generated/java.util.stream.model.yml new file mode 100644 index 00000000000..edd36e33405 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.stream.model.yml @@ -0,0 +1,216 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Collector$Characteristics[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collector", True, "of", "(Supplier,BiConsumer,BinaryOperator,Function,Collector$Characteristics[])", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "collectingAndThen", "(Collector,Function)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "filtering", "(Predicate,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "flatMapping", "(Function,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "groupingBy", "(Function,Supplier,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "groupingByConcurrent", "(Function,Supplier,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "mapping", "(Function,Collector)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "teeing", "(Collector,Collector,BiFunction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toCollection", "(Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toConcurrentMap", "(Function,Function,BinaryOperator,Supplier)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Collectors", False, "toMap", "(Function,Function,BinaryOperator,Supplier)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream$Builder", True, "add", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "DoubleStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "concat", "(DoubleStream,DoubleStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "concat", "(DoubleStream,DoubleStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "dropWhile", "(DoublePredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "dropWhile", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "filter", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "flatMap", "(DoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "generate", "(DoubleSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "map", "(DoubleUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapMulti", "(DoubleStream$DoubleMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToInt", "(DoubleToIntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToLong", "(DoubleToLongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "mapToObj", "(DoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "peek", "(DoubleConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "takeWhile", "(DoublePredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "DoubleStream", True, "takeWhile", "(DoublePredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream$Builder", True, "add", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "IntStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "asDoubleStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "asLongStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "concat", "(IntStream,IntStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "concat", "(IntStream,IntStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "dropWhile", "(IntPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "dropWhile", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "filter", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "flatMap", "(IntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "generate", "(IntSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "map", "(IntUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapMulti", "(IntStream$IntMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToDouble", "(IntToDoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToLong", "(IntToLongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "mapToObj", "(IntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "peek", "(IntConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "IntStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "takeWhile", "(IntPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "IntStream", True, "takeWhile", "(IntPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream$Builder", True, "add", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "LongStream$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "asDoubleStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "boxed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "concat", "(LongStream,LongStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "concat", "(LongStream,LongStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "distinct", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "dropWhile", "(LongPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "dropWhile", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "filter", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "flatMap", "(LongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "generate", "(LongSupplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "limit", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "map", "(LongUnaryOperator)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapMulti", "(LongStream$LongMapMultiConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToDouble", "(LongToDoubleFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToInt", "(LongToIntFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "mapToObj", "(LongFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "peek", "(LongConsumer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "skip", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "LongStream", True, "sorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "takeWhile", "(LongPredicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "LongStream", True, "takeWhile", "(LongPredicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedDouble", True, "ChainedDouble", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedInt", True, "ChainedInt", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedLong", True, "ChainedLong", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Sink$ChainedReference", True, "ChainedReference", "(Sink)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Stream$Builder", True, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.stream", "Stream$Builder", True, "add", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "doubleStream", "(Spliterator$OfDouble,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "doubleStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "intStream", "(Spliterator$OfInt,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "intStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "longStream", "(Spliterator$OfLong,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "longStream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "stream", "(Spliterator,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.stream", "StreamSupport", False, "stream", "(Supplier,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.stream", "Collectors", "averagingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "averagingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "averagingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "counting", "()", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingBy", "(Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingBy", "(Function,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "joining", "()", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "joining", "(CharSequence)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "joining", "(CharSequence,CharSequence,CharSequence)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "maxBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "minBy", "(Comparator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "partitioningBy", "(Predicate)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "partitioningBy", "(Predicate,Collector)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(Object,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "reducing", "(Object,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summarizingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingDouble", "(ToDoubleFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingInt", "(ToIntFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "summingLong", "(ToLongFunction)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toMap", "(Function,Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableList", "()", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "Collectors", "toUnmodifiableSet", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "allMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "anyMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "collect", "(Supplier,ObjDoubleConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "forEach", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "forEachOrdered", "(DoubleConsumer)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "iterate", "(double,DoublePredicate,DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "iterate", "(double,DoubleUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "noneMatch", "(DoublePredicate)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "of", "(double)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "of", "(double[])", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "reduce", "(DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "reduce", "(double,DoubleBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "DoubleStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "allMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "anyMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "collect", "(Supplier,ObjIntConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "forEach", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "forEachOrdered", "(IntConsumer)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "iterate", "(int,IntPredicate,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "iterate", "(int,IntUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "noneMatch", "(IntPredicate)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "of", "(int)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "of", "(int[])", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "rangeClosed", "(int,int)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "reduce", "(IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "reduce", "(int,IntBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "IntStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "allMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "anyMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "average", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "collect", "(Supplier,ObjLongConsumer,BiConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "count", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "empty", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "findAny", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "findFirst", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "forEach", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "forEachOrdered", "(LongConsumer)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "iterate", "(long,LongPredicate,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "iterate", "(long,LongUnaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "max", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "min", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "noneMatch", "(LongPredicate)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "of", "(long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "of", "(long[])", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "range", "(long,long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "rangeClosed", "(long,long)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "reduce", "(LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "reduce", "(long,LongBinaryOperator)", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "sum", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "summaryStatistics", "()", "summary", "df-generated"] + - ["java.util.stream", "LongStream", "toArray", "()", "summary", "df-generated"] + - ["java.util.stream", "Stream", "builder", "()", "summary", "df-generated"] + - ["java.util.stream", "Stream", "empty", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.zip.model.yml b/java/ql/lib/ext/generated/java.util.zip.model.yml new file mode 100644 index 00000000000..8aaf1118ad6 --- /dev/null +++ b/java/ql/lib/ext/generated/java.util.zip.model.yml @@ -0,0 +1,155 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.util.zip", "CheckedInputStream", True, "CheckedInputStream", "(InputStream,Checksum)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedInputStream", True, "CheckedInputStream", "(InputStream,Checksum)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedInputStream", True, "getChecksum", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "CheckedOutputStream", "(OutputStream,Checksum)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "CheckedOutputStream", "(OutputStream,Checksum)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "CheckedOutputStream", True, "getChecksum", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "DataFormatException", True, "DataFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Deflater", True, "setInput", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterInputStream", True, "DeflaterInputStream", "(InputStream,Deflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,Deflater,int,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", True, "DeflaterOutputStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "GZIPOutputStream", True, "GZIPOutputStream", "(OutputStream,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "Inflater", True, "setInput", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterInputStream", True, "InflaterInputStream", "(InputStream,Inflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", True, "InflaterOutputStream", "(OutputStream,Inflater,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "ZipEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getComment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getCreationTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getExtra", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getLastAccessTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getLastModifiedTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setCreationTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setCreationTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setExtra", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastAccessTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastAccessTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastModifiedTime", "(FileTime)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipEntry", True, "setLastModifiedTime", "(FileTime)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["java.util.zip", "ZipError", True, "ZipError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipException", True, "ZipException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(File,int,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "ZipFile", "(String,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getEntry", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipFile", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipInputStream", True, "getNextEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "ZipOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "ZipOutputStream", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "putNextEntry", "(ZipEntry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["java.util.zip", "ZipOutputStream", True, "setComment", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.util.zip", "Checksum", "getValue", "()", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Checksum", "update", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "Deflater", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "Deflater", "(int,boolean)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(ByteBuffer,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "deflate", "(byte[],int,int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "end", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "finished", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getAdler", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getBytesRead", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getBytesWritten", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getTotalIn", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "getTotalOut", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "needsInput", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setDictionary", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setLevel", "(int)", "summary", "df-generated"] + - ["java.util.zip", "Deflater", "setStrategy", "(int)", "summary", "df-generated"] + - ["java.util.zip", "DeflaterOutputStream", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "Inflater", "(boolean)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "end", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "finished", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getAdler", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getBytesRead", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getBytesWritten", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getRemaining", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getTotalIn", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "getTotalOut", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "inflate", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "needsDictionary", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "needsInput", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "reset", "()", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(ByteBuffer)", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(byte[])", "summary", "df-generated"] + - ["java.util.zip", "Inflater", "setDictionary", "(byte[],int,int)", "summary", "df-generated"] + - ["java.util.zip", "InflaterOutputStream", "finish", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getCompressedSize", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getCrc", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getMethod", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getSize", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getTime", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "getTimeLocal", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "isDirectory", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setCompressedSize", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setCrc", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setMethod", "(int)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setSize", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setTime", "(long)", "summary", "df-generated"] + - ["java.util.zip", "ZipEntry", "setTimeLocal", "(LocalDateTime)", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "entries", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "getComment", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "size", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipFile", "stream", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipInputStream", "closeEntry", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "closeEntry", "()", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "setLevel", "(int)", "summary", "df-generated"] + - ["java.util.zip", "ZipOutputStream", "setMethod", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.accessibility.model.yml b/java/ql/lib/ext/generated/javax.accessibility.model.yml new file mode 100644 index 00000000000..ff17aaf81e1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.accessibility.model.yml @@ -0,0 +1,75 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.accessibility", "Accessible", True, "getAccessibleContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleAttributeSequence", True, "AccessibleAttributeSequence", "(int,int,AttributeSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleBundle", True, "toDisplayString", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "getAccessibleRelationSet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleContext", True, "setAccessibleParent", "(Accessible)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "AccessibleRelation", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "setTarget", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelation", True, "setTarget", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "AccessibleRelationSet", "(AccessibleRelation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "add", "(AccessibleRelation)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "addAll", "(AccessibleRelation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "AccessibleStateSet", "(AccessibleState[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "add", "(AccessibleState)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "addAll", "(AccessibleState[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.accessibility", "AccessibleTextSequence", True, "AccessibleTextSequence", "(int,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.accessibility", "AccessibilityProvider", "activate", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibilityProvider", "getName", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "doAccessibleAction", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "getAccessibleActionCount", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleAction", "getAccessibleActionDescription", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "addPropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "firePropertyChange", "(String,Object,Object)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleAction", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleChild", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleChildrenCount", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleComponent", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleEditableText", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleIcon", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleIndexInParent", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleRole", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleSelection", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleStateSet", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleTable", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleText", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getAccessibleValue", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "getLocale", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleContext", "removePropertyChangeListener", "(PropertyChangeListener)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getAccessibleActionAnchor", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getAccessibleActionObject", "(int)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getEndIndex", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "getStartIndex", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleHyperlink", "isValid", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "clear", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "contains", "(String)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "remove", "(AccessibleRelation)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleRelationSet", "size", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "clear", "()", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "contains", "(AccessibleState)", "summary", "df-generated"] + - ["javax.accessibility", "AccessibleStateSet", "remove", "(AccessibleState)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.annotation.processing.model.yml b/java/ql/lib/ext/generated/javax.annotation.processing.model.yml new file mode 100644 index 00000000000..6f80ce5dce9 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.annotation.processing.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.annotation.processing", "Completion", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completion", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "Completions", True, "of", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "FilerException", True, "FilerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.annotation.processing", "Processor", True, "init", "(ProcessingEnvironment)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.annotation.processing", "RoundEnvironment", True, "getElementsAnnotatedWithAny", "(Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.annotation.processing", "RoundEnvironment", True, "getElementsAnnotatedWithAny", "(TypeElement[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.annotation.processing", "ProcessingEnvironment", "isPreviewEnabled", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getCompletions", "(Element,AnnotationMirror,ExecutableElement,String)", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedAnnotationTypes", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedOptions", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "getSupportedSourceVersion", "()", "summary", "df-generated"] + - ["javax.annotation.processing", "Processor", "process", "(Set,RoundEnvironment)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.model.yml b/java/ql/lib/ext/generated/javax.crypto.model.yml new file mode 100644 index 00000000000..84a2a5c724b --- /dev/null +++ b/java/ql/lib/ext/generated/javax.crypto.model.yml @@ -0,0 +1,180 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto", "AEADBadTagException", True, "AEADBadTagException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "BadPaddingException", True, "BadPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getExemptionMechanism", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Certificate,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "init", "(int,Key,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "updateAAD", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "updateAAD", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "updateAAD", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherOutputStream", True, "CipherOutputStream", "(OutputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "CipherOutputStream", True, "CipherOutputStream", "(OutputStream,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(AlgorithmParameters,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(AlgorithmParameters,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "EncryptedPrivateKeyInfo", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getAlgParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getEncryptedData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Cipher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key,Provider)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", True, "getKeySpec", "(Key,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", True, "init", "(Key,AlgorithmParameters)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "ExemptionMechanismException", True, "ExemptionMechanismException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "IllegalBlockSizeException", True, "IllegalBlockSizeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "doPhase", "(Key,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "generateSecret", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyAgreement", True, "init", "(Key,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "generateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "KeyGenerator", True, "init", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "doFinal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "doFinal", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "doFinal", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "Mac", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "NoSuchPaddingException", True, "NoSuchPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Cipher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Key)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SealedObject", True, "getObject", "(Key,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "generateSecret", "(KeySpec)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "generateSecret", "(KeySpec)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getKeySpec", "(SecretKey,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getKeySpec", "(SecretKey,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "translateKey", "(SecretKey)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "SecretKeyFactory", True, "translateKey", "(SecretKey)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto", "ShortBufferException", True, "ShortBufferException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto", "Cipher", "getBlockSize", "()", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getMaxAllowedKeyLength", "(String)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getMaxAllowedParameterSpec", "(String)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "getOutputSize", "(int)", "summary", "df-generated"] + - ["javax.crypto", "Cipher", "init", "(int,Certificate)", "summary", "df-generated"] + - ["javax.crypto", "CipherSpi", "engineSetMode", "(String)", "summary", "df-generated"] + - ["javax.crypto", "CipherSpi", "engineSetPadding", "(String)", "summary", "df-generated"] + - ["javax.crypto", "EncryptedPrivateKeyInfo", "getAlgName", "()", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "()", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "(byte[])", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "genExemptionBlob", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "getOutputSize", "(int)", "summary", "df-generated"] + - ["javax.crypto", "ExemptionMechanism", "isCryptoAllowed", "(Key)", "summary", "df-generated"] + - ["javax.crypto", "KeyGenerator", "init", "(int)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "getMacLength", "()", "summary", "df-generated"] + - ["javax.crypto", "Mac", "reset", "()", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(ByteBuffer)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte)", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte[])", "summary", "df-generated"] + - ["javax.crypto", "Mac", "update", "(byte[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.spec.model.yml b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml new file mode 100644 index 00000000000..d8eab143d30 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml @@ -0,0 +1,78 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto.spec", "ChaCha20ParameterSpec", False, "ChaCha20ParameterSpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "ChaCha20ParameterSpec", False, "getNonce", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "DESKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "DESKeySpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "DESedeKeySpec", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "DESedeKeySpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", True, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "GCMParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "IvParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "OAEPParameterSpec", "(String,String,AlgorithmParameterSpec,PSource)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getDigestAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getMGFAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getMGFParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "OAEPParameterSpec", True, "getPSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "PBEKeySpec", "(char[],byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", True, "getSalt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "PBEParameterSpec", "(byte[],int,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "getParameterSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", True, "getSalt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource$PSpecified", False, "PSpecified", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource$PSpecified", False, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "PSource", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "RC2ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto.spec", "ChaCha20ParameterSpec", "getCounter", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", "isParityAdjusted", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DESKeySpec", "isWeak", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DESedeKeySpec", "isParityAdjusted", "(byte[],int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "DHGenParameterSpec", "(int,int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "getExponentSize", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHGenParameterSpec", "getPrimeSize", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "DHParameterSpec", "(BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "DHParameterSpec", "(BigInteger,BigInteger,int)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getL", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHParameterSpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "DHPrivateKeySpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPrivateKeySpec", "getX", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "DHPublicKeySpec", "(BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getG", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getP", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "DHPublicKeySpec", "getY", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "GCMParameterSpec", "getTLen", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "clearPassword", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "getIterationCount", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEKeySpec", "getKeyLength", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "PBEParameterSpec", "getIterationCount", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC2ParameterSpec", "getEffectiveKeyBits", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getRounds", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getVersion", "()", "summary", "df-generated"] + - ["javax.crypto.spec", "RC5ParameterSpec", "getWordSize", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml b/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml new file mode 100644 index 00000000000..961bbceb1bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.metadata.model.yml @@ -0,0 +1,65 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "IIOInvalidTreeException", "(String,Throwable,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOInvalidTreeException", True, "getOffendingNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getDefaultController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getExtraMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "getNativeMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "setController", "(IIOMetadataController)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", True, "setFromTree", "(String,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeDescription", "(String,String,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeDescription", "(String,String,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getAttributeNames", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getChildNames", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getElementDescription", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getElementDescription", "(String,Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", True, "getRootName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", True, "IIOMetadataFormatImpl", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", True, "IIOMetadataFormatImpl", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "IIOMetadataNode", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "getUserObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataNode", True, "setUserObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.metadata", "IIOMetadata", "activateController", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "getAsTree", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "getMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "hasController", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "isStandardMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "mergeTree", "(String,Node)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadata", "reset", "()", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "canNodeAppear", "(String,ImageTypeSpecifier)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeDataType", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeDefaultValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeEnumerations", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeListMaxLength", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeListMinLength", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeMaxValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeMinValue", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getAttributeValueType", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getChildPolicy", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getElementMaxChildren", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getElementMinChildren", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectArrayMaxLength", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectArrayMinLength", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectClass", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectDefaultValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectEnumerations", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectMaxValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectMinValue", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "getObjectValueType", "(String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormat", "isAttributeRequired", "(String,String)", "summary", "df-generated"] + - ["javax.imageio.metadata", "IIOMetadataFormatImpl", "getStandardFormatInstance", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.model.yml b/java/ql/lib/ext/generated/javax.imageio.model.yml new file mode 100644 index 00000000000..a1be538932d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.model.yml @@ -0,0 +1,251 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio", "IIOException", True, "IIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOException", True, "IIOException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOException", True, "IIOException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(Raster,List,IIOMetadata)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "IIOImage", "(RenderedImage,List,IIOMetadata)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getRaster", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getRenderedImage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getThumbnail", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "getThumbnails", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setMetadata", "(IIOMetadata)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setRaster", "(Raster)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setRenderedImage", "(RenderedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOImage", True, "setThumbnails", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDefaultController", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDestinationOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getDestinationType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "getSourceRegion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setController", "(IIOParamController)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setDestinationOffset", "(Point)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setDestinationType", "(ImageTypeSpecifier)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "IIOParam", True, "setSourceRegion", "(Rectangle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageIO", False, "createImageInputStream", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageIO", False, "createImageOutputStream", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "getDestination", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "getSourceRenderSize", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "setDestination", "(BufferedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReadParam", True, "setSourceRenderSize", "(Dimension)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadProgressListener", "(IIOReadProgressListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadUpdateListener", "(IIOReadUpdateListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "addIIOReadWarningListener", "(IIOReadWarningListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getAvailableLocales", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getImageMetadata", "(int,String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getInput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getOriginatingProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getRawImageType", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "getStreamMetadata", "(String,Set)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "read", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(Iterator)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAll", "(int,ImageReadParam)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readAsRenderedImage", "(int,ImageReadParam)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readTile", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "readTileRaster", "(int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setInput", "(Object,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageReader", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(ColorModel,SampleModel)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(ColorModel,SampleModel)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "ImageTypeSpecifier", "(RenderedImage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createBanded", "(ColorSpace,int[],int[],int,boolean,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createBufferedImage", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createFromRenderedImage", "(RenderedImage)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createIndexed", "(byte[],byte[],byte[],byte[],int,int)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createInterleaved", "(ColorSpace,int[],int,boolean,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "createPacked", "(ColorSpace,int,int,int,int,int,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "getColorModel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", True, "getSampleModel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "ImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionQualityDescriptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getCompressionTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "getLocalizedCompressionTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriteParam", True, "setCompressionType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "addIIOWriteProgressListener", "(IIOWriteProgressListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "addIIOWriteWarningListener", "(IIOWriteWarningListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getAvailableLocales", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getDefaultWriteParam", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getOriginatingProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "getOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio", "ImageWriter", True, "setOutput", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio", "IIOImage", "getNumThumbnails", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOImage", "hasRaster", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "activateController", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceBands", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceXSubsampling", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSourceYSubsampling", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSubsamplingXOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "getSubsamplingYOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "hasController", "()", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "setSourceBands", "(int[])", "summary", "df-generated"] + - ["javax.imageio", "IIOParam", "setSourceSubsampling", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getCacheDirectory", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReader", "(ImageWriter)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReaders", "(Object)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersByFormatName", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersByMIMEType", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageReadersBySuffix", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageTranscoders", "(ImageReader,ImageWriter)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWriter", "(ImageReader)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWriters", "(ImageTypeSpecifier,String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersByFormatName", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersByMIMEType", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getImageWritersBySuffix", "(String)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderFileSuffixes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderFormatNames", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getReaderMIMETypes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getUseCache", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterFileSuffixes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterFormatNames", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "getWriterMIMETypes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(ImageInputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(InputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "read", "(URL)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "scanForPlugins", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "setCacheDirectory", "(File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "setUseCache", "(boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,File)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,ImageOutputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageIO", "write", "(RenderedImage,String,OutputStream)", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "canSetSourceRenderSize", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getDestinationBands", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceMaxProgressivePass", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceMinProgressivePass", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "getSourceNumProgressivePasses", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "setDestinationBands", "(int[])", "summary", "df-generated"] + - ["javax.imageio", "ImageReadParam", "setSourceProgressivePasses", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "abort", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "canReadRaster", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "dispose", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getAspectRatio", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getDefaultReadParam", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getHeight", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getImageMetadata", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getImageTypes", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getMinIndex", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getNumImages", "(boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getNumThumbnails", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getStreamMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getThumbnailHeight", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getThumbnailWidth", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileGridXOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileGridYOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileHeight", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getTileWidth", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "getWidth", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "hasThumbnails", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isIgnoringMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isImageTiled", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isRandomAccessEasy", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "isSeekForwardOnly", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "read", "(int,ImageReadParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readRaster", "(int,ImageReadParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readThumbnail", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "readerSupportsThumbnails", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadProgressListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadUpdateListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeAllIIOReadWarningListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadProgressListener", "(IIOReadProgressListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadUpdateListener", "(IIOReadUpdateListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "removeIIOReadWarningListener", "(IIOReadWarningListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageReader", "reset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTranscoder", "convertImageMetadata", "(IIOMetadata,ImageTypeSpecifier,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageTranscoder", "convertStreamMetadata", "(IIOMetadata,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createFromBufferedImageType", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createGrayscale", "(int,int,boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "createGrayscale", "(int,int,boolean,boolean)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getBitsPerBand", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getBufferedImageType", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getNumBands", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getNumComponents", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageTypeSpecifier", "getSampleModel", "(int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canOffsetTiles", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteCompressed", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteProgressive", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "canWriteTiles", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getBitRate", "(float)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionQuality", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getCompressionQualityValues", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getPreferredTileSizes", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getProgressiveMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileGridXOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileGridYOffset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileHeight", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTileWidth", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "getTilingMode", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "isCompressionLossless", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setCompressionMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setCompressionQuality", "(float)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setProgressiveMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setTiling", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "setTilingMode", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "unsetCompression", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriteParam", "unsetTiling", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "abort", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canInsertEmpty", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canInsertImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canRemoveImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplaceImageMetadata", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplacePixels", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canReplaceStreamMetadata", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteRasters", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "canWriteSequence", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "dispose", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endInsertEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endReplacePixels", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endWriteEmpty", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "endWriteSequence", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getDefaultImageMetadata", "(ImageTypeSpecifier,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getDefaultStreamMetadata", "(ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getNumThumbnailsSupported", "(ImageTypeSpecifier,ImageWriteParam,IIOMetadata,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "getPreferredThumbnailSizes", "(ImageTypeSpecifier,ImageWriteParam,IIOMetadata,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareInsertEmpty", "(int,ImageTypeSpecifier,int,int,IIOMetadata,List,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareReplacePixels", "(int,Rectangle)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareWriteEmpty", "(IIOMetadata,ImageTypeSpecifier,int,int,IIOMetadata,List,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "prepareWriteSequence", "(IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeAllIIOWriteProgressListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeAllIIOWriteWarningListeners", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeIIOWriteProgressListener", "(IIOWriteProgressListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeIIOWriteWarningListener", "(IIOWriteWarningListener)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "removeImage", "(int)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replaceImageMetadata", "(int,IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replacePixels", "(Raster,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replacePixels", "(RenderedImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "replaceStreamMetadata", "(IIOMetadata)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "reset", "()", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(IIOImage)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(IIOMetadata,IIOImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "write", "(RenderedImage)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "writeInsert", "(int,IIOImage,ImageWriteParam)", "summary", "df-generated"] + - ["javax.imageio", "ImageWriter", "writeToSequence", "(IIOImage,ImageWriteParam)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml new file mode 100644 index 00000000000..607766feec1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.bmp.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", True, "BMPImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", "isTopDown", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.bmp", "BMPImageWriteParam", "setTopDown", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml new file mode 100644 index 00000000000..00938e459a3 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.jpeg.model.yml @@ -0,0 +1,35 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getACHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getDCHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "getQTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", True, "setDecodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "JPEGImageWriteParam", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getACHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getDCHuffmanTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "getQTables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", True, "setEncodeTables", "(JPEGQTable[],JPEGHuffmanTable[],JPEGHuffmanTable[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "JPEGHuffmanTable", "(short[],short[])", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "getLengths", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGHuffmanTable", "getValues", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", "areTablesSet", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageReadParam", "unsetDecodeTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "areTablesSet", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "getOptimizeHuffmanTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "setOptimizeHuffmanTables", "(boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGImageWriteParam", "unsetEncodeTables", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "JPEGQTable", "(int[])", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "getScaledInstance", "(float,boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.jpeg", "JPEGQTable", "getTable", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml b/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml new file mode 100644 index 00000000000..56152d0710e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.plugins.tiff.model.yml @@ -0,0 +1,94 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "TIFFDirectory", "(TIFFTagSet[],TIFFTag)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "TIFFDirectory", "(TIFFTagSet[],TIFFTag)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "addTIFFField", "(TIFFField)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "addTagSet", "(TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "createFromMetadata", "(IIOMetadata)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getAsMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getParentTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTIFFField", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTIFFFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTag", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", True, "getTagSets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,int,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,long,TIFFDirectory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,int,long,TIFFDirectory)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "TIFFField", "(TIFFTag,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "createFromMetadataNode", "(TIFFTagSet,Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsChars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsNativeNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getAsString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getDirectory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", False, "getValueAsString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", False, "addAllowedTagSet", "(TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", False, "getAllowedTagSets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,TIFFTagSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,TIFFTagSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "TIFFTag", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getTagSet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", True, "getValueName", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "TIFFTagSet", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTag", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTag", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", True, "getTagNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.plugins.tiff", "BaselineTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifGPSTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifInteroperabilityTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifParentTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "ExifTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "FaxTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "GeoTIFFTagSet", "getInstance", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "containsTIFFField", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "getNumTIFFFields", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTIFFField", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTIFFFields", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFDirectory", "removeTagSet", "(TIFFTagSet)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "createArrayForType", "(int,int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsDouble", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsDoubles", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsFloat", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsFloats", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsInt", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsInts", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsLong", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsLongs", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsRational", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsRationals", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsSRational", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsSRationals", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getAsShorts", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getCount", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTagNumber", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getType", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTypeByName", "(String)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "getTypeName", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "hasDirectory", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFField", "isIntegral", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "getReadUnknownTags", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "removeAllowedTagSet", "(TIFFTagSet)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFImageReadParam", "setReadUnknownTags", "(boolean)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getCount", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getDataTypes", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getNamedValues", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getNumber", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "getSizeOfType", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "hasValueNames", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "isDataTypeOK", "(int)", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTag", "isIFDPointer", "()", "summary", "df-generated"] + - ["javax.imageio.plugins.tiff", "TIFFTagSet", "getTagNumbers", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.spi.model.yml b/java/ql/lib/ext/generated/javax.imageio.spi.model.yml new file mode 100644 index 00000000000..1550958d1fa --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.spi.model.yml @@ -0,0 +1,129 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.spi", "IIOServiceProvider", True, "IIOServiceProvider", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "IIOServiceProvider", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "getVendorName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "ImageInputStreamSpi", "(String,String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "ImageInputStreamSpi", "(String,String,Class)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", True, "createInputStreamInstance", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "ImageOutputStreamSpi", "(String,String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "ImageOutputStreamSpi", "(String,String,Class)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", True, "createOutputStreamInstance", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[11].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[16].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[17].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[6].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "ImageReaderSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "createReaderInstance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "getImageWriterSpiNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", True, "getInputTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[13]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "ImageReaderWriterSpi", "(String,String,String[],String[],String[],String,boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getExtraImageMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getExtraStreamMetadataFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getFileSuffixes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getFormatNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getMIMETypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getNativeImageMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getNativeStreamMetadataFormatName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", True, "getPluginClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", True, "ImageTranscoderSpi", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", True, "ImageTranscoderSpi", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[10]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[11].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[12].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[14]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[15]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[16].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[17].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[6].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[7].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "ImageWriterSpi", "(String,String,String[],String[],String[],String,Class[],String[],boolean,String,String,String[],String[],boolean,String,String,String[],String[])", "", "Argument[9]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "createWriterInstance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "getImageReaderSpiNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", True, "getOutputTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getCategories", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviderByClass", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,ServiceRegistry$Filter,boolean)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,ServiceRegistry$Filter,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "getServiceProviders", "(Class,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", True, "lookupProviders", "(Class,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.spi", "IIORegistry", "getDefaultInstance", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "IIORegistry", "registerApplicationClasspathSpis", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "IIOServiceProvider", "getDescription", "(Locale)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "canUseCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "createInputStreamInstance", "(Object,boolean,File)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "getInputClass", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageInputStreamSpi", "needsCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "canUseCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "createOutputStreamInstance", "(Object,boolean,File)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "getOutputClass", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageOutputStreamSpi", "needsCacheFile", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "canDecodeInput", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "createReaderInstance", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderSpi", "isOwnReader", "(ImageReader)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "getImageMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "getStreamMetadataFormat", "(String)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "isStandardImageMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageReaderWriterSpi", "isStandardStreamMetadataFormatSupported", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "createTranscoderInstance", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "getReaderServiceProviderName", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageTranscoderSpi", "getWriterServiceProviderName", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "canEncodeImage", "(ImageTypeSpecifier)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "canEncodeImage", "(RenderedImage)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "createWriterInstance", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "isFormatLossless", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ImageWriterSpi", "isOwnWriter", "(ImageWriter)", "summary", "df-generated"] + - ["javax.imageio.spi", "RegisterableService", "onDeregistration", "(ServiceRegistry,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "RegisterableService", "onRegistration", "(ServiceRegistry,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry$Filter", "filter", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "ServiceRegistry", "(Iterator)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "contains", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterAll", "()", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterAll", "(Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterServiceProvider", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "deregisterServiceProvider", "(Object,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "lookupProviders", "(Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProvider", "(Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProvider", "(Object,Class)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "registerServiceProviders", "(Iterator)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "setOrdering", "(Class,Object,Object)", "summary", "df-generated"] + - ["javax.imageio.spi", "ServiceRegistry", "unsetOrdering", "(Class,Object,Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.imageio.stream.model.yml b/java/ql/lib/ext/generated/javax.imageio.stream.model.yml new file mode 100644 index 00000000000..f9dc67c2a67 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.imageio.stream.model.yml @@ -0,0 +1,62 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.imageio.stream", "FileCacheImageOutputStream", True, "FileCacheImageOutputStream", "(OutputStream,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileCacheImageOutputStream", True, "FileCacheImageOutputStream", "(OutputStream,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageInputStream", True, "FileImageInputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageInputStream", True, "FileImageInputStream", "(RandomAccessFile)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageOutputStream", True, "FileImageOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "FileImageOutputStream", True, "FileImageOutputStream", "(RandomAccessFile)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "IIOByteBuffer", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", True, "setData", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "getByteOrder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "read", "(byte[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "read", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "readBytes", "(IIOByteBuffer,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", True, "setByteOrder", "(ByteOrder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "MemoryCacheImageInputStream", True, "MemoryCacheImageInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.imageio.stream", "MemoryCacheImageOutputStream", True, "MemoryCacheImageOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.imageio.stream", "IIOByteBuffer", "getLength", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "getOffset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "setLength", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "IIOByteBuffer", "setOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "flush", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "flushBefore", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getBitOffset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getFlushedPosition", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "getStreamPosition", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCached", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCachedFile", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "isCachedMemory", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "length", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "mark", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "read", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readBit", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readBits", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(char[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(double[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(float[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(int[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(long[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readFully", "(short[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "readUnsignedInt", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "reset", "()", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "seek", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "setBitOffset", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageInputStream", "skipBytes", "(long)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeBit", "(int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeBits", "(long,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeChars", "(char[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeDoubles", "(double[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeFloats", "(float[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeInts", "(int[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeLongs", "(long[],int,int)", "summary", "df-generated"] + - ["javax.imageio.stream", "ImageOutputStream", "writeShorts", "(short[],int,int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.element.model.yml b/java/ql/lib/ext/generated/javax.lang.model.element.model.yml new file mode 100644 index 00000000000..642f6c6315c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.element.model.yml @@ -0,0 +1,38 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.element", "AnnotationValueVisitor", True, "visit", "(AnnotationValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "AnnotationValueVisitor", True, "visit", "(AnnotationValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", True, "visit", "(Element)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "UnknownAnnotationValueException", "(AnnotationValue,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "UnknownAnnotationValueException", "(AnnotationValue,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownAnnotationValueException", True, "getUnknownAnnotationValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "UnknownDirectiveException", "(ModuleElement$Directive,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "UnknownDirectiveException", "(ModuleElement$Directive,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownDirectiveException", True, "getUnknownDirective", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "UnknownElementException", "(Element,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "UnknownElementException", "(Element,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.element", "UnknownElementException", True, "getUnknownElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.element", "ElementKind", "isClass", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementKind", "isField", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementKind", "isInterface", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", "visitModule", "(ModuleElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ElementVisitor", "visitRecordComponent", "(RecordComponentElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visit", "(ModuleElement$Directive)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visit", "(ModuleElement$Directive,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "ModuleElement$DirectiveVisitor", "visitUnknown", "(ModuleElement$Directive,Object)", "summary", "df-generated"] + - ["javax.lang.model.element", "NestingKind", "isNested", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "TypeElement", "getPermittedSubclasses", "()", "summary", "df-generated"] + - ["javax.lang.model.element", "TypeElement", "getRecordComponents", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.model.yml b/java/ql/lib/ext/generated/javax.lang.model.model.yml new file mode 100644 index 00000000000..45b57d256bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model", "SourceVersion", "isIdentifier", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isKeyword", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isKeyword", "(CharSequence,SourceVersion)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isName", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "isName", "(CharSequence,SourceVersion)", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "latest", "()", "summary", "df-generated"] + - ["javax.lang.model", "SourceVersion", "latestSupported", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.type.model.yml b/java/ql/lib/ext/generated/javax.lang.model.type.model.yml new file mode 100644 index 00000000000..0e9eca5bac8 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.type.model.yml @@ -0,0 +1,20 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.type", "MirroredTypeException", True, "MirroredTypeException", "(TypeMirror)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypeException", True, "getTypeMirror", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypesException", True, "MirroredTypesException", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "MirroredTypesException", True, "getTypeMirrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "TypeVisitor", True, "visit", "(TypeMirror)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "UnknownTypeException", "(TypeMirror,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "UnknownTypeException", "(TypeMirror,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "getArgument", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.type", "UnknownTypeException", True, "getUnknownType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.type", "TypeKind", "isPrimitive", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.lang.model.util.model.yml b/java/ql/lib/ext/generated/javax.lang.model.util.model.yml new file mode 100644 index 00000000000..e57b66161c4 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.lang.model.util.model.yml @@ -0,0 +1,93 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.lang.model.util", "ElementFilter", True, "constructorsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "constructorsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "exportsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "fieldsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "fieldsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "methodsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "methodsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "modulesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "modulesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "opensIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "packagesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "packagesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "providesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "recordComponentsIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "recordComponentsIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "requiresIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "typesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "typesIn", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementFilter", True, "usesIn", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsConstructor", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsInstanceInit", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsMethod", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitExecutableAsStaticInit", "(ExecutableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsAnnotationType", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsClass", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsEnum", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitTypeAsInterface", "(TypeElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsEnumConstant", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsExceptionParameter", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsField", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsLocalVariable", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", True, "visitVariableAsParameter", "(VariableElement,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Element,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "ElementScanner6", True, "scan", "(Iterable,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "getAllPackageElements", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "getAllTypeElements", "(CharSequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "Elements", True, "recordComponentFor", "(ExecutableElement)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsNone", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsNone", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsPackage", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsPackage", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsVoid", "(NoType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitNoTypeAsVoid", "(NoType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsBoolean", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsBoolean", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsByte", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsByte", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsChar", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsChar", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsDouble", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsDouble", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsFloat", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsFloat", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsInt", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsInt", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsLong", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsLong", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsShort", "(PrimitiveType,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", True, "visitPrimitiveAsShort", "(PrimitiveType,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.lang.model.util", "ElementKindVisitor6", "visitTypeAsRecord", "(TypeElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", "visitVariableAsBindingVariable", "(VariableElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "ElementKindVisitor6", "visitVariableAsResourceVariable", "(VariableElement,Object)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements$Origin", "isDeclared", "()", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getAllModuleElements", "()", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getModuleElement", "(CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getModuleOf", "(Element)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(AnnotatedConstruct,AnnotationMirror)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(Element)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getOrigin", "(ModuleElement,ModuleElement$Directive)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getPackageElement", "(ModuleElement,CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "getTypeElement", "(ModuleElement,CharSequence)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "isAutomaticModule", "(ModuleElement)", "summary", "df-generated"] + - ["javax.lang.model.util", "Elements", "isBridge", "(ExecutableElement)", "summary", "df-generated"] + - ["javax.lang.model.util", "TypeKindVisitor6", "visitNoTypeAsModule", "(NoType,Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.loading.model.yml b/java/ql/lib/ext/generated/javax.management.loading.model.yml new file mode 100644 index 00000000000..ada13786d72 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.loading.model.yml @@ -0,0 +1,44 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,URLStreamHandlerFactory,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "MLet", "(URL[],ClassLoader,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "loadClass", "(String,ClassLoaderRepository)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLet", True, "loadClass", "(String,ClassLoaderRepository)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "MLetContent", "(URL,Map,List,List)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getCode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getDocumentBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getJarFiles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getParameterTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getParameterValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getSerializedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetContent", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getLibraryDirectory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getMBeansFromURL", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getMBeansFromURL", "(URL)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "getURLs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.loading", "MLetMBean", True, "setLibraryDirectory", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "PrivateMLet", True, "PrivateMLet", "(URL[],ClassLoader,URLStreamHandlerFactory,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.loading", "PrivateMLet", True, "PrivateMLet", "(URL[],ClassLoader,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.loading", "DefaultLoaderRepository", "loadClass", "(String)", "summary", "df-generated"] + - ["javax.management.loading", "DefaultLoaderRepository", "loadClassWithout", "(ClassLoader,String)", "summary", "df-generated"] + - ["javax.management.loading", "MLet", "MLet", "(URL[])", "summary", "df-generated"] + - ["javax.management.loading", "MLet", "MLet", "(URL[],boolean)", "summary", "df-generated"] + - ["javax.management.loading", "MLetMBean", "addURL", "(String)", "summary", "df-generated"] + - ["javax.management.loading", "MLetMBean", "addURL", "(URL)", "summary", "df-generated"] + - ["javax.management.loading", "PrivateMLet", "PrivateMLet", "(URL[],boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.model.yml b/java/ql/lib/ext/generated/javax.management.model.yml new file mode 100644 index 00000000000..fbde549df2e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.model.yml @@ -0,0 +1,409 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management", "Attribute", True, "Attribute", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "Attribute", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Attribute", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "AttributeChangeNotification", "(Object,long,long,String,String,String,Object,Object)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getAttributeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getAttributeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getNewValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotification", True, "getOldValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", True, "enableAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", True, "getEnabledAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "AttributeList", "(AttributeList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "AttributeList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "add", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "add", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "addAll", "(AttributeList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "AttributeList", True, "set", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeNotFoundException", True, "AttributeNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeValueExp", True, "AttributeValueExp", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "AttributeValueExp", True, "getAttributeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "BadAttributeValueExpException", True, "BadAttributeValueExpException", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "BadBinaryOpValueExpException", True, "BadBinaryOpValueExpException", "(ValueExp)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "BadBinaryOpValueExpException", True, "getExp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "BadStringOperationException", True, "BadStringOperationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFieldValues", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "getFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setField", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setField", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setFields", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Descriptor", True, "setFields", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "DescriptorAccess", True, "setDescriptor", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "DescriptorAccess", True, "setDescriptor", "(Descriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management", "DescriptorRead", True, "getDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "getAttributes", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "getMBeanInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "DynamicMBean", True, "setAttributes", "(AttributeList)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "ImmutableDescriptor", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ImmutableDescriptor", True, "union", "(Descriptor[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "InstanceAlreadyExistsException", True, "InstanceAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InstanceNotFoundException", True, "InstanceNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "IntrospectionException", True, "IntrospectionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InvalidApplicationException", True, "InvalidApplicationException", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "InvalidAttributeValueException", True, "InvalidAttributeValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "JMException", True, "JMException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "JMRuntimeException", True, "JMRuntimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ListenerNotFoundException", True, "ListenerNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "MBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "MBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanConstructorInfo", True, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "MBeanException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "MBeanFeatureInfo", "(String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanFeatureInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "MBeanInfo", "(String,String,MBeanAttributeInfo[],MBeanConstructorInfo[],MBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getConstructors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getNotifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanInfo", True, "getOperations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "MBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanNotificationInfo", True, "getNotifTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "MBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "getReturnType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanOperationInfo", True, "getSignature", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "MBeanParameterInfo", "(String,String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanParameterInfo", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanPermission", True, "MBeanPermission", "(String,String,ObjectName,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistration", True, "preRegister", "(MBeanServer,ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanRegistrationException", True, "MBeanRegistrationException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerBuilder", True, "newMBeanServer", "(String,MBeanServer,MBeanServerDelegate)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,ObjectName,Object[],String[])", "", "Argument[4].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "createMBean", "(String,ObjectName,Object[],String[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttribute", "(ObjectName,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttribute", "(ObjectName,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttributes", "(ObjectName,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getAttributes", "(ObjectName,String[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "getObjectInstance", "(ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "invoke", "(ObjectName,String,Object[],String[])", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerConnection", True, "setAttributes", "(ObjectName,AttributeList)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", True, "getMBeanServerId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "createMBeanServer", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "getClassLoaderRepository", "(MBeanServer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerFactory", True, "newMBeanServer", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "MBeanServerInvocationHandler", "(MBeanServerConnection,ObjectName,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "getMBeanServerConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "MBeanServerNotification", "(String,Object,long,ObjectName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanServerNotification", True, "getMBeanName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "MBeanTrustPermission", True, "MBeanTrustPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MBeanTrustPermission", True, "MBeanTrustPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "MalformedObjectNameException", True, "MalformedObjectNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotCompliantMBeanException", True, "NotCompliantMBeanException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "Notification", "(String,Object,long,long,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "getUserData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Notification", True, "setSource", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Notification", True, "setUserData", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcaster", True, "getNotificationInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor,MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(Executor,MBeanNotificationInfo[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", True, "NotificationBroadcasterSupport", "(MBeanNotificationInfo[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationFilterSupport", True, "enableType", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "NotificationFilterSupport", True, "getEnabledTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "NotificationListener", True, "handleNotification", "(Notification,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(ObjectName,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "ObjectInstance", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectInstance", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,Hashtable)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "ObjectName", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getCanonicalKeyPropertyListString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getCanonicalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getDomain", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(ObjectName)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,Hashtable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getInstance", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyPropertyList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ObjectName", True, "getKeyPropertyListString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "OperationsException", True, "OperationsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "Query", True, "and", "(QueryExp,QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "and", "(QueryExp,QueryExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "anySubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "anySubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "attr", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "between", "(ValueExp,ValueExp,ValueExp)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "div", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "div", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "eq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "eq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "finalSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "finalSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "geq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "geq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "gt", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "gt", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "in", "(ValueExp,ValueExp[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "in", "(ValueExp,ValueExp[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "initialSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "initialSubString", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "isInstanceOf", "(StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "leq", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "leq", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "lt", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "lt", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "match", "(AttributeValueExp,StringValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "match", "(AttributeValueExp,StringValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "minus", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "minus", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "not", "(QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "or", "(QueryExp,QueryExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "or", "(QueryExp,QueryExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "plus", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "plus", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "times", "(ValueExp,ValueExp)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "times", "(ValueExp,ValueExp)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "Query", True, "value", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "ReflectionException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "ReflectionException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "RuntimeErrorException", "(Error,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeErrorException", True, "getTargetError", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "RuntimeMBeanException", "(RuntimeException,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeMBeanException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "RuntimeOperationsException", "(RuntimeException,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "RuntimeOperationsException", True, "getTargetException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ServiceNotFoundException", True, "ServiceNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,NotificationEmitter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,NotificationEmitter)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,boolean,NotificationEmitter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardEmitterMBean", True, "StandardEmitterMBean", "(Object,Class,boolean,NotificationEmitter)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "StandardMBean", "(Object,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "StandardMBean", "(Object,Class,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "getImplementation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "StandardMBean", True, "setImplementation", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StringValueExp", True, "StringValueExp", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management", "StringValueExp", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ValueExp", True, "apply", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management", "ValueExp", True, "apply", "(ObjectName)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management", "AttributeChangeNotificationFilter", "disableAllAttributes", "()", "summary", "df-generated"] + - ["javax.management", "AttributeChangeNotificationFilter", "disableAttribute", "(String)", "summary", "df-generated"] + - ["javax.management", "AttributeList", "AttributeList", "(int)", "summary", "df-generated"] + - ["javax.management", "AttributeList", "addAll", "(int,AttributeList)", "summary", "df-generated"] + - ["javax.management", "DefaultLoaderRepository", "loadClass", "(String)", "summary", "df-generated"] + - ["javax.management", "DefaultLoaderRepository", "loadClassWithout", "(ClassLoader,String)", "summary", "df-generated"] + - ["javax.management", "Descriptor", "isValid", "()", "summary", "df-generated"] + - ["javax.management", "Descriptor", "removeField", "(String)", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "invoke", "(String,Object[],String[])", "summary", "df-generated"] + - ["javax.management", "DynamicMBean", "setAttribute", "(Attribute)", "summary", "df-generated"] + - ["javax.management", "JMX", "isMXBeanInterface", "(Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMBeanProxy", "(MBeanServerConnection,ObjectName,Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMBeanProxy", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMXBeanProxy", "(MBeanServerConnection,ObjectName,Class)", "summary", "df-generated"] + - ["javax.management", "JMX", "newMXBeanProxy", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isIs", "()", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isReadable", "()", "summary", "df-generated"] + - ["javax.management", "MBeanAttributeInfo", "isWritable", "()", "summary", "df-generated"] + - ["javax.management", "MBeanOperationInfo", "getImpact", "()", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "postDeregister", "()", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "postRegister", "(Boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanRegistration", "preDeregister", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(ObjectName,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(String,ObjectName,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServer", "deserialize", "(String,byte[])", "summary", "df-generated"] + - ["javax.management", "MBeanServerBuilder", "newMBeanServerDelegate", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "addNotificationListener", "(ObjectName,NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "addNotificationListener", "(ObjectName,ObjectName,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getDefaultDomain", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getDomains", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getMBeanCount", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "getMBeanInfo", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "isInstanceOf", "(ObjectName,String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "isRegistered", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "queryMBeans", "(ObjectName,QueryExp)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "queryNames", "(ObjectName,QueryExp)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,NotificationListener)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "removeNotificationListener", "(ObjectName,ObjectName,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "setAttribute", "(ObjectName,Attribute)", "summary", "df-generated"] + - ["javax.management", "MBeanServerConnection", "unregisterMBean", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegate", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationName", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationVendor", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getImplementationVersion", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationName", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationVendor", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerDelegateMBean", "getSpecificationVersion", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "createMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "findMBeanServer", "(String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "newMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerFactory", "releaseMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", "isMXBean", "()", "summary", "df-generated"] + - ["javax.management", "MBeanServerInvocationHandler", "newProxyInstance", "(MBeanServerConnection,ObjectName,Class,boolean)", "summary", "df-generated"] + - ["javax.management", "MBeanServerPermission", "MBeanServerPermission", "(String)", "summary", "df-generated"] + - ["javax.management", "MBeanServerPermission", "MBeanServerPermission", "(String,String)", "summary", "df-generated"] + - ["javax.management", "Notification", "getSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management", "Notification", "getTimeStamp", "()", "summary", "df-generated"] + - ["javax.management", "Notification", "setSequenceNumber", "(long)", "summary", "df-generated"] + - ["javax.management", "Notification", "setTimeStamp", "(long)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcaster", "addNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcaster", "removeNotificationListener", "(NotificationListener)", "summary", "df-generated"] + - ["javax.management", "NotificationBroadcasterSupport", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "NotificationEmitter", "removeNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management", "NotificationFilter", "isNotificationEnabled", "(Notification)", "summary", "df-generated"] + - ["javax.management", "NotificationFilterSupport", "disableAllTypes", "()", "summary", "df-generated"] + - ["javax.management", "NotificationFilterSupport", "disableType", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isDomainPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyListPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyPattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyValuePattern", "()", "summary", "df-generated"] + - ["javax.management", "ObjectName", "isPropertyValuePattern", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "quote", "(String)", "summary", "df-generated"] + - ["javax.management", "ObjectName", "unquote", "(String)", "summary", "df-generated"] + - ["javax.management", "PersistentMBean", "load", "()", "summary", "df-generated"] + - ["javax.management", "PersistentMBean", "store", "()", "summary", "df-generated"] + - ["javax.management", "Query", "classattr", "()", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(Number)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(boolean)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(double)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(float)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(int)", "summary", "df-generated"] + - ["javax.management", "Query", "value", "(long)", "summary", "df-generated"] + - ["javax.management", "QueryEval", "getMBeanServer", "()", "summary", "df-generated"] + - ["javax.management", "QueryEval", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "QueryExp", "apply", "(ObjectName)", "summary", "df-generated"] + - ["javax.management", "QueryExp", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] + - ["javax.management", "StandardEmitterMBean", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management", "StandardMBean", "getImplementationClass", "()", "summary", "df-generated"] + - ["javax.management", "StandardMBean", "getMBeanInterface", "()", "summary", "df-generated"] + - ["javax.management", "ValueExp", "setMBeanServer", "(MBeanServer)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml b/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml new file mode 100644 index 00000000000..9bf6223b24a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.modelmbean.model.yml @@ -0,0 +1,113 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(DescriptorSupport)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[],Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "DescriptorSupport", "(String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "DescriptorSupport", True, "toXMLString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "InvalidTargetObjectTypeException", True, "InvalidTargetObjectTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBean", True, "setManagedResource", "(Object,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBean", True, "setModelMBeanInfo", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(ModelMBeanAttributeInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,Method,Method,Descriptor)", "", "Argument[this]", "Argument[4]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanAttributeInfo", True, "ModelMBeanAttributeInfo", "(String,String,String,boolean,boolean,boolean,Descriptor)", "", "Argument[this]", "Argument[6]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,Constructor,Descriptor)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanConstructorInfo", True, "ModelMBeanConstructorInfo", "(String,String,MBeanParameterInfo[],Descriptor)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getDescriptor", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getDescriptors", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getMBeanDescriptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getNotification", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "getOperation", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptor", "(Descriptor,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptor", "(Descriptor,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setDescriptors", "(Descriptor[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setMBeanDescriptor", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfo", True, "setMBeanDescriptor", "(Descriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "ModelMBeanInfoSupport", "(String,String,ModelMBeanAttributeInfo[],ModelMBeanConstructorInfo[],ModelMBeanOperationInfo[],ModelMBeanNotificationInfo[],Descriptor)", "", "Argument[this]", "Argument[6]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "getConstructor", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanInfoSupport", True, "getDescriptor", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(ModelMBeanNotificationInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationInfo", True, "ModelMBeanNotificationInfo", "(String[],String,String,Descriptor)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(ModelMBeanOperationInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,Method,Descriptor)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanOperationInfo", True, "ModelMBeanOperationInfo", "(String,String,MBeanParameterInfo[],String,int,Descriptor)", "", "Argument[this]", "Argument[5]", "taint", "df-generated"] + - ["javax.management.modelmbean", "RequiredModelMBean", True, "RequiredModelMBean", "(ModelMBeanInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.modelmbean", "XMLParseException", True, "XMLParseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.modelmbean", "DescriptorSupport", "DescriptorSupport", "(int)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "addAttributeChangeNotificationListener", "(NotificationListener,String,Object)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "removeAttributeChangeNotificationListener", "(NotificationListener,String)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendAttributeChangeNotification", "(Attribute,Attribute)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendAttributeChangeNotification", "(AttributeChangeNotification)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendNotification", "(Notification)", "summary", "df-generated"] + - ["javax.management.modelmbean", "ModelMBeanNotificationBroadcaster", "sendNotification", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.monitor.model.yml b/java/ql/lib/ext/generated/javax.management.monitor.model.yml new file mode 100644 index 00000000000..fecd28f766d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.monitor.model.yml @@ -0,0 +1,68 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.monitor", "Monitor", True, "getDerivedGauge", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "getObservedObjects", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", True, "setObservedAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getDerivedGauge", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getObservedAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getObservedObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorNotification", True, "getTrigger", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "MonitorSettingException", True, "MonitorSettingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getDerivedGauge", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getDerivedGauge", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "getStringToCompare", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", True, "setStringToCompare", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGauge", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getDifferenceMode", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getInitThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getModulus", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getNotify", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getOffset", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "getThreshold", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setDifferenceMode", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setInitThreshold", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setModulus", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setNotify", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setOffset", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "CounterMonitorMBean", "setThreshold", "(Number)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGauge", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getDifferenceMode", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getHighThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getLowThreshold", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getNotifyHigh", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "getNotifyLow", "()", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setDifferenceMode", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setNotifyHigh", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setNotifyLow", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "GaugeMonitorMBean", "setThresholds", "(Number,Number)", "summary", "df-generated"] + - ["javax.management.monitor", "Monitor", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "addObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "containsObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "getGranularityPeriod", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "removeObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "setGranularityPeriod", "(long)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "setObservedObject", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.monitor", "MonitorMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getDerivedGaugeTimeStamp", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getDerivedGaugeTimeStamp", "(ObjectName)", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getNotifyDiffer", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "getNotifyMatch", "()", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "setNotifyDiffer", "(boolean)", "summary", "df-generated"] + - ["javax.management.monitor", "StringMonitorMBean", "setNotifyMatch", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.openmbean.model.yml b/java/ql/lib/ext/generated/javax.management.openmbean.model.yml new file mode 100644 index 00000000000..7ad51e1fb4f --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.openmbean.model.yml @@ -0,0 +1,150 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.openmbean", "ArrayType", True, "ArrayType", "(SimpleType,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "ArrayType", "(int,OpenType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "getArrayType", "(OpenType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "ArrayType", True, "getElementOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "getAll", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "getCompositeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeData", True, "values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataInvocationHandler", True, "CompositeDataInvocationHandler", "(CompositeData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataInvocationHandler", True, "getCompositeData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeDataSupport", True, "CompositeDataSupport", "(CompositeType,String[],Object[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "CompositeType", "(String,String,String[],String[],OpenType[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "getDescription", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "getType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "CompositeType", True, "keySet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "InvalidKeyException", True, "InvalidKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "InvalidOpenTypeException", True, "InvalidOpenTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "KeyAlreadyExistsException", True, "KeyAlreadyExistsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenDataException", True, "OpenDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Comparable,Comparable)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanAttributeInfoSupport", True, "OpenMBeanAttributeInfoSupport", "(String,String,OpenType,boolean,boolean,boolean,Object,Object[])", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanConstructorInfoSupport", True, "OpenMBeanConstructorInfoSupport", "(String,String,OpenMBeanParameterInfo[],Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[4].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanInfoSupport", True, "OpenMBeanInfoSupport", "(String,String,OpenMBeanAttributeInfo[],OpenMBeanConstructorInfo[],OpenMBeanOperationInfo[],MBeanNotificationInfo[],Descriptor)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfo", True, "getReturnOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanOperationInfoSupport", True, "OpenMBeanOperationInfoSupport", "(String,String,OpenMBeanParameterInfo[],OpenType,int,Descriptor)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getDefaultValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getLegalValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getMaxValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getMinValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", True, "getOpenType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Descriptor)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Comparable,Comparable)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfoSupport", True, "OpenMBeanParameterInfoSupport", "(String,String,OpenType,Object,Object[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "OpenType", True, "getTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "get", "(Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "getTabularType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "put", "(CompositeData)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "putAll", "(CompositeData[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularData", True, "remove", "(Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularDataSupport", True, "TabularDataSupport", "(TabularType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularDataSupport", True, "TabularDataSupport", "(TabularType,int,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "TabularType", "(String,String,CompositeType,String[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "getIndexNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.openmbean", "TabularType", True, "getRowType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.openmbean", "ArrayType", "getDimension", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "ArrayType", "getPrimitiveArrayType", "(Class)", "summary", "df-generated"] + - ["javax.management.openmbean", "ArrayType", "isPrimitiveArray", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeData", "containsKey", "(String)", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeData", "containsValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "CompositeType", "containsKey", "(String)", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasDefaultValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasLegalValues", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasMaxValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "hasMinValue", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenMBeanParameterInfo", "isValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenType", "isArray", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "OpenType", "isValue", "(Object)", "summary", "df-generated"] + - ["javax.management.openmbean", "SimpleType", "readResolve", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "calculateIndex", "(CompositeData)", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "clear", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "containsKey", "(Object[])", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "containsValue", "(CompositeData)", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "isEmpty", "()", "summary", "df-generated"] + - ["javax.management.openmbean", "TabularData", "size", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.relation.model.yml b/java/ql/lib/ext/generated/javax.management.relation.model.yml new file mode 100644 index 00000000000..86b04e58252 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.relation.model.yml @@ -0,0 +1,171 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.relation", "InvalidRelationIdException", True, "InvalidRelationIdException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRelationServiceException", True, "InvalidRelationServiceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRelationTypeException", True, "InvalidRelationTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRoleInfoException", True, "InvalidRoleInfoException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "InvalidRoleValueException", True, "InvalidRoleValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "disableObjectName", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "enableObjectName", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "getDisabledObjectNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", True, "getEnabledObjectNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getReferencedMBeans", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationServiceName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "getRole", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "handleMBeanUnregistration", "(ObjectName,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "retrieveAllRoles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "setRole", "(Role)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Relation", True, "setRoles", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationException", True, "RelationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotFoundException", True, "RelationNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,List)", "", "Argument[8].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[10].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[8]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "RelationNotification", "(String,Object,long,long,String,String,String,ObjectName,String,List,List)", "", "Argument[9].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getMBeansToUnregister", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getNewRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getOldRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationNotification", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "addRelation", "(ObjectName)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "addRelationType", "(RelationType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelation", "(String,String,RoleList)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "createRelationType", "(String,RoleInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findReferencingRelations", "(ObjectName,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findReferencingRelations", "(ObjectName,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "findRelationsOfType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getAllRelationIds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getAllRelationTypeNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRelationTypeName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRoleInfo", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "getRoleInfos", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "isRelation", "(ObjectName)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "isRelationMBean", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "setRole", "(String,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "setRoles", "(String,RoleList)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", True, "updateRoleMap", "(String,Role,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationServiceNotRegisteredException", True, "RelationServiceNotRegisteredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,MBeanServer,String,RoleList)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationSupport", True, "RelationSupport", "(String,ObjectName,String,RoleList)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRelationTypeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRoleInfo", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationType", True, "getRoleInfos", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeNotFoundException", True, "RelationTypeNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeSupport", True, "RelationTypeSupport", "(String,RoleInfo[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RelationTypeSupport", True, "RelationTypeSupport", "(String,RoleInfo[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "Role", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "Role", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "getRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "roleValueToString", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "setRoleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "Role", True, "setRoleValue", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(RoleInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "RoleInfo", "(String,String,boolean,boolean,int,int,String)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfo", True, "getRefMBeanClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleInfoNotFoundException", True, "RoleInfoNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "RoleList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "add", "(Role)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "add", "(int,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "addAll", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleList", True, "set", "(int,Role)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleNotFoundException", True, "RoleNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "RoleResult", "(RoleList,RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "RoleResult", "(RoleList,RoleUnresolvedList)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "getRoles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "getRolesUnresolved", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "setRoles", "(RoleList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleResult", True, "setRolesUnresolved", "(RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "RoleUnresolved", "(String,List,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "RoleUnresolved", "(String,List,int)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "getRoleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "getRoleValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "setRoleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", True, "setRoleValue", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "RoleUnresolvedList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "add", "(RoleUnresolved)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "add", "(int,RoleUnresolved)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "addAll", "(RoleUnresolvedList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "asList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", True, "set", "(int,RoleUnresolved)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.relation", "MBeanServerNotificationFilter", "disableAllObjectNames", "()", "summary", "df-generated"] + - ["javax.management.relation", "MBeanServerNotificationFilter", "enableAllObjectNames", "()", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getAllRoles", "()", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getRoleCardinality", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "Relation", "getRoles", "(String[])", "summary", "df-generated"] + - ["javax.management.relation", "RelationService", "RelationService", "(boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "checkRoleReading", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "checkRoleWriting", "(Role,String,Boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "findAssociatedMBeans", "(ObjectName,String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getAllRoles", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getPurgeFlag", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getReferencedMBeans", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRole", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRoleCardinality", "(String,String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "getRoles", "(String,String[])", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "hasRelation", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "purgeRelations", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "removeRelation", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "removeRelationType", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRelationCreationNotification", "(String)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRelationRemovalNotification", "(String,List)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "sendRoleUpdateNotification", "(String,Role,List)", "summary", "df-generated"] + - ["javax.management.relation", "RelationServiceMBean", "setPurgeFlag", "(boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RelationSupportMBean", "isInRelationService", "()", "summary", "df-generated"] + - ["javax.management.relation", "RelationSupportMBean", "setRelationServiceManagementFlag", "(Boolean)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "checkMaxDegree", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "checkMinDegree", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "getMaxDegree", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "getMinDegree", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "isReadable", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleInfo", "isWritable", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleList", "RoleList", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleList", "addAll", "(int,RoleList)", "summary", "df-generated"] + - ["javax.management.relation", "RoleStatus", "isRoleStatus", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", "getProblemType", "()", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolved", "setProblemType", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", "RoleUnresolvedList", "(int)", "summary", "df-generated"] + - ["javax.management.relation", "RoleUnresolvedList", "addAll", "(int,RoleUnresolvedList)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.remote.model.yml b/java/ql/lib/ext/generated/javax.management.remote.model.yml new file mode 100644 index 00000000000..e06da36da21 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.remote.model.yml @@ -0,0 +1,72 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.remote", "JMXAddressable", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "JMXConnectionNotification", "(String,Object,String,long,String,Object)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectionNotification", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "connect", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnector", True, "getMBeanServerConnection", "(Subject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "connect", "(JMXServiceURL,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "newJMXConnector", "(JMXServiceURL,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorFactory", True, "newJMXConnector", "(JMXServiceURL,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServer", True, "JMXConnectorServer", "(MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServer", True, "getMBeanServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerFactory", True, "newJMXConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "getConnectionIds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "setMBeanServerForwarder", "(MBeanServerForwarder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "setMBeanServerForwarder", "(MBeanServerForwarder)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "toJMXConnector", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", True, "toJMXConnector", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXPrincipal", True, "JMXPrincipal", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXProviderException", True, "JMXProviderException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServerErrorException", True, "JMXServerErrorException", "(String,Error)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServerErrorException", True, "JMXServerErrorException", "(String,Error)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "JMXServiceURL", "(String,String,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", True, "getURLPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "NotificationResult", True, "NotificationResult", "(long,long,TargetedNotification[])", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "NotificationResult", True, "getTargetedNotifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote", "SubjectDelegationPermission", False, "SubjectDelegationPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "SubjectDelegationPermission", False, "SubjectDelegationPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "TargetedNotification", True, "TargetedNotification", "(Notification,Integer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote", "TargetedNotification", True, "getNotification", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.remote", "JMXConnector", "addConnectionNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "connect", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "removeConnectionNotificationListener", "(NotificationListener)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnector", "removeConnectionNotificationListener", "(NotificationListener,NotificationFilter,Object)", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXConnectorServerMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.remote", "JMXServiceURL", "getPort", "()", "summary", "df-generated"] + - ["javax.management.remote", "NotificationResult", "getEarliestSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management.remote", "NotificationResult", "getNextSequenceNumber", "()", "summary", "df-generated"] + - ["javax.management.remote", "TargetedNotification", "getListenerID", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml b/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml new file mode 100644 index 00000000000..2189861fca8 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.remote.rmi.model.yml @@ -0,0 +1,84 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,MarshalledObject,String[],Subject)", "", "Argument[4].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,ObjectName,Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "createMBean", "(String,ObjectName,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttribute", "(ObjectName,String,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttribute", "(ObjectName,String,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttributes", "(ObjectName,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getAttributes", "(ObjectName,String[],Subject)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getConnectionId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "getObjectInstance", "(ObjectName,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "invoke", "(ObjectName,String,MarshalledObject,String[],Subject)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "setAttributes", "(ObjectName,MarshalledObject,Subject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", True, "setAttributes", "(ObjectName,MarshalledObject,Subject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl", True, "RMIConnectionImpl", "(RMIServerImpl,String,ClassLoader,Subject,Map)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectionImpl_Stub", False, "RMIConnectionImpl_Stub", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(JMXServiceURL,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(JMXServiceURL,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(RMIServer,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnector", True, "RMIConnector", "(RMIServer,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,MBeanServer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnectorServer", True, "RMIConnectorServer", "(JMXServiceURL,Map,RMIServerImpl,MBeanServer)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIIIOPServerImpl", True, "RMIIIOPServerImpl", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIJRMPServerImpl", True, "RMIJRMPServerImpl", "(int,RMIClientSocketFactory,RMIServerSocketFactory,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServer", True, "newClient", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "RMIServerImpl", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "getDefaultClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "getMBeanServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "setDefaultClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "setMBeanServer", "(MBeanServer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl", True, "toStub", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.remote.rmi", "RMIServerImpl_Stub", False, "RMIServerImpl_Stub", "(RemoteRef)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.remote.rmi", "RMIConnection", "addNotificationListener", "(ObjectName,ObjectName,MarshalledObject,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "addNotificationListeners", "(ObjectName[],MarshalledObject[],Subject[])", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "fetchNotifications", "(long,int,long)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getDefaultDomain", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getDomains", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getMBeanCount", "(Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "getMBeanInfo", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "isInstanceOf", "(ObjectName,String,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "isRegistered", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "queryMBeans", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "queryNames", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListener", "(ObjectName,ObjectName,MarshalledObject,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListener", "(ObjectName,ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "removeNotificationListeners", "(ObjectName,Integer[],Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "setAttribute", "(ObjectName,MarshalledObject,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIConnection", "unregisterMBean", "(ObjectName,Subject)", "summary", "df-generated"] + - ["javax.management.remote.rmi", "RMIServer", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.management.timer.model.yml b/java/ql/lib/ext/generated/javax.management.timer.model.yml new file mode 100644 index 00000000000..2dd312e78fc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.management.timer.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.management.timer", "TimerMBean", True, "getNotificationMessage", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerMBean", True, "getNotificationType", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerMBean", True, "getNotificationUserData", "(Integer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.management.timer", "TimerNotification", True, "TimerNotification", "(String,Object,long,long,String,Integer)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long,long)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "addNotification", "(String,String,Object,Date,long,long,boolean)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getAllNotificationIDs", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getDate", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getFixedRate", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNbNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNbOccurences", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getNotificationIDs", "(String)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getPeriod", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "getSendPastNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "isActive", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "isEmpty", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeAllNotifications", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeNotification", "(Integer)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "removeNotifications", "(String)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "setSendPastNotifications", "(boolean)", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "start", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerMBean", "stop", "()", "summary", "df-generated"] + - ["javax.management.timer", "TimerNotification", "getNotificationID", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.directory.model.yml b/java/ql/lib/ext/generated/javax.naming.directory.model.yml new file mode 100644 index 00000000000..21cc4851eef --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.directory.model.yml @@ -0,0 +1,137 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.directory", "Attribute", True, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "add", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "set", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attribute", True, "set", "(int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeInUseException", True, "AttributeInUseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "AttributeModificationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "getUnexecutedModifications", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "AttributeModificationException", True, "setUnexecutedModifications", "(ModificationItem[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(Attribute)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "put", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "Attributes", True, "remove", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttribute", True, "BasicAttribute", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", True, "BasicAttributes", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", True, "BasicAttributes", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "createSubcontext", "(Name,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "createSubcontext", "(String,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(Name,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getAttributes", "(String,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchema", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchema", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchemaClassDefinition", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "getSchemaClassDefinition", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,Attributes,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,Object[],SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(Name,String,SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,Attributes,String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,Object[],SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "DirContext", True, "search", "(String,String,SearchControls)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "InitialDirContext", True, "InitialDirContext", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributeIdentifierException", True, "InvalidAttributeIdentifierException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributeValueException", True, "InvalidAttributeValueException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidAttributesException", True, "InvalidAttributesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidSearchControlsException", True, "InvalidSearchControlsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "InvalidSearchFilterException", True, "InvalidSearchFilterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "ModificationItem", True, "ModificationItem", "(int,Attribute)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "ModificationItem", True, "getAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "NoSuchAttributeException", True, "NoSuchAttributeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SchemaViolationException", True, "SchemaViolationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "SearchControls", "(int,long,int,String[],boolean,boolean)", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "getReturningAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "SearchControls", True, "setReturningAttributes", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,Object,Attributes,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "SearchResult", "(String,String,Object,Attributes,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.directory", "SearchResult", True, "setAttributes", "(Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.directory", "Attribute", "clear", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "contains", "(Object)", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAll", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAttributeDefinition", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "getAttributeSyntaxDefinition", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "isOrdered", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "remove", "(Object)", "summary", "df-generated"] + - ["javax.naming.directory", "Attribute", "size", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "getAll", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "getIDs", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "isCaseIgnored", "()", "summary", "df-generated"] + - ["javax.naming.directory", "Attributes", "size", "()", "summary", "df-generated"] + - ["javax.naming.directory", "BasicAttributes", "BasicAttributes", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "bind", "(Name,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "bind", "(String,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(Name,ModificationItem[])", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(Name,int,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(String,ModificationItem[])", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "modifyAttributes", "(String,int,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "rebind", "(Name,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "DirContext", "rebind", "(String,Object,Attributes)", "summary", "df-generated"] + - ["javax.naming.directory", "ModificationItem", "getModificationOp", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getCountLimit", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getDerefLinkFlag", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getReturningObjFlag", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getSearchScope", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "getTimeLimit", "()", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setCountLimit", "(long)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setDerefLinkFlag", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setReturningObjFlag", "(boolean)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setSearchScope", "(int)", "summary", "df-generated"] + - ["javax.naming.directory", "SearchControls", "setTimeLimit", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.event.model.yml b/java/ql/lib/ext/generated/javax.naming.event.model.yml new file mode 100644 index 00000000000..2dae0e7370f --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.event.model.yml @@ -0,0 +1,25 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "NamingEvent", "(EventContext,int,Binding,Binding,Object)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getChangeInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getEventContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getNewBinding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingEvent", True, "getOldBinding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "NamingExceptionEvent", "(EventContext,NamingException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "NamingExceptionEvent", "(EventContext,NamingException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "getEventContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.event", "NamingEvent", "dispatch", "(NamingListener)", "summary", "df-generated"] + - ["javax.naming.event", "NamingEvent", "getType", "()", "summary", "df-generated"] + - ["javax.naming.event", "NamingExceptionEvent", "dispatch", "(NamingListener)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.ldap.model.yml b/java/ql/lib/ext/generated/javax.naming.ldap.model.yml new file mode 100644 index 00000000000..8597d37da7c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.ldap.model.yml @@ -0,0 +1,91 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "BasicControl", True, "BasicControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "Control", True, "getEncodedValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Control", True, "getID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "ControlFactory", True, "getControlInstance", "(Control,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "InitialLdapContext", True, "InitialLdapContext", "(Hashtable,Control[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "InitialLdapContext", True, "InitialLdapContext", "(Hashtable,Control[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getConnectControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getRequestControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "getResponseControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "newInstance", "(Control[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "newInstance", "(Control[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "reconnect", "(Control[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapContext", True, "setRequestControls", "(Control[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "LdapName", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "LdapName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(Rdn)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(int,Rdn)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "add", "(int,Rdn)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(int,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "addAll", "(int,List)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "getRdn", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "LdapName", True, "getRdns", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "PagedResultsResponseControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "PagedResultsResponseControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", False, "getCookie", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "Rdn", "(Rdn)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "Rdn", True, "toAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "SortKey", "(String,boolean,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "getAttributeID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortKey", True, "getMatchingRuleID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "SortResponseControl", "(String,boolean,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "SortResponseControl", "(String,boolean,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", False, "getAttributeID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "UnsolicitedNotificationEvent", "(Object,UnsolicitedNotification)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "UnsolicitedNotificationEvent", "(Object,UnsolicitedNotification)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", True, "getNotification", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.ldap", "Control", "isCritical", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ControlFactory", "getControlInstance", "(Control)", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "createExtendedResponse", "(String,byte[],int,int)", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "getEncodedValue", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedRequest", "getID", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedResponse", "getEncodedValue", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "ExtendedResponse", "getID", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapContext", "extendedOperation", "(ExtendedRequest)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapName", "endsWith", "(List)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapName", "startsWith", "(List)", "summary", "df-generated"] + - ["javax.naming.ldap", "LdapReferralException", "getReferralContext", "(Hashtable,Control[])", "summary", "df-generated"] + - ["javax.naming.ldap", "ManageReferralControl", "ManageReferralControl", "(boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsControl", "PagedResultsControl", "(int,boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsControl", "PagedResultsControl", "(int,byte[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "PagedResultsResponseControl", "getResultSize", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(Attributes)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(String)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "Rdn", "(String,Object)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "escapeValue", "(Object)", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "size", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "Rdn", "unescapeValue", "(String)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(SortKey[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(String,boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortControl", "SortControl", "(String[],boolean)", "summary", "df-generated"] + - ["javax.naming.ldap", "SortKey", "isAscending", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "getException", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "getResultCode", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "SortResponseControl", "isSorted", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "close", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "negotiate", "()", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "negotiate", "(SSLSocketFactory)", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.naming.ldap", "StartTlsResponse", "setHostnameVerifier", "(HostnameVerifier)", "summary", "df-generated"] + - ["javax.naming.ldap", "UnsolicitedNotificationEvent", "dispatch", "(UnsolicitedNotificationListener)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml b/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml new file mode 100644 index 00000000000..ed57b597119 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.ldap.spi.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "LdapDnsProviderResult", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "LdapDnsProviderResult", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "getDomainName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.ldap.spi", "LdapDnsProviderResult", False, "getEndpoints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.ldap.spi", "LdapDnsProvider", "lookupEndpoints", "(String,Map)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.model.yml b/java/ql/lib/ext/generated/javax.naming.model.yml new file mode 100644 index 00000000000..86321736e88 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.model.yml @@ -0,0 +1,177 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming", "AuthenticationException", True, "AuthenticationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "AuthenticationNotSupportedException", True, "AuthenticationNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "BinaryRefAddr", True, "BinaryRefAddr", "(String,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "Binding", "(String,String,Object,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Binding", True, "setObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "CannotProceedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getAltName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getAltNameCtx", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "getRemainingNewName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setAltName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setAltNameCtx", "(Context)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setEnvironment", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CannotProceedException", True, "setRemainingNewName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CommunicationException", True, "CommunicationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "CompoundName", True, "CompoundName", "(String,Properties)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "ConfigurationException", True, "ConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "addToEnvironment", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(Name,Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(Name,Name)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "composeName", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "createSubcontext", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "createSubcontext", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameInNamespace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameParser", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "getNameParser", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "list", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(Name)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "listBindings", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookup", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookup", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookupLink", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "lookupLink", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Context", True, "removeFromEnvironment", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "ContextNotEmptyException", True, "ContextNotEmptyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InitialContext", True, "InitialContext", "(Hashtable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InsufficientResourcesException", True, "InsufficientResourcesException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InterruptedNamingException", True, "InterruptedNamingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "InvalidNameException", True, "InvalidNameException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LimitExceededException", True, "LimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "LinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkExplanation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkResolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "getLinkResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkExplanation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkResolvedName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkException", True, "setLinkResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkLoopException", True, "LinkLoopException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "LinkRef", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "LinkRef", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "LinkRef", True, "getLinkName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "MalformedLinkException", True, "MalformedLinkException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Name", True, "add", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "add", "(int,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(Name)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(Name)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "addAll", "(int,Name)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.naming", "Name", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getPrefix", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "getSuffix", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Name", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameAlreadyBoundException", True, "NameAlreadyBoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "NameClassPair", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "getNameInNamespace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setClassName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameClassPair", True, "setNameInNamespace", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NameNotFoundException", True, "NameNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "NamingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "appendRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getExplanation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getResolvedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "getRootCause", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setResolvedName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingException", True, "setRootCause", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NamingSecurityException", True, "NamingSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NoInitialContextException", True, "NoInitialContextException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NoPermissionException", True, "NoPermissionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "NotContextException", True, "NotContextException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "OperationNotSupportedException", True, "OperationNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "PartialResultException", True, "PartialResultException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "RefAddr", True, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "RefAddr", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,RefAddr,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "Reference", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "add", "(RefAddr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "add", "(int,RefAddr)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getAll", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getFactoryClassLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "getFactoryClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "Reference", True, "remove", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming", "ServiceUnavailableException", True, "ServiceUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "SizeLimitExceededException", True, "SizeLimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming", "TimeLimitExceededException", True, "TimeLimitExceededException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming", "CompositeName", "CompositeName", "(String)", "summary", "df-generated"] + - ["javax.naming", "Context", "bind", "(Name,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "bind", "(String,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "close", "()", "summary", "df-generated"] + - ["javax.naming", "Context", "destroySubcontext", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "destroySubcontext", "(String)", "summary", "df-generated"] + - ["javax.naming", "Context", "rebind", "(Name,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "rebind", "(String,Object)", "summary", "df-generated"] + - ["javax.naming", "Context", "rename", "(Name,Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "rename", "(String,String)", "summary", "df-generated"] + - ["javax.naming", "Context", "unbind", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Context", "unbind", "(String)", "summary", "df-generated"] + - ["javax.naming", "InitialContext", "doLookup", "(Name)", "summary", "df-generated"] + - ["javax.naming", "InitialContext", "doLookup", "(String)", "summary", "df-generated"] + - ["javax.naming", "Name", "endsWith", "(Name)", "summary", "df-generated"] + - ["javax.naming", "Name", "isEmpty", "()", "summary", "df-generated"] + - ["javax.naming", "Name", "size", "()", "summary", "df-generated"] + - ["javax.naming", "Name", "startsWith", "(Name)", "summary", "df-generated"] + - ["javax.naming", "NameClassPair", "isRelative", "()", "summary", "df-generated"] + - ["javax.naming", "NameClassPair", "setRelative", "(boolean)", "summary", "df-generated"] + - ["javax.naming", "NamingException", "appendRemainingComponent", "(String)", "summary", "df-generated"] + - ["javax.naming", "Reference", "clear", "()", "summary", "df-generated"] + - ["javax.naming", "Reference", "size", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralContext", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralContext", "(Hashtable)", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "getReferralInfo", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "retryReferral", "()", "summary", "df-generated"] + - ["javax.naming", "ReferralException", "skipReferral", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.naming.spi.model.yml b/java/ql/lib/ext/generated/javax.naming.spi.model.yml new file mode 100644 index 00000000000..5f36e7d0e73 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.naming.spi.model.yml @@ -0,0 +1,40 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.naming.spi", "DirStateFactory$Result", True, "Result", "(Object,Attributes)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "Result", "(Object,Attributes)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirStateFactory$Result", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getContinuationDirContext", "(CannotProceedException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getStateToBind", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "DirectoryManager", True, "getStateToBind", "(Object,Name,Context,Hashtable,Attributes)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getContinuationContext", "(CannotProceedException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getInitialContext", "(Hashtable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getObjectInstance", "(Object,Name,Context,Hashtable)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getStateToBind", "(Object,Name,Context,Hashtable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "NamingManager", True, "getURLContext", "(String,Hashtable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,Name)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "ResolveResult", "(Object,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "appendRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "getRemainingName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "getResolvedObj", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "setRemainingName", "(Name)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "ResolveResult", True, "setResolvedObj", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(Name,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(Name,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.naming.spi", "Resolver", True, "resolveToClass", "(String,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.naming.spi", "NamingManager", "hasInitialContextFactoryBuilder", "()", "summary", "df-generated"] + - ["javax.naming.spi", "NamingManager", "setInitialContextFactoryBuilder", "(InitialContextFactoryBuilder)", "summary", "df-generated"] + - ["javax.naming.spi", "NamingManager", "setObjectFactoryBuilder", "(ObjectFactoryBuilder)", "summary", "df-generated"] + - ["javax.naming.spi", "ResolveResult", "appendRemainingComponent", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.net.model.yml b/java/ql/lib/ext/generated/javax.net.model.yml new file mode 100644 index 00000000000..2990ef69c06 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.net.model.yml @@ -0,0 +1,22 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.net", "ServerSocketFactory", True, "createServerSocket", "(int,int,InetAddress)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(InetAddress,int,InetAddress,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int,InetAddress,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net", "SocketFactory", True, "createSocket", "(String,int,InetAddress,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.net", "ServerSocketFactory", "createServerSocket", "()", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "createServerSocket", "(int)", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "createServerSocket", "(int,int)", "summary", "df-generated"] + - ["javax.net", "ServerSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "createSocket", "()", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "createSocket", "(InetAddress,int)", "summary", "df-generated"] + - ["javax.net", "SocketFactory", "getDefault", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.net.ssl.model.yml b/java/ql/lib/ext/generated/javax.net.ssl.model.yml new file mode 100644 index 00000000000..194be2c2008 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.net.ssl.model.yml @@ -0,0 +1,233 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.net.ssl", "CertPathTrustManagerParameters", True, "CertPathTrustManagerParameters", "(CertPathParameters)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "CertPathTrustManagerParameters", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "HandshakeCompletedEvent", "(SSLSocket,SSLSession)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "HandshakeCompletedEvent", "(SSLSocket,SSLSession)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getLocalCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getPeerCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getSession", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", True, "getSocket", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "getHostnameVerifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "getSSLSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "setHostnameVerifier", "(HostnameVerifier)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", True, "setSSLSocketFactory", "(SSLSocketFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getKeyManagers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "KeyStoreBuilderParameters", "(KeyStore$Builder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "KeyStoreBuilderParameters", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "KeyStoreBuilderParameters", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "SNIHostName", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "createSNIMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIHostName", False, "getAsciiName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SNIServerName", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "createSSLEngine", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getClientSessionContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getServerSessionContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getServerSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "getSocketFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLContext", True, "init", "(KeyManager[],TrustManager[],SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLEngine", True, "getPeerHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLException", True, "SSLException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLHandshakeException", True, "SSLHandshakeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLKeyException", True, "SSLKeyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[],String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "SSLParameters", "(String[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getAlgorithmConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getApplicationProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getCipherSuites", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getEndpointIdentificationAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getSNIMatchers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "getServerNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setAlgorithmConstraints", "(AlgorithmConstraints)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setApplicationProtocols", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setCipherSuites", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setEndpointIdentificationAlgorithm", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setProtocols", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setSNIMatchers", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLParameters", True, "setServerNames", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPeerUnverifiedException", True, "SSLPeerUnverifiedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPermission", False, "SSLPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLPermission", False, "SSLPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLProtocolException", True, "SSLProtocolException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "SSLSessionBindingEvent", "(SSLSession,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "SSLSessionBindingEvent", "(SSLSession,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "SSLSessionBindingEvent", True, "getSession", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", True, "getTrustManagers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.net.ssl", "ExtendedSSLSession", "getLocalSupportedSignatureAlgorithms", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getPeerSupportedSignatureAlgorithms", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getRequestedServerNames", "()", "summary", "df-generated"] + - ["javax.net.ssl", "ExtendedSSLSession", "getStatusResponses", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getCipherSuite", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getPeerCertificateChain", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HandshakeCompletedEvent", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HostnameVerifier", "verify", "(String,SSLSession)", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getCipherSuite", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getDefaultHostnameVerifier", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getDefaultSSLSocketFactory", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getLocalCertificates", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getLocalPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getPeerPrincipal", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getSSLSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "getServerCertificates", "()", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "setDefaultHostnameVerifier", "(HostnameVerifier)", "summary", "df-generated"] + - ["javax.net.ssl", "HttpsURLConnection", "setDefaultSSLSocketFactory", "(SSLSocketFactory)", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "getDefaultAlgorithm", "()", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "init", "(KeyStore,char[])", "summary", "df-generated"] + - ["javax.net.ssl", "KeyManagerFactory", "init", "(ManagerFactoryParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIHostName", "SNIHostName", "(String)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIMatcher", "getType", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SNIMatcher", "matches", "(SNIServerName)", "summary", "df-generated"] + - ["javax.net.ssl", "SNIServerName", "getType", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getDefaultSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "getSupportedSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLContext", "setDefault", "(SSLContext)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "beginHandshake", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "closeInbound", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "closeOutbound", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getDelegatedTask", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeApplicationProtocolSelector", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getHandshakeStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getPeerPort", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "isInboundDone", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "isOutboundDone", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setHandshakeApplicationProtocolSelector", "(BiFunction)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "unwrap", "(ByteBuffer,ByteBuffer[],int,int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer[],ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngine", "wrap", "(ByteBuffer[],int,int,ByteBuffer)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "SSLEngineResult", "(SSLEngineResult$Status,SSLEngineResult$HandshakeStatus,int,int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "SSLEngineResult", "(SSLEngineResult$Status,SSLEngineResult$HandshakeStatus,int,int,long)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "bytesConsumed", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "bytesProduced", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "getHandshakeStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "getStatus", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLEngineResult", "sequenceNumber", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getEnableRetransmissions", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getMaximumPacketSize", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getUseCipherSuitesOrder", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setEnableRetransmissions", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setMaximumPacketSize", "(int)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setUseCipherSuitesOrder", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLParameters", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocket", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getDefaultCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLServerSocketFactory", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSession", "getPeerCertificateChain", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "addHandshakeCompletedListener", "(HandshakeCompletedListener)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnableSessionCreation", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnabledCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getEnabledProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeApplicationProtocol", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeApplicationProtocolSelector", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getHandshakeSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getNeedClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSSLParameters", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSession", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getSupportedProtocols", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getUseClientMode", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "getWantClientAuth", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "removeHandshakeCompletedListener", "(HandshakeCompletedListener)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnableSessionCreation", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnabledCipherSuites", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setEnabledProtocols", "(String[])", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setHandshakeApplicationProtocolSelector", "(BiFunction)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setNeedClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setSSLParameters", "(SSLParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setUseClientMode", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "setWantClientAuth", "(boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocket", "startHandshake", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "createSocket", "(Socket,InputStream,boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "createSocket", "(Socket,String,int,boolean)", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getDefaultCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "SSLSocketFactory", "getSupportedCipherSuites", "()", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "getDefaultAlgorithm", "()", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "init", "(KeyStore)", "summary", "df-generated"] + - ["javax.net.ssl", "TrustManagerFactory", "init", "(ManagerFactoryParameters)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedKeyManager", "chooseEngineClientAlias", "(String[],Principal[],SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedKeyManager", "chooseEngineServerAlias", "(String,Principal[],SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkClientTrusted", "(X509Certificate[],String,SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkClientTrusted", "(X509Certificate[],String,Socket)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkServerTrusted", "(X509Certificate[],String,SSLEngine)", "summary", "df-generated"] + - ["javax.net.ssl", "X509ExtendedTrustManager", "checkServerTrusted", "(X509Certificate[],String,Socket)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.attribute.model.yml b/java/ql/lib/ext/generated/javax.print.attribute.model.yml new file mode 100644 index 00000000000..08866afd480 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.attribute.model.yml @@ -0,0 +1,70 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.attribute", "AttributeSet", True, "add", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSet", True, "get", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSet", True, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(AttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(DocAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintJobAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintRequestAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "synchronizedView", "(PrintServiceAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(AttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(DocAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintJobAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintRequestAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "unmodifiableView", "(PrintServiceAttributeSet)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", False, "verifyAttributeValue", "(Object,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", True, "HashAttributeSet", "(Attribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", True, "HashAttributeSet", "(Attribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", True, "HashDocAttributeSet", "(DocAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", True, "HashDocAttributeSet", "(DocAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", True, "HashPrintJobAttributeSet", "(PrintJobAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", True, "HashPrintJobAttributeSet", "(PrintJobAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", True, "HashPrintRequestAttributeSet", "(PrintRequestAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", True, "HashPrintRequestAttributeSet", "(PrintRequestAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", True, "HashPrintServiceAttributeSet", "(PrintServiceAttribute)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", True, "HashPrintServiceAttributeSet", "(PrintServiceAttribute[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute", "TextSyntax", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "TextSyntax", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "URISyntax", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute", "UnmodifiableSetException", True, "UnmodifiableSetException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.attribute", "Attribute", "getCategory", "()", "summary", "df-generated"] + - ["javax.print.attribute", "Attribute", "getName", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "addAll", "(AttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "clear", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "containsKey", "(Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "containsValue", "(Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "isEmpty", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "remove", "(Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "remove", "(Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSet", "size", "()", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", "verifyAttributeCategory", "(Object,Class)", "summary", "df-generated"] + - ["javax.print.attribute", "AttributeSetUtilities", "verifyCategoryForValue", "(Class,Attribute)", "summary", "df-generated"] + - ["javax.print.attribute", "DateTimeSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "EnumSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "HashAttributeSet", "HashAttributeSet", "(AttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashDocAttributeSet", "HashDocAttributeSet", "(DocAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintJobAttributeSet", "HashPrintJobAttributeSet", "(PrintJobAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintRequestAttributeSet", "HashPrintRequestAttributeSet", "(PrintRequestAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "HashPrintServiceAttributeSet", "HashPrintServiceAttributeSet", "(PrintServiceAttributeSet)", "summary", "df-generated"] + - ["javax.print.attribute", "IntegerSyntax", "getValue", "()", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "ResolutionSyntax", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getCrossFeedResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getFeedResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "getResolution", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "ResolutionSyntax", "lessThanOrEquals", "(ResolutionSyntax)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "contains", "(IntegerSyntax)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "contains", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "getMembers", "()", "summary", "df-generated"] + - ["javax.print.attribute", "SetOfIntegerSyntax", "next", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getSize", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getX", "(int)", "summary", "df-generated"] + - ["javax.print.attribute", "Size2DSyntax", "getY", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml b/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml new file mode 100644 index 00000000000..362cdbb4c1e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.attribute.standard.model.yml @@ -0,0 +1,92 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.attribute.standard", "DateTimeAtCompleted", False, "DateTimeAtCompleted", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DateTimeAtCreation", False, "DateTimeAtCreation", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DateTimeAtProcessing", False, "DateTimeAtProcessing", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "Destination", False, "Destination", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DialogOwner", False, "DialogOwner", "(Window)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DialogOwner", False, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DocumentName", False, "DocumentName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "DocumentName", False, "DocumentName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobHoldUntil", False, "JobHoldUntil", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobMessageFromOperator", False, "JobMessageFromOperator", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobMessageFromOperator", False, "JobMessageFromOperator", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobName", False, "JobName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobName", False, "JobName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobOriginatingUserName", False, "JobOriginatingUserName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobOriginatingUserName", False, "JobOriginatingUserName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", False, "JobStateReasons", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "MediaSize", "(float,float,int,MediaSizeName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "MediaSize", "(int,int,int,MediaSizeName)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", True, "getMediaSizeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "OutputDeviceAssigned", False, "OutputDeviceAssigned", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "OutputDeviceAssigned", False, "OutputDeviceAssigned", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterInfo", False, "PrinterInfo", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterInfo", False, "PrinterInfo", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterLocation", False, "PrinterLocation", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterLocation", False, "PrinterLocation", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMakeAndModel", False, "PrinterMakeAndModel", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMakeAndModel", False, "PrinterMakeAndModel", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMessageFromOperator", False, "PrinterMessageFromOperator", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMessageFromOperator", False, "PrinterMessageFromOperator", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMoreInfo", False, "PrinterMoreInfo", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterMoreInfoManufacturer", False, "PrinterMoreInfoManufacturer", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterName", False, "PrinterName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterName", False, "PrinterName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "PrinterStateReasons", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "printerStateReasonSet", "(Severity)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", False, "printerStateReasonSet", "(Severity)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.attribute.standard", "PrinterURI", False, "PrinterURI", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "RequestingUserName", False, "RequestingUserName", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.attribute.standard", "RequestingUserName", False, "RequestingUserName", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.attribute.standard", "Copies", "Copies", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "CopiesSupported", "CopiesSupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "CopiesSupported", "CopiesSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressions", "JobImpressions", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressionsCompleted", "JobImpressionsCompleted", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobImpressionsSupported", "JobImpressionsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctets", "JobKOctets", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctetsProcessed", "JobKOctetsProcessed", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobKOctetsSupported", "JobKOctetsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheets", "JobMediaSheets", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheetsCompleted", "JobMediaSheetsCompleted", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobMediaSheetsSupported", "JobMediaSheetsSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobPriority", "JobPriority", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobPrioritySupported", "JobPrioritySupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", "JobStateReasons", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "JobStateReasons", "JobStateReasons", "(int,float)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "MediaPrintableArea", "(float,float,float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "MediaPrintableArea", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getHeight", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getPrintableArea", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getWidth", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getX", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaPrintableArea", "getY", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "MediaSize", "(float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "MediaSize", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "findMedia", "(float,float,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "MediaSize", "getMediaSizeForName", "(MediaSizeName)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberOfDocuments", "NumberOfDocuments", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberOfInterveningJobs", "NumberOfInterveningJobs", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUp", "NumberUp", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "NumberUpSupported", "NumberUpSupported", "(int[][])", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(String)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PageRanges", "PageRanges", "(int[][])", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PagesPerMinute", "PagesPerMinute", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PagesPerMinuteColor", "PagesPerMinuteColor", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterResolution", "PrinterResolution", "(int,int,int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", "PrinterStateReasons", "(int)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "PrinterStateReasons", "PrinterStateReasons", "(int,float)", "summary", "df-generated"] + - ["javax.print.attribute.standard", "QueuedJobCount", "QueuedJobCount", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.event.model.yml b/java/ql/lib/ext/generated/javax.print.event.model.yml new file mode 100644 index 00000000000..91b146ba8b0 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.event.model.yml @@ -0,0 +1,28 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print.event", "PrintEvent", True, "PrintEvent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "PrintJobAttributeEvent", "(DocPrintJob,PrintJobAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "PrintJobAttributeEvent", "(DocPrintJob,PrintJobAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintJobAttributeEvent", True, "getPrintJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintJobEvent", True, "PrintJobEvent", "(DocPrintJob,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintJobEvent", True, "getPrintJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "PrintServiceAttributeEvent", "(PrintService,PrintServiceAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "PrintServiceAttributeEvent", "(PrintService,PrintServiceAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print.event", "PrintServiceAttributeEvent", True, "getPrintService", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print.event", "PrintJobEvent", "getPrintEventType", "()", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printDataTransferCompleted", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobCanceled", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobCompleted", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobFailed", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobNoMoreEvents", "(PrintJobEvent)", "summary", "df-generated"] + - ["javax.print.event", "PrintJobListener", "printJobRequiresAttention", "(PrintJobEvent)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.print.model.yml b/java/ql/lib/ext/generated/javax.print.model.yml new file mode 100644 index 00000000000..bf9267dea96 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.print.model.yml @@ -0,0 +1,56 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.print", "Doc", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getDocFlavor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getPrintData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getReaderForText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "Doc", True, "getStreamForBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor$SERVICE_FORMATTED", True, "SERVICE_FORMATTED", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "DocFlavor", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMediaSubtype", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMediaType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getMimeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getParameter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "DocFlavor", True, "getRepresentationClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "PrintException", True, "PrintException", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "ServiceUI", True, "printDialog", "(GraphicsConfiguration,int,int,PrintService[],PrintService,DocFlavor,PrintRequestAttributeSet)", "", "Argument[3].ArrayElement", "Argument[6]", "taint", "df-generated"] + - ["javax.print", "ServiceUI", True, "printDialog", "(GraphicsConfiguration,int,int,PrintService[],PrintService,DocFlavor,PrintRequestAttributeSet)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "SimpleDoc", False, "SimpleDoc", "(Object,DocFlavor,DocAttributeSet)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.print", "StreamPrintService", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.print", "DocFlavor$BYTE_ARRAY", "BYTE_ARRAY", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$CHAR_ARRAY", "CHAR_ARRAY", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$INPUT_STREAM", "INPUT_STREAM", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$READER", "READER", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$STRING", "STRING", "(String)", "summary", "df-generated"] + - ["javax.print", "DocFlavor$URL", "URL", "(String)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getDefaultPrintService", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getMultiDocPrintServices", "(DocFlavor[],AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getPrintServices", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "getPrintServices", "(DocFlavor,AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupDefaultPrintService", "()", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupMultiDocPrintServices", "(DocFlavor[],AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "lookupPrintServices", "(DocFlavor,AttributeSet)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "registerService", "(PrintService)", "summary", "df-generated"] + - ["javax.print", "PrintServiceLookup", "registerServiceProvider", "(PrintServiceLookup)", "summary", "df-generated"] + - ["javax.print", "ServiceUIFactory", "getUI", "(int,String)", "summary", "df-generated"] + - ["javax.print", "ServiceUIFactory", "getUIClassNamesForRole", "(int)", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "dispose", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "getOutputFormat", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintService", "isDisposed", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getOutputFormat", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getPrintService", "(OutputStream)", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "getSupportedDocFlavors", "()", "summary", "df-generated"] + - ["javax.print", "StreamPrintServiceFactory", "lookupStreamPrintServiceFactories", "(DocFlavor,String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml b/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml new file mode 100644 index 00000000000..54e1b150eb9 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.rmi.ssl.model.yml @@ -0,0 +1,18 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(SSLContext,String[],String[],boolean)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(String[],String[],boolean)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "SslRMIServerSocketFactory", "(String[],String[],boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "getEnabledCipherSuites", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", True, "getEnabledProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.rmi.ssl", "SslRMIServerSocketFactory", "getNeedClientAuth", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.script.model.yml b/java/ql/lib/ext/generated/javax.script.model.yml new file mode 100644 index 00000000000..6350613b8c4 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.script.model.yml @@ -0,0 +1,66 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.script", "AbstractScriptEngine", True, "AbstractScriptEngine", "(Bindings)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getAttribute", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getBindings", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getErrorWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "getWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "removeAttribute", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setAttribute", "(String,Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setAttribute", "(String,Object,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setBindings", "(Bindings,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setErrorWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptContext", True, "setWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "getBindings", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "getContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "setBindings", "(Bindings,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngine", True, "setContext", "(ScriptContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getBindings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByExtension", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByMimeType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineByName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "getEngineFactories", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "put", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "put", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineExtension", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineExtension", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineMimeType", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineMimeType", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineName", "(String,ScriptEngineFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "registerEngineName", "(String,ScriptEngineFactory)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptEngineManager", True, "setBindings", "(Bindings)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "ScriptException", "(String,String,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.script", "ScriptException", True, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.script", "SimpleBindings", True, "SimpleBindings", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.script", "CompiledScript", "eval", "()", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "eval", "(Bindings)", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "eval", "(ScriptContext)", "summary", "df-generated"] + - ["javax.script", "CompiledScript", "getEngine", "()", "summary", "df-generated"] + - ["javax.script", "ScriptContext", "getAttributesScope", "(String)", "summary", "df-generated"] + - ["javax.script", "ScriptContext", "getScopes", "()", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(Reader)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(Reader,Bindings)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(String)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "eval", "(String,Bindings)", "summary", "df-generated"] + - ["javax.script", "ScriptEngine", "put", "(String,Object)", "summary", "df-generated"] + - ["javax.script", "ScriptEngineManager", "ScriptEngineManager", "(ClassLoader)", "summary", "df-generated"] + - ["javax.script", "ScriptException", "getColumnNumber", "()", "summary", "df-generated"] + - ["javax.script", "ScriptException", "getLineNumber", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml b/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml new file mode 100644 index 00000000000..ffb0e36d7b1 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.callback.model.yml @@ -0,0 +1,61 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.callback", "ChoiceCallback", True, "ChoiceCallback", "(String,String[],int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "ChoiceCallback", "(String,String[],int,boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "getChoices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,String[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,String[],int)", "", "Argument[2].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(String,int,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "ConfirmationCallback", "(int,String[],int)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "LanguageCallback", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "LanguageCallback", True, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "NameCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getDefaultName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "NameCallback", True, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "PasswordCallback", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", True, "setPassword", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "TextInputCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getDefaultText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getPrompt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextInputCallback", True, "setText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", True, "TextOutputCallback", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "UnsupportedCallbackException", "(Callback,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.callback", "UnsupportedCallbackException", True, "getCallback", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.callback", "CallbackHandler", "handle", "(Callback[])", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "allowMultipleSelections", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "getDefaultChoice", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "getSelectedIndexes", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "setSelectedIndex", "(int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "ChoiceCallback", "setSelectedIndexes", "(int[])", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "ConfirmationCallback", "(int,int,int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getDefaultOption", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getMessageType", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getOptionType", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "getSelectedIndex", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "ConfirmationCallback", "setSelectedIndex", "(int)", "summary", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", "clearPassword", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "PasswordCallback", "isEchoOn", "()", "summary", "df-generated"] + - ["javax.security.auth.callback", "TextOutputCallback", "getMessageType", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml b/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml new file mode 100644 index 00000000000..8be4b007b84 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.kerberos.model.yml @@ -0,0 +1,65 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.kerberos", "DelegationPermission", False, "DelegationPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "DelegationPermission", False, "DelegationPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "EncryptionKey", False, "EncryptionKey", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "KerberosCredMessage", "(KerberosPrincipal,KerberosPrincipal,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getRecipient", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosCredMessage", False, "getSender", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,byte[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "KerberosKey", "(KerberosPrincipal,char[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", True, "getPrincipal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "KerberosPrincipal", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "KerberosPrincipal", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", False, "getRealm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[10].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "KerberosTicket", "(byte[],KerberosPrincipal,KerberosPrincipal,byte[],int,boolean[],Date,Date,Date,Date,InetAddress[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getAuthTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getClient", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getClientAddresses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getEndTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getRenewTill", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getServer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getSessionKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", True, "getStartTime", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getInstance", "(KerberosPrincipal,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getKeys", "(KerberosPrincipal)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getPrincipal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", False, "getUnboundInstance", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.kerberos", "ServicePermission", False, "ServicePermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.kerberos", "EncryptionKey", "getKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", "getKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosKey", "getVersionNumber", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosPrincipal", "getNameType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "getFlags", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "getSessionKeyType", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isForwardable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isForwarded", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isInitial", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isPostdated", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isProxiable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isProxy", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KerberosTicket", "isRenewable", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "exists", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "getInstance", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "getUnboundInstance", "()", "summary", "df-generated"] + - ["javax.security.auth.kerberos", "KeyTab", "isBound", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.login.model.yml b/java/ql/lib/ext/generated/javax.security.auth.login.model.yml new file mode 100644 index 00000000000..1779821afbf --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.login.model.yml @@ -0,0 +1,50 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.login", "AccountException", True, "AccountException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountExpiredException", True, "AccountExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountLockedException", True, "AccountLockedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AccountNotFoundException", True, "AccountNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "AppConfigurationEntry", "(String,AppConfigurationEntry$LoginModuleControlFlag,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getControlFlag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getLoginModuleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "AppConfigurationEntry", True, "getOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getInstance", "(String,Configuration$Parameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "Configuration", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialException", True, "CredentialException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialExpiredException", True, "CredentialExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "CredentialNotFoundException", True, "CredentialNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "FailedLoginException", True, "FailedLoginException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,CallbackHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "LoginContext", "(String,Subject,CallbackHandler,Configuration)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginContext", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.login", "LoginException", True, "LoginException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.login", "Configuration", "getAppConfigurationEntry", "(String)", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "getConfiguration", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "refresh", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "Configuration", "setConfiguration", "(Configuration)", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "LoginContext", "(String)", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "login", "()", "summary", "df-generated"] + - ["javax.security.auth.login", "LoginContext", "logout", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.model.yml b/java/ql/lib/ext/generated/javax.security.auth.model.yml new file mode 100644 index 00000000000..435da160deb --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth", "AuthPermission", False, "AuthPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "AuthPermission", False, "AuthPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "DestroyFailedException", True, "DestroyFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "PrivateCredentialPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "getCredentialClass", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "PrivateCredentialPermission", False, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "RefreshFailedException", True, "RefreshFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAs", "(Subject,PrivilegedAction)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAs", "(Subject,PrivilegedExceptionAction)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAsPrivileged", "(Subject,PrivilegedAction,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "doAsPrivileged", "(Subject,PrivilegedExceptionAction,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPrincipals", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPrivateCredentials", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getPublicCredentials", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "Subject", False, "getSubject", "(AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth", "SubjectDomainCombiner", True, "SubjectDomainCombiner", "(Subject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth", "SubjectDomainCombiner", True, "getSubject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth", "Destroyable", "destroy", "()", "summary", "df-generated"] + - ["javax.security.auth", "Destroyable", "isDestroyed", "()", "summary", "df-generated"] + - ["javax.security.auth", "Refreshable", "isCurrent", "()", "summary", "df-generated"] + - ["javax.security.auth", "Refreshable", "refresh", "()", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "Subject", "(boolean,Set,Set,Set)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPrincipals", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPrivateCredentials", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "getPublicCredentials", "(Class)", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.security.auth", "Subject", "setReadOnly", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml b/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml new file mode 100644 index 00000000000..f2c6e64a21a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.auth.x500.model.yml @@ -0,0 +1,27 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.auth.x500", "X500Principal", False, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", False, "getName", "(String,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "X500PrivateCredential", "(X509Certificate,PrivateKey,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getAlias", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getCertificate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.auth.x500", "X500PrivateCredential", False, "getPrivateKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(InputStream)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(String)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(String,Map)", "summary", "df-generated"] + - ["javax.security.auth.x500", "X500Principal", "X500Principal", "(byte[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.cert.model.yml b/java/ql/lib/ext/generated/javax.security.cert.model.yml new file mode 100644 index 00000000000..5b06f3904db --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.cert.model.yml @@ -0,0 +1,32 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.cert", "CertificateEncodingException", True, "CertificateEncodingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateException", True, "CertificateException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateExpiredException", True, "CertificateExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateNotYetValidException", True, "CertificateNotYetValidException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.cert", "Certificate", "getEncoded", "()", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "getPublicKey", "()", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "verify", "(PublicKey)", "summary", "df-generated"] + - ["javax.security.cert", "Certificate", "verify", "(PublicKey,String)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "checkValidity", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "checkValidity", "(Date)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getInstance", "(InputStream)", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getInstance", "(byte[])", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getIssuerDN", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getNotAfter", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getNotBefore", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSerialNumber", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgName", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgOID", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSigAlgParams", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getSubjectDN", "()", "summary", "df-generated"] + - ["javax.security.cert", "X509Certificate", "getVersion", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.security.sasl.model.yml b/java/ql/lib/ext/generated/javax.security.sasl.model.yml new file mode 100644 index 00000000000..b2b5c3ac25a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.security.sasl.model.yml @@ -0,0 +1,42 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthenticationException", True, "AuthenticationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "AuthorizeCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "AuthorizeCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthenticationID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthorizationID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "getAuthorizedID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", True, "setAuthorizedID", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmCallback", True, "RealmCallback", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmChoiceCallback", True, "RealmChoiceCallback", "(String,String[],int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "RealmChoiceCallback", True, "RealmChoiceCallback", "(String,String[],int,boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslClient", "(String[],String,String,String,Map,CallbackHandler)", "", "Argument[5]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "Sasl", True, "createSaslServer", "(String,String,String,Map,CallbackHandler)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.security.sasl", "SaslException", True, "SaslException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.security.sasl", "AuthorizeCallback", "isAuthorized", "()", "summary", "df-generated"] + - ["javax.security.sasl", "AuthorizeCallback", "setAuthorized", "(boolean)", "summary", "df-generated"] + - ["javax.security.sasl", "Sasl", "getSaslClientFactories", "()", "summary", "df-generated"] + - ["javax.security.sasl", "Sasl", "getSaslServerFactories", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.smartcardio.model.yml b/java/ql/lib/ext/generated/javax.smartcardio.model.yml new file mode 100644 index 00000000000..232d7c3fc98 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.smartcardio.model.yml @@ -0,0 +1,78 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.smartcardio", "ATR", False, "ATR", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "ATR", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ATR", False, "getHistoricalBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardException", True, "CardException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardNotPresentException", True, "CardNotPresentException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CardPermission", True, "CardPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[])", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "CommandAPDU", "(int,int,int,int,byte[],int,int,int)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "ResponseAPDU", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "getBytes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", False, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getInstance", "(String,Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", False, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.smartcardio", "Card", "beginExclusive", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "disconnect", "(boolean)", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "endExclusive", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getATR", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getBasicChannel", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "getProtocol", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "openLogicalChannel", "()", "summary", "df-generated"] + - ["javax.smartcardio", "Card", "transmitControlCommand", "(int,byte[])", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "close", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "getCard", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "getChannelNumber", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "transmit", "(ByteBuffer,ByteBuffer)", "summary", "df-generated"] + - ["javax.smartcardio", "CardChannel", "transmit", "(CommandAPDU)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "connect", "(String)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "getName", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "isCardPresent", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "waitForCardAbsent", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminal", "waitForCardPresent", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "getTerminal", "(String)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "list", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "list", "(CardTerminals$State)", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "waitForChange", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CardTerminals", "waitForChange", "(long)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "CommandAPDU", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "CommandAPDU", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getCLA", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getINS", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getNc", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getNe", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getP1", "()", "summary", "df-generated"] + - ["javax.smartcardio", "CommandAPDU", "getP2", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getNr", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW1", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW2", "()", "summary", "df-generated"] + - ["javax.smartcardio", "ResponseAPDU", "getSW", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "getDefault", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "getDefaultType", "()", "summary", "df-generated"] + - ["javax.smartcardio", "TerminalFactory", "terminals", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.midi.model.yml b/java/ql/lib/ext/generated/javax.sound.midi.model.yml new file mode 100644 index 00000000000..a2cb3589795 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.midi.model.yml @@ -0,0 +1,96 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sound.midi", "Instrument", True, "getPatch", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "InvalidMidiDataException", True, "InvalidMidiDataException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "MetaMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MetaMessage", True, "setMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiDevice$Info", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiEvent", True, "MidiEvent", "(MidiMessage,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiEvent", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "MidiFileFormat", "(int,float,int,int,long,Map)", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiMessage", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiMessage", True, "setMessage", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getMidiDevice", "(MidiDevice$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getSoundbank", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiSystem", True, "getSoundbank", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "MidiUnavailableException", True, "MidiUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Sequence", True, "getTracks", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", True, "getSoundbank", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "SysexMessage", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "SysexMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.midi", "SysexMessage", True, "setMessage", "(int,byte[],int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Track", True, "add", "(MidiEvent)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.midi", "Track", True, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.midi", "MetaMessage", "getType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiEvent", "getTick", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiEvent", "setTick", "(long)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "MidiFileFormat", "(int,float,int,int,long)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getByteLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getDivisionType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getMicrosecondLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getResolution", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiFileFormat", "getType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiMessage", "getLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiMessage", "getStatus", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiDeviceInfo", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getMidiFileTypes", "(Sequence)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getReceiver", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequence", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequencer", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSequencer", "(boolean)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSoundbank", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getSynthesizer", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "getTransmitter", "()", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "isFileTypeSupported", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "isFileTypeSupported", "(int,Sequence)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "write", "(Sequence,int,File)", "summary", "df-generated"] + - ["javax.sound.midi", "MidiSystem", "write", "(Sequence,int,OutputStream)", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "Patch", "(int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "getBank", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Patch", "getProgram", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "Sequence", "(float,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "Sequence", "(float,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "createTrack", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "deleteTrack", "(Track)", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getDivisionType", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getMicrosecondLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getPatchList", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getResolution", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Sequence", "getTickLength", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "ShortMessage", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getChannel", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getCommand", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getData1", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "getData2", "()", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "ShortMessage", "setMessage", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", "getData", "()", "summary", "df-generated"] + - ["javax.sound.midi", "SoundbankResource", "getDataClass", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "remove", "(MidiEvent)", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "size", "()", "summary", "df-generated"] + - ["javax.sound.midi", "Track", "ticks", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml b/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml new file mode 100644 index 00000000000..2012851b25d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.midi.spi.model.yml @@ -0,0 +1,24 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.midi.spi", "MidiDeviceProvider", "getDevice", "(MidiDevice$Info)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiDeviceProvider", "getDeviceInfo", "()", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiDeviceProvider", "isDeviceSupported", "(MidiDevice$Info)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getMidiFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileReader", "getSequence", "(URL)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "getMidiFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "getMidiFileTypes", "(Sequence)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "isFileTypeSupported", "(int)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "isFileTypeSupported", "(int,Sequence)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "write", "(Sequence,int,File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "MidiFileWriter", "write", "(Sequence,int,OutputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(File)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.midi.spi", "SoundbankReader", "getSoundbank", "(URL)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.sampled.model.yml b/java/ql/lib/ext/generated/javax.sound.sampled.model.yml new file mode 100644 index 00000000000..5721eb3dd21 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.sampled.model.yml @@ -0,0 +1,128 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "Type", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "Type", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat$Type", True, "getExtension", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "AudioFileFormat", "(AudioFileFormat$Type,AudioFormat,int,Map)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat$Encoding", True, "Encoding", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "AudioFormat", "(AudioFormat$Encoding,float,int,int,int,float,boolean,Map)", "", "Argument[7].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "getEncoding", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", True, "properties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(InputStream,AudioFormat,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(InputStream,AudioFormat,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "AudioInputStream", "(TargetDataLine)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", True, "getFormat", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioPermission", True, "AudioPermission", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioPermission", True, "AudioPermission", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat,AudioInputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(AudioFormat,AudioInputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getAudioInputStream", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getLine", "(Line$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getSourceDataLine", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getSourceDataLine", "(AudioFormat,Mixer$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetDataLine", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetDataLine", "(AudioFormat,Mixer$Info)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetEncodings", "(AudioFormat$Encoding)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetEncodings", "(AudioFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", True, "getTargetFormats", "(AudioFormat$Encoding,AudioFormat)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", True, "getStateLabel", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "CompoundControl", True, "getMemberControls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Control", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "Info", "(Class,AudioFormat[],int,int)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "getValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "EnumControl", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMaxLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMidLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getMinLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "FloatControl", True, "getUnits", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "LineEvent", "(Line,LineEvent$Type,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "LineEvent", "(Line,LineEvent$Type,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "getLine", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineEvent", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "LineUnavailableException", True, "LineUnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Mixer$Info", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "Port$Info", True, "Info", "(Class,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sound.sampled", "Port$Info", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "ReverbType", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sound.sampled", "UnsupportedAudioFileException", True, "UnsupportedAudioFileException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.sampled", "AudioFileFormat", "getByteLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFileFormat", "getFrameLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "AudioFormat", "(float,int,int,boolean,boolean)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getChannels", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getFrameRate", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getFrameSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getSampleRate", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "getSampleSizeInBits", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "isBigEndian", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioFormat", "matches", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioInputStream", "getFrameLength", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioFileTypes", "(AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getAudioInputStream", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getClip", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getClip", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getMixer", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getMixerInfo", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getSourceLineInfo", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "getTargetLineInfo", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isConversionSupported", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isConversionSupported", "(AudioFormat,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isFileTypeSupported", "(AudioFileFormat$Type)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isFileTypeSupported", "(AudioFileFormat$Type,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "isLineSupported", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "write", "(AudioInputStream,AudioFileFormat$Type,File)", "summary", "df-generated"] + - ["javax.sound.sampled", "AudioSystem", "write", "(AudioInputStream,AudioFileFormat$Type,OutputStream)", "summary", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", "getValue", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "BooleanControl", "setValue", "(boolean)", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "getMaxBufferSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "getMinBufferSize", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "DataLine$Info", "isFormatSupported", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getMaximum", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getMinimum", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getPrecision", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getUpdatePeriod", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "getValue", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "setValue", "(float)", "summary", "df-generated"] + - ["javax.sound.sampled", "FloatControl", "shift", "(float,float,int)", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "Info", "(Class)", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "getLineClass", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "Line$Info", "matches", "(Line$Info)", "summary", "df-generated"] + - ["javax.sound.sampled", "LineEvent", "getFramePosition", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "Port$Info", "isSource", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getDecayTime", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getEarlyReflectionDelay", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getEarlyReflectionIntensity", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getLateReflectionDelay", "()", "summary", "df-generated"] + - ["javax.sound.sampled", "ReverbType", "getLateReflectionIntensity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml b/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml new file mode 100644 index 00000000000..4fc6de066ef --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sound.sampled.spi.model.yml @@ -0,0 +1,31 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioFileFormat", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(InputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileReader", "getAudioInputStream", "(URL)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "getAudioFileTypes", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "getAudioFileTypes", "(AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "isFileTypeSupported", "(AudioFileFormat$Type)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "isFileTypeSupported", "(AudioFileFormat$Type,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "write", "(AudioInputStream,AudioFileFormat$Type,File)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "AudioFileWriter", "write", "(AudioInputStream,AudioFileFormat$Type,OutputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getAudioInputStream", "(AudioFormat$Encoding,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getAudioInputStream", "(AudioFormat,AudioInputStream)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getSourceEncodings", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetEncodings", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetEncodings", "(AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "getTargetFormats", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isConversionSupported", "(AudioFormat$Encoding,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isConversionSupported", "(AudioFormat,AudioFormat)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isSourceEncodingSupported", "(AudioFormat$Encoding)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "FormatConversionProvider", "isTargetEncodingSupported", "(AudioFormat$Encoding)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "getMixer", "(Mixer$Info)", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "getMixerInfo", "()", "summary", "df-generated"] + - ["javax.sound.sampled.spi", "MixerProvider", "isMixerSupported", "(Mixer$Info)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.model.yml b/java/ql/lib/ext/generated/javax.sql.model.yml new file mode 100644 index 00000000000..1e285d91311 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.model.yml @@ -0,0 +1,43 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection,SQLException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "ConnectionEvent", "(PooledConnection,SQLException)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "ConnectionEvent", True, "getSQLException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql", "RowSetEvent", True, "RowSetEvent", "(RowSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "StatementEvent", "(PooledConnection,PreparedStatement,SQLException)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "getSQLException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql", "StatementEvent", True, "getStatement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql", "CommonDataSource", "createShardingKeyBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "ConnectionPoolDataSource", "createPooledConnectionBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "DataSource", "createConnectionBuilder", "()", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setAutoIncrement", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCaseSensitive", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCatalogName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnCount", "(int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnDisplaySize", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnLabel", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnType", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setColumnTypeName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setCurrency", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setNullable", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setPrecision", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setScale", "(int,int)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSchemaName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSearchable", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setSigned", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql", "RowSetMetaData", "setTableName", "(int,String)", "summary", "df-generated"] + - ["javax.sql", "XADataSource", "createXAConnectionBuilder", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.model.yml new file mode 100644 index 00000000000..3382f5b2cb2 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.model.yml @@ -0,0 +1,143 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset", "BaseRowSet", True, "addRowSetListener", "(RowSetListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getCommand", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getDataSourceName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getTypeMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "getUsername", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setBytes", "(int,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setCommand", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setDataSourceName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setDate", "(int,Date)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setObject", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setPassword", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setString", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTime", "(int,Time)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTimestamp", "(int,Timestamp)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setTypeMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", True, "setUsername", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetProvider", True, "newFactory", "(String,ClassLoader)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "RowSetWarning", "(String,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", True, "getNextWarning", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset", "BaseRowSet", "clearParameters", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getConcurrency", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getEscapeProcessing", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getFetchDirection", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getFetchSize", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getMaxFieldSize", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getMaxRows", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getQueryTimeout", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getShowDeleted", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getTransactionIsolation", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "getType", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "isReadOnly", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "removeRowSetListener", "(RowSetListener)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setArray", "(int,Array)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(String,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setAsciiStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBigDecimal", "(String,BigDecimal)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBigDecimal", "(int,BigDecimal)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(String,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBinaryStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,Blob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(String,InputStream,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,Blob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,InputStream)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBlob", "(int,InputStream,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBoolean", "(String,boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBoolean", "(int,boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setByte", "(String,byte)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setByte", "(int,byte)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setBytes", "(String,byte[])", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(String,Reader,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setCharacterStream", "(int,Reader,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Clob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Clob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setClob", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setConcurrency", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(String,Date)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(String,Date,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDate", "(int,Date,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDouble", "(String,double)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setDouble", "(int,double)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setEscapeProcessing", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFetchDirection", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFetchSize", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFloat", "(String,float)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setFloat", "(int,float)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setInt", "(String,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setInt", "(int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setLong", "(String,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setLong", "(int,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setMaxFieldSize", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setMaxRows", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNCharacterStream", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,NClob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(String,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,NClob)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,Reader)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNClob", "(int,Reader,long)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNString", "(String,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNString", "(int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(String,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(String,int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setNull", "(int,int,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(String,Object,int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(int,Object,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setObject", "(int,Object,int,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setQueryTimeout", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setReadOnly", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRef", "(int,Ref)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRowId", "(String,RowId)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setRowId", "(int,RowId)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setSQLXML", "(String,SQLXML)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setSQLXML", "(int,SQLXML)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShort", "(String,short)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShort", "(int,short)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setShowDeleted", "(boolean)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setString", "(String,String)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(String,Time)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(String,Time,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTime", "(int,Time,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(String,Timestamp)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(String,Timestamp,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTimestamp", "(int,Timestamp,Calendar)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setTransactionIsolation", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setType", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setURL", "(int,URL)", "summary", "df-generated"] + - ["javax.sql.rowset", "BaseRowSet", "setUnicodeStream", "(int,InputStream,int)", "summary", "df-generated"] + - ["javax.sql.rowset", "RowSetProvider", "newFactory", "()", "summary", "df-generated"] + - ["javax.sql.rowset", "RowSetWarning", "setNextWarning", "(RowSetWarning)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml new file mode 100644 index 00000000000..f460c159312 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.serial.model.yml @@ -0,0 +1,29 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset.serial", "SQLInputImpl", True, "SQLInputImpl", "(Object[],Map)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLInputImpl", True, "SQLInputImpl", "(Object[],Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLOutputImpl", True, "SQLOutputImpl", "(Vector,Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SQLOutputImpl", True, "SQLOutputImpl", "(Vector,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialArray", True, "SerialArray", "(Array)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialArray", True, "SerialArray", "(Array,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialBlob", True, "SerialBlob", "(Blob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialClob", True, "SerialClob", "(Clob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialDatalink", True, "SerialDatalink", "(URL)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialDatalink", True, "getDatalink", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialException", True, "SerialException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", True, "SerialJavaObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", True, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialRef", True, "SerialRef", "(Ref)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.serial", "SerialStruct", True, "SerialStruct", "(Struct,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset.serial", "SerialBlob", "SerialBlob", "(byte[])", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialClob", "SerialClob", "(char[])", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialJavaObject", "getFields", "()", "summary", "df-generated"] + - ["javax.sql.rowset.serial", "SerialStruct", "SerialStruct", "(SQLData,Map)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml b/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml new file mode 100644 index 00000000000..4750381cd8c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.sql.rowset.spi.model.yml @@ -0,0 +1,33 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.sql.rowset.spi", "SyncFactory", True, "setLogger", "(Logger,Level)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactoryException", True, "SyncFactoryException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getProviderID", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getVendor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", True, "getVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "SyncProviderException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "SyncProviderException", "(SyncResolver)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "getSyncResolver", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProviderException", True, "setSyncResolver", "(SyncResolver)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.sql.rowset.spi", "SyncFactory", "getInstance", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getLogger", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getRegisteredProviders", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "getSyncFactory", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "registerProvider", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "setJNDIContext", "(Context)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "setLogger", "(Logger)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncFactory", "unregisterProvider", "(String)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getDataSourceLock", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getProviderGrade", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getRowSetReader", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "getRowSetWriter", "()", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "setDataSourceLock", "(int)", "summary", "df-generated"] + - ["javax.sql.rowset.spi", "SyncProvider", "supportsUpdatableView", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.tools.model.yml b/java/ql/lib/ext/generated/javax.tools.model.yml new file mode 100644 index 00000000000..d68f04440e7 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.tools.model.yml @@ -0,0 +1,68 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.tools", "DiagnosticCollector", False, "getDiagnostics", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "getCharContent", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openReader", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "openWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "FileObject", True, "toUri", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForInput", "(JavaFileManager$Location,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getFileForOutput", "(JavaFileManager$Location,String,String,FileObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForInput", "(JavaFileManager$Location,String,JavaFileObject$Kind)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForInput", "(JavaFileManager$Location,String,JavaFileObject$Kind)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getJavaFileForOutput", "(JavaFileManager$Location,String,JavaFileObject$Kind,FileObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "getLocationForModule", "(JavaFileManager$Location,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "inferBinaryName", "(JavaFileManager$Location,JavaFileObject)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "inferModuleName", "(JavaFileManager$Location)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "JavaFileManager", True, "list", "(JavaFileManager$Location,String,Set,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjects", "(Path[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", True, "getJavaFileObjectsFromPaths", "(Iterable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.tools", "StandardLocation", False, "locationFor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.tools", "FileObject", "delete", "()", "summary", "df-generated"] + - ["javax.tools", "FileObject", "getLastModified", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "getName", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "isModuleOrientedLocation", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager$Location", "isOutputLocation", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "contains", "(JavaFileManager$Location,FileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getClassLoader", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getLocationForModule", "(JavaFileManager$Location,JavaFileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "getServiceLoader", "(JavaFileManager$Location,Class)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "handleOption", "(String,Iterator)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "hasLocation", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "isSameFile", "(FileObject,FileObject)", "summary", "df-generated"] + - ["javax.tools", "JavaFileManager", "listLocationsForModules", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getAccessLevel", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getKind", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "getNestingKind", "()", "summary", "df-generated"] + - ["javax.tools", "JavaFileObject", "isNameCompatible", "(String,JavaFileObject$Kind)", "summary", "df-generated"] + - ["javax.tools", "OptionChecker", "isSupportedOption", "(String)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "asPath", "(FileObject)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "getLocationAsPaths", "(JavaFileManager$Location)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setLocationForModule", "(JavaFileManager$Location,String,Collection)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setLocationFromPaths", "(JavaFileManager$Location,Collection)", "summary", "df-generated"] + - ["javax.tools", "StandardJavaFileManager", "setPathFactory", "(StandardJavaFileManager$PathFactory)", "summary", "df-generated"] + - ["javax.tools", "Tool", "name", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemDocumentationTool", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemJavaCompiler", "()", "summary", "df-generated"] + - ["javax.tools", "ToolProvider", "getSystemToolClassLoader", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.transaction.xa.model.yml b/java/ql/lib/ext/generated/javax.transaction.xa.model.yml new file mode 100644 index 00000000000..ce267904e5d --- /dev/null +++ b/java/ql/lib/ext/generated/javax.transaction.xa.model.yml @@ -0,0 +1,12 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.transaction.xa", "XAException", True, "XAException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.transaction.xa", "XAException", "XAException", "(int)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.catalog.model.yml b/java/ql/lib/ext/generated/javax.xml.catalog.model.yml new file mode 100644 index 00000000000..bdce521147c --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.catalog.model.yml @@ -0,0 +1,30 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogException", True, "CatalogException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", True, "with", "(CatalogFeatures$Feature,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", True, "with", "(CatalogFeatures$Feature,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", True, "get", "(CatalogFeatures$Feature)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalog", "(CatalogFeatures,URI[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalog", "(CatalogFeatures,URI[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(Catalog)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(CatalogFeatures,URI[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.catalog", "CatalogManager", False, "catalogResolver", "(CatalogFeatures,URI[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.catalog", "Catalog", "catalogs", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Builder", "build", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Feature", "defaultValue", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures$Feature", "getPropertyName", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", "builder", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "CatalogFeatures", "defaults", "()", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$PreferType", "prefer", "(String)", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$ResolveType", "getType", "(String)", "summary", "df-generated"] + - ["javax.xml.catalog", "GroupEntry$ResolveType", "isType", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml new file mode 100644 index 00000000000..a2933bbf4c2 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dom.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "getElementById", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "iterator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMCryptoContext", True, "setIdAttributeNS", "(Element,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMStructure", True, "DOMStructure", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dom", "DOMStructure", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml new file mode 100644 index 00000000000..719eccf3822 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.dom.model.yml @@ -0,0 +1,26 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(Key,Node,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "DOMSignContext", "(KeySelector,Node,Node)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "setNextSibling", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMSignContext", True, "setParent", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(Key,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(Key,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(KeySelector,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "DOMValidateContext", "(KeySelector,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.dom", "DOMValidateContext", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml new file mode 100644 index 00000000000..87e2099b5d0 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.keyinfo.model.yml @@ -0,0 +1,31 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "getInstance", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "getURIDereferencer", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "isFeatureSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyInfo", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyInfo", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyName", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newKeyValue", "(PublicKey)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[])", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[],List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newPGPData", "(byte[],byte[],List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newRetrievalMethod", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newRetrievalMethod", "(String,String,List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newX509Data", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "newX509IssuerSerial", "(String,BigInteger)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.keyinfo", "KeyInfoFactory", "unmarshalKeyInfo", "(XMLStructure)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml new file mode 100644 index 00000000000..ced7da4a1cc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.model.yml @@ -0,0 +1,61 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformException", True, "TransformException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getInstance", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureException", True, "XMLSignatureException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getKeyInfoFactory", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getMechanismType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig", "TransformService", "init", "(TransformParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", "init", "(XMLStructure,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "TransformService", "marshalParams", "(XMLStructure,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "getInstance", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "getURIDereferencer", "()", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "isFeatureSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newCanonicalizationMethod", "(String,C14NMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newCanonicalizationMethod", "(String,XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newDigestMethod", "(String,DigestMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newManifest", "(List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newManifest", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,Data,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newReference", "(String,DigestMethod,List,String,String,byte[])", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureMethod", "(String,SignatureMethodParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureProperties", "(List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignatureProperty", "(List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignedInfo", "(CanonicalizationMethod,SignatureMethod,List)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newSignedInfo", "(CanonicalizationMethod,SignatureMethod,List,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newTransform", "(String,TransformParameterSpec)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newTransform", "(String,XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLObject", "(List,String,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLSignature", "(SignedInfo,KeyInfo)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "newXMLSignature", "(SignedInfo,KeyInfo,List,String,String)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "unmarshalXMLSignature", "(XMLStructure)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig", "XMLSignatureFactory", "unmarshalXMLSignature", "(XMLValidateContext)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml new file mode 100644 index 00000000000..c93065e77e3 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.dsig.spec.model.yml @@ -0,0 +1,33 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto.dsig.spec", "ExcC14NParameterSpec", False, "ExcC14NParameterSpec", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "ExcC14NParameterSpec", False, "getPrefixList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "RSAPSSParameterSpec", False, "RSAPSSParameterSpec", "(PSSParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "RSAPSSParameterSpec", False, "getPSSParameterSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilter2ParameterSpec", False, "XPathFilter2ParameterSpec", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilter2ParameterSpec", False, "getXPathList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "XPathFilterParameterSpec", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "getNamespaceMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathFilterParameterSpec", False, "getXPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "XPathType", "(String,XPathType$Filter,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getExpression", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XPathType", True, "getNamespaceMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XSLTTransformParameterSpec", False, "XSLTTransformParameterSpec", "(XMLStructure)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "XSLTTransformParameterSpec", False, "getStylesheet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto.dsig.spec", "HMACParameterSpec", "HMACParameterSpec", "(int)", "summary", "df-generated"] + - ["javax.xml.crypto.dsig.spec", "HMACParameterSpec", "getOutputLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.crypto.model.yml b/java/ql/lib/ext/generated/javax.xml.crypto.model.yml new file mode 100644 index 00000000000..ec58522b0ab --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.crypto.model.yml @@ -0,0 +1,63 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.crypto", "AlgorithmMethod", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelector", True, "singletonKeySelector", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "KeySelectorException", True, "KeySelectorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "MarshalException", True, "MarshalException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "NoSuchMechanismException", True, "NoSuchMechanismException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "OctetStreamData", "(InputStream,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getMimeType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getOctetStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "OctetStreamData", True, "getURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(String,Throwable,URIReference)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "URIReferenceException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "URIReferenceException", True, "getURIReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "get", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getBaseURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getDefaultNamespacePrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getKeySelector", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getNamespacePrefix", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getNamespacePrefix", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "getURIDereferencer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "put", "(Object,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "putNamespacePrefix", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setBaseURI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setDefaultNamespacePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setKeySelector", "(KeySelector)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setProperty", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.crypto", "XMLCryptoContext", True, "setURIDereferencer", "(URIDereferencer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.crypto", "KeySelector", "select", "(KeyInfo,KeySelector$Purpose,AlgorithmMethod,XMLCryptoContext)", "summary", "df-generated"] + - ["javax.xml.crypto", "KeySelectorResult", "getKey", "()", "summary", "df-generated"] + - ["javax.xml.crypto", "XMLStructure", "isFeatureSupported", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.datatype.model.yml b/java/ql/lib/ext/generated/javax.xml.datatype.model.yml new file mode 100644 index 00000000000..ea6d6f45c78 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.datatype.model.yml @@ -0,0 +1,97 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.datatype", "DatatypeConfigurationException", True, "DatatypeConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.datatype", "DatatypeConstants$Field", "getId", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(boolean,BigInteger,BigInteger,BigInteger,BigInteger,BigInteger,BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(boolean,int,int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDuration", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(boolean,BigInteger,BigInteger,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(boolean,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationDayTime", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(boolean,BigInteger,BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(boolean,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newDurationYearMonth", "(long)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(BigInteger,int,int,int,int,int,BigDecimal,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(GregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(String)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendar", "(int,int,int,int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarDate", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,BigDecimal,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "DatatypeFactory", "newXMLGregorianCalendarTime", "(int,int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "add", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "addTo", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "addTo", "(Date)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "compare", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getDays", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getField", "(DatatypeConstants$Field)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getHours", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getMinutes", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getMonths", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getSeconds", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getSign", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getTimeInMillis", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getTimeInMillis", "(Date)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getXMLSchemaType", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "getYears", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isLongerThan", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isSet", "(DatatypeConstants$Field)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "isShorterThan", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "multiply", "(BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "multiply", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "negate", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "normalizeWith", "(Calendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "Duration", "subtract", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "add", "(Duration)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "clear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "compare", "(XMLGregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getDay", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getEon", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getEonAndYear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getFractionalSecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getHour", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMillisecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMinute", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getMonth", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getSecond", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getTimeZone", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getTimezone", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getXMLSchemaType", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "getYear", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "isValid", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "normalize", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "reset", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setDay", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setFractionalSecond", "(BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setHour", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMillisecond", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMinute", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setMonth", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setSecond", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int,BigDecimal)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTime", "(int,int,int,int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setTimezone", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setYear", "(BigInteger)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "setYear", "(int)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toGregorianCalendar", "()", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toGregorianCalendar", "(TimeZone,Locale,XMLGregorianCalendar)", "summary", "df-generated"] + - ["javax.xml.datatype", "XMLGregorianCalendar", "toXMLFormat", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.namespace.model.yml b/java/ql/lib/ext/generated/javax.xml.namespace.model.yml new file mode 100644 index 00000000000..452e79f45bd --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.namespace.model.yml @@ -0,0 +1,16 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.namespace", "QName", True, "QName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "QName", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getLocalPart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getNamespaceURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "getPrefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.namespace", "QName", True, "valueOf", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.parsers.model.yml b/java/ql/lib/ext/generated/javax.xml.parsers.model.yml new file mode 100644 index 00000000000..885b668c180 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.parsers.model.yml @@ -0,0 +1,93 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputStream)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(InputStream,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", True, "parse", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "FactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.parsers", "ParserConfigurationException", True, "ParserConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(File,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(File,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,DefaultHandler,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(InputStream,HandlerBase,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(String,DefaultHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.parsers", "SAXParser", True, "parse", "(String,HandlerBase)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.parsers", "DocumentBuilder", "getDOMImplementation", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "newDocument", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "parse", "(InputSource)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "reset", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "setEntityResolver", "(EntityResolver)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilder", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isCoalescing", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isExpandEntityReferences", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isIgnoringComments", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isIgnoringElementContentWhitespace", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDefaultNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newDocumentBuilder", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "newNSInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setAttribute", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setCoalescing", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setExpandEntityReferences", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setIgnoringComments", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setIgnoringElementContentWhitespace", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setNamespaceAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setSchema", "(Schema)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setValidating", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "DocumentBuilderFactory", "setXIncludeAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getParser", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "getXMLReader", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "parse", "(InputSource,DefaultHandler)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "parse", "(InputSource,HandlerBase)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "reset", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParser", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "getSchema", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isNamespaceAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isValidating", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "isXIncludeAware", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newDefaultNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newNSInstance", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newNSInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "newSAXParser", "()", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setNamespaceAware", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setSchema", "(Schema)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setValidating", "(boolean)", "summary", "df-generated"] + - ["javax.xml.parsers", "SAXParserFactory", "setXIncludeAware", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.stream.model.yml b/java/ql/lib/ext/generated/javax.xml.stream.model.yml new file mode 100644 index 00000000000..86ce369cf51 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.stream.model.yml @@ -0,0 +1,156 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "FactoryConfigurationError", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "FactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "nextEvent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "nextTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", True, "peek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", True, "newFactory", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", True, "newInstance", "(String,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Location,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "XMLStreamException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamException", True, "getNestedException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getElementText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getNamespaceContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", True, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(QName,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createAttribute", "(String,String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createCData", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createCharacters", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createComment", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createDTD", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndDocument", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(QName,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEndElement", "(String,String,String,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createEntityReference", "(String,EntityDeclaration)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createIgnorableSpace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createNamespace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createNamespace", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createProcessingInstruction", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createSpace", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartDocument", "(String,String,boolean)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(QName,Iterator,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String,Iterator,Iterator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "createStartElement", "(String,String,String,Iterator,Iterator,NamespaceContext)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventFactory", "setLocation", "(Location)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "close", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "getElementText", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLEventReader", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createFilteredReader", "(XMLEventReader,EventFilter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createFilteredReader", "(XMLStreamReader,StreamFilter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(InputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(Source)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(String,InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(String,Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLEventReader", "(XMLStreamReader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(InputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(Source)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(String,InputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "createXMLStreamReader", "(String,Reader)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getEventAllocator", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getXMLReporter", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "getXMLResolver", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "isPropertySupported", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setEventAllocator", "(XMLEventAllocator)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setXMLReporter", "(XMLReporter)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLInputFactory", "setXMLResolver", "(XMLResolver)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(OutputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(OutputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(Result)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLEventWriter", "(Writer)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(OutputStream)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(OutputStream,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(Result)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "createXMLStreamWriter", "(Writer)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "isPropertySupported", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newDefaultFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newFactory", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLOutputFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLResolver", "resolveEntity", "(String,String,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "close", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeCount", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeLocalName", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeName", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeNamespace", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributePrefix", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeType", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeValue", "(String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getAttributeValue", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getCharacterEncodingScheme", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getEncoding", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getEventType", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getLocalName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getLocation", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceCount", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespacePrefix", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getNamespaceURI", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPIData", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPITarget", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getPrefix", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextCharacters", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextCharacters", "(int,char[],int,int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextLength", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getTextStart", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "getVersion", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasName", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasNext", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "hasText", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isAttributeSpecified", "(int)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isCharacters", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isEndElement", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isStandalone", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isStartElement", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "isWhiteSpace", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "next", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "nextTag", "()", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "require", "(int,String,String)", "summary", "df-generated"] + - ["javax.xml.stream", "XMLStreamReader", "standaloneSet", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml b/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml new file mode 100644 index 00000000000..e4485a47e75 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.stream.util.model.yml @@ -0,0 +1,12 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.stream.util", "EventReaderDelegate", True, "EventReaderDelegate", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "EventReaderDelegate", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream.util", "EventReaderDelegate", True, "setParent", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "StreamReaderDelegate", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.stream.util", "StreamReaderDelegate", True, "setParent", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml new file mode 100644 index 00000000000..de450418d67 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.dom.model.yml @@ -0,0 +1,23 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,Node,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "DOMResult", "(Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "setNextSibling", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMResult", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "DOMSource", "(Node,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "getNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.dom", "DOMSource", True, "setNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.model.yml new file mode 100644 index 00000000000..589ccbc1d36 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.model.yml @@ -0,0 +1,74 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform", "Result", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "Result", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "Source", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "Source", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,SourceLocator,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerConfigurationException", True, "TransformerConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,SourceLocator,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "TransformerException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getLocationAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getLocator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "getMessageAndLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerException", True, "setLocator", "(SourceLocator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(Exception,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "TransformerFactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform", "TransformerFactoryConfigurationError", True, "getException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform", "URIResolver", True, "resolve", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.transform", "Source", "isEmpty", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "clearParameters", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getErrorListener", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getOutputProperties", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getOutputProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getParameter", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "getURIResolver", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "reset", "()", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setErrorListener", "(ErrorListener)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setOutputProperties", "(Properties)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setOutputProperty", "(String,String)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setParameter", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "setURIResolver", "(URIResolver)", "summary", "df-generated"] + - ["javax.xml.transform", "Transformer", "transform", "(Source,Result)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getAssociatedStylesheet", "(Source,String,String,String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getErrorListener", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "getURIResolver", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newInstance", "(String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTemplates", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTransformer", "()", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "newTransformer", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setAttribute", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setErrorListener", "(ErrorListener)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.transform", "TransformerFactory", "setURIResolver", "(URIResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml new file mode 100644 index 00000000000..cd02ad21d93 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.sax.model.yml @@ -0,0 +1,24 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.sax", "SAXResult", True, "SAXResult", "(ContentHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "getHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "getLexicalHandler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "setHandler", "(ContentHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXResult", True, "setLexicalHandler", "(LexicalHandler)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "getXMLReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "setInputSource", "(InputSource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.sax", "SAXSource", True, "setXMLReader", "(XMLReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTemplatesHandler", "()", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "()", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newTransformerHandler", "(Templates)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newXMLFilter", "(Source)", "summary", "df-generated"] + - ["javax.xml.transform.sax", "SAXTransformerFactory", "newXMLFilter", "(Templates)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml new file mode 100644 index 00000000000..25ca3d5c8cf --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.stax.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.stax", "StAXResult", True, "StAXResult", "(XMLEventWriter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "StAXResult", "(XMLStreamWriter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "getXMLEventWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXResult", True, "getXMLStreamWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "StAXSource", "(XMLEventReader)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "StAXSource", "(XMLStreamReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "getXMLEventReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stax", "StAXSource", True, "getXMLStreamReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml b/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml new file mode 100644 index 00000000000..c7d28706810 --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.transform.stream.model.yml @@ -0,0 +1,21 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "getWriter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setSystemId", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamResult", True, "setWriter", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "getPublicId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "getReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setPublicId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.transform.stream", "StreamSource", True, "setSystemId", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.validation.model.yml b/java/ql/lib/ext/generated/javax.xml.validation.model.yml new file mode 100644 index 00000000000..328462437dc --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.validation.model.yml @@ -0,0 +1,60 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryConfigurationError", False, "SchemaFactoryConfigurationError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.validation", "Validator", True, "validate", "(Source)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.validation", "Schema", "newValidator", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Schema", "newValidatorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "isSchemaLanguageSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newInstance", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newInstance", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "()", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(File)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(Source)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(Source[])", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "newSchema", "(URL)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactory", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] + - ["javax.xml.validation", "SchemaFactoryLoader", "newFactory", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "getAttributeTypeInfo", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "getElementTypeInfo", "()", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "isIdAttribute", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "TypeInfoProvider", "isSpecified", "(int)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "reset", "()", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] + - ["javax.xml.validation", "Validator", "validate", "(Source,Result)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getContentHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getErrorHandler", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getResourceResolver", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "getTypeInfoProvider", "()", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setContentHandler", "(ContentHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setErrorHandler", "(ErrorHandler)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setProperty", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.validation", "ValidatorHandler", "setResourceResolver", "(LSResourceResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.xml.xpath.model.yml b/java/ql/lib/ext/generated/javax.xml.xpath.model.yml new file mode 100644 index 00000000000..4cef7e1a19e --- /dev/null +++ b/java/ql/lib/ext/generated/javax.xml.xpath.model.yml @@ -0,0 +1,37 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.xml.xpath", "XPathException", True, "XPathException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathException", True, "XPathException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(InputSource)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(InputSource,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpression", True, "evaluateExpression", "(Object,Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpressionException", True, "XPathExpressionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathExpressionException", True, "XPathExpressionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFactoryConfigurationException", True, "XPathFactoryConfigurationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFactoryConfigurationException", True, "XPathFactoryConfigurationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFunctionException", True, "XPathFunctionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.xml.xpath", "XPathFunctionException", True, "XPathFunctionException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,InputSource)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,InputSource,Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,Object)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPath", "evaluateExpression", "(String,Object,Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathEvaluationResult$XPathResultType", "getQNameType", "(Class)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "getFeature", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "isObjectModelSupported", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newDefaultInstance", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "(String)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newInstance", "(String,String,ClassLoader)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "newXPath", "()", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setFeature", "(String,boolean)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setXPathFunctionResolver", "(XPathFunctionResolver)", "summary", "df-generated"] + - ["javax.xml.xpath", "XPathFactory", "setXPathVariableResolver", "(XPathVariableResolver)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml b/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml new file mode 100644 index 00000000000..5cfddbd9303 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.access.foreign.model.yml @@ -0,0 +1,10 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.access.foreign", "UnmapperProxy", "address", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "fileDescriptor", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "isSync", "()", "summary", "df-generated"] + - ["jdk.internal.access.foreign", "UnmapperProxy", "unmap", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.access.model.yml b/java/ql/lib/ext/generated/jdk.internal.access.model.yml new file mode 100644 index 00000000000..37d80349303 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.access.model.yml @@ -0,0 +1,243 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", True, "registerCleanup", "(FileDescriptor,PhantomCleanable)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIOFilePermissionAccess", True, "newPermPlusAltPath", "(FilePermission)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIOFilePermissionAccess", True, "newPermUsingAltPath", "(FilePermission)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaIORandomAccessFileAccess", True, "openAndDelete", "(File,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addEnableNativeAccess", "(Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addOpensToAllUnnamed", "(Module,Set,Set)", "", "Argument[1].Element", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "addOpensToAllUnnamed", "(Module,Set,Set)", "", "Argument[2].Element", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "createOrGetClassLoaderValueMap", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineModule", "(ClassLoader,ModuleDescriptor,URI)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineModule", "(ClassLoader,ModuleDescriptor,URI)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "definePackage", "(ClassLoader,String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "definePackage", "(ClassLoader,String,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "defineUnnamedModule", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getBytesNoRepl", "(String,Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getBytesUTF8NoRepl", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "getServicesCatalog", "(ModuleLayer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "join", "(String,String,String,String[],int)", "", "Argument[3].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "layers", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "layers", "(ModuleLayer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newStringNoRepl", "(byte[],Charset)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newStringUTF8NoRepl", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newThreadWithAcc", "(Runnable,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "newThreadWithAcc", "(Runnable,AccessControlContext)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "setCause", "(Throwable,Throwable)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "stringConcatHelper", "(String,MethodType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", True, "stringConcatHelper", "(String,MethodType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "collectCoordinates", "(VarHandle,int,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "dropCoordinates", "(VarHandle,int,Class[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "filterCoordinates", "(VarHandle,int,MethodHandle[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "filterValue", "(VarHandle,MethodHandle,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getMethodDescriptor", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getMethodType", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "getName", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "insertCoordinates", "(VarHandle,int,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "nativeMethodHandle", "(NativeEntryPoint,MethodHandle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "nativeMethodHandle", "(NativeEntryPoint,MethodHandle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "permuteCoordinates", "(VarHandle,List,int[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", True, "permuteCoordinates", "(VarHandle,List,int[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newConfiguration", "(ModuleFinder,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newExports", "(Set,String,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleBuilder", "(String,boolean,Set)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleBuilder", "(String,boolean,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[4].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[5].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[6].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[7].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[8].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newModuleDescriptor", "(String,ModuleDescriptor$Version,Set,Set,Set,Set,Set,Set,Set,String,int)", "", "Argument[9]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newOpens", "(Set,String,Set)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newProvides", "(String,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newProvides", "(String,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "newRequires", "(Set,String,ModuleDescriptor$Version)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", True, "packages", "(ModuleDescriptor$Builder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyConstructor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyField", "(Field)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "copyMethod", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorAccessor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorAnnotations", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorParameterAnnotations", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getConstructorSignature", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getExecutableSharedParameterTypes", "(Executable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getMethodAccessor", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "getRoot", "(AccessibleObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "leafCopyMethod", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[5]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[6]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "newConstructor", "(Class,Class[],Class[],int,int,String,byte[],byte[])", "", "Argument[7]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "setConstructorAccessor", "(Constructor,ConstructorAccessor)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", True, "setMethodAccessor", "(Method,MethodAccessor)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetHttpCookieAccess", True, "header", "(HttpCookie)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetHttpCookieAccess", True, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "addressBytes", "(Inet6Address)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "getByName", "(String,InetAddress)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", True, "getOriginalHostName", "(InetAddress)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetURLAccess", True, "getHandler", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetUriAccess", True, "create", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNetUriAccess", True, "create", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "acquireScope", "(Buffer,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "bufferSegment", "(Buffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "getBufferBase", "(ByteBuffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newDirectByteBuffer", "(long,int,Object,MemorySegmentProxy)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newDirectByteBuffer", "(long,int,Object,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newHeapByteBuffer", "(byte[],int,int,MemorySegmentProxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newHeapByteBuffer", "(byte[],int,int,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", True, "newMappedByteBuffer", "(UnmapperProxy,long,int,Object,MemorySegmentProxy)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "get", "(ProtectionDomain)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "put", "(ProtectionDomain,PermissionCollection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess$ProtectionDomainCache", True, "put", "(ProtectionDomain,PermissionCollection)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "doIntersectionPrivilege", "(PrivilegedAction,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "doIntersectionPrivilege", "(PrivilegedAction,AccessControlContext,AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", True, "getProtectDomains", "(AccessControlContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initSign", "(Signature,PrivateKey,AlgorithmParameterSpec,SecureRandom)", "", "Argument[3]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initVerify", "(Signature,PublicKey,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", True, "initVerify", "(Signature,PublicKey,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilCollectionAccess", True, "listFromTrustedArray", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilCollectionAccess", True, "listFromTrustedArrayNullsAllowed", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "entryFor", "(JarFile,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "entryNames", "(JarFile,CodeSource[])", "", "Argument[1].ArrayElement", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSource", "(JarFile,URL,String)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getCodeSources", "(JarFile,URL)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getManifestDigests", "(JarFile)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", True, "getTrustedAttributes", "(Manifest,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getBundle", "(String,Locale,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getBundle", "(String,Locale,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "getParent", "(ResourceBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setLocale", "(ResourceBundle,Locale)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setName", "(ResourceBundle,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", True, "setParent", "(ResourceBundle,ResourceBundle)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.access", "JavaBeansAccess", "getConstructorPropertiesValue", "(Constructor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaBeansAccess", "getReadMethod", "(Class,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOAccess", "charset", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOAccess", "console", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "close", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "get", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "getAppend", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "getHandle", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "registerCleanup", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "set", "(FileDescriptor,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "setAppend", "(FileDescriptor,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "setHandle", "(FileDescriptor,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaIOFileDescriptorAccess", "unregisterCleanup", "(FileDescriptor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addEnableNativeAccessAllUnnamed", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExports", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExports", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addExportsToAllUnnamed", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addNonExportedPackages", "(ModuleLayer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addOpens", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addOpensToAllUnnamed", "(Module,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addReads", "(Module,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addReadsAllUnnamed", "(Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "addUses", "(Module,Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "bindToLoader", "(ModuleLayer,ClassLoader)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "blockedOn", "(Interruptible)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "casAnnotationType", "(Class,AnnotationType,AnnotationType)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "classData", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "decodeASCII", "(byte[],int,char[],int,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "defineClass", "(ClassLoader,Class,String,byte[],ProtectionDomain,boolean,int,Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "defineClass", "(ClassLoader,String,byte[],ProtectionDomain,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "exit", "(int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "fastUUID", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "findBootstrapClassOrNull", "(String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "findNative", "(ClassLoader,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getAnnotationType", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getConstantPool", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getDeclaredAnnotationMap", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getDeclaredPublicMethods", "(Class,String,Class[])", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getEnumConstantsShared", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawClassAnnotations", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawClassTypeAnnotations", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "getRawExecutableTypeAnnotations", "(Executable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "inflateBytesToChars", "(byte[],int,char[],int,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "invalidatePackageAccessCache", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "invokeFinalize", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isEnableNativeAccess", "(Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isReflectivelyExported", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "isReflectivelyOpened", "(Module,String,Module)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "protectionDomain", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "registerShutdownHook", "(int,boolean,Runnable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "stringConcatInitialCoder", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangAccess", "stringConcatMix", "(long,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "ensureCustomized", "(MethodHandle)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "generateHolderClasses", "(Stream)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "getDeclaringClass", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "isNative", "(Object)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "memoryAccessVarHandle", "(Class,boolean,long,ByteOrder)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangInvokeAccess", "newMemberName", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", "requires", "(ModuleDescriptor$Builder,Set,String,String)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangModuleAccess", "resolveAndBind", "(ModuleFinder,Collection,PrintStream)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangRefAccess", "runFinalization", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangRefAccess", "waitForReferenceProcessing", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "getConstructorSlot", "(Constructor)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "getExecutableTypeAnnotationBytes", "(Executable)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "isTrustedFinalField", "(Field)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaLangReflectAccess", "newInstance", "(Constructor,Object[],Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNetInetAddressAccess", "addressValue", "(Inet4Address)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "force", "(FileDescriptor,long,boolean,long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "getBufferAddress", "(ByteBuffer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "getDirectBufferPool", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "isLoaded", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "load", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "pageSize", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "reserveMemory", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unload", "(long,boolean,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unmapper", "(ByteBuffer)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaNioAccess", "unreserveMemory", "(long,long)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecurityAccess", "getProtectionDomainCache", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySignatureAccess", "initVerify", "(Signature,Certificate,AlgorithmParameterSpec)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaSecuritySpecAccess", "clearEncodedKeySpec", "(EncodedKeySpec)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "ensureInitialization", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "entries2", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "isInitializing", "()", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "jarFileHasClassPathAttribute", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilJarAccess", "setEagerValidation", "(JarFile,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilResourceBundleAccess", "newResourceBundle", "(Class)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "entries", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "entryNameStream", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getExtraAttributes", "(ZipEntry)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestAndSignatureRelatedFiles", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestName", "(JarFile,boolean)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getManifestNum", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "getMetaInfVersions", "(JarFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "setExtraAttributes", "(ZipEntry,int)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "startsWithLocHeader", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaUtilZipFileAccess", "stream", "(ZipFile)", "summary", "df-generated"] + - ["jdk.internal.access", "JavaxCryptoSpecAccess", "clearSecretKeySpec", "(SecretKeySpec)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.misc.model.yml b/java/ql/lib/ext/generated/jdk.internal.misc.model.yml new file mode 100644 index 00000000000..3ab4816a586 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.misc.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.misc", "Signal$Handler", "handle", "(Signal)", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getCount", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getMemoryUsed", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getName", "()", "summary", "df-generated"] + - ["jdk.internal.misc", "VM$BufferPool", "getTotalCapacity", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml b/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml new file mode 100644 index 00000000000..1121dda6781 --- /dev/null +++ b/java/ql/lib/ext/generated/jdk.internal.org.objectweb.asm.model.yml @@ -0,0 +1,15 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", True, "visitAnnotation", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", True, "visitAnnotation", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visit", "(int,int,String,String,String,String[])", "summary", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visitAttribute", "(Attribute)", "summary", "df-generated"] + - ["jdk.internal.org.objectweb.asm", "ClassVisitor", "visitModule", "(String,int,String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml b/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml new file mode 100644 index 00000000000..ffc38030b8a --- /dev/null +++ b/java/ql/lib/ext/generated/org.w3c.dom.ls.model.yml @@ -0,0 +1,28 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.w3c.dom.ls", "LSInput", True, "getSystemId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", True, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSResourceResolver", True, "resolveResource", "(String,String,String,String,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom.ls", "LSResourceResolver", True, "resolveResource", "(String,String,String,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.w3c.dom.ls", "LSInput", "getBaseURI", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getByteStream", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getCertifiedText", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getCharacterStream", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getEncoding", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getPublicId", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "getStringData", "()", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setBaseURI", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setByteStream", "(InputStream)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setCertifiedText", "(boolean)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setCharacterStream", "(Reader)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setEncoding", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setPublicId", "(String)", "summary", "df-generated"] + - ["org.w3c.dom.ls", "LSInput", "setStringData", "(String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.w3c.dom.model.yml b/java/ql/lib/ext/generated/org.w3c.dom.model.yml new file mode 100644 index 00000000000..9c519c9ae73 --- /dev/null +++ b/java/ql/lib/ext/generated/org.w3c.dom.model.yml @@ -0,0 +1,102 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.w3c.dom", "Attr", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "getOwnerElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Attr", True, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNode", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getAttributeNodeNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getElementsByTagName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getElementsByTagNameNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "getTagName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "removeAttributeNode", "(Attr)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNode", "(Attr)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Element", True, "setAttributeNodeNS", "(Attr)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "getNamedItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "getNamedItemNS", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", True, "item", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "appendChild", "(Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "cloneNode", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getChildNodes", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.w3c.dom", "Node", True, "getFirstChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getLastChild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getLocalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNextSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNodeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getNodeValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getParentNode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "getPreviousSibling", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "insertBefore", "(Node,Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "removeChild", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "removeChild", "(Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "replaceChild", "(Node,Node)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.w3c.dom", "Node", True, "setNodeValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.w3c.dom", "NodeList", True, "item", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.w3c.dom", "Attr", "getSpecified", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Attr", "isId", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "getSchemaTypeInfo", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "hasAttribute", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "hasAttributeNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "removeAttribute", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "removeAttributeNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setAttribute", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setAttributeNS", "(String,String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttribute", "(String,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttributeNS", "(String,String,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "Element", "setIdAttributeNode", "(Attr,boolean)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "getLength", "()", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "removeNamedItem", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "removeNamedItemNS", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "setNamedItem", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "NamedNodeMap", "setNamedItemNS", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "compareDocumentPosition", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getBaseURI", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getFeature", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getNamespaceURI", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getNodeType", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getOwnerDocument", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getPrefix", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getTextContent", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "getUserData", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "hasAttributes", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "hasChildNodes", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isDefaultNamespace", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isEqualNode", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isSameNode", "(Node)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "isSupported", "(String,String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "lookupNamespaceURI", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "lookupPrefix", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "normalize", "()", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setPrefix", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setTextContent", "(String)", "summary", "df-generated"] + - ["org.w3c.dom", "Node", "setUserData", "(String,Object,UserDataHandler)", "summary", "df-generated"] + - ["org.w3c.dom", "NodeList", "getLength", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.xml.sax.model.yml b/java/ql/lib/ext/generated/org.xml.sax.model.yml new file mode 100644 index 00000000000..b8377f80341 --- /dev/null +++ b/java/ql/lib/ext/generated/org.xml.sax.model.yml @@ -0,0 +1,17 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.xml.sax", "ContentHandler", True, "startElement", "(String,String,String,Attributes)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["org.xml.sax", "EntityResolver", True, "resolveEntity", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.xml.sax", "EntityResolver", True, "resolveEntity", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.xml.sax", "ContentHandler", "endElement", "(String,String,String)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "error", "(SAXParseException)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "fatalError", "(SAXParseException)", "summary", "df-generated"] + - ["org.xml.sax", "ErrorHandler", "warning", "(SAXParseException)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.awt.model.yml b/java/ql/lib/ext/generated/sun.awt.model.yml new file mode 100644 index 00000000000..42476dac95e --- /dev/null +++ b/java/ql/lib/ext/generated/sun.awt.model.yml @@ -0,0 +1,11 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.awt", "AWTAccessor$AccessibleBundleAccessor", True, "getKey", "(AccessibleBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "getAppContext", "(AccessibleContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "getNativeAXResource", "(AccessibleContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "setAppContext", "(AccessibleContext,AppContext)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.awt", "AWTAccessor$AccessibleContextAccessor", True, "setNativeAXResource", "(AccessibleContext,Object)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.java2d.model.yml b/java/ql/lib/ext/generated/sun.java2d.model.yml new file mode 100644 index 00000000000..4e8c183dbaa --- /dev/null +++ b/java/ql/lib/ext/generated/sun.java2d.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.java2d", "DisposerRecord", "dispose", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.management.spi.model.yml b/java/ql/lib/ext/generated/sun.management.spi.model.yml new file mode 100644 index 00000000000..20407d0cdf8 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.management.spi.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.management.spi", "PlatformMBeanProvider", True, "getPlatformComponentList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.nio.ch.model.yml b/java/ql/lib/ext/generated/sun.nio.ch.model.yml new file mode 100644 index 00000000000..6bf0c30693e --- /dev/null +++ b/java/ql/lib/ext/generated/sun.nio.ch.model.yml @@ -0,0 +1,14 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.nio.ch", "DirectBuffer", True, "attachment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["sun.nio.ch", "DirectBuffer", True, "cleaner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.nio.ch", "DirectBuffer", "address", "()", "summary", "df-generated"] + - ["sun.nio.ch", "Interruptible", "interrupt", "(Thread)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.print.model.yml b/java/ql/lib/ext/generated/sun.print.model.yml new file mode 100644 index 00000000000..b680eb20867 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.print.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.print", "DialogOwnerAccessor", "getOwnerID", "(DialogOwner)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.security.krb5.model.yml b/java/ql/lib/ext/generated/sun.security.krb5.model.yml new file mode 100644 index 00000000000..464a5ae3afe --- /dev/null +++ b/java/ql/lib/ext/generated/sun.security.krb5.model.yml @@ -0,0 +1,13 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetClientAlias", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetProxy", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketGetServerAlias", "(KerberosTicket)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetClientAlias", "(KerberosTicket,KerberosPrincipal)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetProxy", "(KerberosTicket,KerberosTicket)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "kerberosTicketSetServerAlias", "(KerberosTicket,KerberosPrincipal)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["sun.security.krb5", "JavaxSecurityAuthKerberosAccess", True, "keyTabTakeSnapshot", "(KeyTab)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.security.util.model.yml b/java/ql/lib/ext/generated/sun.security.util.model.yml new file mode 100644 index 00000000000..3f742e5e297 --- /dev/null +++ b/java/ql/lib/ext/generated/sun.security.util.model.yml @@ -0,0 +1,7 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["sun.security.util", "MessageDigestSpi2", "engineUpdate", "(SecretKey)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml b/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml new file mode 100644 index 00000000000..66270c3750b --- /dev/null +++ b/java/ql/lib/ext/generated/sun.util.logging.internal.model.yml @@ -0,0 +1,9 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["sun.util.logging.internal", "LoggingProviderImpl$LogManagerAccess", True, "demandLoggerFor", "(LogManager,String,Module)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] From 311512c768277804df13195906245b8517dcb113 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 15 Mar 2024 14:23:29 +0000 Subject: [PATCH 353/497] Remove df-gen models for incidentally modelled APIs Manual models always take precedence over generated models, so there is no point in keeping the generated models. These APIs happened to have been modelled between model generation and merging this PR. --- java/ql/lib/ext/generated/java.nio.file.model.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/lib/ext/generated/java.nio.file.model.yml b/java/ql/lib/ext/generated/java.nio.file.model.yml index d149f2e47c5..342de82e556 100644 --- a/java/ql/lib/ext/generated/java.nio.file.model.yml +++ b/java/ql/lib/ext/generated/java.nio.file.model.yml @@ -100,8 +100,6 @@ extensions: - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.nio.file", "NotLinkException", True, "NotLinkException", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["java.nio.file", "Path", True, "resolveSibling", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Path", True, "resolveSibling", "(Path)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "ProviderMismatchException", True, "ProviderMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.nio.file", "ProviderNotFoundException", True, "ProviderNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - addsTo: From 121b24ea7c0e21f2032afc64b54f4de85bda9275 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 27 Mar 2024 08:16:06 -0400 Subject: [PATCH 354/497] Java: remove parentheses --- .../semmle/code/java/security/UrlForwardQuery.qll | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index 30de4ef8354..e90267694b5 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -12,12 +12,12 @@ module UrlForwardFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource and // excluded due to FPs - not exists(MethodCall mc, Method m | mc.getMethod() = m | - ( - m instanceof HttpServletRequestGetRequestUriMethod or - m instanceof HttpServletRequestGetRequestUrlMethod or - m instanceof HttpServletRequestGetPathMethod - ) and + not exists(MethodCall mc, Method m | + m instanceof HttpServletRequestGetRequestUriMethod or + m instanceof HttpServletRequestGetRequestUrlMethod or + m instanceof HttpServletRequestGetPathMethod + | + mc.getMethod() = m and mc = source.asExpr() ) } From b8e38288e391c46168b989b45f5955fd3421ef58 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 12:14:19 +0100 Subject: [PATCH 355/497] Swift: add extraction of `ThenStmt` These are currently added implicitly by the compiler in the context of `if`/`switch` expressions. In the future, there might be explicit `then ` statement useful for cases where one would like to add more than one statement in the branch, to mark what value to actually use. See https://forums.swift.org/t/pitch-multi-statement-if-switch-do-expressions/68443 --- swift/extractor/infra/SwiftTagTraits.h | 2 +- .../extractor/translators/StmtTranslator.cpp | 6 +++ swift/extractor/translators/StmtTranslator.h | 1 + swift/ql/.generated.list | 14 +++-- swift/ql/.gitattributes | 4 ++ swift/ql/lib/codeql/swift/elements.qll | 1 + .../codeql/swift/elements/stmt/ThenStmt.qll | 19 +++++++ .../elements/stmt/ThenStmtConstructor.qll | 14 +++++ .../codeql/swift/generated/ParentChild.qll | 15 ++++++ swift/ql/lib/codeql/swift/generated/Raw.qll | 21 ++++++++ swift/ql/lib/codeql/swift/generated/Synth.qll | 24 ++++++++- .../swift/generated/SynthConstructors.qll | 1 + .../codeql/swift/generated/stmt/ThenStmt.qll | 54 +++++++++++++++++++ swift/ql/lib/swift.dbscheme | 6 +++ .../SingleValueStmtExpr.expected | 3 +- .../SingleValueStmtExpr_getType.expected | 3 +- .../SingleValueStmtExpr/ThenStmt.expected | 4 ++ .../expr/SingleValueStmtExpr/ThenStmt.ql | 10 ++++ .../expr/SingleValueStmtExpr/test.swift | 6 +++ swift/schema.py | 14 +++++ 20 files changed, 213 insertions(+), 9 deletions(-) create mode 100644 swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll create mode 100644 swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll create mode 100644 swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll create mode 100644 swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected create mode 100644 swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql diff --git a/swift/extractor/infra/SwiftTagTraits.h b/swift/extractor/infra/SwiftTagTraits.h index b35bcef5a6a..fc3c6343ce5 100644 --- a/swift/extractor/infra/SwiftTagTraits.h +++ b/swift/extractor/infra/SwiftTagTraits.h @@ -43,7 +43,7 @@ MAP(swift::Stmt, StmtTag) MAP(swift::BraceStmt, BraceStmtTag) MAP(swift::ReturnStmt, ReturnStmtTag) MAP(swift::YieldStmt, YieldStmtTag) - MAP(swift::ThenStmt, void) // gated behind yet unusable experimental feature + MAP(swift::ThenStmt, ThenStmtTag) MAP(swift::DeferStmt, DeferStmtTag) MAP(swift::LabeledStmt, LabeledStmtTag) MAP(swift::LabeledConditionalStmt, LabeledConditionalStmtTag) diff --git a/swift/extractor/translators/StmtTranslator.cpp b/swift/extractor/translators/StmtTranslator.cpp index ac684a01606..a433c93f406 100644 --- a/swift/extractor/translators/StmtTranslator.cpp +++ b/swift/extractor/translators/StmtTranslator.cpp @@ -218,4 +218,10 @@ codeql::DiscardStmt StmtTranslator::translateDiscardStmt(const swift::DiscardStm return entry; } +codeql::ThenStmt StmtTranslator::translateThenStmt(const swift::ThenStmt& stmt) { + auto entry = dispatcher.createEntry(stmt); + entry.result = dispatcher.fetchLabel(stmt.getResult()); + return entry; +} + } // namespace codeql diff --git a/swift/extractor/translators/StmtTranslator.h b/swift/extractor/translators/StmtTranslator.h index e713a57ac16..d593411af37 100644 --- a/swift/extractor/translators/StmtTranslator.h +++ b/swift/extractor/translators/StmtTranslator.h @@ -40,6 +40,7 @@ class StmtTranslator : public AstTranslatorBase { codeql::FailStmt translateFailStmt(const swift::FailStmt& stmt); codeql::PoundAssertStmt translatePoundAssertStmt(const swift::PoundAssertStmt& stmt); codeql::DiscardStmt translateDiscardStmt(const swift::DiscardStmt& stmt); + codeql::ThenStmt translateThenStmt(const swift::ThenStmt& stmt); private: void fillLabeledStmt(const swift::LabeledStmt& stmt, codeql::LabeledStmt& entry); diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index e6e778ebdd9..aa85f4aff4e 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -271,6 +271,8 @@ lib/codeql/swift/elements/stmt/ReturnStmtConstructor.qll 2c66c1b1ece31bcfee06c87 lib/codeql/swift/elements/stmt/Stmt.qll b21643c4dd6a7e22c422df36c66d7389918c71cb05e71b58c2086f998035ca8a 2fd87fce67d61461dfd40f1430b67e2611729eb3205fd508a79c4fabf6cc51b8 lib/codeql/swift/elements/stmt/StmtConditionConstructor.qll 978a7c1dd6cc51194c847a6ed4785200515d90d484d013c367d7b86a177656f2 4a0dd278470676232b29e2ed02fef5b88061d9dd3ca082238e5fc4e978dcd66f lib/codeql/swift/elements/stmt/SwitchStmtConstructor.qll 8431feb4b68505ac0072be07a6ed07d71559daf5443e5164d0aad38bc8c5cc12 98a9e32dc3774e47070ec3b0f7f4febfe2ec298858955275e22471682da270bc +lib/codeql/swift/elements/stmt/ThenStmt.qll 70c38206142fa0bc5bbcfe3661dbfb4dcc53416160eef3e6f301504cddb4b0ae f7066479d4319db057de7d49d723dbfa9a6bc221738f8ea6cea795f5ef1e341a +lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll 88823800957584b9a5f9601f85f75875d45d262718d736851b0e40d4028c5dc1 98c480d82177e5d223307aa0e2fe82bf859915b050ec66a5d959f7d0e58ee068 lib/codeql/swift/elements/stmt/ThrowStmtConstructor.qll 974ec76e814030df10362a516da9aa0f90dbb1040ef3297a12632b0654d95dfc a02f73cd6f36d96d6093ffb4608be6e5fb15d8412f3c4ff0f4648b82b909f582 lib/codeql/swift/elements/stmt/WhileStmtConstructor.qll a49c46100da57dc6e8b3cfcc665bd2d6cfa1b49efb0f7d66f49ed719b42ff34d d527c8f6d08b91917d209554c76aade2b35b90c09caec6aa21c3ba951e8e8bf7 lib/codeql/swift/elements/stmt/YieldStmtConstructor.qll ac2047e02add0796b5eff4180c777dc4ebd4bc52c2083036b959e3a1caa41bad 78209a97874bc3bb2c4c3b919ff4b9e68010b0d047d2b455881b980f5100767a @@ -390,7 +392,7 @@ lib/codeql/swift/elements/type/UnresolvedTypeConstructor.qll 7f75d489b4d7ce65cae lib/codeql/swift/elements/type/VariadicSequenceTypeConstructor.qll fc74a5a2a2effa28ef24509b20ee4373d97cf6e8c71840121bb031c6adedf584 c9b2effc1d01c13c5e6a74a111122fa79a2f6554dda3cb016d68ba397e566ec4 lib/codeql/swift/elements/type/WeakStorageType.qll edd13dd97b53040684409e187c1f975bcada6807c919e1345d8977144dbebb6f 9434c044d264a7f5f503a6422c106c9b8fedf74aaae314174473a29ea6ed17b9 lib/codeql/swift/elements/type/WeakStorageTypeConstructor.qll 5fdce3716aba6318522174a2c455a63480970222ae81c732fb19c6dd3ae2d271 60ea79d6943e129deba0deccb566cf9d73f78398b0f7f0212674d91287d6b2ae -lib/codeql/swift/elements.qll 27da89b0b50ea17b96a47aad31453ff0d43b8277ab660385f785879ce6cc243e 27da89b0b50ea17b96a47aad31453ff0d43b8277ab660385f785879ce6cc243e +lib/codeql/swift/elements.qll bb863ff140bfaa0bf887708f421a16c85816886f4d061bbc5af752a4e4d810d3 bb863ff140bfaa0bf887708f421a16c85816886f4d061bbc5af752a4e4d810d3 lib/codeql/swift/generated/AstNode.qll 68877daa9e14b462247ac6b7b724f5e683288e39953a8ebb02a362b7d1df8e4c 54d3512744738e1ee15645f3af116437053cb5209687f4106361a1943b38b666 lib/codeql/swift/generated/AvailabilityInfo.qll e74e218a1ab00416cb8823610ff93642101aa784aa61cbc2b4deef61471a5bac e2c6c19860dc3e6e211041c95d8e6d52c3505ccff7018b80a849735cc98141af lib/codeql/swift/generated/AvailabilitySpec.qll a8afc5071887a67b4e0dec27356ab8cbf3e176b5358cb34c785e3015b2cad5a2 c7f88b0d701612c821359c983b3102f31b23edc211c3dcfe97de5adec61af386 @@ -407,12 +409,12 @@ lib/codeql/swift/generated/Locatable.qll 6cb437dd7ff7331429ec6586b0af50b1af15e4f lib/codeql/swift/generated/Location.qll 3f3bad413be87d05a596fe7b8004f415c2caa98cb759021a6aad20b589b7d700 ed30ed646962b3ffb6b47c97c6434fe47a6b1ea8e3f2e0589577bea5cf96c88e lib/codeql/swift/generated/MacroRole.qll aaf5631c49de81e046854955341202d6d3516713cd09bc2e7b870e40c261cc9f 6cd17d40cbf1d8fa4ef01dfb8b3462b7cee902e6058fb76417c2035be12481d1 lib/codeql/swift/generated/OtherAvailabilitySpec.qll 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 -lib/codeql/swift/generated/ParentChild.qll 523f0fdf11a8007a80b35d7f8b99f736face08513311c8e998ca20ae1e535ebe 2829f5e61adbd863f4ad823ecfd7c1bb5eccaf14bb121b85ad460175b733fe30 +lib/codeql/swift/generated/ParentChild.qll 2489604e46253d81d7f8e3a8f0a7905481e5b2811d5016794ce5b66846cec22e f10627c078437dc9b8ce98d2a1559e660f86e2aea1d42feac1a79f2e68eeae8a lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll 5355be9da8b778d1d8ae60d25d9c3394477da24f94e8a6ab4484c6a16d07cd7c 075438c1762ec0a7775004b39032dcf85aada038a4269e6f428c34b8282786e9 lib/codeql/swift/generated/PureSynthConstructors.qll 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 -lib/codeql/swift/generated/Raw.qll 252bb96829d1c284ec8036e54f14db83d5a3c9be1c2bdc05bc7add7cf46ca618 4cdc6643270b2fc78805635a738dfd506bdee9dc770bc74ec66558c1efff7697 -lib/codeql/swift/generated/Synth.qll b8bf274c60f60df473ed9093b50906822613dee047bda19ad37d07c308f04564 692590b0b18556a23cc1de0c8a60fd17534791dccb876cab85170bbf78392bd1 -lib/codeql/swift/generated/SynthConstructors.qll d3b4b5d93be989004d7c05bbc32a5b859eaad768b4a52cfb01a767c90542f9a4 d3b4b5d93be989004d7c05bbc32a5b859eaad768b4a52cfb01a767c90542f9a4 +lib/codeql/swift/generated/Raw.qll 10633b948918d315b98b6ff6733d4c368e082c5afd78334c0862291f9d883216 66abde4c9a2283773033d90a4633c1203d6563fc238ddbd48fdf1b910f90021a +lib/codeql/swift/generated/Synth.qll 848284b2ae9854c5be74e5ef50a51090e248e5c9c02289a6bc63455e440122da e2607f46a4830e81718ca1636fa65bc29420a18539443d109fafd7f1af1591ce +lib/codeql/swift/generated/SynthConstructors.qll 7edffc30d3dddc4d73241f4e0d3df4501a99eb38d056f82043ed69e481404342 7edffc30d3dddc4d73241f4e0d3df4501a99eb38d056f82043ed69e481404342 lib/codeql/swift/generated/UnknownFile.qll 5325944cf96a72d5d224597745e15960fb6a9448b96b6644ececd6344dfd9d74 5325944cf96a72d5d224597745e15960fb6a9448b96b6644ececd6344dfd9d74 lib/codeql/swift/generated/UnknownLocation.qll dfdeb8eedb2564eccaac416695784ea04fe9754a3e109e8484c695021af4e554 dfdeb8eedb2564eccaac416695784ea04fe9754a3e109e8484c695021af4e554 lib/codeql/swift/generated/UnspecifiedElement.qll 8ecc275cc131fe5aa61052299e10c49c3718f96416df9eeacabf5aea34d97982 b02dfcf0df3859551b176e065291da943670ab4da6ed84d02a0861ff689001c6 @@ -624,6 +626,7 @@ lib/codeql/swift/generated/stmt/ReturnStmt.qll 82910f3c8360b39a2b5b649d41d206372 lib/codeql/swift/generated/stmt/Stmt.qll 3912b8b28aaf01624ac377bdf8caae2c20741c9ef98cef75156e1b0c3a8b5163 9805adf45af0ad4a0734477a5d80b5bcbb2bece8e83411a76aba96042d0c7f18 lib/codeql/swift/generated/stmt/StmtCondition.qll cf03296a32292d836ff9050ffc6d3d5fc56c90f9473e7f70a67116417590ee76 c5694a39bdcab60beaa04a275ec99616dd868c12c878513f783a0eb52f328ba9 lib/codeql/swift/generated/stmt/SwitchStmt.qll 4e0ee2230d295e7b592e837b3ad94f122540f06107139a279302f67cff5cefe8 5bd92a4997e7308b046d985f04f21b1f4284c6f782b56563c1020021f34755a4 +lib/codeql/swift/generated/stmt/ThenStmt.qll b0fb20f9ebfa836675912c385c133acbfc57f48b431a58ede48099cac131491d c78838d9084ff18f813e9cad68a56f8a838ed4ac59f046411442226bb41ad763 lib/codeql/swift/generated/stmt/ThrowStmt.qll 888825d19ced5a03dad6a20af8f8d86e8d8eb8fd8f69eaba9c0d0b58cbefac90 517d4aa93a9ae1874ac64dc1d6a170b4cde8e51c8f842dcba058ff2c61086ffd lib/codeql/swift/generated/stmt/WhileStmt.qll cca25bd25aaea758dce474354d5e57d92eaa5ca5abb918f8d677feb2be6d3b0d d7ae1bdd69c25d8eb882522053b07048f3a0f1bb5ed8dcbd5b3efbfe0f72631b lib/codeql/swift/generated/stmt/YieldStmt.qll c4619558f406dcf3ed1a0171b6c4b93c415fb5419745391c4df217d45e76b3f0 ca5c954cacf21233a35b88fe3e6de2eba0017e4e08b3f51b9d2bac6b01d8a219 @@ -898,6 +901,7 @@ test/extractor-tests/generated/expr/RebindSelfInInitializerExpr/MISSING_SOURCE.t test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql efbfaf798a86c5a7d8053a22f61249208db31edcdaf750f2671057ad2f376806 d3256d2315d5bd5420b40a4be9522752bb57897807ea3853a7a4c61e9a05e478 test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql bfbeb24e57078b1bbaae331a6f3e8d13d0efbdca2228dbbca53b86d5e287efd8 864351b87f7981825e148a479e997936c653a4581e8a893eaed96ddeed891eab +test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql 0bd26223160e846cfa64fad75672eab18b8ce27e24d802bc711f42a540d13ac7 6a5b7760c44ee34c6e33a517a52622cc70dbdee88eb20eaea787be0e1f888996 test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 test/extractor-tests/generated/expr/SuperRefExpr/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 diff --git a/swift/ql/.gitattributes b/swift/ql/.gitattributes index 44b728f62e6..e5eaf58d62a 100644 --- a/swift/ql/.gitattributes +++ b/swift/ql/.gitattributes @@ -273,6 +273,8 @@ /lib/codeql/swift/elements/stmt/Stmt.qll linguist-generated /lib/codeql/swift/elements/stmt/StmtConditionConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/SwitchStmtConstructor.qll linguist-generated +/lib/codeql/swift/elements/stmt/ThenStmt.qll linguist-generated +/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/ThrowStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/WhileStmtConstructor.qll linguist-generated /lib/codeql/swift/elements/stmt/YieldStmtConstructor.qll linguist-generated @@ -626,6 +628,7 @@ /lib/codeql/swift/generated/stmt/Stmt.qll linguist-generated /lib/codeql/swift/generated/stmt/StmtCondition.qll linguist-generated /lib/codeql/swift/generated/stmt/SwitchStmt.qll linguist-generated +/lib/codeql/swift/generated/stmt/ThenStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/ThrowStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/WhileStmt.qll linguist-generated /lib/codeql/swift/generated/stmt/YieldStmt.qll linguist-generated @@ -900,6 +903,7 @@ /test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql linguist-generated +/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql linguist-generated /test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SuperRefExpr/MISSING_SOURCE.txt linguist-generated diff --git a/swift/ql/lib/codeql/swift/elements.qll b/swift/ql/lib/codeql/swift/elements.qll index 32128d83e3c..e6e505e5da6 100644 --- a/swift/ql/lib/codeql/swift/elements.qll +++ b/swift/ql/lib/codeql/swift/elements.qll @@ -227,6 +227,7 @@ import codeql.swift.elements.stmt.ReturnStmt import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.stmt.StmtCondition import codeql.swift.elements.stmt.SwitchStmt +import codeql.swift.elements.stmt.ThenStmt import codeql.swift.elements.stmt.ThrowStmt import codeql.swift.elements.stmt.WhileStmt import codeql.swift.elements.stmt.YieldStmt diff --git a/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll new file mode 100644 index 00000000000..49291d43b8c --- /dev/null +++ b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmt.qll @@ -0,0 +1,19 @@ +// generated by codegen/codegen.py, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `ThenStmt`. + */ + +private import codeql.swift.generated.stmt.ThenStmt + +/** + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + */ +class ThenStmt extends Generated::ThenStmt { } diff --git a/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll new file mode 100644 index 00000000000..dbedcd7c2ca --- /dev/null +++ b/swift/ql/lib/codeql/swift/elements/stmt/ThenStmtConstructor.qll @@ -0,0 +1,14 @@ +// generated by codegen/codegen.py, remove this comment if you wish to edit this file +/** + * This module defines the hook used internally to tweak the characteristic predicate of + * `ThenStmt` synthesized instances. + * INTERNAL: Do not use. + */ + +private import codeql.swift.generated.Raw + +/** + * The characteristic predicate of `ThenStmt` synthesized instances. + * INTERNAL: Do not use. + */ +predicate constructThenStmt(Raw::ThenStmt id) { any() } diff --git a/swift/ql/lib/codeql/swift/generated/ParentChild.qll b/swift/ql/lib/codeql/swift/generated/ParentChild.qll index 2dc4a8f9d47..1a50686bf3d 100644 --- a/swift/ql/lib/codeql/swift/generated/ParentChild.qll +++ b/swift/ql/lib/codeql/swift/generated/ParentChild.qll @@ -3780,6 +3780,19 @@ private module Impl { ) } + private Element getImmediateChildOfThenStmt(ThenStmt e, int index, string partialPredicateCall) { + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfThrowStmt(ThrowStmt e, int index, string partialPredicateCall) { exists(int b, int bStmt, int n, int nSubExpr | b = 0 and @@ -5466,6 +5479,8 @@ private module Impl { or result = getImmediateChildOfReturnStmt(e, index, partialAccessor) or + result = getImmediateChildOfThenStmt(e, index, partialAccessor) + or result = getImmediateChildOfThrowStmt(e, index, partialAccessor) or result = getImmediateChildOfYieldStmt(e, index, partialAccessor) diff --git a/swift/ql/lib/codeql/swift/generated/Raw.qll b/swift/ql/lib/codeql/swift/generated/Raw.qll index 01f1f7e3179..69168ddd0a7 100644 --- a/swift/ql/lib/codeql/swift/generated/Raw.qll +++ b/swift/ql/lib/codeql/swift/generated/Raw.qll @@ -2923,6 +2923,27 @@ module Raw { Expr getResult() { return_stmt_results(this, result) } } + /** + * INTERNAL: Do not use. + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + */ + class ThenStmt extends @then_stmt, Stmt { + override string toString() { result = "ThenStmt" } + + /** + * Gets the result of this then statement. + */ + Expr getResult() { then_stmts(this, result) } + } + /** * INTERNAL: Do not use. */ diff --git a/swift/ql/lib/codeql/swift/generated/Synth.qll b/swift/ql/lib/codeql/swift/generated/Synth.qll index d8b5316ad92..778eb6462cf 100644 --- a/swift/ql/lib/codeql/swift/generated/Synth.qll +++ b/swift/ql/lib/codeql/swift/generated/Synth.qll @@ -823,6 +823,10 @@ module Synth { * INTERNAL: Do not use. */ TSwitchStmt(Raw::SwitchStmt id) { constructSwitchStmt(id) } or + /** + * INTERNAL: Do not use. + */ + TThenStmt(Raw::ThenStmt id) { constructThenStmt(id) } or /** * INTERNAL: Do not use. */ @@ -1311,7 +1315,7 @@ module Synth { class TStmt = TBraceStmt or TBreakStmt or TCaseStmt or TContinueStmt or TDeferStmt or TDiscardStmt or TFailStmt or TFallthroughStmt or TLabeledStmt or TPoundAssertStmt or TReturnStmt or - TThrowStmt or TYieldStmt; + TThenStmt or TThrowStmt or TYieldStmt; /** * INTERNAL: Do not use. @@ -2891,6 +2895,13 @@ module Synth { cached TSwitchStmt convertSwitchStmtFromRaw(Raw::Element e) { result = TSwitchStmt(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TThenStmt`, if possible. + */ + cached + TThenStmt convertThenStmtFromRaw(Raw::Element e) { result = TThenStmt(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TThrowStmt`, if possible. @@ -4116,6 +4127,8 @@ module Synth { or result = convertReturnStmtFromRaw(e) or + result = convertThenStmtFromRaw(e) + or result = convertThrowStmtFromRaw(e) or result = convertYieldStmtFromRaw(e) @@ -5854,6 +5867,13 @@ module Synth { cached Raw::Element convertSwitchStmtToRaw(TSwitchStmt e) { e = TSwitchStmt(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TThenStmt` to a raw DB element, if possible. + */ + cached + Raw::Element convertThenStmtToRaw(TThenStmt e) { e = TThenStmt(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TThrowStmt` to a raw DB element, if possible. @@ -7079,6 +7099,8 @@ module Synth { or result = convertReturnStmtToRaw(e) or + result = convertThenStmtToRaw(e) + or result = convertThrowStmtToRaw(e) or result = convertYieldStmtToRaw(e) diff --git a/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll b/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll index 8ce0d1ca540..28bec5d27e2 100644 --- a/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll +++ b/swift/ql/lib/codeql/swift/generated/SynthConstructors.qll @@ -190,6 +190,7 @@ import codeql.swift.elements.stmt.RepeatWhileStmtConstructor import codeql.swift.elements.stmt.ReturnStmtConstructor import codeql.swift.elements.stmt.StmtConditionConstructor import codeql.swift.elements.stmt.SwitchStmtConstructor +import codeql.swift.elements.stmt.ThenStmtConstructor import codeql.swift.elements.stmt.ThrowStmtConstructor import codeql.swift.elements.stmt.WhileStmtConstructor import codeql.swift.elements.stmt.YieldStmtConstructor diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll new file mode 100644 index 00000000000..8e00c4cfe88 --- /dev/null +++ b/swift/ql/lib/codeql/swift/generated/stmt/ThenStmt.qll @@ -0,0 +1,54 @@ +// generated by codegen/codegen.py +/** + * This module provides the generated definition of `ThenStmt`. + * INTERNAL: Do not import directly. + */ + +private import codeql.swift.generated.Synth +private import codeql.swift.generated.Raw +import codeql.swift.elements.expr.Expr +import codeql.swift.elements.stmt.Stmt + +/** + * INTERNAL: This module contains the fully generated definition of `ThenStmt` and should not + * be referenced directly. + */ +module Generated { + /** + * A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + * ``` + * let rank = switch value { + * case 0..<0x80: 1 + * case 0x80..<0x0800: 2 + * default: 3 + * } + * ``` + * the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + * INTERNAL: Do not reference the `Generated::ThenStmt` class directly. + * Use the subclass `ThenStmt`, where the following predicates are available. + */ + class ThenStmt extends Synth::TThenStmt, Stmt { + override string getAPrimaryQlClass() { result = "ThenStmt" } + + /** + * Gets the result of this then statement. + * + * This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the + * behavior of both the `Immediate` and non-`Immediate` versions. + */ + Expr getImmediateResult() { + result = + Synth::convertExprFromRaw(Synth::convertThenStmtToRaw(this).(Raw::ThenStmt).getResult()) + } + + /** + * Gets the result of this then statement. + */ + final Expr getResult() { + exists(Expr immediate | + immediate = this.getImmediateResult() and + result = immediate.resolve() + ) + } + } +} diff --git a/swift/ql/lib/swift.dbscheme b/swift/ql/lib/swift.dbscheme index 60be249ad16..15a630f68e1 100644 --- a/swift/ql/lib/swift.dbscheme +++ b/swift/ql/lib/swift.dbscheme @@ -1846,6 +1846,7 @@ condition_element_availabilities( //dir=stmt | @labeled_stmt | @pound_assert_stmt | @return_stmt +| @then_stmt | @throw_stmt | @yield_stmt ; @@ -1974,6 +1975,11 @@ return_stmt_results( //dir=stmt int result: @expr_or_none ref ); +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + throw_stmts( //dir=stmt unique int id: @throw_stmt, int sub_expr: @expr_or_none ref diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected index 8ddce624fb2..336aca667ee 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected @@ -1 +1,2 @@ -| test.swift:2:3:5:3 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:2:3:5:3 | switch x { ... } | +| test.swift:2:3:7:3 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:2:3:7:3 | switch x { ... } | +| test.swift:11:3:11:30 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:11:3:11:30 | if ... then { ... } else { ... } | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected index 2bf6c0cd5da..9d533e94cda 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected @@ -1 +1,2 @@ -| test.swift:2:3:5:3 | SingleValueStmtExpr | Int | +| test.swift:2:3:7:3 | SingleValueStmtExpr | Int | +| test.swift:11:3:11:30 | SingleValueStmtExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected new file mode 100644 index 00000000000..7138c023777 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.expected @@ -0,0 +1,4 @@ +| test.swift:4:5:4:5 | ThenStmt | getResult: | test.swift:4:5:4:5 | 1 | +| test.swift:6:5:6:5 | ThenStmt | getResult: | test.swift:6:5:6:5 | 0 | +| test.swift:11:17:11:17 | ThenStmt | getResult: | test.swift:11:17:11:17 | 1 | +| test.swift:11:28:11:28 | ThenStmt | getResult: | test.swift:11:28:11:28 | 0 | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql new file mode 100644 index 00000000000..ca24dfa1c4f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql @@ -0,0 +1,10 @@ +// generated by codegen/codegen.py +import codeql.swift.elements +import TestUtils + +from ThenStmt x, Expr getResult +where + toBeTested(x) and + not x.isUnknown() and + getResult = x.getResult() +select x, "getResult:", getResult diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift index b7f7077d5e8..0ef2c31c730 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/test.swift @@ -1,6 +1,12 @@ func a(_ x: Int) -> Int { switch x { + case 0: + 1 default: 0 } } + +func b(_ x: Int) -> Int { + if (x < 42) { 1 } else { 0 } +} diff --git a/swift/schema.py b/swift/schema.py index 1513c46c3e0..c31c7cfeacf 100644 --- a/swift/schema.py +++ b/swift/schema.py @@ -994,6 +994,20 @@ class ThrowStmt(Stmt): class YieldStmt(Stmt): results: list[Expr] | child +@qltest.test_with('SingleValueStmtExpr') +class ThenStmt(Stmt): + """ A statement implicitly wrapping values to be used in branches of if/switch expressions. For example in: + ``` + let rank = switch value { + case 0..<0x80: 1 + case 0x80..<0x0800: 2 + default: 3 + } + ``` + the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. + """ + result: Expr + class DoCatchStmt(LabeledStmt): body: Stmt | child catches: list[CaseStmt] | child From d9c40488bb826242b92d125000d9ff10c17b2f2d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 13:37:24 +0100 Subject: [PATCH 356/497] Swift: add `ThenStmt` to control flow --- .../internal/ControlFlowGraphImpl.qll | 9 ++ .../controlflow/graph/Cfg.expected | 148 +++++++++++++++++- .../library-tests/controlflow/graph/cfg.swift | 7 + 3 files changed, 158 insertions(+), 6 deletions(-) diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll index 705df1ed2f5..f785bd0f278 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll @@ -255,6 +255,15 @@ module Stmts { } } + private class ThenStmtTree extends AstStandardPostOrderTree { + override ThenStmt ast; + + final override ControlFlowElement getChildNode(int i) { + i = 0 and + result.asAstNode() = ast.getResult() + } + } + private class FailTree extends AstLeafTree { override FailStmt ast; } diff --git a/swift/ql/test/library-tests/controlflow/graph/Cfg.expected b/swift/ql/test/library-tests/controlflow/graph/Cfg.expected index 1a1c7fc903d..184b07a132f 100644 --- a/swift/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/swift/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -340,9 +340,9 @@ cfg.swift: #-----| exception -> exit mightThrow(x:) (abnormal) # 19| MyError.Type -#-----| -> (Error) ... +#-----| -> (any Error) ... -# 19| (Error) ... +# 19| (any Error) ... #-----| -> throw ... # 19| .error1 @@ -379,11 +379,11 @@ cfg.swift: # 22| .error3 #-----| -> MyError.Type -# 22| (Error) ... +# 22| (any Error) ... #-----| -> throw ... # 22| call to ... -#-----| -> (Error) ... +#-----| -> (any Error) ... # 22| x #-----| -> 1 @@ -6728,11 +6728,11 @@ cfg.swift: # 568| MyProcotolImpl.init() #-----| -> MyProcotolImpl.Type -# 568| (MyProtocol) ... +# 568| (any MyProtocol) ... #-----| -> return ... # 568| call to MyProcotolImpl.init() -#-----| -> (MyProtocol) ... +#-----| -> (any MyProtocol) ... # 569| enter getMyProtocolImpl() #-----| -> getMyProtocolImpl() @@ -6868,3 +6868,139 @@ cfg.swift: # 577| call to source() #-----| -> call to sink(arg:) + +# 580| enter singleStmtExpr(_:) +#-----| -> singleStmtExpr(_:) + +# 580| exit singleStmtExpr(_:) + +# 580| exit singleStmtExpr(_:) (normal) +#-----| -> exit singleStmtExpr(_:) + +# 580| singleStmtExpr(_:) +#-----| -> x + +# 580| x +#-----| -> a + +# 581| var ... = ... +#-----| -> b + +# 581| a +#-----| match -> switch x { ... } + +# 581| SingleValueStmtExpr +#-----| -> var ... = ... + +# 581| switch x { ... } +#-----| -> x + +# 581| x +#-----| -> case ... + +# 582| case ... +#-----| -> =~ ... + +# 582| .~=(_:_:) +#-----| -> Range.Type + +# 582| 0 +#-----| -> 5 + +# 582| Range.Type +#-----| -> ...<(_:_:) + +# 582| ... ...<(_:_:) ... +#-----| -> $match + +# 582| ... .~=(_:_:) ... +#-----| -> =~ ... + +# 582| =~ ... +#-----| -> .~=(_:_:) + +# 582| =~ ... +#-----| match -> 1 +#-----| no-match -> case ... + +# 582| ...<(_:_:) +#-----| -> Int.Type + +# 582| Int.Type +#-----| -> 0 + +# 582| $match +#-----| -> ... .~=(_:_:) ... + +# 582| 5 +#-----| -> ... ...<(_:_:) ... + +# 582| 1 +#-----| -> ThenStmt + +# 582| ThenStmt +#-----| -> SingleValueStmtExpr + +# 583| _ +#-----| match -> 2 + +# 583| _ +#-----| -> _ + +# 583| case ... +#-----| -> _ + +# 583| 2 +#-----| -> ThenStmt + +# 583| ThenStmt +#-----| -> SingleValueStmtExpr + +# 585| var ... = ... +#-----| -> exit singleStmtExpr(_:) (normal) + +# 585| b +#-----| match -> if ... then { ... } else { ... } + +# 585| SingleValueStmtExpr +#-----| -> var ... = ... + +# 585| if ... then { ... } else { ... } +#-----| -> StmtCondition + +# 585| StmtCondition +#-----| -> .<(_:_:) + +# 585| [false] (...) +#-----| false -> 2 + +# 585| [true] (...) +#-----| true -> 1 + +# 585| x +#-----| -> 42 + +# 585| ... .<(_:_:) ... +#-----| false -> [false] (...) +#-----| true -> [true] (...) + +# 585| .<(_:_:) +#-----| -> Int.Type + +# 585| Int.Type +#-----| -> x + +# 585| 42 +#-----| -> ... .<(_:_:) ... + +# 585| 1 +#-----| -> ThenStmt + +# 585| ThenStmt +#-----| -> SingleValueStmtExpr + +# 585| 2 +#-----| -> ThenStmt + +# 585| ThenStmt +#-----| -> SingleValueStmtExpr diff --git a/swift/ql/test/library-tests/controlflow/graph/cfg.swift b/swift/ql/test/library-tests/controlflow/graph/cfg.swift index 270f616cd9c..09090fc70ba 100644 --- a/swift/ql/test/library-tests/controlflow/graph/cfg.swift +++ b/swift/ql/test/library-tests/controlflow/graph/cfg.swift @@ -577,4 +577,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) { sink(arg: getMyProtocolImpl().source()) } +func singleStmtExpr(_ x: Int) { + let a = switch x { + case 0..<5: 1 + default: 2 + } + let b = if (x < 42) { 1 } else { 2 } +} // --- From 2391fe7d89ff46cad715c09963c73ae6a8fd6f90 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 27 Mar 2024 08:44:17 -0400 Subject: [PATCH 357/497] Java: use InlineFlowTest instead of InlineExpectationsTest --- .../security/CWE-552/UrlForwardTest.expected | 2 - .../security/CWE-552/UrlForwardTest.java | 42 +++++++++---------- .../security/CWE-552/UrlForwardTest.ql | 18 +------- 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected index 8ec8033d086..e69de29bb2d 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected @@ -1,2 +0,0 @@ -testFailures -failures diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index f0e982c7400..a1437a692a2 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -26,25 +26,25 @@ public class UrlForwardTest extends HttpServlet implements Filter { // Spring `ModelAndView` test cases @GetMapping("/bad1") public ModelAndView bad1(String url) { - return new ModelAndView(url); // $ hasUrlForward + return new ModelAndView(url); // $ hasTaintFlow } @GetMapping("/bad2") public ModelAndView bad2(String url) { ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); // $ hasUrlForward + modelAndView.setViewName(url); // $ hasTaintFlow return modelAndView; } // Spring `"forward:"` prefix test cases @GetMapping("/bad3") public String bad3(String url) { - return "forward:" + url + "/swagger-ui/index.html"; // $ hasUrlForward + return "forward:" + url + "/swagger-ui/index.html"; // $ hasTaintFlow } @GetMapping("/bad4") public ModelAndView bad4(String url) { - ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasUrlForward + ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasTaintFlow return modelAndView; } @@ -60,7 +60,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { @GetMapping("/bad5") public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher(url).include(request, response); // $ hasUrlForward + request.getRequestDispatcher(url).include(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -71,7 +71,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { @GetMapping("/bad6") public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasUrlForward + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -82,7 +82,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { @GetMapping("/bad7") public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasUrlForward + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -106,7 +106,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) { try { String url = "/pages" + urlPath; - request.getRequestDispatcher(url).forward(request, response); // $ hasUrlForward + request.getRequestDispatcher(url).forward(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -145,7 +145,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { String path = ((HttpServletRequest) request).getServletPath(); // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow } else { chain.doFilter(request, response); } @@ -158,7 +158,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { String path = ((HttpServletRequest) request).getServletPath(); if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow } else { chain.doFilter(request, response); } @@ -190,7 +190,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { rd.forward(request, response); } else { ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUrlForward + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasTaintFlow rd.forward(request, response); } } @@ -206,7 +206,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); rd.forward(request, response); } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUrlForward + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasTaintFlow rd.forward(request, response); } } @@ -233,7 +233,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -244,7 +244,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { String path = request.getParameter("path"); if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -258,7 +258,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow } } @@ -270,7 +270,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow } } @@ -281,7 +281,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { path = URLDecoder.decode(path, "UTF-8"); if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -319,7 +319,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { String path = request.getParameter("path"); if (path.contains("%")){ // incorrect check if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } } @@ -362,14 +362,14 @@ public class UrlForwardTest extends HttpServlet implements Filter { } if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasUrlForward + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasTaintFlow } } // BAD: `StaplerResponse.forward` without any checks public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { String url = req.getParameter("target"); - rsp.forward(obj, url, req); // $ hasUrlForward + rsp.forward(obj, url, req); // $ hasTaintFlow } // QHelp example @@ -381,7 +381,7 @@ public class UrlForwardTest extends HttpServlet implements Filter { ServletContext sc = cfg.getServletContext(); // BAD: a request parameter is incorporated without validation into a URL forward - sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasUrlForward + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasTaintFlow // GOOD: the request parameter is validated against a known fixed string if (VALID_FORWARD.equals(request.getParameter("target"))) { diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql index 4e62a35752b..34841885bc3 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql @@ -1,18 +1,4 @@ import java -import TestUtilities.InlineExpectationsTest +import TestUtilities.InlineFlowTest import semmle.code.java.security.UrlForwardQuery - -module UrlForwardTest implements TestSig { - string getARelevantTag() { result = "hasUrlForward" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasUrlForward" and - exists(UrlForwardFlow::PathNode sink | UrlForwardFlow::flowPath(_, sink) | - location = sink.getNode().getLocation() and - element = sink.getNode().toString() and - value = "" - ) - } -} - -import MakeTest +import TaintFlowTest From 0243d9f2b9c66429ccc8d6d1415baebbe2b0518e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 13:49:15 +0100 Subject: [PATCH 358/497] Swift: accept explicit `any` in existential type name --- .../posix-only/deduplication/Decls.expected | 4 ++-- .../extractor-tests/expressions/all.expected | 2 +- .../ImplicitConversionExpr.expected | 2 +- .../ImplicitConversionExpr_getType.expected | 2 +- .../ExistentialType/ExistentialType.expected | 6 ++--- .../OpenedArchetypeType.expected | 2 +- .../OpenedArchetypeType_getProtocol.expected | 4 ++-- ...OpenedArchetypeType_getSuperclass.expected | 2 +- .../test/library-tests/ast/PrintAst.expected | 22 +++++++++---------- .../type/nominaltype/nominaltype.expected | 6 ++--- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/swift/ql/integration-tests/posix-only/deduplication/Decls.expected b/swift/ql/integration-tests/posix-only/deduplication/Decls.expected index edfdbafdbf5..08ea0335af8 100644 --- a/swift/ql/integration-tests/posix-only/deduplication/Decls.expected +++ b/swift/ql/integration-tests/posix-only/deduplication/Decls.expected @@ -46,8 +46,8 @@ | Sources/deduplication/def.swift:26:36:26:39 | _ | ParamDecl | A [GenericTypeParamType] | | Sources/deduplication/def.swift:26:42:26:45 | _ | ParamDecl | B [GenericTypeParamType] | | Sources/deduplication/def.swift:26:48:26:51 | _ | ParamDecl | C [GenericTypeParamType] | -| Sources/deduplication/def.swift:28:1:28:21 | Protocol1 | ProtocolDecl | Protocol1.Protocol [MetatypeType] | -| Sources/deduplication/def.swift:29:1:31:1 | Protocol2 | ProtocolDecl | Protocol2.Protocol [MetatypeType] | +| Sources/deduplication/def.swift:28:1:28:21 | Protocol1 | ProtocolDecl | Protocol1.Type [MetatypeType] | +| Sources/deduplication/def.swift:29:1:31:1 | Protocol2 | ProtocolDecl | Protocol2.Type [MetatypeType] | | Sources/deduplication/def.swift:30:5:30:20 | Associated | AssociatedTypeDecl | Self.Associated.Type [MetatypeType] | | Sources/deduplication/def.swift:32:1:32:14 | Class | ClassDecl | Class.Type [MetatypeType] | | Sources/deduplication/def.swift:32:7:32:7 | Class.deinit() | Deinitializer | (Class) -> () -> () [FunctionType] | diff --git a/swift/ql/test/extractor-tests/expressions/all.expected b/swift/ql/test/extractor-tests/expressions/all.expected index 927a7099bac..bc8fae6529b 100644 --- a/swift/ql/test/extractor-tests/expressions/all.expected +++ b/swift/ql/test/extractor-tests/expressions/all.expected @@ -31,7 +31,7 @@ | expressions.swift:15:11:15:11 | Int.Type | TypeExpr | | expressions.swift:15:14:15:14 | 0 | IntegerLiteralExpr | | expressions.swift:16:11:16:11 | AnError.Type | TypeExpr | -| expressions.swift:16:11:16:19 | (Error) ... | ErasureExpr | +| expressions.swift:16:11:16:19 | (any Error) ... | ErasureExpr | | expressions.swift:16:11:16:19 | .failed | MethodLookupExpr | | expressions.swift:16:19:16:19 | failed | DeclRefExpr | | expressions.swift:20:1:20:16 | try! ... | ForceTryExpr | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected index 90e2af39d30..9baeaf41241 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected @@ -1,5 +1,5 @@ | implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | StringToPointerExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:2:3:2:3 | Hello | | implicit_conversions.swift:4:16:4:16 | (Int?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:4:16:4:16 | 42 | -| implicit_conversions.swift:5:25:5:25 | (Equatable) ... | ErasureExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | ErasureExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | | implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | AbiSafeConversionExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:3:12:5 | .b | | implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:9:12:10 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected index d8dfc2cd957..e57454212df 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected @@ -1,5 +1,5 @@ | implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | UnsafePointer | | implicit_conversions.swift:4:16:4:16 | (Int?) ... | Int? | -| implicit_conversions.swift:5:25:5:25 | (Equatable) ... | Equatable | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | any Equatable | | implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | @lvalue (() -> Void)? | | implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | (() -> Void)? | diff --git a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected index 39ad24b358b..56c84e91878 100644 --- a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected +++ b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.expected @@ -1,3 +1,3 @@ -| ExplicitExistential | getName: | ExplicitExistential | getCanonicalType: | ExplicitExistential | getConstraint: | ExplicitExistential | -| ImplicitExistential | getName: | ImplicitExistential | getCanonicalType: | ImplicitExistential | getConstraint: | ImplicitExistential | -| P1 & P2 | getName: | P1 & P2 | getCanonicalType: | P1 & P2 | getConstraint: | P1 & P2 | +| any ExplicitExistential | getName: | any ExplicitExistential | getCanonicalType: | any ExplicitExistential | getConstraint: | ExplicitExistential | +| any ImplicitExistential | getName: | any ImplicitExistential | getCanonicalType: | any ImplicitExistential | getConstraint: | ImplicitExistential | +| any P1 & P2 | getName: | any P1 & P2 | getCanonicalType: | any P1 & P2 | getConstraint: | P1 & P2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected index 05697f352ba..24471c96e6c 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected @@ -1 +1 @@ -| C & P1 & P2 | getName: | C & P1 & P2 | getCanonicalType: | C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | yes | getNumberOfProtocols: | 2 | +| any C & P1 & P2 | getName: | any C & P1 & P2 | getCanonicalType: | any C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | yes | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected index 5899ea9308a..691608328bb 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected @@ -1,2 +1,2 @@ -| C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | -| C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | +| any C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | +| any C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected index be1cb7dcb05..dffe6bf270a 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected @@ -1 +1 @@ -| C & P1 & P2 | C | +| any C & P1 & P2 | C | diff --git a/swift/ql/test/library-tests/ast/PrintAst.expected b/swift/ql/test/library-tests/ast/PrintAst.expected index 8ef414bb530..d3a7ababcc4 100644 --- a/swift/ql/test/library-tests/ast/PrintAst.expected +++ b/swift/ql/test/library-tests/ast/PrintAst.expected @@ -88,7 +88,7 @@ cfg.swift: # 19| getBase(): [TypeExpr] MyError.Type # 19| getTypeRepr(): [TypeRepr] MyError # 19| getMethodRef(): [DeclRefExpr] error1 -# 19| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 19| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 21| getElement(1): [GuardStmt] guard ... else { ... } # 21| getCondition(): [StmtCondition] StmtCondition # 21| getElement(0): [ConditionElement] ... .<=(_:_:) ... @@ -118,7 +118,7 @@ cfg.swift: # 22| getExpr(): [DeclRefExpr] x # 22| getArgument(1): [Argument] : 1 # 22| getExpr(): [IntegerLiteralExpr] 1 -# 22| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 22| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 26| [NamedFunction] tryCatch(x:) # 26| InterfaceType = (Int) -> Int # 26| getParam(0): [ParamDecl] x @@ -205,7 +205,7 @@ cfg.swift: # 39| getPattern(): [NamedPattern] error # 39| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 39| getVariable(0): [ConcreteVarDecl] error -# 39| Type = Error +# 39| Type = any Error # 39| getBody(): [BraceStmt] { ... } # 40| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 40| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -3412,7 +3412,7 @@ cfg.swift: # 564| getBody(): [BraceStmt] { ... } # 564| getElement(0): [ReturnStmt] return # 568| [NamedFunction] getMyProtocol() -# 568| InterfaceType = () -> MyProtocol +# 568| InterfaceType = () -> any MyProtocol # 568| getBody(): [BraceStmt] { ... } # 568| getElement(0): [ReturnStmt] return ... # 568| getResult(): [CallExpr] call to MyProcotolImpl.init() @@ -3420,7 +3420,7 @@ cfg.swift: # 568| getBase(): [TypeExpr] MyProcotolImpl.Type # 568| getTypeRepr(): [TypeRepr] MyProcotolImpl # 568| getMethodRef(): [DeclRefExpr] MyProcotolImpl.init() -# 568| getResult().getFullyConverted(): [ErasureExpr] (MyProtocol) ... +# 568| getResult().getFullyConverted(): [ErasureExpr] (any MyProtocol) ... # 569| [NamedFunction] getMyProtocolImpl() # 569| InterfaceType = () -> MyProcotolImpl # 569| getBody(): [BraceStmt] { ... } @@ -3436,9 +3436,9 @@ cfg.swift: # 571| Type = Int # 571| getBody(): [BraceStmt] { ... } # 573| [NamedFunction] testOpenExistentialExpr(x:y:) -# 573| InterfaceType = (MyProtocol, MyProcotolImpl) -> () +# 573| InterfaceType = (any MyProtocol, MyProcotolImpl) -> () # 573| getParam(0): [ParamDecl] x -# 573| Type = MyProtocol +# 573| Type = any MyProtocol # 573| getParam(1): [ParamDecl] y # 573| Type = MyProcotolImpl # 573| getBody(): [BraceStmt] { ... } @@ -4816,7 +4816,7 @@ expressions.swift: # 16| getBase(): [TypeExpr] AnError.Type # 16| getTypeRepr(): [TypeRepr] AnError # 16| getMethodRef(): [DeclRefExpr] failed -# 16| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 16| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 20| [TopLevelCodeDecl] { ... } # 20| getBody(): [BraceStmt] { ... } # 20| getElement(0): [ForceTryExpr] try! ... @@ -6976,7 +6976,7 @@ statements.swift: # 21| getPattern(): [NamedPattern] error # 21| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 21| getVariable(0): [ConcreteVarDecl] error -# 21| Type = Error +# 21| Type = any Error # 21| getBody(): [BraceStmt] { ... } # 22| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 22| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -7017,7 +7017,7 @@ statements.swift: # 29| getPattern(): [NamedPattern] error # 29| getPattern().getFullyUnresolved(): [BindingPattern] let ... # 29| getVariable(0): [ConcreteVarDecl] error -# 29| Type = Error +# 29| Type = any Error # 29| getBody(): [BraceStmt] { ... } # 30| getElement(0): [CallExpr] call to print(_:separator:terminator:) # 30| getFunction(): [DeclRefExpr] print(_:separator:terminator:) @@ -7144,7 +7144,7 @@ statements.swift: # 40| getBase(): [TypeExpr] AnError.Type # 40| getTypeRepr(): [TypeRepr] AnError # 40| getMethodRef(): [DeclRefExpr] failed -# 40| getSubExpr().getFullyConverted(): [ErasureExpr] (Error) ... +# 40| getSubExpr().getFullyConverted(): [ErasureExpr] (any Error) ... # 44| [TopLevelCodeDecl] { ... } # 44| getBody(): [BraceStmt] { ... } # 44| getElement(0): [DeferStmt] defer { ... } diff --git a/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected b/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected index 81d6ba294d2..8aa6c1b2d02 100644 --- a/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected +++ b/swift/ql/test/library-tests/elements/type/nominaltype/nominaltype.expected @@ -7,14 +7,14 @@ | nominaltype.swift:90:6:90:6 | b2 | B2 | getABaseType:A, getCanonicalType:B2, getFullName:B2, getName:B2, getUnderlyingType:B2 | | nominaltype.swift:91:6:91:6 | b1_alias | B1_alias | getAliasedType:B1, getCanonicalType:B1, getFullName:B1_alias, getName:B1_alias, getUnderlyingType:B1 | | nominaltype.swift:92:6:92:6 | b2_alias | B2_alias | getAliasedType:B2, getCanonicalType:B2, getFullName:B2_alias, getName:B2_alias, getUnderlyingType:B2 | -| nominaltype.swift:93:6:93:6 | p | P | getCanonicalType:P, getFullName:P, getName:P, getUnderlyingType:P | -| nominaltype.swift:94:6:94:6 | p_alias | P_alias | getCanonicalType:P, getFullName:P_alias, getName:P_alias, getUnderlyingType:P_alias | +| nominaltype.swift:93:6:93:6 | p | any P | getCanonicalType:any P, getFullName:any P, getName:any P, getUnderlyingType:any P | +| nominaltype.swift:94:6:94:6 | p_alias | any P_alias | getCanonicalType:any P, getFullName:any P_alias, getName:any P_alias, getUnderlyingType:any P_alias | | nominaltype.swift:95:6:95:6 | c1 | C1 | getABaseType:P, getCanonicalType:C1, getFullName:C1, getName:C1, getUnderlyingType:C1 | | nominaltype.swift:96:6:96:6 | c2 | C2 | getABaseType:P, getCanonicalType:C2, getFullName:C2, getName:C2, getUnderlyingType:C2 | | nominaltype.swift:97:6:97:6 | o | Outer | getCanonicalType:Outer, getFullName:Outer, getName:Outer, getUnderlyingType:Outer | | nominaltype.swift:98:6:98:6 | oi | Outer.Inner | getCanonicalType:Outer.Inner, getFullName:Outer.Inner, getName:Inner, getUnderlyingType:Outer.Inner | | nominaltype.swift:99:6:99:6 | oia | Outer.Inner.InnerAlias | getAliasedType:A, getCanonicalType:A, getFullName:Outer.Inner.InnerAlias, getName:InnerAlias, getUnderlyingType:A | -| nominaltype.swift:100:6:100:6 | p1p2 | P1P2 | getCanonicalType:P1 & P2, getFullName:P1P2, getName:P1P2, getUnderlyingType:P1P2 | +| nominaltype.swift:100:6:100:6 | p1p2 | any P1P2 | getCanonicalType:any P1 & P2, getFullName:any P1P2, getName:any P1P2, getUnderlyingType:any P1P2 | | nominaltype.swift:101:6:101:6 | boxInt | Box
    | getCanonicalType:Box, getFullName:Box, getName:Box, getUnderlyingType:Box | | nominaltype.swift:102:6:102:6 | d1 | D1 | getABaseType:P3, getCanonicalType:D1, getFullName:D1, getName:D1, getUnderlyingType:D1 | | nominaltype.swift:103:6:103:6 | d2 | D2 | getABaseType:P4, getCanonicalType:D2, getFullName:D2, getName:D2, getUnderlyingType:D2 | From 40c932a5f911c7ad5c1ca0cd5d517ee6081f4107 Mon Sep 17 00:00:00 2001 From: Jami Cogswell Date: Wed, 27 Mar 2024 10:12:28 -0400 Subject: [PATCH 359/497] Java: move UrlForward.qll code to UrlForwardQuery.qll --- .../semmle/code/java/security/UrlForward.qll | 174 ----------------- .../code/java/security/UrlForwardQuery.qll | 176 +++++++++++++++++- 2 files changed, 172 insertions(+), 178 deletions(-) delete mode 100644 java/ql/lib/semmle/code/java/security/UrlForward.qll diff --git a/java/ql/lib/semmle/code/java/security/UrlForward.qll b/java/ql/lib/semmle/code/java/security/UrlForward.qll deleted file mode 100644 index 26e6e53f947..00000000000 --- a/java/ql/lib/semmle/code/java/security/UrlForward.qll +++ /dev/null @@ -1,174 +0,0 @@ -/** Provides classes to reason about URL forward attacks. */ - -import java -private import semmle.code.java.dataflow.ExternalFlow -private import semmle.code.java.dataflow.FlowSources -private import semmle.code.java.dataflow.StringPrefixes -private import semmle.code.java.security.PathSanitizer -private import semmle.code.java.controlflow.Guards -private import semmle.code.java.security.Sanitizers - -/** A URL forward sink. */ -abstract class UrlForwardSink extends DataFlow::Node { } - -/** - * A default sink representing methods susceptible to URL - * forwarding attacks. - */ -private class DefaultUrlForwardSink extends UrlForwardSink { - DefaultUrlForwardSink() { sinkNode(this, "url-forward") } -} - -/** - * An expression appended (perhaps indirectly) to `"forward:"` - * and reachable from a Spring entry point. - */ -private class SpringUrlForwardPrefixSink extends UrlForwardSink { - SpringUrlForwardPrefixSink() { - any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and - appendedToForwardPrefix(this) - } -} - -pragma[nomagic] -private predicate appendedToForwardPrefix(DataFlow::ExprNode exprNode) { - exists(ForwardPrefix fp | exprNode.asExpr() = fp.getAnAppendedExpression()) -} - -private class ForwardPrefix extends InterestingPrefix { - ForwardPrefix() { this.getStringValue() = "forward:" } - - override int getOffset() { result = 0 } -} - -/** A URL forward barrier. */ -abstract class UrlForwardBarrier extends DataFlow::Node { } - -private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } - -/** - * A barrier for values appended to a "redirect:" prefix. - * These results are excluded because they should be handled - * by the `java/unvalidated-url-redirection` query instead. - */ -private class RedirectPrefixBarrier extends UrlForwardBarrier { - RedirectPrefixBarrier() { this.asExpr() = any(RedirectPrefix fp).getAnAppendedExpression() } -} - -private class RedirectPrefix extends InterestingPrefix { - RedirectPrefix() { this.getStringValue() = "redirect:" } - - override int getOffset() { result = 0 } -} - -/** - * A value that is the result of prepending a string that prevents - * any value from controlling the path of a URL. - */ -private class FollowsBarrierPrefix extends UrlForwardBarrier { - FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } -} - -private class BarrierPrefix extends InterestingPrefix { - int offset; - - BarrierPrefix() { - // Matches strings that look like when prepended to untrusted input, they will restrict - // the path of a URL: for example, anything containing `?` or `#`. - exists(this.getStringValue().regexpFind("[?#]", 0, offset)) - or - this.(CharacterLiteral).getValue() = ["?", "#"] and offset = 0 - } - - override int getOffset() { result = offset } -} - -/** - * A barrier that protects against path injection vulnerabilities - * while accounting for URL encoding. - */ -private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { - UrlPathBarrier() { - this instanceof ExactPathMatchSanitizer or - this instanceof NoUrlEncodingBarrier or - this instanceof FullyDecodesUrlBarrier - } -} - -/** A call to a method that decodes a URL. */ -abstract class UrlDecodeCall extends MethodCall { } - -private class DefaultUrlDecodeCall extends UrlDecodeCall { - DefaultUrlDecodeCall() { - this.getMethod() instanceof UrlDecodeMethod or - this.getMethod().hasQualifiedName("org.eclipse.jetty.util.URIUtil", "URIUtil", "decodePath") - } -} - -/** A repeated call to a method that decodes a URL. */ -abstract class RepeatedUrlDecodeCall extends MethodCall { } - -private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall instanceof UrlDecodeCall { - DefaultRepeatedUrlDecodeCall() { this.getAnEnclosingStmt() instanceof LoopStmt } -} - -/** A method call that checks a string for URL encoding. */ -abstract class CheckUrlEncodingCall extends MethodCall { } - -private class DefaultCheckUrlEncodingCall extends CheckUrlEncodingCall { - DefaultCheckUrlEncodingCall() { - this.getMethod() instanceof StringContainsMethod and - this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "%" - } -} - -/** A guard that looks for a method call that checks for URL encoding. */ -private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCall { - Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } -} - -/** Holds if `g` is guard for a URL that does not contain URL encoding. */ -private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { - e = g.(CheckUrlEncodingGuard).getCheckedExpr() and - branch = false - or - branch = false and - g.(Expr).getType() instanceof BooleanType and - ( - exists(CheckUrlEncodingCall call, AssignExpr ae | - ae.getSource() = call and - e = call.getQualifier() and - g = ae.getDest() - ) - or - exists(CheckUrlEncodingCall call, LocalVariableDeclExpr vde | - vde.getInitOrPatternSource() = call and - e = call.getQualifier() and - g = vde.getAnAccess() - ) - ) -} - -/** A barrier for URLs that do not contain URL encoding. */ -private class NoUrlEncodingBarrier extends DataFlow::Node { - NoUrlEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } -} - -/** Holds if `g` is guard for a URL that is fully decoded. */ -private predicate fullyDecodesUrlGuard(Expr e) { - exists(CheckUrlEncodingGuard g, RepeatedUrlDecodeCall decodeCall | - e = g.getCheckedExpr() and - g.controls(decodeCall.getBasicBlock(), true) - ) -} - -/** A barrier for URLs that are fully decoded. */ -private class FullyDecodesUrlBarrier extends DataFlow::Node { - FullyDecodesUrlBarrier() { - exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | - fullyDecodesUrlGuard(e) and - e = v.getAnAccess() and - e.getBasicBlock().bbDominates(this.asExpr().getBasicBlock()) - ) - } -} diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index e90267694b5..2ca38d69551 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -1,9 +1,177 @@ -/** Provides a taint-tracking configuration for reasoning about URL forwarding. */ +/** Provides classes and a taint-tracking configuration to reason about unsafe URL forwarding. */ import java -import semmle.code.java.security.UrlForward -import semmle.code.java.dataflow.FlowSources -import semmle.code.java.security.PathSanitizer +private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.StringPrefixes +private import semmle.code.java.security.PathSanitizer +private import semmle.code.java.controlflow.Guards +private import semmle.code.java.security.Sanitizers + +/** A URL forward sink. */ +abstract class UrlForwardSink extends DataFlow::Node { } + +/** + * A default sink representing methods susceptible to URL + * forwarding attacks. + */ +private class DefaultUrlForwardSink extends UrlForwardSink { + DefaultUrlForwardSink() { sinkNode(this, "url-forward") } +} + +/** + * An expression appended (perhaps indirectly) to `"forward:"` + * and reachable from a Spring entry point. + */ +private class SpringUrlForwardPrefixSink extends UrlForwardSink { + SpringUrlForwardPrefixSink() { + any(SpringRequestMappingMethod srmm).polyCalls*(this.getEnclosingCallable()) and + appendedToForwardPrefix(this) + } +} + +pragma[nomagic] +private predicate appendedToForwardPrefix(DataFlow::ExprNode exprNode) { + exists(ForwardPrefix fp | exprNode.asExpr() = fp.getAnAppendedExpression()) +} + +private class ForwardPrefix extends InterestingPrefix { + ForwardPrefix() { this.getStringValue() = "forward:" } + + override int getOffset() { result = 0 } +} + +/** A URL forward barrier. */ +abstract class UrlForwardBarrier extends DataFlow::Node { } + +private class PrimitiveBarrier extends UrlForwardBarrier instanceof SimpleTypeSanitizer { } + +/** + * A barrier for values appended to a "redirect:" prefix. + * These results are excluded because they should be handled + * by the `java/unvalidated-url-redirection` query instead. + */ +private class RedirectPrefixBarrier extends UrlForwardBarrier { + RedirectPrefixBarrier() { this.asExpr() = any(RedirectPrefix fp).getAnAppendedExpression() } +} + +private class RedirectPrefix extends InterestingPrefix { + RedirectPrefix() { this.getStringValue() = "redirect:" } + + override int getOffset() { result = 0 } +} + +/** + * A value that is the result of prepending a string that prevents + * any value from controlling the path of a URL. + */ +private class FollowsBarrierPrefix extends UrlForwardBarrier { + FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } +} + +private class BarrierPrefix extends InterestingPrefix { + int offset; + + BarrierPrefix() { + // Matches strings that look like when prepended to untrusted input, they will restrict + // the path of a URL: for example, anything containing `?` or `#`. + exists(this.getStringValue().regexpFind("[?#]", 0, offset)) + or + this.(CharacterLiteral).getValue() = ["?", "#"] and offset = 0 + } + + override int getOffset() { result = offset } +} + +/** + * A barrier that protects against path injection vulnerabilities + * while accounting for URL encoding. + */ +private class UrlPathBarrier extends UrlForwardBarrier instanceof PathInjectionSanitizer { + UrlPathBarrier() { + this instanceof ExactPathMatchSanitizer or + this instanceof NoUrlEncodingBarrier or + this instanceof FullyDecodesUrlBarrier + } +} + +/** A call to a method that decodes a URL. */ +abstract class UrlDecodeCall extends MethodCall { } + +private class DefaultUrlDecodeCall extends UrlDecodeCall { + DefaultUrlDecodeCall() { + this.getMethod() instanceof UrlDecodeMethod or + this.getMethod().hasQualifiedName("org.eclipse.jetty.util.URIUtil", "URIUtil", "decodePath") + } +} + +/** A repeated call to a method that decodes a URL. */ +abstract class RepeatedUrlDecodeCall extends MethodCall { } + +private class DefaultRepeatedUrlDecodeCall extends RepeatedUrlDecodeCall instanceof UrlDecodeCall { + DefaultRepeatedUrlDecodeCall() { this.getAnEnclosingStmt() instanceof LoopStmt } +} + +/** A method call that checks a string for URL encoding. */ +abstract class CheckUrlEncodingCall extends MethodCall { } + +private class DefaultCheckUrlEncodingCall extends CheckUrlEncodingCall { + DefaultCheckUrlEncodingCall() { + this.getMethod() instanceof StringContainsMethod and + this.getArgument(0).(CompileTimeConstantExpr).getStringValue() = "%" + } +} + +/** A guard that looks for a method call that checks for URL encoding. */ +private class CheckUrlEncodingGuard extends Guard instanceof CheckUrlEncodingCall { + Expr getCheckedExpr() { result = this.(MethodCall).getQualifier() } +} + +/** Holds if `g` is guard for a URL that does not contain URL encoding. */ +private predicate noUrlEncodingGuard(Guard g, Expr e, boolean branch) { + e = g.(CheckUrlEncodingGuard).getCheckedExpr() and + branch = false + or + branch = false and + g.(Expr).getType() instanceof BooleanType and + ( + exists(CheckUrlEncodingCall call, AssignExpr ae | + ae.getSource() = call and + e = call.getQualifier() and + g = ae.getDest() + ) + or + exists(CheckUrlEncodingCall call, LocalVariableDeclExpr vde | + vde.getInitOrPatternSource() = call and + e = call.getQualifier() and + g = vde.getAnAccess() + ) + ) +} + +/** A barrier for URLs that do not contain URL encoding. */ +private class NoUrlEncodingBarrier extends DataFlow::Node { + NoUrlEncodingBarrier() { this = DataFlow::BarrierGuard::getABarrierNode() } +} + +/** Holds if `g` is guard for a URL that is fully decoded. */ +private predicate fullyDecodesUrlGuard(Expr e) { + exists(CheckUrlEncodingGuard g, RepeatedUrlDecodeCall decodeCall | + e = g.getCheckedExpr() and + g.controls(decodeCall.getBasicBlock(), true) + ) +} + +/** A barrier for URLs that are fully decoded. */ +private class FullyDecodesUrlBarrier extends DataFlow::Node { + FullyDecodesUrlBarrier() { + exists(Variable v, Expr e | this.asExpr() = v.getAnAccess() | + fullyDecodesUrlGuard(e) and + e = v.getAnAccess() and + e.getBasicBlock().bbDominates(this.asExpr().getBasicBlock()) + ) + } +} /** * A taint-tracking configuration for reasoning about URL forwarding. From 86bf4fbbc08951b14662113d2012d95e33e1c89a Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 27 Mar 2024 13:49:40 +0000 Subject: [PATCH 360/497] Go: Make diagnostic names static --- go/extractor/diagnostics/diagnostics.go | 6 +++--- .../invalid-toolchain-version/diagnostics.expected | 4 ++-- .../go/two-go-mods-one-failure/diagnostics.expected | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go/extractor/diagnostics/diagnostics.go b/go/extractor/diagnostics/diagnostics.go index 197d838a121..385c611aac8 100644 --- a/go/extractor/diagnostics/diagnostics.go +++ b/go/extractor/diagnostics/diagnostics.go @@ -497,7 +497,7 @@ func EmitNewerSystemGoRequired(requiredVersion string) { func EmitExtractionFailedForProjects(path []string) { emitDiagnostic( "go/autobuilder/extraction-failed-for-project", - fmt.Sprintf("Unable to extract %d Go projects", len(path)), + "Unable to extract some Go projects", fmt.Sprintf( "The following %d Go project%s could not be extracted successfully:\n\n`%s`\n", len(path), @@ -512,9 +512,9 @@ func EmitExtractionFailedForProjects(path []string) { func EmitInvalidToolchainVersion(goModPath string, version string) { emitDiagnostic( "go/autobuilder/invalid-go-toolchain-version", - fmt.Sprintf("`%s` is not a valid Go toolchain version", version), + "Invalid Go toolchain version", strings.Join([]string{ - "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://tip.golang.org/doc/toolchain#version).", + "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://go.dev/doc/toolchain#version).", fmt.Sprintf("`%s` in `%s` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", version, goModPath), }, "\n\n"), diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected index e506cc1e230..2e5d732e53e 100644 --- a/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/invalid-toolchain-version/diagnostics.expected @@ -2,12 +2,12 @@ "location": { "file": "go.mod" }, - "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://tip.golang.org/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", + "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://go.dev/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", "severity": "warning", "source": { "extractorName": "go", "id": "go/autobuilder/invalid-go-toolchain-version", - "name": "`1.21` is not a valid Go toolchain version" + "name": "Invalid Go toolchain version" }, "visibility": { "cliSummaryTable": true, diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected index 02805a60c99..c37938d5c7c 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected @@ -18,7 +18,7 @@ "source": { "extractorName": "go", "id": "go/autobuilder/extraction-failed-for-project", - "name": "Unable to extract 1 Go projects" + "name": "Unable to extract some Go projects" }, "visibility": { "cliSummaryTable": true, From 59ae6dd5f576456c77c94307f655de82bc3be32e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Mar 2024 15:07:58 +0000 Subject: [PATCH 361/497] Java: Add a couple of Oxford commas --- java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql index 0ebe0ebb025..d1cdb8bdfbb 100644 --- a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql +++ b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql @@ -30,8 +30,8 @@ EnumConstant nthMissing(SwitchStmt switch, int index) { predicate first3(string msg, SwitchStmt switch, EnumConstant e1, EnumConstant e2, EnumConstant e3) { exists(int n | n = strictcount(nthMissing(switch, _)) | if n > 3 - then msg = "Switch statement does not have a case for $@, $@, $@ or " + (n - 3) + " more." - else msg = "Switch statement does not have a case for $@, $@ or $@." + then msg = "Switch statement does not have a case for $@, $@, $@, or " + (n - 3) + " more." + else msg = "Switch statement does not have a case for $@, $@, or $@." ) and e1 = nthMissing(switch, 1) and e2 = nthMissing(switch, 2) and From fda3c9261252245ef649412d4b4d1eed7fdc41b2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Mar 2024 15:12:55 +0000 Subject: [PATCH 362/497] Java: Add a changenote for the MissingEnumInSwitch change --- java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md diff --git a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md new file mode 100644 index 00000000000..b1531dab655 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. From ab255d70b52e57851eeab255c6355af3d1237cd8 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 27 Mar 2024 15:15:20 +0000 Subject: [PATCH 363/497] Go: Fix `semver`-related logic bugs --- go/extractor/toolchain/toolchain.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index a91bf64ba7d..2cc6b5b4d54 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -23,7 +23,7 @@ var goVersions = map[string]struct{}{} // Adds an entry to the set of installed Go versions for the normalised `version` number. func addGoVersion(version string) { - goVersions[semver.Canonical(version)] = struct{}{} + goVersions[semver.Canonical("v"+version)] = struct{}{} } // Returns the current Go version as returned by 'go version', e.g. go1.14.4 @@ -42,14 +42,14 @@ func GetEnvGoVersion() string { } goVersion = parseGoVersion(string(out)) - addGoVersion(goVersion) + addGoVersion(goVersion[2:]) } return goVersion } // Determines whether, to our knowledge, `version` is available on the current system. func HasGoVersion(version string) bool { - _, found := goVersions[semver.Canonical(version)] + _, found := goVersions[semver.Canonical("v"+version)] return found } @@ -63,7 +63,7 @@ func InstallVersion(workingDir string, version string) bool { // Construct a command to invoke `go version` with `GOTOOLCHAIN=go1.N.0` to give // Go a valid toolchain version to download the toolchain we need; subsequent commands // should then work even with an invalid version that's still in `go.mod` - toolchainArg := "GOTOOLCHAIN=go" + semver.Canonical(version) + toolchainArg := "GOTOOLCHAIN=go" + semver.Canonical("v" + version)[1:] versionCmd := Version() versionCmd.Dir = workingDir versionCmd.Env = append(os.Environ(), toolchainArg) From 6ea99825be6fa14925c5f394e288c565f585d526 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 27 Mar 2024 15:15:40 +0000 Subject: [PATCH 364/497] Go: Add unit test to sanity check `HasGoVersion` --- go/extractor/toolchain/toolchain_test.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/go/extractor/toolchain/toolchain_test.go b/go/extractor/toolchain/toolchain_test.go index 66d16f97964..18ca7a6601b 100644 --- a/go/extractor/toolchain/toolchain_test.go +++ b/go/extractor/toolchain/toolchain_test.go @@ -14,3 +14,9 @@ func TestParseGoVersion(t *testing.T) { } } } + +func TestHasGoVersion(t *testing.T) { + if HasGoVersion("1.21") { + t.Error("Exepected HasGoVersion(\"1.21\" to be false, but got true)") + } +} From 6b1d1d427c227b64cf9418c0dbc8238707727f3b Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 27 Mar 2024 15:16:32 +0000 Subject: [PATCH 365/497] Go: Add integration test for incorrect version format logic --- .../go/go-version-bump/diagnostics.expected | 31 +++++++++++++++++++ .../go/go-version-bump/src/go.mod | 3 ++ .../go/go-version-bump/src/main.go | 3 ++ .../all-platforms/go/go-version-bump/test.py | 18 +++++++++++ 4 files changed, 55 insertions(+) create mode 100644 go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected create mode 100644 go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod create mode 100644 go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go create mode 100644 go/ql/integration-tests/all-platforms/go/go-version-bump/test.py diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected new file mode 100644 index 00000000000..2e5d732e53e --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/diagnostics.expected @@ -0,0 +1,31 @@ +{ + "location": { + "file": "go.mod" + }, + "markdownMessage": "As of Go 1.21, toolchain versions [must use the 1.N.P syntax](https://go.dev/doc/toolchain#version).\n\n`1.21` in `go.mod` does not match this syntax and there is no additional `toolchain` directive, which may cause some `go` commands to fail.", + "severity": "warning", + "source": { + "extractorName": "go", + "id": "go/autobuilder/invalid-go-toolchain-version", + "name": "Invalid Go toolchain version" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod new file mode 100644 index 00000000000..18793f7e295 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/go.mod @@ -0,0 +1,3 @@ +go 1.21 + +module test diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go new file mode 100644 index 00000000000..38dd16da61a --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/src/main.go @@ -0,0 +1,3 @@ +package main + +func main() {} diff --git a/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py b/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-version-bump/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) From 45b41bb506c9303e9c30146d2a55c59017720395 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Wed, 27 Mar 2024 15:18:24 +0000 Subject: [PATCH 366/497] Go: Mirror stdout/stderr output in `InstallVersion` --- go/extractor/toolchain/toolchain.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 2cc6b5b4d54..f0469e0e678 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -67,6 +67,8 @@ func InstallVersion(workingDir string, version string) bool { versionCmd := Version() versionCmd.Dir = workingDir versionCmd.Env = append(os.Environ(), toolchainArg) + versionCmd.Stdout = os.Stdout + versionCmd.Stderr = os.Stderr log.Printf( "Trying to install Go %s using its canonical representation in `%s`.", From e6ba0a34f4e76907a70a00ea1e5f3945ed082b32 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Wed, 27 Mar 2024 15:24:30 +0000 Subject: [PATCH 367/497] Revert "Ruby: remove customizing-library-models-for-ruby.rst" This reverts commit 5b46256fdb7368454103e3cd885fa09737fb6af6. --- .../customizing-library-models-for-ruby.rst | 406 ++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst new file mode 100644 index 00000000000..8de04d882da --- /dev/null +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -0,0 +1,406 @@ +.. _customizing-library-models-for-ruby: + +:orphan: +:nosearch: + +Customizing Library Models for Ruby +=================================== + +.. include:: ../reusables/beta-note-customizing-library-models.rst + +Ruby analysis can be customized by adding library models in data extension files. + +A data extension for Ruby is a YAML file of the form: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: + data: + - + - + - ... + +The CodeQL library for Ruby exposes the following extensible predicates: + +- **sourceModel**\(type, path, kind) +- **sinkModel**\(type, path, kind) +- **typeModel**\(type1, type2, path) +- **summaryModel**\(type, path, input, output, kind) + +See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). + +We'll explain how to use these using a few examples, and provide some reference material at the end of this article. + +Example: Taint sink in the 'tty-command' gem +-------------------------------------------- + +In this example, we'll show how to add the following argument, passed to **tty-command**, as a command-line injection sink: + +.. code-block:: ruby + + tty = TTY::Command.new + tty.run(cmd) # <-- add 'cmd' as a taint sink + +For this example, you can use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["TTY::Command", "Method[run].Argument[0]", "command-injection"] + + +- Since we're adding a new sink, we add a tuple to the **sinkModel** extensible predicate. +- The first column, **"TTY::Command"**, identifies a set of values from which to begin the search for the sink. + The string **"TTY::Command""** means we start at the places where the codebase constructs instances of the class **TTY::Command**. +- The second column is an access path that is evaluated from left to right, starting at the values that were identified by the first column. + + - **Method[run]** selects calls to the **run** method of the **TTY::Command** class. + - **Argument[0]** selects the first argument to calls to that member. + +- **command-injection** indicates that this is considered a sink for the command injection query. + +Example: Taint sources from 'sinatra' block parameters +------------------------------------------------------ + +In this example, we'll show how the 'x' parameter below could be marked as a remote flow source: + +.. code-block:: ruby + + class MyApp < Sinatra::Base + get '/' do |x| # <-- add 'x' as a taint source + # ... + end + end + +For this example you could use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - [ + "Sinatra::Base!", + "Method[get].Argument[block].Parameter[0]", + "remote", + ] + +- Since we're adding a new taint source, we add a tuple to the **sourceModel** extensible predicate. +- The first column, **"Sinatra::Base!"**, begins the search at references to the **Sinatra::Base** class. + The **!** suffix indicates that we want to search for references to the class itself, rather than instances of the class. +- **Method[get]** selects calls to the **get** method of the **Sinatra::Base** class. +- **Argument[block]** selects the block argument to the **get** method call. +- **Parameter[0]** selects the first parameter of the block argument (the parameter named **x**). +- Finally, the kind **remote** indicates that this is considered a source of remote flow. + +Example: Using types to add MySQL injection sinks +------------------------------------------------- + +In this example, we'll show how to add the following SQL injection sink: + +.. code-block:: ruby + + def submit(q) + client = Mysql2::Client.new + client.query(q) # <-- add 'q' as a SQL injection sink + end + +We can recognize this using the following extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["Mysql2::Client", "Method[query].Argument[0]", "sql-injection"] + +- The first column, **"Mysql2::Client"**, begins the search at any instance of the **Mysql2::Client** class. +- **Method[query]** selects any call to the **query** method on that instance. +- **Argument[0]** selects the first argument to the method call. +- **sql-injection** indicates that this is considered a sink for the SQL injection query. + +Continued example: Using type models +------------------------------------ + +Consider this variation on the previous example, the mysql2 EventMachine API is used. +The client is obtained via a call to **Mysql2::EM::Client.new**. + +.. code-block:: ruby + + def submit(client, q) + client = Mysql2::EM::Client.new + client.query(q) + end + +So far we have only one model for **Mysql2::Client**, but in the real world we +may have many models for the various methods available. Because **Mysql2::EM::Client** is a subclass of **Mysql2::Client**, it inherits all of the same methods. +Instead of updating all our models to include both classes, we can add a type +model to indicate that **Mysql2::EM::Client** is a subclass of **Mysql2::Client**: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - ["Mysql2::Client", "Mysql2::EM::Client", ""] + +Example: Adding flow through 'URI.decode_uri_component' +------------------------------------------------------- + +In this example, we'll show how to add flow through calls to 'URI.decode_uri_component': + +.. code-block:: ruby + + y = URI.decode_uri_component(x); # add taint flow from 'x' to 'y' + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI!", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"URI!"**, begins the search for relevant calls at references to the **URI** class. +- The **!** suffix indicates that we are looking for the class itself, rather than instances of the class. +- The second column, **Method[decode_uri_component]**, is a path leading to the method calls we wish to model. + In this case, we select references to the **decode_uri_component** method from the **URI** class. +- The third column, **Argument[0]**, indicates the input of the flow. In this case, the first argument to the method call. +- The fourth column, **ReturnValue**, indicates the output of the flow. In this case, the return value of the method call. +- The last column, **taint**, indicates the kind of flow to add. The value **taint** means the output is not necessarily equal + to the input, but was derived from the input in a taint-preserving way. + +Example: Adding flow through 'File#each' +---------------------------------------- + +In this example, we'll show how to add flow through calls to **File#each** from the standard library, which iterates over the lines of a file: + +.. code-block:: ruby + + f = File.new("example.txt") + f.each { |line| ... } # add taint flow from `f` to `line` + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "File", + "Method[each]", + "Argument[self]", + "Argument[block].Parameter[0]", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"File"**, begins the search for relevant calls at places where the **File** class is used. +- The second column, **Method[each]**, selects references to the **each** method on the **File** class. +- The third column specifies the input of the flow. **Argument[self]** selects the **self** argument of **each**, which is the **File** instance being iterated over. + +- The fourth column specifies the output of the flow: + + - **Argument[block]** selects the block argument of **each** (the block which is executed for each line in the file). + - **Parameter[0]** selects the first parameter of the block (the parameter named **line**). + +- The last column, **taint**, indicates the kind of flow to add. + +Reference material +------------------ + +The following sections provide reference material for extensible predicates, access paths, types, and kinds. + +Extensible predicates +--------------------- + +sourceModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint source. Most taint-tracking queries will use the new source. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the source. +- **kind**: Kind of source to add. Currently only **remote** is used. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - ["User", "Method[name]", "remote"] + +sinkModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint sink. Sinks are query-specific and will typically affect one or two queries. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the sink. +- **kind**: Kind of sink to add. See the section on sink kinds for a list of supported kinds. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["ExecuteShell", "Method[run].Argument[0]", "command-injection"] + +summaryModel(type, path, input, output, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds flow through a method call. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to a method call. +- **input**: Path relative to the method call that leads to input of the flow. +- **output**: Path relative to the method call leading to the output of the flow. +- **kind**: Kind of summary to add. Can be **taint** for taint-propagating flow, or **value** for value-preserving flow. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + +typeModel(type1, type2, path) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new definition of a type. + +- **type1**: Name of the type to define. +- **type2**: Name of the type from which to evaluate **path**. +- **path**: Access path leading from **type2** to **type1**. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - [ + "Mysql2::Client", + "MyDbWrapper", + "Method[getConnection].ReturnValue", + ] + +Types +----- + +A type is a string that identifies a set of values. +In each of the extensible predicates mentioned in previous section, the first column is always the name of a type. +A type can be defined by adding **typeModel** tuples for that type. + +Access paths +------------ + +The **path**, **input**, and **output** columns consist of a **.**-separated list of components, which is evaluated from left to right, +with each step selecting a new set of values derived from the previous set of values. + +The following components are supported: + +- **Argument[**\ `number`\ **]** selects the argument at the given index. +- **Argument[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Argument[self]** selects the receiver of a method call. +- **Argument[block]** selects the block argument. +- **Argument[any]** selects any argument, except self or block arguments. +- **Argument[any-named]** selects any keyword argument. +- **Argument[hash-splat]** selects a special argument representing all keyword arguments passed in the method call. +- **Parameter[**\ `number`\ **]** selects the argument at the given index. +- **Parameter[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Parameter[self]** selects the **self** parameter of a method. +- **Parameter[block]** selects the block parameter. +- **Parameter[any]** selects any parameter, except self or block parameters. +- **Parameter[any-named]** selects any keyword parameter. +- **Parameter[hash-splat]** selects the hash splat parameter, often written as **\*\*kwargs**. +- **ReturnValue** selects the return value of a call. +- **Method[**\ `name`\ **]** selects a call to the method with the given name. +- **Element[any]** selects any element of an array or hash. +- **Element[**\ `number`\ **]** selects an array element at the given index. +- **Element[**\ `string`\ **]** selects a hash element at the given key. +- **Field[@**\ `string`\ **]** selects an instance variable with the given name. +- **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. + For example, this can be used to find all values that appear to originate from a particular class. This can be useful for finding method calls + from a known class, but where the receiver type is not known or is difficult to model. + +Additional notes about the syntax of operands: + +- Multiple operands may be given to a single component, as a shorthand for the union of the operands. For example, **Method[foo,bar]** matches the union of **Method[foo]** and **Method[bar]**. +- Numeric operands to **Argument**, **Parameter**, and **Element** may be given as a lower bound. For example, **Argument[1..]** matches all arguments except 0. + +Kinds +----- + +Source kinds +~~~~~~~~~~~~ + +- **remote**: A generic source of remote flow. Most taint-tracking queries will use such a source. Currently this is the only supported source kind. + +Sink kinds +~~~~~~~~~~ + +Unlike sources, sinks tend to be highly query-specific, rarely affecting more than one or two queries. +Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query. + +- **code-injection**: A sink that can be used to inject code, such as in calls to **eval**. +- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **Process.spawn**. +- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **File.open**. +- **sql-injection**: A sink that can be used for SQL injection, such as in an ActiveRecord **where** call. +- **url-redirection**: A sink that can be used to redirect the user to a malicious URL. +- **log-injection**: A sink that can be used for log injection, such as in a **Rails.logger** call. + +Summary kinds +~~~~~~~~~~~~~ + +- **taint**: A summary that propagates taint. This means the output is not necessarily equal to the input, but it was derived from the input in an unrestrictive way. An attacker who controls the input will have significant control over the output as well. +- **value**: A summary that preserves the value of the input or creates a copy of the input such that all of its object properties are preserved. From f6e2e1319b2a5c7d757a11a52d99723c68ee320a Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Wed, 27 Mar 2024 15:30:05 +0000 Subject: [PATCH 368/497] Ruby: Link to MaD docs from Ruby doc page Also remove an internal link from the docs. --- docs/codeql/codeql-language-guides/codeql-for-ruby.rst | 2 ++ .../customizing-library-models-for-ruby.rst | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst index f36df2496bf..701a88d6a97 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst @@ -23,3 +23,5 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat - :doc:`Using API graphs in Ruby `: API graphs are a uniform interface for referring to functions, classes, and methods defined in external libraries. - :doc:`Abstract syntax tree classes for working with Ruby programs `: CodeQL has a large selection of classes for representing the abstract syntax tree of Ruby programs. + +- :doc:`Customizing library models for Ruby `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst index 8de04d882da..ca9046d016d 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -30,8 +30,6 @@ The CodeQL library for Ruby exposes the following extensible predicates: - **typeModel**\(type1, type2, path) - **summaryModel**\(type, path, input, output, kind) -See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). - We'll explain how to use these using a few examples, and provide some reference material at the end of this article. Example: Taint sink in the 'tty-command' gem From e9957aa4a6a33de7cb5fe179b3c4047d6c2123cb Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 27 Mar 2024 17:53:36 +0100 Subject: [PATCH 369/497] Swift: make `result` a child in `ThenStmt` --- swift/ql/.generated.list | 2 +- .../codeql/swift/generated/ParentChild.qll | 5 +- .../test/library-tests/ast/PrintAst.expected | 71 ++++++++++++++++++- swift/ql/test/library-tests/ast/cfg.swift | 7 ++ swift/schema.py | 2 +- 5 files changed, 82 insertions(+), 5 deletions(-) diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index aa85f4aff4e..0abbd2ee5ae 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -409,7 +409,7 @@ lib/codeql/swift/generated/Locatable.qll 6cb437dd7ff7331429ec6586b0af50b1af15e4f lib/codeql/swift/generated/Location.qll 3f3bad413be87d05a596fe7b8004f415c2caa98cb759021a6aad20b589b7d700 ed30ed646962b3ffb6b47c97c6434fe47a6b1ea8e3f2e0589577bea5cf96c88e lib/codeql/swift/generated/MacroRole.qll aaf5631c49de81e046854955341202d6d3516713cd09bc2e7b870e40c261cc9f 6cd17d40cbf1d8fa4ef01dfb8b3462b7cee902e6058fb76417c2035be12481d1 lib/codeql/swift/generated/OtherAvailabilitySpec.qll 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 06393a08e8da36106c5ec6efb9f1bd56a5c7b3d3f3d0bcefc6fa07fa96860c31 -lib/codeql/swift/generated/ParentChild.qll 2489604e46253d81d7f8e3a8f0a7905481e5b2811d5016794ce5b66846cec22e f10627c078437dc9b8ce98d2a1559e660f86e2aea1d42feac1a79f2e68eeae8a +lib/codeql/swift/generated/ParentChild.qll eae164aa8a78e883e707fba6c671ff2cd0ddab1084b0871fc5ae27c44cded4c5 3af88b63e21d58090f9702e6e4716a5b8a5a65897b8c92362b6e3c0fba60ddc2 lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll 5355be9da8b778d1d8ae60d25d9c3394477da24f94e8a6ab4484c6a16d07cd7c 075438c1762ec0a7775004b39032dcf85aada038a4269e6f428c34b8282786e9 lib/codeql/swift/generated/PureSynthConstructors.qll 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 lib/codeql/swift/generated/Raw.qll 10633b948918d315b98b6ff6733d4c368e082c5afd78334c0862291f9d883216 66abde4c9a2283773033d90a4633c1203d6563fc238ddbd48fdf1b910f90021a diff --git a/swift/ql/lib/codeql/swift/generated/ParentChild.qll b/swift/ql/lib/codeql/swift/generated/ParentChild.qll index 1a50686bf3d..1578315af7d 100644 --- a/swift/ql/lib/codeql/swift/generated/ParentChild.qll +++ b/swift/ql/lib/codeql/swift/generated/ParentChild.qll @@ -3781,14 +3781,17 @@ private module Impl { } private Element getImmediateChildOfThenStmt(ThenStmt e, int index, string partialPredicateCall) { - exists(int b, int bStmt, int n | + exists(int b, int bStmt, int n, int nResult | b = 0 and bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and n = bStmt and + nResult = n + 1 and ( none() or result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateResult() and partialPredicateCall = "Result()" ) ) } diff --git a/swift/ql/test/library-tests/ast/PrintAst.expected b/swift/ql/test/library-tests/ast/PrintAst.expected index d3a7ababcc4..4d12907d3a5 100644 --- a/swift/ql/test/library-tests/ast/PrintAst.expected +++ b/swift/ql/test/library-tests/ast/PrintAst.expected @@ -3476,8 +3476,75 @@ cfg.swift: # 577| getBase(): [CallExpr] call to getMyProtocolImpl() # 577| getFunction(): [DeclRefExpr] getMyProtocolImpl() # 577| getMethodRef(): [DeclRefExpr] source() -# 580| [Comment] // --- -# 580| +# 580| [NamedFunction] singleStmtExpr(_:) +# 580| InterfaceType = (Int) -> () +# 580| getParam(0): [ParamDecl] x +# 580| Type = Int +# 580| getBody(): [BraceStmt] { ... } +# 581| getVariable(0): [ConcreteVarDecl] a +# 581| Type = Int +# 585| getVariable(1): [ConcreteVarDecl] b +# 585| Type = Int +# 581| getElement(0): [PatternBindingDecl] var ... = ... +# 581| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr +# 581| getStmt(): [SwitchStmt] switch x { ... } +# 581| getExpr(): [DeclRefExpr] x +# 582| getCase(0): [CaseStmt] case ... +# 582| getLabel(0): [CaseLabelItem] =~ ... +# 582| getPattern(): [ExprPattern] =~ ... +# 582| getSubExpr(): [BinaryExpr] ... .~=(_:_:) ... +# 582| getFunction(): [MethodLookupExpr] .~=(_:_:) +# 582| getBase(): [TypeExpr] Range.Type +# 582| getTypeRepr(): [TypeRepr] Range +# 582| getMethodRef(): [DeclRefExpr] ~=(_:_:) +# 582| getArgument(0): [Argument] : ... ...<(_:_:) ... +# 582| getExpr(): [BinaryExpr] ... ...<(_:_:) ... +# 582| getFunction(): [MethodLookupExpr] ...<(_:_:) +# 582| getBase(): [TypeExpr] Int.Type +# 582| getTypeRepr(): [TypeRepr] Int +# 582| getMethodRef(): [DeclRefExpr] ..<(_:_:) +# 582| getArgument(0): [Argument] : 0 +# 582| getExpr(): [IntegerLiteralExpr] 0 +# 582| getArgument(1): [Argument] : 5 +# 582| getExpr(): [IntegerLiteralExpr] 5 +# 582| getArgument(1): [Argument] : $match +# 582| getExpr(): [DeclRefExpr] $match +# 582| getBody(): [BraceStmt] { ... } +# 582| getElement(0): [ThenStmt] ThenStmt +# 582| getResult(): [IntegerLiteralExpr] 1 +# 583| getCase(1): [CaseStmt] case ... +# 583| getLabel(0): [CaseLabelItem] _ +# 583| getPattern(): [AnyPattern] _ +# 583| getBody(): [BraceStmt] { ... } +# 583| getElement(0): [ThenStmt] ThenStmt +# 583| getResult(): [IntegerLiteralExpr] 2 +# 581| getPattern(0): [NamedPattern] a +# 585| getElement(1): [PatternBindingDecl] var ... = ... +# 585| getInit(0): [SingleValueStmtExpr] SingleValueStmtExpr +# 585| getStmt(): [IfStmt] if ... then { ... } else { ... } +# 585| getCondition(): [StmtCondition] StmtCondition +# 585| getElement(0): [ConditionElement] ... .<(_:_:) ... +# 585| getBoolean(): [BinaryExpr] ... .<(_:_:) ... +# 585| getFunction(): [MethodLookupExpr] .<(_:_:) +# 585| getBase(): [TypeExpr] Int.Type +# 585| getTypeRepr(): [TypeRepr] Int +# 585| getMethodRef(): [DeclRefExpr] <(_:_:) +# 585| getArgument(0): [Argument] : x +# 585| getExpr(): [DeclRefExpr] x +# 585| getArgument(1): [Argument] : 42 +# 585| getExpr(): [IntegerLiteralExpr] 42 +# 585| getBoolean().getFullyConverted(): [ParenExpr] (...) +# 585| getThen(): [BraceStmt] { ... } +# 585| getElement(0): [ThenStmt] ThenStmt +# 585| getResult(): [IntegerLiteralExpr] 1 +# 585| getElse(): [BraceStmt] { ... } +# 585| getElement(0): [ThenStmt] ThenStmt +# 585| getResult(): [IntegerLiteralExpr] 2 +# 585| getPattern(0): [NamedPattern] b +# 582| [ConcreteVarDecl] $match +# 582| Type = Int +# 587| [Comment] // --- +# 587| declarations.swift: # 1| [StructDecl] Foo # 2| getMember(0): [PatternBindingDecl] var ... = ... diff --git a/swift/ql/test/library-tests/ast/cfg.swift b/swift/ql/test/library-tests/ast/cfg.swift index 270f616cd9c..09090fc70ba 100644 --- a/swift/ql/test/library-tests/ast/cfg.swift +++ b/swift/ql/test/library-tests/ast/cfg.swift @@ -577,4 +577,11 @@ func testOpenExistentialExpr(x: MyProtocol, y: MyProcotolImpl) { sink(arg: getMyProtocolImpl().source()) } +func singleStmtExpr(_ x: Int) { + let a = switch x { + case 0..<5: 1 + default: 2 + } + let b = if (x < 42) { 1 } else { 2 } +} // --- diff --git a/swift/schema.py b/swift/schema.py index c31c7cfeacf..66fe693a8bc 100644 --- a/swift/schema.py +++ b/swift/schema.py @@ -1006,7 +1006,7 @@ class ThenStmt(Stmt): ``` the literal expressions `1`, `2` and `3` are wrapped in `ThenStmt`. """ - result: Expr + result: Expr | child class DoCatchStmt(LabeledStmt): body: Stmt | child From fbc0f572808fcfe22c635cb5b3fb96c48bf0d379 Mon Sep 17 00:00:00 2001 From: James Fletcher <42464962+jf205@users.noreply.github.com> Date: Wed, 27 Mar 2024 16:58:11 +0000 Subject: [PATCH 370/497] Update customizing-library-models-for-javascript.rst --- .../customizing-library-models-for-javascript.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index 99f6edd055c..5e3f5d9f74f 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -1,8 +1,5 @@ .. _customizing-library-models-for-javascript: -:orphan: -:nosearch: - Customizing Library Models for JavaScript ========================================= @@ -30,8 +27,6 @@ The CodeQL library for JavaScript exposes the following extensible predicates: - **typeModel**\(type1, type2, path) - **summaryModel**\(type, path, input, output, kind) -See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). - We'll explain how to use these using a few examples, and provide some reference material at the end of this article. Example: Taint sink in the 'execa' package From 121fed63a0185d4a66f079539f01ad4f1fca67c6 Mon Sep 17 00:00:00 2001 From: James Fletcher <42464962+jf205@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:06:31 +0000 Subject: [PATCH 371/497] Update codeql-for-javascript.rst --- docs/codeql/codeql-language-guides/codeql-for-javascript.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst index 40ecb76ee0a..532f08481f2 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst @@ -33,3 +33,5 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat - :doc:`Abstract syntax tree classes for working with JavaScript and TypeScript programs `: CodeQL has a large selection of classes for representing the abstract syntax tree of JavaScript and TypeScript programs. - :doc:`Data flow cheat sheet for JavaScript `: This article describes parts of the JavaScript libraries commonly used for variant analysis and in data flow queries. + +- :doc:`Customizing library models for JavaScript `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. From 04edd6ec69d6e4c0ad00fcc765a8c60e82d10e96 Mon Sep 17 00:00:00 2001 From: James Fletcher <42464962+jf205@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:08:47 +0000 Subject: [PATCH 372/497] Update docs/codeql/codeql-language-guides/codeql-for-javascript.rst --- docs/codeql/codeql-language-guides/codeql-for-javascript.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst index 532f08481f2..cfc98a1a7d3 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst @@ -34,4 +34,4 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat - :doc:`Data flow cheat sheet for JavaScript `: This article describes parts of the JavaScript libraries commonly used for variant analysis and in data flow queries. -- :doc:`Customizing library models for JavaScript `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. +- :doc:`Customizing library models for JavaScript `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. From ce0edcc265e41d03f855aad9dbcdd0609ed467d9 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Wed, 27 Mar 2024 17:29:18 +0000 Subject: [PATCH 373/497] Ruby: Make MaD doc visible to search Co-authored-by: James Fletcher <42464962+jf205@users.noreply.github.com> --- .../customizing-library-models-for-ruby.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst index ca9046d016d..50a959e14a4 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -1,7 +1,5 @@ .. _customizing-library-models-for-ruby: -:orphan: -:nosearch: Customizing Library Models for Ruby =================================== From b6a1266ade2eb38572726a053b28b10c76894334 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Mar 2024 15:35:51 +0000 Subject: [PATCH 374/497] Java: Accept test changes for MissingEnumInSwitch Oxford commas --- .../MissingEnumInSwitch.expected | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected index 5daf2fc5b8a..deea6bde730 100644 --- a/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected +++ b/java/ql/test/query-tests/Likely Bugs/Statements/MissingEnumInSwitch/MissingEnumInSwitch.expected @@ -1,10 +1,10 @@ -| Test.java:8:5:8:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 22 more. | Test.java:4:27:4:27 | B | B | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | -| Test.java:11:5:11:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 21 more. | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | -| Test.java:15:5:15:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 20 more. | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | -| Test.java:20:5:20:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 19 more. | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | -| Test.java:26:5:26:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 18 more. | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | Test.java:4:35:4:35 | H | H | -| Test.java:33:5:33:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 2 more. | Test.java:4:21:4:21 | V | V | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | -| Test.java:56:5:56:13 | switch (...) | Switch statement does not have a case for $@, $@, $@ or 1 more. | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | -| Test.java:80:5:80:13 | switch (...) | Switch statement does not have a case for $@, $@ or $@. | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | +| Test.java:8:5:8:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 22 more. | Test.java:4:27:4:27 | B | B | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | +| Test.java:11:5:11:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 21 more. | Test.java:4:25:4:25 | C | C | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | +| Test.java:15:5:15:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 20 more. | Test.java:4:45:4:45 | D | D | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | +| Test.java:20:5:20:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 19 more. | Test.java:4:15:4:15 | E | E | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | +| Test.java:26:5:26:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 18 more. | Test.java:4:43:4:43 | F | F | Test.java:4:49:4:49 | G | G | Test.java:4:35:4:35 | H | H | +| Test.java:33:5:33:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 2 more. | Test.java:4:21:4:21 | V | V | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | +| Test.java:56:5:56:13 | switch (...) | Switch statement does not have a case for $@, $@, $@, or 1 more. | Test.java:4:13:4:13 | W | W | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | +| Test.java:80:5:80:13 | switch (...) | Switch statement does not have a case for $@, $@, or $@. | Test.java:4:23:4:23 | X | X | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | | Test.java:105:5:105:13 | switch (...) | Switch statement does not have a case for $@ or $@. | Test.java:4:11:4:11 | Y | Y | Test.java:4:33:4:33 | Z | Z | Test.java:4:11:4:11 | Y | Y | | Test.java:131:5:131:13 | switch (...) | Switch statement does not have a case for $@. | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | Test.java:4:33:4:33 | Z | Z | From 3690f294da0185fa37c32f3e4e78cc08cc668af0 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Wed, 27 Mar 2024 21:02:25 +0000 Subject: [PATCH 375/497] Ruby: add MaD doc to TOC tree --- docs/codeql/codeql-language-guides/codeql-for-ruby.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst index 701a88d6a97..1de2e54d9c6 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-ruby.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-ruby.rst @@ -13,6 +13,7 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat abstract-syntax-tree-classes-for-working-with-ruby-programs analyzing-data-flow-in-ruby using-api-graphs-in-ruby + customizing-library-models-for-ruby - :doc:`Basic query for Ruby code `: Learn to write and run a simple CodeQL query. From 9eb51a9b9e8d86c4c03446e67dd42997ee5edef2 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 27 Mar 2024 15:44:24 +0100 Subject: [PATCH 376/497] C++: Add value category column to the expr_reuse relation --- .../expr_reuse.ql | 7 + .../expr_types.ql | 22 + .../old.dbscheme | 2251 ++++++++ .../semmlecode.cpp.dbscheme | 2250 ++++++++ .../upgrade.properties | 4 + cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 10 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 3 +- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 4617 +++++++++-------- .../expr_reuse.ql | 7 + .../old.dbscheme | 2250 ++++++++ .../semmlecode.cpp.dbscheme | 2251 ++++++++ .../upgrade.properties | 3 + 12 files changed, 11406 insertions(+), 2269 deletions(-) create mode 100644 cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql create mode 100644 cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql create mode 100644 cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme create mode 100644 cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql create mode 100644 cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql new file mode 100644 index 00000000000..201aa17cafd --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_reuse.ql @@ -0,0 +1,7 @@ +class Expr extends @expr { + string toString() { none() } +} + +from Expr reuse, Expr original +where expr_reuse(reuse, original, _) +select reuse, original diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql new file mode 100644 index 00000000000..0dc918e8d71 --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/expr_types.ql @@ -0,0 +1,22 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Type extends @type { + string toString() { none() } +} + +predicate existingType(Expr expr, Type type, int value_category) { + expr_types(expr, type, value_category) +} + +predicate reuseType(Expr reuse, Type type, int value_category) { + exists(Expr original | + expr_reuse(reuse, original, value_category) and + expr_types(original, type, _) + ) +} + +from Expr expr, Type type, int value_category +where existingType(expr, type, value_category) or reuseType(expr, type, value_category) +select expr, type, value_category diff --git a/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme new file mode 100644 index 00000000000..abfce5c170f --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/old.dbscheme @@ -0,0 +1,2251 @@ + +/** + * 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 +); + +/** + * 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, + int handle: @variable ref, + int promise: @variable 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) + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 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 // a using name = type style typedef +; +*/ + +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 +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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 +; + +@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 + ; + +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 +); + +/** + * 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 +); + +@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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +; + +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 +); + +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 +); + +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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock 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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/semmlecode.cpp.dbscheme @@ -0,0 +1,2250 @@ + +/** + * 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 +); + +/** + * 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, + int handle: @variable ref, + int promise: @variable 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) + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 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 // a using name = type style typedef +; +*/ + +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 +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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 +) + +/* + 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 +; + +@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 + ; + +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 +); + +/** + * 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 +); + +@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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +; + +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 +); + +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 +); + +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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock 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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties new file mode 100644 index 00000000000..00edbefddf7 --- /dev/null +++ b/cpp/downgrades/abfce5c170f93e281948f7689ece373464fdaf87/upgrade.properties @@ -0,0 +1,4 @@ +description: Add value category to expr_reuse table +compatibility: full +expr_reuse.rel: run expr_reuse.qlo +expr_types.rel: run expr_types.qlo diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 42e441668f2..a41a0b35fc8 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1340,5 +1340,13 @@ class ReuseExpr extends Expr, @reuseexpr { /** * Gets the expression that is being re-used. */ - Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result)) } + Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result), _) } + + override Type getType() { result = this.getReusedExpr().getType() } + + override predicate isLValueCategory() { expr_reuse(underlyingElement(this), _, 3) } + + override predicate isXValueCategory() { expr_reuse(underlyingElement(this), _, 2) } + + override predicate isPRValueCategory() { expr_reuse(underlyingElement(this), _, 1) } } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index aa7ff0ab32c..abfce5c170f 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1515,7 +1515,8 @@ exprs( expr_reuse( int reuse: @expr ref, - int original: @expr ref + int original: @expr ref, + int value_category: int ref ) /* diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 8d4a841aaf8..d6f973be1f6 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9657 + 9654 @externalDataElement @@ -18,71 +18,71 @@ @location_default - 29786456 + 29787737 @location_stmt - 3820105 - - - @location_expr - 13188716 + 3820076 @diagnostic - 5013 + 5001 + + + @location_expr + 13188614 @file - 123134 + 123139 @folder - 16324 + 16325 @macro_expansion - 32971750 + 32959239 @other_macro_reference - 858211 + 858248 @function - 4646000 + 4646200 @fun_decl - 5009807 + 5010023 @var_decl - 8423062 + 8423424 @type_decl - 3242079 + 3242218 @namespace_decl - 311530 + 311523 @using - 369403 + 369419 @static_assert - 134655 + 134652 @parameter - 6576042 + 6576325 @membervariable - 1054758 + 1054750 @globalvariable @@ -90,11 +90,11 @@ @localvariable - 576906 + 576895 @enumconstant - 241684 + 241682 @errortype @@ -322,35 +322,35 @@ @pointer - 567632 + 567656 @type_with_specifiers - 1010263 + 1010307 @array - 110074 + 110079 @routineptr - 624659 + 624503 @reference - 1721148 + 1720495 @gnu_vector - 693 + 671 @routinereference - 235 + 234 @rvalue_reference - 620692 + 620537 @block @@ -358,43 +358,43 @@ @decltype - 27052 + 27053 @usertype - 5229957 + 5230182 @mangledname - 6448244 + 6448521 @type_mention - 4029370 + 4029338 @routinetype - 538161 + 538026 @ptrtomember - 37779 + 37781 @specifier - 24720 + 24721 @gnuattribute - 685636 + 685665 @stdattribute - 487895 + 487639 @declspec - 243123 + 243121 @msattribute @@ -402,15 +402,15 @@ @alignas - 9794 + 9795 @attribute_arg_token - 39179 + 39180 @attribute_arg_constant_expr - 370336 + 370352 @attribute_arg_empty @@ -430,19 +430,19 @@ @derivation - 391086 + 390988 @frienddecl - 706182 + 706005 @comment - 8686670 + 8682106 @namespace - 12126 + 12127 @specialnamequalifyingelement @@ -450,15 +450,15 @@ @namequalifier - 1516804 + 1515301 @value - 10777325 + 10777241 @initialiser - 1710241 + 1710223 @address_of @@ -466,15 +466,15 @@ @indirect - 292663 + 292660 @array_to_pointer - 1430922 + 1430911 @parexpr - 3587688 + 3587661 @arithnegexpr @@ -490,15 +490,15 @@ @notexpr - 276441 + 276439 @postincrexpr - 62049 + 62048 @postdecrexpr - 42038 + 42037 @preincrexpr @@ -510,75 +510,75 @@ @conditionalexpr - 657276 + 657271 @addexpr - 398417 + 398414 @subexpr - 340778 + 340775 @mulexpr - 306374 + 306372 @divexpr - 133174 + 133173 @remexpr - 15622 + 15618 @paddexpr - 86667 + 86666 @psubexpr - 49903 + 49902 @pdiffexpr - 35197 + 35178 @lshiftexpr - 566336 + 566331 @rshiftexpr - 140848 + 140847 @andexpr - 489084 + 489081 @orexpr - 145473 + 145472 @xorexpr - 54178 + 54177 @eqexpr - 470677 + 470674 @neexpr - 301684 + 301682 @gtexpr - 104011 + 104015 @ltexpr - 101679 + 101683 @geexpr @@ -586,11 +586,11 @@ @leexpr - 212539 + 212537 @assignexpr - 937011 + 937004 @assignaddexpr @@ -602,7 +602,7 @@ @assignmulexpr - 8214 + 8210 @assigndivexpr @@ -610,7 +610,7 @@ @assignremexpr - 414 + 413 @assignlshiftexpr @@ -642,23 +642,23 @@ @andlogicalexpr - 249967 + 249965 @orlogicalexpr - 866161 + 866154 @commaexpr - 122776 + 122711 @subscriptexpr - 364887 + 364880 @callexpr - 316232 + 316245 @vastartexpr @@ -678,15 +678,15 @@ @varaccess - 6029477 + 6029430 @runtime_sizeof - 295853 + 295851 @runtime_alignof - 49198 + 49186 @expr_stmt @@ -694,11 +694,11 @@ @routineexpr - 3151079 + 3150048 @type_operand - 1128821 + 1128813 @offsetofexpr @@ -706,7 +706,7 @@ @typescompexpr - 563810 + 563806 @literal @@ -722,27 +722,27 @@ @temp_init - 796653 + 795228 @errorexpr - 46241 + 46229 @reference_to - 1570260 + 1569867 @ref_indirect - 1906893 + 1906417 @vacuous_destructor_call - 8037 + 8035 @assume - 3231 + 3230 @conjugation @@ -794,31 +794,31 @@ @thisaccess - 1117586 + 1117561 @new_expr - 47006 + 46995 @delete_expr - 11621 + 11618 @throw_expr - 21061 + 21053 @condition_decl - 40853 + 40753 @braced_init_list - 1067 + 1064 @type_id - 35977 + 35968 @sizeof_pack @@ -878,11 +878,11 @@ @isconvtoexpr - 207 + 206 @isemptyexpr - 1461 + 1460 @isenumexpr @@ -914,7 +914,7 @@ @delete_array_expr - 1365 + 1364 @new_array_expr @@ -926,55 +926,55 @@ @ctordirectinit - 111410 + 111383 @ctorvirtualinit - 6322 + 6320 @ctorfieldinit - 198326 + 198277 @ctordelegatinginit - 3305 + 3304 @dtordirectdestruct - 41231 + 41220 @dtorvirtualdestruct - 4070 + 4069 @dtorfielddestruct - 41126 + 41116 @static_cast - 214451 + 214369 @reinterpret_cast - 30745 + 30729 @const_cast - 34990 + 34971 @dynamic_cast - 1007 + 1006 @lambdaexpr - 21455 + 21456 @param_ref - 236428 + 235847 @noopexpr @@ -994,7 +994,7 @@ @istriviallydestructibleexpr - 828 + 827 @istriviallyassignableexpr @@ -1002,7 +1002,7 @@ @isnothrowassignableexpr - 4140 + 4138 @istrivialexpr @@ -1038,7 +1038,7 @@ @isnothrowconstructibleexpr - 14285 + 14278 @hasfinalizerexpr @@ -1074,11 +1074,11 @@ @isfinalexpr - 1670 + 1669 @noexceptexpr - 24725 + 24664 @builtinshufflevector @@ -1090,7 +1090,7 @@ @builtinaddressof - 13117 + 13114 @vec_fill @@ -1134,7 +1134,7 @@ @builtinshuffle - 1902 + 1901 @blockassignexpr @@ -1250,67 +1250,67 @@ @reuseexpr - 331632 + 333955 @lambdacapture - 27985 + 27986 @stmt_expr - 1486111 + 1486099 @stmt_if - 725956 + 725951 @stmt_while - 29152 + 29141 @stmt_goto - 110697 + 110696 @stmt_label - 53145 + 53144 @stmt_return - 1284984 + 1285039 @stmt_block - 1423977 + 1424038 @stmt_end_test_while - 148882 + 148881 @stmt_for - 61560 + 61559 @stmt_switch_case - 201865 + 207702 @stmt_switch - 20788 + 20787 @stmt_asm - 109989 + 109988 @stmt_decl - 589211 + 588988 @stmt_empty - 191899 + 191895 @stmt_continue @@ -1318,11 +1318,11 @@ @stmt_break - 103183 + 103193 @stmt_try_block - 45181 + 45069 @stmt_microsoft_try @@ -1346,11 +1346,11 @@ @stmt_handler - 62891 + 62736 @stmt_constexpr_if - 52071 + 52043 @stmt_co_return @@ -1358,39 +1358,39 @@ @ppd_if - 666512 + 666541 @ppd_ifdef - 263060 + 263071 @ppd_ifndef - 266325 + 266336 @ppd_elif - 25186 + 25187 @ppd_else - 208955 + 208964 @ppd_endif - 1195898 + 1195950 @ppd_plain_include - 311101 + 311114 @ppd_define - 2408524 + 2407258 @ppd_undef - 258396 + 258407 @ppd_include_next @@ -1406,7 +1406,7 @@ @ppd_pragma - 311805 + 311642 @ppd_objc_import @@ -1418,7 +1418,7 @@ @link_target - 819 + 817 @xmldtd @@ -1436,23 +1436,23 @@ @xmlnamespace 4185 - - @xmlcomment - 26812 - @xmlcharacters 439958 + + @xmlcomment + 26812 + compilations - 9657 + 9654 id - 9657 + 9654 cwd @@ -1470,7 +1470,7 @@ 1 2 - 9657 + 9654 @@ -1496,7 +1496,7 @@ compilation_args - 652589 + 652584 id @@ -1508,7 +1508,7 @@ arg - 34463 + 34462 @@ -2044,7 +2044,7 @@ seconds - 9828 + 9748 @@ -2125,47 +2125,47 @@ 3 4 - 719 + 759 4 5 - 279 + 239 5 - 8 - 159 + 7 + 119 - 9 + 8 10 159 10 + 11 + 79 + + + 11 12 159 12 - 16 - 119 - - - 16 - 18 + 17 159 - 19 - 43 + 18 + 22 159 - 57 - 92 - 79 + 25 + 98 + 159 @@ -2233,22 +2233,22 @@ 3 4 - 1478 + 1438 4 5 - 279 + 319 5 6 - 239 + 199 6 7 - 439 + 479 7 @@ -2257,18 +2257,18 @@ 8 - 9 - 199 - - - 9 - 23 + 10 279 - 24 - 90 - 279 + 10 + 26 + 239 + + + 26 + 84 + 239 @@ -2316,21 +2316,16 @@ 3 4 + 79 + + + 137 + 138 39 - 4 - 5 - 39 - - - 136 - 137 - 39 - - - 146 - 147 + 142 + 143 39 @@ -2347,27 +2342,27 @@ 1 2 - 4834 + 4994 2 3 - 2557 + 2117 3 4 - 1238 + 1278 4 5 - 719 + 958 5 - 46 - 479 + 47 + 399 @@ -2383,32 +2378,32 @@ 1 2 - 4474 + 4554 2 3 - 2197 + 1997 3 4 - 1318 + 1238 4 5 - 679 + 839 5 7 - 799 + 878 7 - 76 - 359 + 74 + 239 @@ -2429,7 +2424,7 @@ 2 3 - 1718 + 1638 @@ -2439,15 +2434,15 @@ diagnostic_for - 5471 + 5457 diagnostic - 5013 + 5001 compilation - 819 + 817 file_number @@ -2455,7 +2450,7 @@ file_number_diagnostic_number - 400 + 399 @@ -2469,7 +2464,7 @@ 1 2 - 4861 + 4849 2 @@ -2490,7 +2485,7 @@ 1 2 - 5013 + 5001 @@ -2506,7 +2501,7 @@ 1 2 - 5013 + 5001 @@ -2522,7 +2517,7 @@ 5 6 - 610 + 608 7 @@ -2558,7 +2553,7 @@ 1 2 - 819 + 817 @@ -2574,7 +2569,7 @@ 5 6 - 610 + 608 7 @@ -2755,7 +2750,7 @@ 1 2 - 400 + 399 @@ -2765,15 +2760,15 @@ compilation_finished - 9657 + 9654 id - 9657 + 9654 cpu_seconds - 7330 + 7763 elapsed_seconds @@ -2791,7 +2786,7 @@ 1 2 - 9657 + 9654 @@ -2807,7 +2802,7 @@ 1 2 - 9657 + 9654 @@ -2823,17 +2818,17 @@ 1 2 - 6054 + 6510 2 3 - 850 + 872 3 - 20 - 425 + 14 + 380 @@ -2849,12 +2844,12 @@ 1 2 - 6692 + 7461 2 3 - 637 + 302 @@ -2868,53 +2863,63 @@ 12 - 1 - 2 + 2 + 3 + 22 + + + 3 + 4 11 - 2 - 3 - 33 + 6 + 7 + 11 7 8 - 22 - - - 11 - 12 11 - 12 - 13 + 8 + 9 11 - 52 - 53 + 9 + 10 11 - 161 - 162 + 37 + 38 11 - 163 - 164 + 47 + 48 11 - 184 - 185 + 118 + 119 11 - 259 - 260 + 140 + 141 + 11 + + + 229 + 230 + 11 + + + 255 + 256 11 @@ -2929,53 +2934,63 @@ 12 - 1 - 2 + 2 + 3 + 22 + + + 3 + 4 11 - 2 - 3 - 33 + 6 + 7 + 11 7 8 - 22 - - - 11 - 12 11 - 12 - 13 + 8 + 9 11 - 52 - 53 + 9 + 10 11 - 115 - 116 + 37 + 38 11 - 119 - 120 + 47 + 48 11 - 140 - 141 + 97 + 98 11 - 242 - 243 + 112 + 113 + 11 + + + 183 + 184 + 11 + + + 208 + 209 11 @@ -4748,31 +4763,31 @@ locations_default - 29786456 + 29787737 id - 29786456 + 29787737 container - 123134 + 123139 startLine - 2093288 + 2093378 startColumn - 36847 + 36848 endLine - 2097486 + 2097576 endColumn - 48041 + 48043 @@ -4786,7 +4801,7 @@ 1 2 - 29786456 + 29787737 @@ -4802,7 +4817,7 @@ 1 2 - 29786456 + 29787737 @@ -4818,7 +4833,7 @@ 1 2 - 29786456 + 29787737 @@ -4834,7 +4849,7 @@ 1 2 - 29786456 + 29787737 @@ -4850,7 +4865,7 @@ 1 2 - 29786456 + 29787737 @@ -4866,7 +4881,7 @@ 1 11 - 9794 + 9795 11 @@ -4881,12 +4896,12 @@ 30 42 - 9794 + 9795 43 61 - 9794 + 9795 61 @@ -4896,7 +4911,7 @@ 80 106 - 9794 + 9795 109 @@ -4952,7 +4967,7 @@ 13 20 - 9794 + 9795 20 @@ -4962,7 +4977,7 @@ 32 43 - 9794 + 9795 44 @@ -5023,7 +5038,7 @@ 1 4 - 8861 + 8862 4 @@ -5033,7 +5048,7 @@ 5 6 - 7462 + 7463 6 @@ -5048,12 +5063,12 @@ 10 15 - 10727 + 10728 15 23 - 9794 + 9795 23 @@ -5063,7 +5078,7 @@ 28 34 - 9794 + 9795 34 @@ -5078,7 +5093,7 @@ 55 66 - 9794 + 9795 66 @@ -5109,7 +5124,7 @@ 13 20 - 9794 + 9795 20 @@ -5119,7 +5134,7 @@ 32 43 - 9794 + 9795 43 @@ -5180,7 +5195,7 @@ 1 9 - 9794 + 9795 9 @@ -5230,12 +5245,12 @@ 66 74 - 9794 + 9795 74 78 - 9794 + 9795 78 @@ -5256,47 +5271,47 @@ 1 2 - 581158 + 581183 2 3 - 314832 + 314846 3 4 - 194963 + 194971 4 6 - 162313 + 162320 6 10 - 183302 + 183310 10 16 - 161847 + 161854 16 25 - 168377 + 168384 25 45 - 157183 + 157189 45 160 - 157649 + 157656 160 @@ -5317,42 +5332,42 @@ 1 2 - 870338 + 870375 2 3 - 273321 + 273333 3 5 - 193563 + 193572 5 8 - 173507 + 173515 8 13 - 187966 + 187974 13 20 - 160914 + 160921 20 51 - 159515 + 159522 51 265 - 74160 + 74163 @@ -5368,47 +5383,47 @@ 1 2 - 611475 + 611501 2 3 - 312967 + 312980 3 4 - 198228 + 198236 4 6 - 182836 + 182844 6 9 - 173041 + 173048 9 13 - 163246 + 163253 13 19 - 173974 + 173981 19 29 - 165112 + 165119 29 52 - 112407 + 112411 @@ -5424,22 +5439,22 @@ 1 2 - 1530321 + 1530386 2 3 - 348415 + 348430 3 5 - 161847 + 161854 5 16 - 52705 + 52707 @@ -5455,47 +5470,47 @@ 1 2 - 585822 + 585847 2 3 - 316232 + 316245 3 4 - 197761 + 197770 4 6 - 168377 + 168384 6 10 - 191698 + 191706 10 15 - 165578 + 165585 15 22 - 167910 + 167918 22 34 - 164179 + 164186 34 66 - 135727 + 135733 @@ -5597,7 +5612,7 @@ 23 35 - 3264 + 3265 38 @@ -5617,7 +5632,7 @@ 73 84 - 3264 + 3265 84 @@ -5627,12 +5642,12 @@ 96 101 - 3264 + 3265 101 105 - 3264 + 3265 107 @@ -5835,12 +5850,12 @@ 7 11 - 3264 + 3265 11 16 - 3264 + 3265 16 @@ -5850,7 +5865,7 @@ 22 24 - 3264 + 3265 24 @@ -5860,12 +5875,12 @@ 29 34 - 3264 + 3265 34 41 - 3264 + 3265 41 @@ -5906,47 +5921,47 @@ 1 2 - 591419 + 591444 2 3 - 306903 + 306916 3 4 - 198228 + 198236 4 6 - 159515 + 159522 6 10 - 182836 + 182844 10 16 - 160448 + 160455 16 25 - 170709 + 170716 25 45 - 158116 + 158122 45 160 - 158116 + 158122 160 @@ -5967,42 +5982,42 @@ 1 2 - 885729 + 885767 2 3 - 259795 + 259806 3 4 - 125000 + 125005 4 6 - 140858 + 140864 6 10 - 184701 + 184709 10 15 - 168377 + 168384 15 26 - 163246 + 163253 26 120 - 158116 + 158122 121 @@ -6023,22 +6038,22 @@ 1 2 - 1527988 + 1528054 2 3 - 341418 + 341433 3 5 - 170709 + 170716 5 10 - 57369 + 57372 @@ -6054,47 +6069,47 @@ 1 2 - 622669 + 622696 2 3 - 303172 + 303185 3 4 - 201493 + 201501 4 6 - 183769 + 183777 6 9 - 169776 + 169783 9 13 - 166511 + 166518 13 19 - 174907 + 174914 19 29 - 160914 + 160921 29 52 - 114272 + 114277 @@ -6110,47 +6125,47 @@ 1 2 - 597949 + 597975 2 3 - 306903 + 306916 3 4 - 196362 + 196370 4 6 - 169310 + 169317 6 9 - 154851 + 154857 9 14 - 168377 + 168384 14 21 - 178638 + 178646 21 32 - 163246 + 163253 32 60 - 158116 + 158122 60 @@ -6434,17 +6449,17 @@ 35 39 - 3264 + 3265 39 42 - 3264 + 3265 42 44 - 3264 + 3265 44 @@ -6545,11 +6560,11 @@ locations_stmt - 3820105 + 3820076 id - 3820105 + 3820076 container @@ -6557,7 +6572,7 @@ startLine - 200183 + 200182 startColumn @@ -6565,7 +6580,7 @@ endLine - 194439 + 194437 endColumn @@ -6583,7 +6598,7 @@ 1 2 - 3820105 + 3820076 @@ -6599,7 +6614,7 @@ 1 2 - 3820105 + 3820076 @@ -6615,7 +6630,7 @@ 1 2 - 3820105 + 3820076 @@ -6631,7 +6646,7 @@ 1 2 - 3820105 + 3820076 @@ -6647,7 +6662,7 @@ 1 2 - 3820105 + 3820076 @@ -7098,7 +7113,7 @@ 37 45 - 15112 + 15111 45 @@ -7139,7 +7154,7 @@ 4 6 - 14412 + 14411 6 @@ -7276,7 +7291,7 @@ 3 4 - 18468 + 18467 4 @@ -7321,7 +7336,7 @@ 12 14 - 15812 + 15811 14 @@ -7342,7 +7357,7 @@ 1 2 - 22174 + 22173 2 @@ -7798,7 +7813,7 @@ 3 4 - 11509 + 11508 4 @@ -7869,7 +7884,7 @@ 2 3 - 16162 + 16161 3 @@ -7889,7 +7904,7 @@ 8 11 - 15915 + 15914 11 @@ -7935,7 +7950,7 @@ 1 2 - 32530 + 32529 2 @@ -8016,7 +8031,7 @@ 3 4 - 16862 + 16861 4 @@ -8031,7 +8046,7 @@ 6 7 - 20465 + 20464 7 @@ -8082,7 +8097,7 @@ 3 4 - 12559 + 12558 4 @@ -8117,7 +8132,7 @@ 19 22 - 14062 + 14061 22 @@ -8527,11 +8542,11 @@ locations_expr - 13188716 + 13188614 id - 13188716 + 13188614 container @@ -8539,7 +8554,7 @@ startLine - 192236 + 192235 startColumn @@ -8547,7 +8562,7 @@ endLine - 192215 + 192214 endColumn @@ -8565,7 +8580,7 @@ 1 2 - 13188716 + 13188614 @@ -8581,7 +8596,7 @@ 1 2 - 13188716 + 13188614 @@ -8597,7 +8612,7 @@ 1 2 - 13188716 + 13188614 @@ -8613,7 +8628,7 @@ 1 2 - 13188716 + 13188614 @@ -8629,7 +8644,7 @@ 1 2 - 13188716 + 13188614 @@ -9050,7 +9065,7 @@ 5 9 - 16512 + 16511 9 @@ -9202,7 +9217,7 @@ 7 11 - 16718 + 16717 11 @@ -9268,7 +9283,7 @@ 2 3 - 44698 + 44697 3 @@ -9339,7 +9354,7 @@ 38 43 - 15565 + 15564 43 @@ -9760,12 +9775,12 @@ 1 5 - 16162 + 16161 5 9 - 16512 + 16511 9 @@ -9775,7 +9790,7 @@ 15 23 - 15112 + 15111 23 @@ -9785,12 +9800,12 @@ 32 44 - 14762 + 14761 44 60 - 14515 + 14514 60 @@ -9912,17 +9927,17 @@ 1 2 - 95634 + 95633 2 3 - 50092 + 50091 3 4 - 29421 + 29420 4 @@ -9958,7 +9973,7 @@ 7 11 - 16512 + 16511 11 @@ -10059,7 +10074,7 @@ 38 43 - 16162 + 16161 43 @@ -10459,23 +10474,23 @@ numlines - 1382466 + 1382525 element_id - 1375469 + 1375529 num_lines - 101679 + 101683 num_code - 84888 + 84891 num_comment - 59701 + 59704 @@ -10489,7 +10504,7 @@ 1 2 - 1368473 + 1368532 2 @@ -10510,7 +10525,7 @@ 1 2 - 1369406 + 1369465 2 @@ -10531,7 +10546,7 @@ 1 2 - 1375469 + 1375529 @@ -10547,17 +10562,17 @@ 1 2 - 68097 + 68100 2 3 - 12126 + 12127 3 4 - 7462 + 7463 4 @@ -10583,12 +10598,12 @@ 1 2 - 70429 + 70432 2 3 - 12126 + 12127 3 @@ -10619,22 +10634,22 @@ 1 2 - 69496 + 69499 2 3 - 14925 + 14926 3 4 - 10727 + 10728 4 7 - 6529 + 6530 @@ -10650,22 +10665,22 @@ 1 2 - 52705 + 52707 2 3 - 14458 + 14459 3 5 - 6529 + 6530 5 42 - 6529 + 6530 44 @@ -10686,7 +10701,7 @@ 1 2 - 52705 + 52707 2 @@ -10701,7 +10716,7 @@ 5 8 - 6529 + 6530 8 @@ -10722,7 +10737,7 @@ 1 2 - 53171 + 53174 2 @@ -10732,7 +10747,7 @@ 3 5 - 7462 + 7463 5 @@ -10742,7 +10757,7 @@ 7 10 - 3264 + 3265 @@ -10758,7 +10773,7 @@ 1 2 - 34515 + 34516 2 @@ -10799,7 +10814,7 @@ 1 2 - 34515 + 34516 2 @@ -10840,7 +10855,7 @@ 1 2 - 34515 + 34516 2 @@ -10875,11 +10890,11 @@ diagnostics - 5013 + 5001 id - 5013 + 5001 severity @@ -10891,11 +10906,11 @@ error_message - 400 + 399 full_error_message - 4213 + 4202 location @@ -10913,7 +10928,7 @@ 1 2 - 5013 + 5001 @@ -10929,7 +10944,7 @@ 1 2 - 5013 + 5001 @@ -10945,7 +10960,7 @@ 1 2 - 5013 + 5001 @@ -10961,7 +10976,7 @@ 1 2 - 5013 + 5001 @@ -10977,7 +10992,7 @@ 1 2 - 5013 + 5001 @@ -11209,7 +11224,7 @@ 1 2 - 400 + 399 @@ -11225,7 +11240,7 @@ 1 2 - 400 + 399 @@ -11303,7 +11318,7 @@ 1 2 - 4194 + 4183 43 @@ -11324,7 +11339,7 @@ 1 2 - 4213 + 4202 @@ -11340,7 +11355,7 @@ 1 2 - 4213 + 4202 @@ -11356,7 +11371,7 @@ 1 2 - 4213 + 4202 @@ -11372,7 +11387,7 @@ 1 2 - 4213 + 4202 @@ -11507,15 +11522,15 @@ files - 123134 + 123139 id - 123134 + 123139 name - 123134 + 123139 @@ -11529,7 +11544,7 @@ 1 2 - 123134 + 123139 @@ -11545,7 +11560,7 @@ 1 2 - 123134 + 123139 @@ -11555,15 +11570,15 @@ folders - 16324 + 16325 id - 16324 + 16325 name - 16324 + 16325 @@ -11577,7 +11592,7 @@ 1 2 - 16324 + 16325 @@ -11593,7 +11608,7 @@ 1 2 - 16324 + 16325 @@ -11603,15 +11618,15 @@ containerparent - 138526 + 138532 parent - 16324 + 16325 child - 138526 + 138532 @@ -11625,12 +11640,12 @@ 1 2 - 7462 + 7463 2 3 - 3264 + 3265 3 @@ -11666,7 +11681,7 @@ 1 2 - 138526 + 138532 @@ -11676,11 +11691,11 @@ fileannotations - 5084962 + 5083033 id - 4856 + 4855 kind @@ -11688,11 +11703,11 @@ name - 54298 + 54277 value - 45647 + 45630 @@ -11711,7 +11726,7 @@ 2 3 - 4688 + 4687 @@ -11772,7 +11787,7 @@ 936 937 - 1410 + 1409 1083 @@ -11838,7 +11853,7 @@ 1501 1502 - 1410 + 1409 1504 @@ -11848,7 +11863,7 @@ 1972 4080 - 235 + 234 @@ -11927,57 +11942,57 @@ 1 2 - 8784 + 8781 2 3 - 6166 + 6163 3 5 - 4140 + 4139 5 9 - 4230 + 4228 9 14 - 3950 + 3948 14 18 - 4140 + 4139 18 20 - 4677 + 4676 20 34 - 4185 + 4183 34 128 - 4465 + 4463 128 229 - 4084 + 4083 229 387 - 4207 + 4206 387 @@ -11998,7 +12013,7 @@ 1 2 - 54298 + 54277 @@ -12014,62 +12029,62 @@ 1 2 - 8796 + 8792 2 3 - 7990 + 7987 3 4 - 2540 + 2539 4 6 - 4476 + 4474 6 9 - 4095 + 4094 9 14 - 4174 + 4172 14 17 - 4095 + 4094 17 22 - 4554 + 4552 22 41 - 4174 + 4172 41 82 - 4129 + 4127 82 157 - 4073 + 4071 158 1895 - 1197 + 1196 @@ -12085,62 +12100,62 @@ 1 2 - 7095 + 7092 2 5 - 2215 + 2214 5 8 - 3301 + 3300 8 15 - 3502 + 3501 15 17 - 2517 + 2516 17 19 - 4107 + 4105 19 34 - 3301 + 3300 34 189 - 3592 + 3590 189 201 - 3581 + 3579 201 266 - 3525 + 3523 266 321 - 3648 + 3646 322 399 - 3916 + 3915 399 @@ -12161,7 +12176,7 @@ 1 2 - 45636 + 45619 2 @@ -12182,67 +12197,67 @@ 1 2 - 7117 + 7114 2 5 - 2562 + 2561 5 8 - 3480 + 3479 8 15 - 3525 + 3523 15 17 - 2808 + 2807 17 19 - 3558 + 3557 19 29 - 3480 + 3479 29 39 - 3637 + 3635 39 48 - 3581 + 3579 48 74 - 3536 + 3534 74 102 - 3424 + 3423 102 119 - 3569 + 3568 119 146 - 1365 + 1364 @@ -12252,15 +12267,15 @@ inmacroexpansion - 109785545 + 109784721 id - 18028412 + 18028276 inv - 2700329 + 2700307 @@ -12274,37 +12289,37 @@ 1 3 - 1582049 + 1582036 3 5 - 1077861 + 1077853 5 6 - 1184952 + 1184943 6 7 - 4820205 + 4820169 7 8 - 6386332 + 6386284 8 9 - 2605405 + 2605386 9 21 - 371604 + 371602 @@ -12320,32 +12335,32 @@ 1 2 - 378447 + 378443 2 3 - 544135 + 544126 3 4 - 351535 + 351533 4 7 - 200670 + 200669 7 8 - 207164 + 207162 8 9 - 241902 + 241901 9 @@ -12355,17 +12370,17 @@ 10 11 - 325505 + 325503 11 337 - 224864 + 224867 339 423 - 206365 + 206363 423 @@ -12380,15 +12395,15 @@ affectedbymacroexpansion - 35691161 + 35690892 id - 5157043 + 5157002 inv - 2784936 + 2784914 @@ -12402,37 +12417,37 @@ 1 2 - 2816098 + 2816076 2 3 - 560161 + 560157 3 4 - 264922 + 264920 4 5 - 565827 + 565823 5 12 - 391926 + 391923 12 50 - 407425 + 407422 50 9900 - 150681 + 150680 @@ -12448,62 +12463,62 @@ 1 4 - 229130 + 229127 4 7 - 231802 + 231800 7 9 - 220491 + 220489 9 12 - 251102 + 251100 12 13 - 333997 + 333995 13 14 - 165598 + 165596 14 15 - 298861 + 298859 15 16 - 121850 + 121849 16 17 - 276624 + 276622 17 18 - 146949 + 146948 18 20 - 252149 + 252148 20 25 - 208991 + 208989 25 @@ -12518,19 +12533,19 @@ macroinvocations - 33202987 + 33190389 id - 33202987 + 33190389 macro_id - 78795 + 78765 location - 753796 + 753510 kind @@ -12548,7 +12563,7 @@ 1 2 - 33202987 + 33190389 @@ -12564,7 +12579,7 @@ 1 2 - 33202987 + 33190389 @@ -12580,7 +12595,7 @@ 1 2 - 33202987 + 33190389 @@ -12596,52 +12611,52 @@ 1 2 - 16114 + 16108 2 3 - 16428 + 16421 3 4 - 3088 + 3087 4 5 - 5226 + 5224 5 8 - 5640 + 5638 8 13 - 6054 + 6051 13 26 - 6121 + 6119 26 61 - 6009 + 6007 61 199 - 5919 + 5917 199 1697 - 5964 + 5962 1716 @@ -12662,37 +12677,37 @@ 1 2 - 42100 + 42084 2 3 - 10306 + 10302 3 4 - 5114 + 5112 4 6 - 6781 + 6779 6 13 - 6423 + 6421 13 66 - 5953 + 5951 66 3614 - 2115 + 2114 @@ -12708,12 +12723,12 @@ 1 2 - 73110 + 73082 2 3 - 5684 + 5682 @@ -12729,37 +12744,37 @@ 1 2 - 278787 + 278681 2 3 - 168154 + 168090 3 4 - 70144 + 70117 4 5 - 59770 + 59747 5 9 - 69786 + 69759 9 21 - 58595 + 58573 21 244764 - 48557 + 48538 @@ -12775,12 +12790,12 @@ 1 2 - 708025 + 707756 2 350 - 45770 + 45753 @@ -12796,7 +12811,7 @@ 1 2 - 753796 + 753510 @@ -12869,15 +12884,15 @@ macroparent - 29691721 + 29680455 id - 29691721 + 29680455 parent_id - 23085760 + 23077000 @@ -12891,7 +12906,7 @@ 1 2 - 29691721 + 29680455 @@ -12907,17 +12922,17 @@ 1 2 - 17837443 + 17830675 2 3 - 4420895 + 4419217 3 88 - 827421 + 827107 @@ -12927,15 +12942,15 @@ macrolocationbind - 4044034 + 4043998 id - 2831314 + 2831290 location - 2021186 + 2021169 @@ -12949,17 +12964,17 @@ 1 2 - 2230051 + 2230032 2 3 - 341145 + 341142 3 7 - 230539 + 230537 7 @@ -12980,22 +12995,22 @@ 1 2 - 1611118 + 1611104 2 3 - 177692 + 177691 3 8 - 156878 + 156877 8 723 - 75497 + 75496 @@ -13005,11 +13020,11 @@ macro_argument_unexpanded - 83818746 + 83786944 invocation - 25989002 + 25979141 argument_index @@ -13017,7 +13032,7 @@ text - 315549 + 315429 @@ -13031,22 +13046,22 @@ 1 2 - 7368800 + 7366004 2 3 - 10582220 + 10578205 3 4 - 6086111 + 6083801 4 67 - 1951870 + 1951130 @@ -13062,22 +13077,22 @@ 1 2 - 7438351 + 7435529 2 3 - 10727500 + 10723430 3 4 - 5921224 + 5918977 4 67 - 1901925 + 1901204 @@ -13093,7 +13108,7 @@ 41230 41231 - 649 + 648 41432 @@ -13119,7 +13134,7 @@ 2 3 - 649 + 648 13 @@ -13145,57 +13160,57 @@ 1 2 - 34770 + 34756 2 3 - 60732 + 60709 3 4 - 17592 + 17585 4 5 - 44674 + 44657 5 7 - 23713 + 23704 7 12 - 18364 + 18357 12 16 - 21430 + 21422 16 23 - 24765 + 24756 23 42 - 24116 + 24107 42 129 - 23870 + 23861 129 522417 - 21520 + 21511 @@ -13211,17 +13226,17 @@ 1 2 - 228204 + 228118 2 3 - 77150 + 77120 3 9 - 10194 + 10191 @@ -13231,11 +13246,11 @@ macro_argument_expanded - 83818746 + 83786944 invocation - 25989002 + 25979141 argument_index @@ -13243,7 +13258,7 @@ text - 191229 + 191157 @@ -13257,22 +13272,22 @@ 1 2 - 7368800 + 7366004 2 3 - 10582220 + 10578205 3 4 - 6086111 + 6083801 4 67 - 1951870 + 1951130 @@ -13288,22 +13303,22 @@ 1 2 - 10597171 + 10593150 2 3 - 9122547 + 9119085 3 4 - 5163131 + 5161172 4 9 - 1106152 + 1105732 @@ -13319,7 +13334,7 @@ 41230 41231 - 649 + 648 41432 @@ -13371,62 +13386,62 @@ 1 2 - 20613 + 20605 2 3 - 36985 + 36971 3 4 - 8986 + 8982 4 5 - 16237 + 16231 5 6 - 2394 + 2393 6 7 - 22650 + 22641 7 9 - 14671 + 14665 9 14 - 11940 + 11936 14 19 - 14425 + 14419 19 48 - 14346 + 14341 48 151 - 14357 + 14352 152 1060462 - 13619 + 13614 @@ -13442,17 +13457,17 @@ 1 2 - 96778 + 96742 2 3 - 80171 + 80141 3 66 - 14279 + 14274 @@ -13462,19 +13477,19 @@ functions - 4646000 + 4646200 id - 4646000 + 4646200 name - 1916982 + 1917064 kind - 3264 + 3265 @@ -13488,7 +13503,7 @@ 1 2 - 4646000 + 4646200 @@ -13504,7 +13519,7 @@ 1 2 - 4646000 + 4646200 @@ -13520,22 +13535,22 @@ 1 2 - 1504201 + 1504266 2 3 - 152052 + 152059 3 5 - 150186 + 150193 5 1676 - 110541 + 110546 @@ -13551,7 +13566,7 @@ 1 2 - 1916516 + 1916598 2 @@ -13658,15 +13673,15 @@ function_entry_point - 1156719 + 1156769 id - 1146924 + 1146973 entry_point - 1156719 + 1156769 @@ -13680,12 +13695,12 @@ 1 2 - 1137129 + 1137178 2 3 - 9794 + 9795 @@ -13701,7 +13716,7 @@ 1 2 - 1156719 + 1156769 @@ -13711,15 +13726,15 @@ function_return_type - 4651131 + 4651331 id - 4646000 + 4646200 return_type - 987409 + 987451 @@ -13733,7 +13748,7 @@ 1 2 - 4640870 + 4641069 2 @@ -13754,22 +13769,22 @@ 1 2 - 510262 + 510284 2 3 - 375933 + 375949 3 10 - 75093 + 75096 10 2516 - 26119 + 26120 @@ -14091,59 +14106,59 @@ purefunctions - 100917 + 100915 id - 100917 + 100915 function_deleted - 137593 + 137599 id - 137593 + 137599 function_defaulted - 73694 + 73697 id - 73694 + 73697 function_prototyped - 4554116 + 4554311 id - 4554116 + 4554311 member_function_this_type - 546094 + 545957 id - 546094 + 545957 this_type - 187436 + 187389 @@ -14157,7 +14172,7 @@ 1 2 - 546094 + 545957 @@ -14173,32 +14188,32 @@ 1 2 - 67674 + 67657 2 3 - 44849 + 44838 3 4 - 30201 + 30193 4 5 - 15344 + 15340 5 7 - 15379 + 15375 7 66 - 13987 + 13983 @@ -14208,27 +14223,27 @@ fun_decls - 5014938 + 5015153 id - 5009807 + 5010023 function - 4502343 + 4502537 type_id - 986009 + 986052 name - 1819500 + 1819579 location - 3418385 + 3418532 @@ -14242,7 +14257,7 @@ 1 2 - 5009807 + 5010023 @@ -14258,7 +14273,7 @@ 1 2 - 5004676 + 5004892 2 @@ -14279,7 +14294,7 @@ 1 2 - 5009807 + 5010023 @@ -14295,7 +14310,7 @@ 1 2 - 5009807 + 5010023 @@ -14311,17 +14326,17 @@ 1 2 - 4073704 + 4073879 2 3 - 355877 + 355893 3 7 - 72761 + 72764 @@ -14337,12 +14352,12 @@ 1 2 - 4462697 + 4462889 2 3 - 39645 + 39647 @@ -14358,7 +14373,7 @@ 1 2 - 4502343 + 4502537 @@ -14374,12 +14389,12 @@ 1 2 - 4130141 + 4130318 2 4 - 371269 + 371285 5 @@ -14400,22 +14415,22 @@ 1 2 - 435635 + 435654 2 3 - 438433 + 438452 3 8 - 75093 + 75096 8 2761 - 36847 + 36848 @@ -14431,22 +14446,22 @@ 1 2 - 519590 + 519613 2 3 - 367538 + 367554 3 11 - 75559 + 75563 11 2477 - 23320 + 23321 @@ -14462,17 +14477,17 @@ 1 2 - 858677 + 858714 2 5 - 89552 + 89556 5 823 - 37779 + 37781 @@ -14488,22 +14503,22 @@ 1 2 - 754666 + 754698 2 3 - 131530 + 131535 3 10 - 74627 + 74630 10 2030 - 25186 + 25187 @@ -14519,27 +14534,27 @@ 1 2 - 1234611 + 1234664 2 3 - 266791 + 266803 3 4 - 80690 + 80693 4 6 - 136660 + 136666 6 1710 - 100746 + 100750 @@ -14555,22 +14570,22 @@ 1 2 - 1413716 + 1413777 2 3 - 151119 + 151126 3 5 - 144123 + 144129 5 1660 - 110541 + 110546 @@ -14586,17 +14601,17 @@ 1 2 - 1601216 + 1601285 2 4 - 134795 + 134800 4 930 - 83489 + 83492 @@ -14612,27 +14627,27 @@ 1 2 - 1255600 + 1255654 2 3 - 293377 + 293390 3 4 - 79757 + 79761 4 8 - 137593 + 137599 8 653 - 53171 + 53174 @@ -14648,17 +14663,17 @@ 1 2 - 2962227 + 2962355 2 4 - 296176 + 296188 4 55 - 159981 + 159988 @@ -14674,17 +14689,17 @@ 1 2 - 3029392 + 3029522 2 6 - 262593 + 262605 6 55 - 126399 + 126405 @@ -14700,12 +14715,12 @@ 1 2 - 3208496 + 3208634 2 25 - 209888 + 209897 @@ -14721,12 +14736,12 @@ 1 2 - 3246276 + 3246416 2 13 - 172108 + 172116 @@ -14736,22 +14751,22 @@ fun_def - 1935172 + 1935256 id - 1935172 + 1935256 fun_specialized - 26119 + 26120 id - 26119 + 26120 @@ -14769,11 +14784,11 @@ fun_decl_specifiers - 2903925 + 2904050 id - 1687970 + 1688043 name @@ -14791,17 +14806,17 @@ 1 2 - 490672 + 490693 2 3 - 1178641 + 1178691 3 4 - 18656 + 18657 @@ -14973,26 +14988,26 @@ fun_decl_empty_throws - 1933773 + 1933856 fun_decl - 1933773 + 1933856 fun_decl_noexcept - 60559 + 60528 fun_decl - 60559 + 60528 constant - 60456 + 60424 @@ -15006,7 +15021,7 @@ 1 2 - 60559 + 60528 @@ -15022,7 +15037,7 @@ 1 2 - 60352 + 60321 2 @@ -15037,11 +15052,11 @@ fun_decl_empty_noexcept - 869871 + 869909 fun_decl - 869871 + 869909 @@ -15146,11 +15161,11 @@ param_decl_bind - 7379682 + 7380000 id - 7379682 + 7380000 index @@ -15158,7 +15173,7 @@ fun_decl - 4222958 + 4223140 @@ -15172,7 +15187,7 @@ 1 2 - 7379682 + 7380000 @@ -15188,7 +15203,7 @@ 1 2 - 7379682 + 7380000 @@ -15366,22 +15381,22 @@ 1 2 - 2363345 + 2363447 2 3 - 1060637 + 1060682 3 4 - 502333 + 502354 4 18 - 296642 + 296655 @@ -15397,22 +15412,22 @@ 1 2 - 2363345 + 2363447 2 3 - 1060637 + 1060682 3 4 - 502333 + 502354 4 18 - 296642 + 296655 @@ -15422,27 +15437,27 @@ var_decls - 8493958 + 8494323 id - 8423062 + 8423424 variable - 7411865 + 7412184 type_id - 2384334 + 2384436 name - 666979 + 667007 location - 5306916 + 5307144 @@ -15456,7 +15471,7 @@ 1 2 - 8423062 + 8423424 @@ -15472,12 +15487,12 @@ 1 2 - 8354965 + 8355324 2 3 - 68097 + 68100 @@ -15493,7 +15508,7 @@ 1 2 - 8423062 + 8423424 @@ -15509,7 +15524,7 @@ 1 2 - 8420264 + 8420626 2 @@ -15530,17 +15545,17 @@ 1 2 - 6560651 + 6560933 2 3 - 697762 + 697792 3 7 - 153451 + 153458 @@ -15556,12 +15571,12 @@ 1 2 - 7240690 + 7241001 2 4 - 171175 + 171183 @@ -15577,12 +15592,12 @@ 1 2 - 7296660 + 7296974 2 3 - 115205 + 115210 @@ -15598,12 +15613,12 @@ 1 2 - 6867088 + 6867383 2 4 - 544777 + 544800 @@ -15619,27 +15634,27 @@ 1 2 - 1469220 + 1469283 2 3 - 509329 + 509351 3 4 - 97948 + 97952 4 7 - 187034 + 187042 7 762 - 120802 + 120807 @@ -15655,22 +15670,22 @@ 1 2 - 1602616 + 1602684 2 3 - 484609 + 484630 3 7 - 186567 + 186575 7 724 - 110541 + 110546 @@ -15686,17 +15701,17 @@ 1 2 - 1877336 + 1877417 2 3 - 384795 + 384812 3 128 - 122201 + 122207 @@ -15712,22 +15727,22 @@ 1 2 - 1705228 + 1705301 2 3 - 401586 + 401604 3 8 - 188433 + 188441 8 592 - 89086 + 89089 @@ -15743,37 +15758,37 @@ 1 2 - 340952 + 340967 2 3 - 86753 + 86757 3 4 - 48507 + 48509 4 6 - 51772 + 51774 6 12 - 52238 + 52241 12 33 - 50373 + 50375 34 3223 - 36380 + 36382 @@ -15789,37 +15804,37 @@ 1 2 - 368471 + 368486 2 3 - 77891 + 77895 3 4 - 45242 + 45244 4 6 - 49440 + 49442 6 14 - 53171 + 53174 14 56 - 50839 + 50841 56 3140 - 21921 + 21922 @@ -15835,27 +15850,27 @@ 1 2 - 456624 + 456643 2 3 - 93750 + 93754 3 5 - 46641 + 46643 5 19 - 50839 + 50841 19 1927 - 19123 + 19124 @@ -15871,32 +15886,32 @@ 1 2 - 378732 + 378748 2 3 - 90485 + 90489 3 5 - 59701 + 59704 5 9 - 51306 + 51308 9 21 - 50373 + 50375 21 1010 - 36380 + 36382 @@ -15912,17 +15927,17 @@ 1 2 - 4492082 + 4492275 2 3 - 531251 + 531274 3 1735 - 283582 + 283595 @@ -15938,17 +15953,17 @@ 1 2 - 4881075 + 4881285 2 17 - 415112 + 415130 17 1731 - 10727 + 10728 @@ -15964,12 +15979,12 @@ 1 2 - 4957102 + 4957315 2 1513 - 349814 + 349829 @@ -15985,7 +16000,7 @@ 1 2 - 5297588 + 5297815 2 @@ -16000,22 +16015,22 @@ var_def - 4024730 + 4024903 id - 4024730 + 4024903 var_decl_specifiers - 310635 + 310648 id - 310635 + 310648 name @@ -16033,7 +16048,7 @@ 1 2 - 310635 + 310648 @@ -16080,19 +16095,19 @@ type_decls - 3242079 + 3242218 id - 3242079 + 3242218 type_id - 3191705 + 3191843 location - 3163254 + 3163390 @@ -16106,7 +16121,7 @@ 1 2 - 3242079 + 3242218 @@ -16122,7 +16137,7 @@ 1 2 - 3242079 + 3242218 @@ -16138,12 +16153,12 @@ 1 2 - 3150194 + 3150330 2 5 - 41511 + 41513 @@ -16159,12 +16174,12 @@ 1 2 - 3150194 + 3150330 2 5 - 41511 + 41513 @@ -16180,12 +16195,12 @@ 1 2 - 3123142 + 3123276 2 20 - 40112 + 40113 @@ -16201,12 +16216,12 @@ 1 2 - 3123142 + 3123276 2 20 - 40112 + 40113 @@ -16216,33 +16231,33 @@ type_def - 2624540 + 2624653 id - 2624540 + 2624653 type_decl_top - 743005 + 743037 type_decl - 743005 + 743037 namespace_decls - 311530 + 311523 id - 311530 + 311523 namespace_id @@ -16250,11 +16265,11 @@ location - 311530 + 311523 bodylocation - 311530 + 311523 @@ -16268,7 +16283,7 @@ 1 2 - 311530 + 311523 @@ -16284,7 +16299,7 @@ 1 2 - 311530 + 311523 @@ -16300,7 +16315,7 @@ 1 2 - 311530 + 311523 @@ -16514,7 +16529,7 @@ 1 2 - 311530 + 311523 @@ -16530,7 +16545,7 @@ 1 2 - 311530 + 311523 @@ -16546,7 +16561,7 @@ 1 2 - 311530 + 311523 @@ -16562,7 +16577,7 @@ 1 2 - 311530 + 311523 @@ -16578,7 +16593,7 @@ 1 2 - 311530 + 311523 @@ -16594,7 +16609,7 @@ 1 2 - 311530 + 311523 @@ -16604,19 +16619,19 @@ usings - 369403 + 369419 id - 369403 + 369419 element_id - 315299 + 315312 location - 247668 + 247679 @@ -16630,7 +16645,7 @@ 1 2 - 369403 + 369419 @@ -16646,7 +16661,7 @@ 1 2 - 369403 + 369419 @@ -16662,12 +16677,12 @@ 1 2 - 263060 + 263071 2 3 - 50839 + 50841 3 @@ -16688,12 +16703,12 @@ 1 2 - 263060 + 263071 2 3 - 50839 + 50841 3 @@ -16714,22 +16729,22 @@ 1 2 - 202425 + 202434 2 4 - 10727 + 10728 4 5 - 31250 + 31251 5 11 - 3264 + 3265 @@ -16745,22 +16760,22 @@ 1 2 - 202425 + 202434 2 4 - 10727 + 10728 4 5 - 31250 + 31251 5 11 - 3264 + 3265 @@ -16770,15 +16785,15 @@ using_container - 462754 + 462579 parent - 10955 + 10951 child - 293425 + 293313 @@ -16792,7 +16807,7 @@ 1 2 - 3267 + 3266 2 @@ -16802,17 +16817,17 @@ 4 6 - 414 + 413 6 7 - 2473 + 2472 7 17 - 895 + 894 19 @@ -16848,22 +16863,22 @@ 1 2 - 216420 + 216338 2 3 - 51276 + 51257 3 11 - 23612 + 23603 13 41 - 2115 + 2114 @@ -16873,15 +16888,15 @@ static_asserts - 134655 + 134652 id - 134655 + 134652 condition - 134655 + 134652 message @@ -16889,7 +16904,7 @@ location - 17564 + 17563 enclosing @@ -16907,7 +16922,7 @@ 1 2 - 134655 + 134652 @@ -16923,7 +16938,7 @@ 1 2 - 134655 + 134652 @@ -16939,7 +16954,7 @@ 1 2 - 134655 + 134652 @@ -16955,7 +16970,7 @@ 1 2 - 134655 + 134652 @@ -16971,7 +16986,7 @@ 1 2 - 134655 + 134652 @@ -16987,7 +17002,7 @@ 1 2 - 134655 + 134652 @@ -17003,7 +17018,7 @@ 1 2 - 134655 + 134652 @@ -17019,7 +17034,7 @@ 1 2 - 134655 + 134652 @@ -17035,7 +17050,7 @@ 1 2 - 22236 + 22235 2 @@ -17076,7 +17091,7 @@ 1 2 - 22236 + 22235 2 @@ -17117,7 +17132,7 @@ 1 2 - 28006 + 28005 2 @@ -17481,15 +17496,15 @@ params - 6739755 + 6740045 id - 6576042 + 6576325 function - 3879674 + 3879840 index @@ -17497,7 +17512,7 @@ type_id - 2188904 + 2188998 @@ -17511,7 +17526,7 @@ 1 2 - 6576042 + 6576325 @@ -17527,7 +17542,7 @@ 1 2 - 6576042 + 6576325 @@ -17543,12 +17558,12 @@ 1 2 - 6452441 + 6452719 2 4 - 123601 + 123606 @@ -17564,22 +17579,22 @@ 1 2 - 2257002 + 2257099 2 3 - 951961 + 952002 3 4 - 429571 + 429590 4 18 - 241138 + 241149 @@ -17595,22 +17610,22 @@ 1 2 - 2257002 + 2257099 2 3 - 951961 + 952002 3 4 - 429571 + 429590 4 18 - 241138 + 241149 @@ -17626,22 +17641,22 @@ 1 2 - 2555043 + 2555153 2 3 - 826028 + 826063 3 4 - 346082 + 346097 4 12 - 152519 + 152525 @@ -17895,22 +17910,22 @@ 1 2 - 1488343 + 1488407 2 3 - 440299 + 440318 3 8 - 170242 + 170250 8 518 - 90018 + 90022 @@ -17926,22 +17941,22 @@ 1 2 - 1708026 + 1708100 2 3 - 248134 + 248145 3 9 - 168377 + 168384 9 502 - 64365 + 64368 @@ -17957,17 +17972,17 @@ 1 2 - 1761664 + 1761740 2 3 - 348415 + 348430 3 13 - 78824 + 78828 @@ -17977,11 +17992,11 @@ overrides - 125866 + 125864 new - 122890 + 122888 old @@ -17999,7 +18014,7 @@ 1 2 - 119922 + 119920 2 @@ -18060,19 +18075,19 @@ membervariables - 1056556 + 1056548 id - 1054758 + 1054750 type_id - 327746 + 327744 name - 451645 + 451642 @@ -18086,7 +18101,7 @@ 1 2 - 1053040 + 1053032 2 @@ -18107,7 +18122,7 @@ 1 2 - 1054758 + 1054750 @@ -18123,7 +18138,7 @@ 1 2 - 243043 + 243041 2 @@ -18154,12 +18169,12 @@ 1 2 - 255269 + 255267 2 3 - 46467 + 46466 3 @@ -18185,17 +18200,17 @@ 1 2 - 295343 + 295341 2 3 - 86541 + 86540 3 5 - 41193 + 41192 5 @@ -18216,12 +18231,12 @@ 1 2 - 367860 + 367858 2 3 - 51741 + 51740 3 @@ -18407,19 +18422,19 @@ localvariables - 576906 + 576895 id - 576906 + 576895 type_id - 37597 + 37592 name - 90649 + 90648 @@ -18433,7 +18448,7 @@ 1 2 - 576906 + 576895 @@ -18449,7 +18464,7 @@ 1 2 - 576906 + 576895 @@ -18470,12 +18485,12 @@ 2 3 - 5368 + 5372 3 4 - 2467 + 2459 4 @@ -18485,12 +18500,12 @@ 7 18 - 2851 + 2855 18 15849 - 2496 + 2492 @@ -18506,17 +18521,17 @@ 1 2 - 26772 + 26775 2 3 - 4572 + 4568 3 5 - 2921 + 2917 5 @@ -18542,12 +18557,12 @@ 1 2 - 57095 + 57094 2 3 - 14301 + 14300 3 @@ -18557,7 +18572,7 @@ 5 15 - 6990 + 6989 15 @@ -18578,7 +18593,7 @@ 1 2 - 76577 + 76576 2 @@ -18598,11 +18613,11 @@ autoderivation - 148035 + 147957 var - 148035 + 147957 derivation_type @@ -18620,7 +18635,7 @@ 1 2 - 148035 + 147957 @@ -18666,15 +18681,15 @@ orphaned_variables - 37368 + 37359 var - 37368 + 37359 function - 32845 + 32837 @@ -18688,7 +18703,7 @@ 1 2 - 37368 + 37359 @@ -18704,7 +18719,7 @@ 1 2 - 30792 + 30785 2 @@ -18719,11 +18734,11 @@ enumconstants - 241684 + 241682 id - 241684 + 241682 parent @@ -18739,11 +18754,11 @@ name - 241405 + 241403 location - 221587 + 221585 @@ -18757,7 +18772,7 @@ 1 2 - 241684 + 241682 @@ -18773,7 +18788,7 @@ 1 2 - 241684 + 241682 @@ -18789,7 +18804,7 @@ 1 2 - 241684 + 241682 @@ -18805,7 +18820,7 @@ 1 2 - 241684 + 241682 @@ -18821,7 +18836,7 @@ 1 2 - 241684 + 241682 @@ -19432,7 +19447,7 @@ 1 2 - 241125 + 241123 2 @@ -19453,7 +19468,7 @@ 1 2 - 241125 + 241123 2 @@ -19474,7 +19489,7 @@ 1 2 - 241405 + 241403 @@ -19490,7 +19505,7 @@ 1 2 - 241405 + 241403 @@ -19506,7 +19521,7 @@ 1 2 - 241125 + 241123 2 @@ -19527,7 +19542,7 @@ 1 2 - 220828 + 220826 2 @@ -19548,7 +19563,7 @@ 1 2 - 221587 + 221585 @@ -19564,7 +19579,7 @@ 1 2 - 220828 + 220826 2 @@ -19585,7 +19600,7 @@ 1 2 - 221587 + 221585 @@ -19601,7 +19616,7 @@ 1 2 - 220828 + 220826 2 @@ -19616,23 +19631,23 @@ builtintypes - 26119 + 26120 id - 26119 + 26120 name - 26119 + 26120 kind - 26119 + 26120 size - 3264 + 3265 sign @@ -19654,7 +19669,7 @@ 1 2 - 26119 + 26120 @@ -19670,7 +19685,7 @@ 1 2 - 26119 + 26120 @@ -19686,7 +19701,7 @@ 1 2 - 26119 + 26120 @@ -19702,7 +19717,7 @@ 1 2 - 26119 + 26120 @@ -19718,7 +19733,7 @@ 1 2 - 26119 + 26120 @@ -19734,7 +19749,7 @@ 1 2 - 26119 + 26120 @@ -19750,7 +19765,7 @@ 1 2 - 26119 + 26120 @@ -19766,7 +19781,7 @@ 1 2 - 26119 + 26120 @@ -19782,7 +19797,7 @@ 1 2 - 26119 + 26120 @@ -19798,7 +19813,7 @@ 1 2 - 26119 + 26120 @@ -19814,7 +19829,7 @@ 1 2 - 26119 + 26120 @@ -19830,7 +19845,7 @@ 1 2 - 26119 + 26120 @@ -19846,7 +19861,7 @@ 1 2 - 26119 + 26120 @@ -19862,7 +19877,7 @@ 1 2 - 26119 + 26120 @@ -19878,7 +19893,7 @@ 1 2 - 26119 + 26120 @@ -20323,15 +20338,15 @@ derivedtypes - 4330701 + 4330887 id - 4330701 + 4330887 name - 2160919 + 2161012 kind @@ -20339,7 +20354,7 @@ type_id - 2670715 + 2670830 @@ -20353,7 +20368,7 @@ 1 2 - 4330701 + 4330887 @@ -20369,7 +20384,7 @@ 1 2 - 4330701 + 4330887 @@ -20385,7 +20400,7 @@ 1 2 - 4330701 + 4330887 @@ -20401,17 +20416,17 @@ 1 2 - 1899258 + 1899340 2 5 - 164645 + 164653 5 1153 - 97015 + 97019 @@ -20427,7 +20442,7 @@ 1 2 - 2159986 + 2160079 2 @@ -20448,17 +20463,17 @@ 1 2 - 1899258 + 1899340 2 5 - 164645 + 164653 5 1135 - 97015 + 97019 @@ -20597,22 +20612,22 @@ 1 2 - 1651123 + 1651194 2 3 - 560169 + 560193 3 4 - 354012 + 354027 4 72 - 105410 + 105415 @@ -20628,22 +20643,22 @@ 1 2 - 1662317 + 1662389 2 3 - 552706 + 552730 3 4 - 351213 + 351228 4 72 - 104477 + 104482 @@ -20659,22 +20674,22 @@ 1 2 - 1655321 + 1655392 2 3 - 563900 + 563924 3 4 - 353079 + 353094 4 6 - 98414 + 98418 @@ -20684,11 +20699,11 @@ pointerishsize - 3210362 + 3210500 id - 3210362 + 3210500 size @@ -20710,7 +20725,7 @@ 1 2 - 3210362 + 3210500 @@ -20726,7 +20741,7 @@ 1 2 - 3210362 + 3210500 @@ -20800,19 +20815,19 @@ arraysizes - 88153 + 88157 id - 88153 + 88157 num_elements - 31716 + 31717 bytesize - 33115 + 33117 alignment @@ -20830,7 +20845,7 @@ 1 2 - 88153 + 88157 @@ -20846,7 +20861,7 @@ 1 2 - 88153 + 88157 @@ -20862,7 +20877,7 @@ 1 2 - 88153 + 88157 @@ -20883,7 +20898,7 @@ 2 3 - 23787 + 23788 3 @@ -20914,7 +20929,7 @@ 1 2 - 26585 + 26587 2 @@ -20940,7 +20955,7 @@ 1 2 - 26585 + 26587 2 @@ -20971,12 +20986,12 @@ 2 3 - 23787 + 23788 3 4 - 3264 + 3265 4 @@ -21002,7 +21017,7 @@ 1 2 - 27518 + 27519 2 @@ -21028,7 +21043,7 @@ 1 2 - 27518 + 27519 2 @@ -21136,15 +21151,15 @@ typedefbase - 1672769 + 1672135 id - 1672769 + 1672135 type_id - 787413 + 787114 @@ -21158,7 +21173,7 @@ 1 2 - 1672769 + 1672135 @@ -21174,22 +21189,22 @@ 1 2 - 612790 + 612558 2 3 - 82588 + 82557 3 6 - 61505 + 61481 6 5437 - 30528 + 30517 @@ -21199,19 +21214,19 @@ decltypes - 166216 + 165808 id - 16699 + 16658 expr - 166216 + 165808 base_type - 9970 + 9945 parentheses_would_change_meaning @@ -21229,37 +21244,37 @@ 1 2 - 5090 + 5077 2 3 - 6195 + 6180 3 5 - 1105 + 1102 5 12 - 1296 + 1293 12 18 - 1353 + 1350 18 46 - 1258 + 1255 51 740 - 400 + 399 @@ -21275,7 +21290,7 @@ 1 2 - 16699 + 16658 @@ -21291,7 +21306,7 @@ 1 2 - 16699 + 16658 @@ -21307,7 +21322,7 @@ 1 2 - 166216 + 165808 @@ -21323,7 +21338,7 @@ 1 2 - 166216 + 165808 @@ -21339,7 +21354,7 @@ 1 2 - 166216 + 165808 @@ -21355,17 +21370,17 @@ 1 2 - 7244 + 7226 2 3 - 2268 + 2263 4 149 - 457 + 456 @@ -21381,32 +21396,32 @@ 1 2 - 724 + 722 2 3 - 6138 + 6123 3 4 - 343 + 342 4 5 - 972 + 969 5 7 - 762 + 760 7 32 - 800 + 798 32 @@ -21427,7 +21442,7 @@ 1 2 - 9970 + 9945 @@ -21485,15 +21500,15 @@ usertypes - 5229957 + 5230182 id - 5229957 + 5230182 name - 1351216 + 1351274 kind @@ -21511,7 +21526,7 @@ 1 2 - 5229957 + 5230182 @@ -21527,7 +21542,7 @@ 1 2 - 5229957 + 5230182 @@ -21543,27 +21558,27 @@ 1 2 - 982745 + 982787 2 3 - 153451 + 153458 3 7 - 104477 + 104482 7 61 - 101679 + 101683 65 874 - 8861 + 8862 @@ -21579,17 +21594,17 @@ 1 2 - 1210823 + 1210876 2 3 - 125000 + 125005 3 7 - 15391 + 15392 @@ -21731,11 +21746,11 @@ usertypesize - 1705694 + 1705768 id - 1705694 + 1705768 size @@ -21757,7 +21772,7 @@ 1 2 - 1705694 + 1705768 @@ -21773,7 +21788,7 @@ 1 2 - 1705694 + 1705768 @@ -21789,7 +21804,7 @@ 1 2 - 3264 + 3265 2 @@ -21937,22 +21952,22 @@ usertype_final - 9420 + 9415 id - 9420 + 9415 usertype_uuid - 36639 + 36638 id - 36639 + 36638 uuid @@ -21970,7 +21985,7 @@ 1 2 - 36639 + 36638 @@ -21986,7 +22001,7 @@ 1 2 - 35890 + 35889 2 @@ -22001,15 +22016,15 @@ mangled_name - 9477636 + 9478043 id - 9477636 + 9478043 mangled_name - 6448244 + 6448521 is_complete @@ -22027,7 +22042,7 @@ 1 2 - 9477636 + 9478043 @@ -22043,7 +22058,7 @@ 1 2 - 9477636 + 9478043 @@ -22059,12 +22074,12 @@ 1 2 - 6167459 + 6167725 2 874 - 280784 + 280796 @@ -22080,7 +22095,7 @@ 1 2 - 6448244 + 6448521 @@ -22122,59 +22137,59 @@ is_pod_class - 530716 + 530515 id - 530716 + 530515 is_standard_layout_class - 1253734 + 1253788 id - 1253734 + 1253788 is_complete - 1645060 + 1645130 id - 1645060 + 1645130 is_class_template - 397855 + 397872 id - 397855 + 397872 class_instantiation - 1088622 + 1088668 to - 1088622 + 1088668 from - 168377 + 168384 @@ -22188,7 +22203,7 @@ 1 2 - 1088622 + 1088668 @@ -22204,12 +22219,12 @@ 1 2 - 59701 + 59704 2 3 - 29384 + 29385 3 @@ -22219,12 +22234,12 @@ 4 5 - 13059 + 13060 5 6 - 9794 + 9795 6 @@ -22234,7 +22249,7 @@ 10 16 - 13059 + 13060 16 @@ -22254,19 +22269,19 @@ class_template_argument - 2859038 + 2857953 type_id - 1304835 + 1304340 index - 1253 + 1252 arg_type - 833229 + 832912 @@ -22280,27 +22295,27 @@ 1 2 - 536592 + 536388 2 3 - 396090 + 395940 3 4 - 229424 + 229337 4 7 - 119328 + 119283 7 113 - 23400 + 23391 @@ -22316,22 +22331,22 @@ 1 2 - 563013 + 562800 2 3 - 407236 + 407082 3 4 - 242752 + 242660 4 113 - 91832 + 91797 @@ -22439,27 +22454,27 @@ 1 2 - 518731 + 518534 2 3 - 172921 + 172856 3 4 - 50884 + 50865 4 10 - 63519 + 63495 10 10265 - 27171 + 27161 @@ -22475,17 +22490,17 @@ 1 2 - 734424 + 734146 2 3 - 80630 + 80599 3 22 - 18174 + 18167 @@ -22495,11 +22510,11 @@ class_template_argument_value - 494870 + 494891 type_id - 304571 + 304584 index @@ -22507,7 +22522,7 @@ arg_value - 494870 + 494891 @@ -22521,12 +22536,12 @@ 1 2 - 249534 + 249544 2 3 - 53171 + 53174 3 @@ -22547,22 +22562,22 @@ 1 2 - 189366 + 189374 2 3 - 81156 + 81160 3 4 - 12126 + 12127 4 9 - 21921 + 21922 @@ -22640,7 +22655,7 @@ 1 2 - 494870 + 494891 @@ -22656,7 +22671,7 @@ 1 2 - 494870 + 494891 @@ -22666,15 +22681,15 @@ is_proxy_class_for - 62966 + 62969 id - 62966 + 62969 templ_param_id - 62966 + 62969 @@ -22688,7 +22703,7 @@ 1 2 - 62966 + 62969 @@ -22704,7 +22719,7 @@ 1 2 - 62966 + 62969 @@ -22714,19 +22729,19 @@ type_mentions - 4029370 + 4029338 id - 4029370 + 4029338 type_id - 198214 + 198212 location - 3995848 + 3995817 kind @@ -22744,7 +22759,7 @@ 1 2 - 4029370 + 4029338 @@ -22760,7 +22775,7 @@ 1 2 - 4029370 + 4029338 @@ -22776,7 +22791,7 @@ 1 2 - 4029370 + 4029338 @@ -22894,7 +22909,7 @@ 1 2 - 198214 + 198212 @@ -22910,7 +22925,7 @@ 1 2 - 3962326 + 3962295 2 @@ -22931,7 +22946,7 @@ 1 2 - 3962326 + 3962295 2 @@ -22952,7 +22967,7 @@ 1 2 - 3995848 + 3995817 @@ -23010,26 +23025,26 @@ is_function_template - 1401589 + 1401649 id - 1401589 + 1401649 function_instantiation - 894870 + 894647 to - 894870 + 894647 from - 144256 + 144220 @@ -23043,7 +23058,7 @@ 1 2 - 894870 + 894647 @@ -23059,27 +23074,27 @@ 1 2 - 100033 + 100008 2 3 - 14230 + 14227 3 6 - 11864 + 11861 6 21 - 11899 + 11896 22 870 - 6228 + 6226 @@ -23089,11 +23104,11 @@ function_template_argument - 2310645 + 2310067 function_id - 1319951 + 1319621 index @@ -23101,7 +23116,7 @@ arg_type - 300865 + 300789 @@ -23115,22 +23130,22 @@ 1 2 - 673580 + 673411 2 3 - 390007 + 389910 3 4 - 186566 + 186519 4 15 - 69797 + 69779 @@ -23146,22 +23161,22 @@ 1 2 - 690977 + 690804 2 3 - 399784 + 399684 3 4 - 166664 + 166622 4 9 - 62525 + 62509 @@ -23309,32 +23324,32 @@ 1 2 - 184304 + 184258 2 3 - 44049 + 44038 3 5 - 23172 + 23167 5 16 - 23207 + 23201 16 107 - 22720 + 22714 108 957 - 3409 + 3408 @@ -23350,17 +23365,17 @@ 1 2 - 271116 + 271048 2 4 - 25678 + 25671 4 17 - 4070 + 4069 @@ -23370,11 +23385,11 @@ function_template_argument_value - 358553 + 358464 function_id - 192516 + 192467 index @@ -23382,7 +23397,7 @@ arg_value - 355944 + 355855 @@ -23396,12 +23411,12 @@ 1 2 - 183260 + 183215 2 8 - 9255 + 9252 @@ -23417,17 +23432,17 @@ 1 2 - 175919 + 175875 2 31 - 15100 + 15096 32 97 - 1496 + 1495 @@ -23565,12 +23580,12 @@ 1 2 - 353334 + 353246 2 3 - 2609 + 2608 @@ -23586,7 +23601,7 @@ 1 2 - 355944 + 355855 @@ -23596,26 +23611,26 @@ is_variable_template - 46998 + 46973 id - 46998 + 46973 variable_instantiation - 171327 + 171237 to - 171327 + 171237 from - 25673 + 25659 @@ -23629,7 +23644,7 @@ 1 2 - 171327 + 171237 @@ -23645,22 +23660,22 @@ 1 2 - 13768 + 13761 2 3 - 2588 + 2586 3 4 - 1242 + 1241 4 6 - 1863 + 1862 6 @@ -23670,12 +23685,12 @@ 8 12 - 2173 + 2172 12 38 - 1966 + 1965 46 @@ -23690,19 +23705,19 @@ variable_template_argument - 308493 + 308331 variable_id - 162217 + 162132 index - 1759 + 1758 arg_type - 170085 + 169995 @@ -23716,22 +23731,22 @@ 1 2 - 83023 + 82980 2 3 - 50518 + 50491 3 4 - 18633 + 18624 4 17 - 10041 + 10036 @@ -23747,22 +23762,22 @@ 1 2 - 87682 + 87636 2 3 - 51760 + 51733 3 4 - 13561 + 13554 4 17 - 9213 + 9208 @@ -23783,12 +23798,12 @@ 19 20 - 621 + 620 26 27 - 414 + 413 47 @@ -23839,17 +23854,17 @@ 10 11 - 414 + 413 11 12 - 207 + 206 12 13 - 414 + 413 29 @@ -23895,22 +23910,22 @@ 1 2 - 136855 + 136783 2 3 - 19358 + 19348 3 24 - 12836 + 12829 24 110 - 1035 + 1034 @@ -23926,17 +23941,17 @@ 1 2 - 153211 + 153130 2 3 - 14803 + 14795 3 6 - 2070 + 2069 @@ -23946,19 +23961,19 @@ variable_template_argument_value - 11801 + 11795 variable_id - 7764 + 7760 index - 414 + 413 arg_value - 11801 + 11795 @@ -23972,12 +23987,12 @@ 1 2 - 7350 + 7346 2 3 - 414 + 413 @@ -23993,12 +24008,12 @@ 1 2 - 4347 + 4345 2 3 - 3105 + 3104 4 @@ -24081,7 +24096,7 @@ 1 2 - 11801 + 11795 @@ -24097,7 +24112,7 @@ 1 2 - 11801 + 11795 @@ -24107,15 +24122,15 @@ routinetypes - 538161 + 538026 id - 538161 + 538026 return_type - 280406 + 280336 @@ -24129,7 +24144,7 @@ 1 2 - 538161 + 538026 @@ -24145,17 +24160,17 @@ 1 2 - 244220 + 244159 2 3 - 20946 + 20940 3 3595 - 15239 + 15236 @@ -24165,11 +24180,11 @@ routinetypeargs - 982278 + 982320 routine - 423042 + 423060 index @@ -24177,7 +24192,7 @@ type_id - 226679 + 226689 @@ -24191,27 +24206,27 @@ 1 2 - 152519 + 152525 2 3 - 133862 + 133868 3 4 - 63432 + 63435 4 5 - 45709 + 45711 5 18 - 27518 + 27519 @@ -24227,27 +24242,27 @@ 1 2 - 182369 + 182377 2 3 - 133395 + 133401 3 4 - 58768 + 58771 4 5 - 33582 + 33583 5 11 - 14925 + 14926 @@ -24405,12 +24420,12 @@ 1 2 - 146455 + 146461 2 3 - 30783 + 30784 3 @@ -24420,12 +24435,12 @@ 5 12 - 18190 + 18191 12 110 - 14458 + 14459 @@ -24441,17 +24456,17 @@ 1 2 - 172575 + 172582 2 3 - 30783 + 30784 3 6 - 18656 + 18657 6 @@ -24466,19 +24481,19 @@ ptrtomembers - 37779 + 37781 id - 37779 + 37781 type_id - 37779 + 37781 class_id - 15391 + 15392 @@ -24492,7 +24507,7 @@ 1 2 - 37779 + 37781 @@ -24508,7 +24523,7 @@ 1 2 - 37779 + 37781 @@ -24524,7 +24539,7 @@ 1 2 - 37779 + 37781 @@ -24540,7 +24555,7 @@ 1 2 - 37779 + 37781 @@ -24602,15 +24617,15 @@ specifiers - 24720 + 24721 id - 24720 + 24721 str - 24720 + 24721 @@ -24624,7 +24639,7 @@ 1 2 - 24720 + 24721 @@ -24640,7 +24655,7 @@ 1 2 - 24720 + 24721 @@ -24650,11 +24665,11 @@ typespecifiers - 1291048 + 1291103 type_id - 1272857 + 1272912 spec_id @@ -24672,12 +24687,12 @@ 1 2 - 1254667 + 1254721 2 3 - 18190 + 18191 @@ -24738,11 +24753,11 @@ funspecifiers - 12607036 + 12603886 func_id - 3854601 + 3853638 spec_id @@ -24760,27 +24775,27 @@ 1 2 - 310746 + 310668 2 3 - 540214 + 540079 3 4 - 1133732 + 1133449 4 5 - 1624017 + 1623611 5 8 - 245890 + 245828 @@ -24896,11 +24911,11 @@ varspecifiers - 2243942 + 2244038 var_id - 1223883 + 1223936 spec_id @@ -24918,22 +24933,22 @@ 1 2 - 729479 + 729510 2 3 - 202425 + 202434 3 4 - 58302 + 58304 4 5 - 233675 + 233686 @@ -24994,11 +25009,11 @@ attributes - 729824 + 729440 id - 729824 + 729440 kind @@ -25006,15 +25021,15 @@ name - 1656 + 1655 name_space - 207 + 206 location - 479613 + 479361 @@ -25028,7 +25043,7 @@ 1 2 - 729824 + 729440 @@ -25044,7 +25059,7 @@ 1 2 - 729824 + 729440 @@ -25060,7 +25075,7 @@ 1 2 - 729824 + 729440 @@ -25076,7 +25091,7 @@ 1 2 - 729824 + 729440 @@ -25144,7 +25159,7 @@ 1 2 - 207 + 206 2 @@ -25272,12 +25287,12 @@ 1 2 - 1449 + 1448 2 3 - 207 + 206 @@ -25293,7 +25308,7 @@ 1 2 - 1656 + 1655 @@ -25314,7 +25329,7 @@ 2 3 - 207 + 206 4 @@ -25469,17 +25484,17 @@ 1 2 - 422573 + 422351 2 3 - 36335 + 36316 3 201 - 20704 + 20693 @@ -25495,7 +25510,7 @@ 1 2 - 479613 + 479361 @@ -25511,12 +25526,12 @@ 1 2 - 475369 + 475119 2 3 - 4244 + 4242 @@ -25532,7 +25547,7 @@ 1 2 - 479613 + 479361 @@ -25542,11 +25557,11 @@ attribute_args - 409982 + 410000 id - 409982 + 410000 kind @@ -25554,7 +25569,7 @@ attribute - 298041 + 298054 index @@ -25562,7 +25577,7 @@ location - 327426 + 327440 @@ -25576,7 +25591,7 @@ 1 2 - 409982 + 410000 @@ -25592,7 +25607,7 @@ 1 2 - 409982 + 410000 @@ -25608,7 +25623,7 @@ 1 2 - 409982 + 410000 @@ -25624,7 +25639,7 @@ 1 2 - 409982 + 410000 @@ -25739,17 +25754,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25765,12 +25780,12 @@ 1 2 - 273788 + 273799 2 3 - 24253 + 24254 @@ -25786,17 +25801,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25812,17 +25827,17 @@ 1 2 - 215952 + 215961 2 3 - 52238 + 52241 3 4 - 29850 + 29852 @@ -25937,17 +25952,17 @@ 1 2 - 278918 + 278930 2 3 - 23320 + 23321 3 9 - 24720 + 24721 17 @@ -25968,7 +25983,7 @@ 1 2 - 314832 + 314846 2 @@ -25989,17 +26004,17 @@ 1 2 - 278918 + 278930 2 3 - 23320 + 23321 3 9 - 24720 + 24721 17 @@ -26020,7 +26035,7 @@ 1 2 - 327426 + 327440 @@ -26030,11 +26045,11 @@ attribute_arg_value - 39179 + 39180 arg - 39179 + 39180 value @@ -26052,7 +26067,7 @@ 1 2 - 39179 + 39180 @@ -26068,7 +26083,7 @@ 1 2 - 14458 + 14459 2 @@ -26131,15 +26146,15 @@ attribute_arg_constant - 370336 + 370352 arg - 370336 + 370352 constant - 370336 + 370352 @@ -26153,7 +26168,7 @@ 1 2 - 370336 + 370352 @@ -26169,7 +26184,7 @@ 1 2 - 370336 + 370352 @@ -26280,15 +26295,15 @@ typeattributes - 84369 + 84325 type_id - 61698 + 61666 spec_id - 84369 + 84325 @@ -26302,17 +26317,17 @@ 1 2 - 55797 + 55768 2 4 - 4244 + 4242 12 13 - 1656 + 1655 @@ -26328,7 +26343,7 @@ 1 2 - 84369 + 84325 @@ -26338,15 +26353,15 @@ funcattributes - 651587 + 651615 func_id - 443098 + 443117 spec_id - 651587 + 651615 @@ -26360,17 +26375,17 @@ 1 2 - 334422 + 334436 2 3 - 65298 + 65301 3 6 - 34981 + 34982 6 @@ -26391,7 +26406,7 @@ 1 2 - 651587 + 651615 @@ -26507,15 +26522,15 @@ unspecifiedtype - 10144615 + 10145051 type_id - 10144615 + 10145051 unspecified_type_id - 6817181 + 6817474 @@ -26529,7 +26544,7 @@ 1 2 - 10144615 + 10145051 @@ -26545,17 +26560,17 @@ 1 2 - 4584433 + 4584630 2 3 - 1995340 + 1995426 3 145 - 237407 + 237417 @@ -26565,19 +26580,19 @@ member - 4945084 + 4943849 parent - 639377 + 639217 index - 8698 + 8696 child - 4900409 + 4899184 @@ -26591,42 +26606,42 @@ 1 3 - 19067 + 19062 3 4 - 344496 + 344410 4 5 - 37786 + 37777 5 7 - 52504 + 52491 7 10 - 52191 + 52178 10 15 - 49581 + 49569 15 24 - 48955 + 48943 24 251 - 34794 + 34785 @@ -26642,42 +26657,42 @@ 1 3 - 19067 + 19062 3 4 - 344427 + 344341 4 5 - 37821 + 37811 5 7 - 52608 + 52595 7 10 - 52539 + 52526 10 15 - 49198 + 49186 15 24 - 49024 + 49012 24 255 - 34689 + 34681 @@ -26708,42 +26723,42 @@ 5 22 - 661 + 660 22 42 - 661 + 660 42 56 - 661 + 660 56 100 - 661 + 660 104 164 - 661 + 660 181 299 - 661 + 660 300 727 - 661 + 660 845 4002 - 661 + 660 4606 @@ -26774,12 +26789,12 @@ 3 4 - 1148 + 1147 4 15 - 661 + 660 16 @@ -26789,7 +26804,7 @@ 36 55 - 661 + 660 57 @@ -26799,22 +26814,22 @@ 97 135 - 661 + 660 140 256 - 661 + 660 268 612 - 661 + 660 619 2611 - 661 + 660 2770 @@ -26835,7 +26850,7 @@ 1 2 - 4900409 + 4899184 @@ -26851,12 +26866,12 @@ 1 2 - 4857090 + 4855876 2 8 - 43318 + 43307 @@ -26866,15 +26881,15 @@ enclosingfunction - 117884 + 117840 child - 117884 + 117840 parent - 67335 + 67310 @@ -26888,7 +26903,7 @@ 1 2 - 117884 + 117840 @@ -26904,22 +26919,22 @@ 1 2 - 35587 + 35573 2 3 - 20893 + 20885 3 4 - 5908 + 5906 4 45 - 4946 + 4944 @@ -26929,15 +26944,15 @@ derivations - 391086 + 390988 derivation - 391086 + 390988 sub - 370836 + 370743 index @@ -26945,11 +26960,11 @@ super - 202501 + 202451 location - 37682 + 37672 @@ -26963,7 +26978,7 @@ 1 2 - 391086 + 390988 @@ -26979,7 +26994,7 @@ 1 2 - 391086 + 390988 @@ -26995,7 +27010,7 @@ 1 2 - 391086 + 390988 @@ -27011,7 +27026,7 @@ 1 2 - 391086 + 390988 @@ -27027,12 +27042,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27048,12 +27063,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27069,12 +27084,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27090,12 +27105,12 @@ 1 2 - 355874 + 355785 2 7 - 14961 + 14957 @@ -27240,12 +27255,12 @@ 1 2 - 195125 + 195076 2 1519 - 7376 + 7374 @@ -27261,12 +27276,12 @@ 1 2 - 195125 + 195076 2 1519 - 7376 + 7374 @@ -27282,7 +27297,7 @@ 1 2 - 202049 + 201999 2 @@ -27303,12 +27318,12 @@ 1 2 - 198848 + 198798 2 108 - 3653 + 3652 @@ -27324,12 +27339,12 @@ 1 2 - 28009 + 28002 2 5 - 3201 + 3200 5 @@ -27339,7 +27354,7 @@ 15 134 - 2853 + 2852 136 @@ -27360,12 +27375,12 @@ 1 2 - 28009 + 28002 2 5 - 3201 + 3200 5 @@ -27375,7 +27390,7 @@ 15 134 - 2853 + 2852 136 @@ -27396,7 +27411,7 @@ 1 2 - 37682 + 37672 @@ -27412,17 +27427,17 @@ 1 2 - 30375 + 30367 2 5 - 3340 + 3339 5 45 - 2853 + 2852 54 @@ -27437,11 +27452,11 @@ derspecifiers - 392965 + 392867 der_id - 390703 + 390605 spec_id @@ -27459,7 +27474,7 @@ 1 2 - 388441 + 388344 2 @@ -27505,11 +27520,11 @@ direct_base_offsets - 362172 + 362081 der_id - 362172 + 362081 offset @@ -27527,7 +27542,7 @@ 1 2 - 362172 + 362081 @@ -27578,11 +27593,11 @@ virtual_base_offsets - 6445 + 6443 sub - 3558 + 3557 super @@ -27604,7 +27619,7 @@ 1 2 - 2797 + 2796 2 @@ -27635,7 +27650,7 @@ 1 2 - 2999 + 2998 2 @@ -27869,23 +27884,23 @@ frienddecls - 706182 + 706005 id - 706182 + 706005 type_id - 41857 + 41846 decl_id - 69309 + 69292 location - 6262 + 6261 @@ -27899,7 +27914,7 @@ 1 2 - 706182 + 706005 @@ -27915,7 +27930,7 @@ 1 2 - 706182 + 706005 @@ -27931,7 +27946,7 @@ 1 2 - 706182 + 706005 @@ -27947,22 +27962,22 @@ 1 2 - 6123 + 6122 2 3 - 13047 + 13044 3 6 - 2922 + 2921 6 10 - 3166 + 3165 10 @@ -27972,22 +27987,22 @@ 17 24 - 3305 + 3304 25 36 - 3270 + 3269 37 55 - 3201 + 3200 55 103 - 3583 + 3582 @@ -28003,22 +28018,22 @@ 1 2 - 6123 + 6122 2 3 - 13047 + 13044 3 6 - 2922 + 2921 6 10 - 3166 + 3165 10 @@ -28028,22 +28043,22 @@ 17 24 - 3305 + 3304 25 36 - 3270 + 3269 37 55 - 3201 + 3200 55 103 - 3583 + 3582 @@ -28059,7 +28074,7 @@ 1 2 - 40430 + 40420 2 @@ -28080,32 +28095,32 @@ 1 2 - 39978 + 39968 2 3 - 5810 + 5809 3 8 - 5949 + 5948 8 15 - 5358 + 5356 15 32 - 5219 + 5217 32 71 - 5219 + 5217 72 @@ -28126,32 +28141,32 @@ 1 2 - 39978 + 39968 2 3 - 5810 + 5809 3 8 - 5949 + 5948 8 15 - 5358 + 5356 15 32 - 5219 + 5217 32 71 - 5219 + 5217 72 @@ -28172,12 +28187,12 @@ 1 2 - 68648 + 68631 2 5 - 661 + 660 @@ -28193,7 +28208,7 @@ 1 2 - 5880 + 5878 2 @@ -28214,7 +28229,7 @@ 1 2 - 6123 + 6122 2 @@ -28235,7 +28250,7 @@ 1 2 - 5915 + 5913 2 @@ -28250,19 +28265,19 @@ comments - 8686670 + 8682106 id - 8686670 + 8682106 contents - 3307709 + 3305971 location - 8686670 + 8682106 @@ -28276,7 +28291,7 @@ 1 2 - 8686670 + 8682106 @@ -28292,7 +28307,7 @@ 1 2 - 8686670 + 8682106 @@ -28308,17 +28323,17 @@ 1 2 - 3025820 + 3024231 2 7 - 248657 + 248527 7 32784 - 33230 + 33212 @@ -28334,17 +28349,17 @@ 1 2 - 3025820 + 3024231 2 7 - 248657 + 248527 7 32784 - 33230 + 33212 @@ -28360,7 +28375,7 @@ 1 2 - 8686670 + 8682106 @@ -28376,7 +28391,7 @@ 1 2 - 8686670 + 8682106 @@ -28386,15 +28401,15 @@ commentbinding - 3088160 + 3088293 id - 2443103 + 2443208 element - 3011668 + 3011797 @@ -28408,12 +28423,12 @@ 1 2 - 2366144 + 2366245 2 97 - 76959 + 76962 @@ -28429,12 +28444,12 @@ 1 2 - 2935175 + 2935301 2 3 - 76492 + 76496 @@ -28444,15 +28459,15 @@ exprconv - 7033432 + 7033379 converted - 7033432 + 7033379 conversion - 7033432 + 7033379 @@ -28466,7 +28481,7 @@ 1 2 - 7033432 + 7033379 @@ -28482,7 +28497,7 @@ 1 2 - 7033432 + 7033379 @@ -28492,30 +28507,30 @@ compgenerated - 9265823 + 9267960 id - 9265823 + 9267960 synthetic_destructor_call - 471159 + 473158 element - 286813 + 286203 i - 381 + 380 destructor_call - 471159 + 473158 @@ -28529,27 +28544,27 @@ 1 2 - 190103 + 188057 2 3 - 50404 + 50984 3 4 - 21503 + 21850 4 - 7 - 23238 + 6 + 21584 - 7 + 6 20 - 1563 + 3727 @@ -28565,27 +28580,27 @@ 1 2 - 189912 + 188057 2 3 - 50537 + 50984 3 4 - 21503 + 21850 4 - 7 - 23295 + 6 + 21584 - 7 + 6 20 - 1563 + 3727 @@ -28644,18 +28659,18 @@ 19 - 18 - 19 + 19 + 20 19 - 26 - 27 + 27 + 28 19 - 34 - 35 + 35 + 36 19 @@ -28664,38 +28679,38 @@ 19 - 82 - 83 + 83 + 84 19 - 193 - 194 + 196 + 197 19 - 422 - 423 + 435 + 436 19 - 1301 - 1302 + 1331 + 1332 19 - 2429 - 2430 + 2480 + 2481 19 - 5068 - 5069 + 5156 + 5157 19 - 15013 - 15014 + 15018 + 15019 19 @@ -28755,18 +28770,18 @@ 19 - 18 - 19 + 19 + 20 19 - 26 - 27 + 27 + 28 19 - 34 - 35 + 35 + 36 19 @@ -28775,38 +28790,38 @@ 19 - 82 - 83 + 83 + 84 19 - 193 - 194 + 196 + 197 19 - 422 - 423 + 435 + 436 19 - 1301 - 1302 + 1331 + 1332 19 - 2429 - 2430 + 2480 + 2481 19 - 5071 - 5072 + 5156 + 5157 19 - 15038 - 15039 + 15018 + 15019 19 @@ -28823,7 +28838,7 @@ 1 2 - 471159 + 473158 @@ -28839,7 +28854,7 @@ 1 2 - 471159 + 473158 @@ -28849,15 +28864,15 @@ namespaces - 12126 + 12127 id - 12126 + 12127 name - 9794 + 9795 @@ -28871,7 +28886,7 @@ 1 2 - 12126 + 12127 @@ -28918,7 +28933,7 @@ namespacembrs - 2385733 + 2385836 parentid @@ -28926,7 +28941,7 @@ memberid - 2385733 + 2385836 @@ -29001,7 +29016,7 @@ 1 2 - 2385733 + 2385836 @@ -29011,11 +29026,11 @@ exprparents - 14207341 + 14207231 expr_id - 14207341 + 14207231 child_index @@ -29023,7 +29038,7 @@ parent_id - 9454239 + 9454166 @@ -29037,7 +29052,7 @@ 1 2 - 14207341 + 14207231 @@ -29053,7 +29068,7 @@ 1 2 - 14207341 + 14207231 @@ -29171,17 +29186,17 @@ 1 2 - 5409675 + 5409633 2 3 - 3706806 + 3706777 3 712 - 337757 + 337754 @@ -29197,17 +29212,17 @@ 1 2 - 5409675 + 5409633 2 3 - 3706806 + 3706777 3 712 - 337757 + 337754 @@ -29217,11 +29232,11 @@ expr_isload - 5170780 + 5168684 expr_id - 5170780 + 5168684 @@ -29301,11 +29316,11 @@ iscall - 3183297 + 3182186 caller - 3183297 + 3182186 kind @@ -29323,7 +29338,7 @@ 1 2 - 3183297 + 3182186 @@ -29337,18 +29352,18 @@ 12 - 1318 - 1319 + 1319 + 1320 19 - 2471 - 2472 + 2473 + 2474 19 - 163193 - 163194 + 163543 + 163544 19 @@ -29359,11 +29374,11 @@ numtemplatearguments - 393347 + 393249 expr_id - 393347 + 393249 num @@ -29381,7 +29396,7 @@ 1 2 - 393347 + 393249 @@ -29485,23 +29500,23 @@ namequalifiers - 1516804 + 1515301 id - 1516804 + 1515301 qualifiableelement - 1516804 + 1515301 qualifyingelement - 97777 + 97613 location - 305343 + 304593 @@ -29515,7 +29530,7 @@ 1 2 - 1516804 + 1515301 @@ -29531,7 +29546,7 @@ 1 2 - 1516804 + 1515301 @@ -29547,7 +29562,7 @@ 1 2 - 1516804 + 1515301 @@ -29563,7 +29578,7 @@ 1 2 - 1516804 + 1515301 @@ -29579,7 +29594,7 @@ 1 2 - 1516804 + 1515301 @@ -29595,7 +29610,7 @@ 1 2 - 1516804 + 1515301 @@ -29611,27 +29626,27 @@ 1 2 - 58601 + 58457 2 3 - 22457 + 22420 3 5 - 8921 + 8918 5 92 - 7377 + 7378 96 - 21572 - 419 + 21584 + 437 @@ -29647,27 +29662,27 @@ 1 2 - 58601 + 58457 2 3 - 22457 + 22420 3 5 - 8921 + 8918 5 92 - 7377 + 7378 96 - 21572 - 419 + 21584 + 437 @@ -29683,22 +29698,22 @@ 1 2 - 64035 + 63877 2 3 - 20703 + 20671 3 5 - 8388 + 8386 5 7095 - 4651 + 4678 @@ -29714,32 +29729,32 @@ 1 2 - 101018 + 100656 2 3 - 28385 + 28430 3 4 - 44780 + 44651 4 6 - 14316 + 13768 6 7 - 95394 + 95692 7 790 - 21446 + 21393 @@ -29755,32 +29770,32 @@ 1 2 - 101018 + 100656 2 3 - 28385 + 28430 3 4 - 44780 + 44651 4 6 - 14316 + 13768 6 7 - 95394 + 95692 7 790 - 21446 + 21393 @@ -29796,22 +29811,22 @@ 1 2 - 137659 + 137206 2 3 - 55799 + 55738 3 4 - 102658 + 102443 4 143 - 9226 + 9204 @@ -29821,15 +29836,15 @@ varbind - 6029477 + 6029430 expr - 6029477 + 6029430 var - 768575 + 768569 @@ -29843,7 +29858,7 @@ 1 2 - 6029477 + 6029430 @@ -29859,22 +29874,22 @@ 1 2 - 126229 + 126228 2 3 - 137882 + 137881 3 4 - 106299 + 106298 4 5 - 85216 + 85215 5 @@ -29914,15 +29929,15 @@ funbind - 3187262 + 3188690 expr - 3183583 + 3182471 fun - 512661 + 512219 @@ -29936,12 +29951,12 @@ 1 2 - 3179903 + 3176253 2 3 - 3679 + 6218 @@ -29957,32 +29972,32 @@ 1 2 - 316152 + 315736 2 3 - 78084 + 78026 3 4 - 31455 + 31396 4 7 - 46210 + 46153 7 - 133 - 38451 + 121 + 38471 - 133 - 4992 - 2306 + 123 + 5011 + 2434 @@ -29992,11 +30007,11 @@ expr_allocator - 45963 + 45951 expr - 45963 + 45951 func @@ -30018,7 +30033,7 @@ 1 2 - 45963 + 45951 @@ -30034,7 +30049,7 @@ 1 2 - 45963 + 45951 @@ -30118,11 +30133,11 @@ expr_deallocator - 54626 + 54613 expr - 54626 + 54613 func @@ -30144,7 +30159,7 @@ 1 2 - 54626 + 54613 @@ -30160,7 +30175,7 @@ 1 2 - 54626 + 54613 @@ -30265,15 +30280,15 @@ expr_cond_guard - 657276 + 657271 cond - 657276 + 657271 guard - 657276 + 657271 @@ -30287,7 +30302,7 @@ 1 2 - 657276 + 657271 @@ -30303,7 +30318,7 @@ 1 2 - 657276 + 657271 @@ -30313,15 +30328,15 @@ expr_cond_true - 657273 + 657268 cond - 657273 + 657268 true - 657273 + 657268 @@ -30335,7 +30350,7 @@ 1 2 - 657273 + 657268 @@ -30351,7 +30366,7 @@ 1 2 - 657273 + 657268 @@ -30361,15 +30376,15 @@ expr_cond_false - 657276 + 657271 cond - 657276 + 657271 false - 657276 + 657271 @@ -30383,7 +30398,7 @@ 1 2 - 657276 + 657271 @@ -30399,7 +30414,7 @@ 1 2 - 657276 + 657271 @@ -30409,15 +30424,15 @@ values - 10777325 + 10777241 id - 10777325 + 10777241 str - 88068 + 88067 @@ -30431,7 +30446,7 @@ 1 2 - 10777325 + 10777241 @@ -30540,15 +30555,15 @@ valuebind - 11211571 + 11211484 val - 10777325 + 10777241 expr - 11211571 + 11211484 @@ -30562,12 +30577,12 @@ 1 2 - 10365623 + 10365543 2 7 - 411701 + 411698 @@ -30583,7 +30598,7 @@ 1 2 - 11211571 + 11211484 @@ -30593,15 +30608,15 @@ fieldoffsets - 1054758 + 1054750 id - 1054758 + 1054750 byteoffset - 22694 + 22693 bitoffset @@ -30619,7 +30634,7 @@ 1 2 - 1054758 + 1054750 @@ -30635,7 +30650,7 @@ 1 2 - 1054758 + 1054750 @@ -30794,19 +30809,19 @@ bitfield - 20704 + 20693 id - 20704 + 20693 bits - 2588 + 2586 declared_bits - 2588 + 2586 @@ -30820,7 +30835,7 @@ 1 2 - 20704 + 20693 @@ -30836,7 +30851,7 @@ 1 2 - 20704 + 20693 @@ -30857,37 +30872,37 @@ 2 3 - 621 + 620 3 4 - 207 + 206 4 5 - 207 + 206 5 6 - 207 + 206 6 8 - 207 + 206 8 11 - 207 + 206 12 115 - 207 + 206 @@ -30903,7 +30918,7 @@ 1 2 - 2588 + 2586 @@ -30924,37 +30939,37 @@ 2 3 - 621 + 620 3 4 - 207 + 206 4 5 - 207 + 206 5 6 - 207 + 206 6 8 - 207 + 206 8 11 - 207 + 206 12 115 - 207 + 206 @@ -30970,7 +30985,7 @@ 1 2 - 2588 + 2586 @@ -30980,23 +30995,23 @@ initialisers - 1710241 + 1710223 init - 1710241 + 1710223 var - 719566 + 719570 expr - 1710241 + 1710223 location - 394521 + 394513 @@ -31010,7 +31025,7 @@ 1 2 - 1710241 + 1710223 @@ -31026,7 +31041,7 @@ 1 2 - 1710241 + 1710223 @@ -31042,7 +31057,7 @@ 1 2 - 1710241 + 1710223 @@ -31058,7 +31073,7 @@ 1 2 - 633820 + 633825 2 @@ -31068,7 +31083,7 @@ 16 25 - 57022 + 57020 @@ -31084,7 +31099,7 @@ 1 2 - 633820 + 633825 2 @@ -31094,7 +31109,7 @@ 16 25 - 57022 + 57020 @@ -31110,7 +31125,7 @@ 1 2 - 719560 + 719563 2 @@ -31131,7 +31146,7 @@ 1 2 - 1710241 + 1710223 @@ -31147,7 +31162,7 @@ 1 2 - 1710241 + 1710223 @@ -31163,7 +31178,7 @@ 1 2 - 1710241 + 1710223 @@ -31179,7 +31194,7 @@ 1 2 - 321604 + 321597 2 @@ -31189,12 +31204,12 @@ 3 15 - 30977 + 30976 15 111551 - 17983 + 17982 @@ -31210,17 +31225,17 @@ 1 2 - 344488 + 344480 2 4 - 36106 + 36086 4 12073 - 13927 + 13945 @@ -31236,7 +31251,7 @@ 1 2 - 321604 + 321597 2 @@ -31246,12 +31261,12 @@ 3 15 - 30977 + 30976 15 111551 - 17983 + 17982 @@ -31272,15 +31287,15 @@ expr_ancestor - 475296 + 477285 exp - 475296 + 477285 ancestor - 269541 + 268993 @@ -31294,7 +31309,7 @@ 1 2 - 475296 + 477285 @@ -31310,27 +31325,27 @@ 1 2 - 165739 + 163963 2 3 - 54712 + 55148 3 4 - 22152 + 22496 4 6 - 22132 + 22592 6 26 - 4804 + 4792 @@ -31340,11 +31355,11 @@ exprs - 18388573 + 18388431 id - 18388573 + 18388431 kind @@ -31352,7 +31367,7 @@ location - 8488587 + 8488521 @@ -31366,7 +31381,7 @@ 1 2 - 18388573 + 18388431 @@ -31382,7 +31397,7 @@ 1 2 - 18388573 + 18388431 @@ -31560,22 +31575,22 @@ 1 2 - 7145568 + 7145513 2 3 - 663069 + 663064 3 18 - 638140 + 638135 18 71656 - 41808 + 41807 @@ -31591,17 +31606,17 @@ 1 2 - 7251643 + 7251587 2 3 - 618277 + 618273 3 32 - 618666 + 618661 @@ -31611,15 +31626,19 @@ expr_reuse - 331632 + 333955 reuse - 331632 + 333955 original - 331632 + 333955 + + + value_category + 19 @@ -31633,7 +31652,23 @@ 1 2 - 331632 + 333955 + + + + + + + reuse + value_category + + + 12 + + + 1 + 2 + 333955 @@ -31649,7 +31684,55 @@ 1 2 - 331632 + 333955 + + + + + + + original + value_category + + + 12 + + + 1 + 2 + 333955 + + + + + + + value_category + reuse + + + 12 + + + 17561 + 17562 + 19 + + + + + + + value_category + original + + + 12 + + + 17561 + 17562 + 19 @@ -31659,15 +31742,15 @@ expr_types - 18461112 + 18456468 id - 18330447 + 18325931 typeid - 1237209 + 1236717 value_category @@ -31685,12 +31768,12 @@ 1 2 - 18199782 + 18195394 2 3 - 130664 + 130536 @@ -31706,7 +31789,7 @@ 1 2 - 18330447 + 18325931 @@ -31722,42 +31805,42 @@ 1 2 - 448184 + 448002 2 3 - 256965 + 256901 3 4 - 102788 + 102760 4 5 - 84133 + 84078 5 8 - 110196 + 110166 8 14 - 98435 + 98352 14 42 - 93511 + 93486 42 - 125366 - 42995 + 125373 + 42967 @@ -31773,17 +31856,17 @@ 1 2 - 1069468 + 1069040 2 3 - 157321 + 157261 3 4 - 10418 + 10414 @@ -31802,13 +31885,13 @@ 11 - 372687 - 372688 + 372581 + 372582 11 - 1250400 - 1250401 + 1250724 + 1250725 11 @@ -31833,8 +31916,8 @@ 11 - 92891 - 92892 + 92889 + 92890 11 @@ -31845,15 +31928,15 @@ new_allocated_type - 47006 + 46995 expr - 47006 + 46995 type_id - 27800 + 27793 @@ -31867,7 +31950,7 @@ 1 2 - 47006 + 46995 @@ -31883,17 +31966,17 @@ 1 2 - 11621 + 11618 2 3 - 14717 + 14714 3 19 - 1461 + 1460 @@ -32988,15 +33071,15 @@ condition_decl_bind - 40853 + 40753 expr - 40853 + 40753 decl - 40853 + 40753 @@ -33010,7 +33093,7 @@ 1 2 - 40853 + 40753 @@ -33026,7 +33109,7 @@ 1 2 - 40853 + 40753 @@ -33036,15 +33119,15 @@ typeid_bind - 35977 + 35968 expr - 35977 + 35968 type_id - 16179 + 16175 @@ -33058,7 +33141,7 @@ 1 2 - 35977 + 35968 @@ -33074,7 +33157,7 @@ 1 2 - 15761 + 15757 3 @@ -33097,7 +33180,7 @@ type_id - 20097 + 20096 @@ -33127,7 +33210,7 @@ 1 2 - 19932 + 19931 2 @@ -33142,15 +33225,15 @@ sizeof_bind - 199195 + 199194 expr - 199195 + 199194 type_id - 8181 + 8224 @@ -33164,7 +33247,7 @@ 1 2 - 199195 + 199194 @@ -33180,12 +33263,12 @@ 1 2 - 2693 + 2704 2 3 - 2333 + 2328 3 @@ -33195,7 +33278,7 @@ 4 5 - 740 + 746 5 @@ -33205,12 +33288,12 @@ 6 9 - 714 + 756 9 133 - 650 + 640 164 @@ -33273,11 +33356,11 @@ lambdas - 21455 + 21456 expr - 21455 + 21456 default_capture @@ -33299,7 +33382,7 @@ 1 2 - 21455 + 21456 @@ -33315,7 +33398,7 @@ 1 2 - 21455 + 21456 @@ -33389,15 +33472,15 @@ lambda_capture - 27985 + 27986 id - 27985 + 27986 lambda - 20522 + 20523 index @@ -33405,7 +33488,7 @@ field - 27985 + 27986 captured_by_reference @@ -33431,7 +33514,7 @@ 1 2 - 27985 + 27986 @@ -33447,7 +33530,7 @@ 1 2 - 27985 + 27986 @@ -33463,7 +33546,7 @@ 1 2 - 27985 + 27986 @@ -33479,7 +33562,7 @@ 1 2 - 27985 + 27986 @@ -33495,7 +33578,7 @@ 1 2 - 27985 + 27986 @@ -33511,7 +33594,7 @@ 1 2 - 27985 + 27986 @@ -33527,12 +33610,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33548,12 +33631,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33569,12 +33652,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33590,7 +33673,7 @@ 1 2 - 20522 + 20523 @@ -33606,7 +33689,7 @@ 1 2 - 20522 + 20523 @@ -33622,12 +33705,12 @@ 1 2 - 13059 + 13060 2 3 - 7462 + 7463 @@ -33759,7 +33842,7 @@ 1 2 - 27985 + 27986 @@ -33775,7 +33858,7 @@ 1 2 - 27985 + 27986 @@ -33791,7 +33874,7 @@ 1 2 - 27985 + 27986 @@ -33807,7 +33890,7 @@ 1 2 - 27985 + 27986 @@ -33823,7 +33906,7 @@ 1 2 - 27985 + 27986 @@ -33839,7 +33922,7 @@ 1 2 - 27985 + 27986 @@ -34268,19 +34351,19 @@ stmts - 4619943 + 4618654 id - 4619943 + 4618654 kind - 1966 + 1965 location - 2269598 + 2268406 @@ -34294,7 +34377,7 @@ 1 2 - 4619943 + 4618654 @@ -34310,7 +34393,7 @@ 1 2 - 4619943 + 4618654 @@ -34394,28 +34477,28 @@ 103 - 2635 - 2636 + 2636 + 2637 103 - 4621 - 4622 + 4622 + 4623 103 - 8803 - 8804 + 8806 + 8807 103 - 11577 - 11578 + 11579 + 11580 103 - 13335 - 13336 + 13339 + 13340 103 @@ -34538,22 +34621,22 @@ 1 2 - 1879323 + 1878336 2 4 - 174019 + 173927 4 12 - 174122 + 174031 12 - 687 - 42133 + 689 + 42110 @@ -34569,12 +34652,12 @@ 1 2 - 2212869 + 2211706 2 8 - 56729 + 56699 @@ -34728,15 +34811,15 @@ if_then - 725956 + 725951 if_stmt - 725956 + 725951 then_id - 725956 + 725951 @@ -34750,7 +34833,7 @@ 1 2 - 725956 + 725951 @@ -34766,7 +34849,7 @@ 1 2 - 725956 + 725951 @@ -34776,15 +34859,15 @@ if_else - 184680 + 184679 if_stmt - 184680 + 184679 else_id - 184680 + 184679 @@ -34798,7 +34881,7 @@ 1 2 - 184680 + 184679 @@ -34814,7 +34897,7 @@ 1 2 - 184680 + 184679 @@ -34824,15 +34907,15 @@ constexpr_if_initialization - 1 + 2 constexpr_if_stmt - 1 + 2 init_id - 1 + 2 @@ -34846,7 +34929,7 @@ 1 2 - 1 + 2 @@ -34862,7 +34945,7 @@ 1 2 - 1 + 2 @@ -34872,15 +34955,15 @@ constexpr_if_then - 52071 + 52043 constexpr_if_stmt - 52071 + 52043 then_id - 52071 + 52043 @@ -34894,7 +34977,7 @@ 1 2 - 52071 + 52043 @@ -34910,7 +34993,7 @@ 1 2 - 52071 + 52043 @@ -34920,15 +35003,15 @@ constexpr_if_else - 30538 + 30522 constexpr_if_stmt - 30538 + 30522 else_id - 30538 + 30522 @@ -34942,7 +35025,7 @@ 1 2 - 30538 + 30522 @@ -34958,7 +35041,7 @@ 1 2 - 30538 + 30522 @@ -34968,15 +35051,15 @@ while_body - 29152 + 29141 while_stmt - 29152 + 29141 body_id - 29152 + 29141 @@ -34990,7 +35073,7 @@ 1 2 - 29152 + 29141 @@ -35006,7 +35089,7 @@ 1 2 - 29152 + 29141 @@ -35016,15 +35099,15 @@ do_body - 148882 + 148881 do_stmt - 148882 + 148881 body_id - 148882 + 148881 @@ -35038,7 +35121,7 @@ 1 2 - 148882 + 148881 @@ -35054,7 +35137,7 @@ 1 2 - 148882 + 148881 @@ -35064,15 +35147,15 @@ switch_initialization - 5 + 6 switch_stmt - 5 + 6 init_id - 5 + 6 @@ -35086,7 +35169,7 @@ 1 2 - 5 + 6 @@ -35102,7 +35185,7 @@ 1 2 - 5 + 6 @@ -35112,19 +35195,19 @@ switch_case - 201865 + 207702 switch_stmt - 10809 + 11029 index - 4689 + 4678 case_id - 201865 + 207702 @@ -35143,52 +35226,52 @@ 3 4 - 2402 + 2396 4 5 - 1753 + 1768 5 6 - 1048 + 1045 6 8 - 991 + 988 8 9 - 533 + 532 9 10 - 1029 + 1026 10 - 12 - 991 + 11 + 361 - 12 - 25 - 838 + 11 + 14 + 1007 - 30 - 152 - 819 + 14 + 31 + 931 - 181 + 36 247 - 343 + 912 @@ -35209,52 +35292,52 @@ 3 4 - 2402 + 2396 4 5 - 1753 + 1768 5 6 - 1048 + 1045 6 8 - 991 + 988 8 9 - 533 + 532 9 10 - 1029 + 1026 10 - 12 - 991 + 11 + 361 - 12 - 25 - 838 + 11 + 14 + 1007 - 30 - 152 - 819 + 14 + 31 + 931 - 181 + 36 247 - 343 + 912 @@ -35270,31 +35353,31 @@ 14 15 - 1239 + 1236 - 18 - 19 - 571 - - - 32 - 33 - 2020 + 19 + 20 + 570 33 - 62 - 400 + 34 + 2015 - 66 - 292 - 362 + 34 + 63 + 399 - 346 - 568 + 68 + 304 + 361 + + + 358 + 581 95 @@ -35311,31 +35394,31 @@ 14 15 - 1239 + 1236 - 18 - 19 - 571 - - - 32 - 33 - 2020 + 19 + 20 + 570 33 - 62 - 400 + 34 + 2015 - 66 - 292 - 362 + 34 + 63 + 399 - 346 - 568 + 68 + 304 + 361 + + + 358 + 581 95 @@ -35352,7 +35435,7 @@ 1 2 - 201865 + 207702 @@ -35368,7 +35451,7 @@ 1 2 - 201865 + 207702 @@ -35378,15 +35461,15 @@ switch_body - 20788 + 20787 switch_stmt - 20788 + 20787 body_id - 20788 + 20787 @@ -35400,7 +35483,7 @@ 1 2 - 20788 + 20787 @@ -35416,7 +35499,7 @@ 1 2 - 20788 + 20787 @@ -35426,15 +35509,15 @@ for_initialization - 53407 + 53406 for_stmt - 53407 + 53406 init_id - 53407 + 53406 @@ -35448,7 +35531,7 @@ 1 2 - 53407 + 53406 @@ -35464,7 +35547,7 @@ 1 2 - 53407 + 53406 @@ -35570,15 +35653,15 @@ for_body - 61560 + 61559 for_stmt - 61560 + 61559 body_id - 61560 + 61559 @@ -35592,7 +35675,7 @@ 1 2 - 61560 + 61559 @@ -35608,7 +35691,7 @@ 1 2 - 61560 + 61559 @@ -35618,11 +35701,11 @@ stmtparents - 4054468 + 4054557 id - 4054468 + 4054557 index @@ -35630,7 +35713,7 @@ parent - 1721248 + 1721299 @@ -35644,7 +35727,7 @@ 1 2 - 4054468 + 4054557 @@ -35660,7 +35743,7 @@ 1 2 - 4054468 + 4054557 @@ -35720,7 +35803,7 @@ 77 - 195132 + 195140 704 @@ -35781,7 +35864,7 @@ 77 - 195132 + 195140 704 @@ -35798,27 +35881,27 @@ 1 2 - 989113 + 989142 2 3 - 372551 + 372562 3 4 - 105697 + 105701 4 6 - 111251 + 111255 6 17 - 130351 + 130355 17 @@ -35839,27 +35922,27 @@ 1 2 - 989113 + 989142 2 3 - 372551 + 372562 3 4 - 105697 + 105701 4 6 - 111251 + 111255 6 17 - 130351 + 130355 17 @@ -35874,22 +35957,22 @@ ishandler - 62891 + 62736 block - 62891 + 62736 stmt_decl_bind - 580807 + 580797 stmt - 540988 + 540979 num @@ -35897,7 +35980,7 @@ decl - 580703 + 580692 @@ -35911,7 +35994,7 @@ 1 2 - 520281 + 520271 2 @@ -35932,7 +36015,7 @@ 1 2 - 520281 + 520271 2 @@ -36135,7 +36218,7 @@ 1 2 - 580665 + 580655 2 @@ -36156,7 +36239,7 @@ 1 2 - 580703 + 580692 @@ -36166,11 +36249,11 @@ stmt_decl_entry_bind - 523682 + 523673 stmt - 484163 + 484155 num @@ -36178,7 +36261,7 @@ decl_entry - 523624 + 523614 @@ -36192,7 +36275,7 @@ 1 2 - 463719 + 463710 2 @@ -36213,7 +36296,7 @@ 1 2 - 463719 + 463710 2 @@ -36416,7 +36499,7 @@ 1 2 - 523603 + 523593 3 @@ -36437,7 +36520,7 @@ 1 2 - 523624 + 523614 @@ -36447,15 +36530,15 @@ blockscope - 1415581 + 1415642 block - 1415581 + 1415642 enclosing - 1300376 + 1300432 @@ -36469,7 +36552,7 @@ 1 2 - 1415581 + 1415642 @@ -36485,12 +36568,12 @@ 1 2 - 1235077 + 1235130 2 13 - 65298 + 65301 @@ -36500,11 +36583,11 @@ jumpinfo - 254471 + 254469 id - 254471 + 254469 str @@ -36512,7 +36595,7 @@ target - 53145 + 53144 @@ -36526,7 +36609,7 @@ 1 2 - 254471 + 254469 @@ -36542,7 +36625,7 @@ 1 2 - 254471 + 254469 @@ -36640,7 +36723,7 @@ 2 3 - 26478 + 26477 3 @@ -36676,7 +36759,7 @@ 1 2 - 53145 + 53144 @@ -36686,11 +36769,11 @@ preprocdirects - 4389195 + 4386889 id - 4389195 + 4386889 kind @@ -36698,7 +36781,7 @@ location - 4386607 + 4384302 @@ -36712,7 +36795,7 @@ 1 2 - 4389195 + 4386889 @@ -36728,7 +36811,7 @@ 1 2 - 4389195 + 4386889 @@ -36876,7 +36959,7 @@ 1 2 - 4386503 + 4384198 26 @@ -36897,7 +36980,7 @@ 1 2 - 4386607 + 4384302 @@ -36907,15 +36990,15 @@ preprocpair - 1430040 + 1430102 begin - 1195898 + 1195950 elseelifend - 1430040 + 1430102 @@ -36929,12 +37012,12 @@ 1 2 - 977614 + 977656 2 3 - 208022 + 208031 3 @@ -36955,7 +37038,7 @@ 1 2 - 1430040 + 1430102 @@ -36965,41 +37048,41 @@ preproctrue - 766326 + 766359 branch - 766326 + 766359 preprocfalse - 331157 + 331171 branch - 331157 + 331171 preproctext - 3539079 + 3537219 id - 3539079 + 3537219 head - 2564841 + 2563493 body - 1498986 + 1498199 @@ -37013,7 +37096,7 @@ 1 2 - 3539079 + 3537219 @@ -37029,7 +37112,7 @@ 1 2 - 3539079 + 3537219 @@ -37045,12 +37128,12 @@ 1 2 - 2418979 + 2417708 2 740 - 145861 + 145784 @@ -37066,12 +37149,12 @@ 1 2 - 2503142 + 2501827 2 5 - 61698 + 61666 @@ -37087,17 +37170,17 @@ 1 2 - 1356955 + 1356242 2 6 - 112424 + 112364 6 11630 - 29607 + 29591 @@ -37113,17 +37196,17 @@ 1 2 - 1359957 + 1359243 2 7 - 112734 + 112675 7 2980 - 26294 + 26280 @@ -37133,15 +37216,15 @@ includes - 312967 + 312980 id - 312967 + 312980 included - 117071 + 117076 @@ -37155,7 +37238,7 @@ 1 2 - 312967 + 312980 @@ -37171,12 +37254,12 @@ 1 2 - 61100 + 61103 2 3 - 21921 + 21922 3 @@ -37191,7 +37274,7 @@ 6 14 - 8861 + 8862 14 @@ -37206,15 +37289,15 @@ link_targets - 819 + 817 id - 819 + 817 binary - 819 + 817 @@ -37228,7 +37311,7 @@ 1 2 - 819 + 817 @@ -37244,7 +37327,7 @@ 1 2 - 819 + 817 @@ -37254,11 +37337,11 @@ link_parent - 38877182 + 38867468 element - 4927618 + 4926386 link_target @@ -37276,17 +37359,17 @@ 1 2 - 664255 + 664089 2 9 - 25852 + 25845 9 10 - 4237510 + 4236452 diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql new file mode 100644 index 00000000000..e0648d97b73 --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/expr_reuse.ql @@ -0,0 +1,7 @@ +class Expr extends @expr { + string toString() { none() } +} + +from Expr reuse, Expr original, int value_category +where expr_reuse(reuse, original) and expr_types(original, _, value_category) +select reuse, original, value_category diff --git a/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme @@ -0,0 +1,2250 @@ + +/** + * 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 +); + +/** + * 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, + int handle: @variable ref, + int promise: @variable 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) + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 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 // a using name = type style typedef +; +*/ + +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 +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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 +) + +/* + 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 +; + +@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 + ; + +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 +); + +/** + * 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 +); + +@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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +; + +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 +); + +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 +); + +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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock 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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..abfce5c170f --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme @@ -0,0 +1,2251 @@ + +/** + * 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 +); + +/** + * 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, + int handle: @variable ref, + int promise: @variable 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) + +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 +); + +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_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable 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 +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default 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: @functionorblock 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. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this 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. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 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 // a using name = type style typedef +; +*/ + +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 +); + +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 +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype 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 +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int 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 +); + +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 + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +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; + +@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 + ; + +/* +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 + +/* + 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 +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * 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 +; + +@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 + ; + +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 +); + +/** + * 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 +); + +@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 +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_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 +; + +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 +); + +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 +); + +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 +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock 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 +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +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/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties new file mode 100644 index 00000000000..82bbbe273cd --- /dev/null +++ b/cpp/ql/lib/upgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties @@ -0,0 +1,3 @@ +description: Add value category to expr_reuse table +compatibility: full +expr_reuse.rel: run expr_reuse.qlo From 07f9614dc2a5ec4384e12d898ca05bf0a6df267c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 03:07:21 +0000 Subject: [PATCH 377/497] Bump chrono from 0.4.35 to 0.4.37 in /ql Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.35 to 0.4.37. - [Release notes](https://github.com/chronotope/chrono/releases) - [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md) - [Commits](https://github.com/chronotope/chrono/compare/v0.4.35...v0.4.37) --- updated-dependencies: - dependency-name: chrono dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- ql/Cargo.lock | Bin 34042 -> 34042 bytes ql/buramu/Cargo.toml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 557cf673d595458400f9328b9382d49234d7e8b9..2e3cb8f29bdd6f4cb9f19dd3084e2d5f292f0dae 100644 GIT binary patch delta 93 zcmV~$y$OIY5C%|8BM92L$9LxEV&?|VaOSkMbO*sMiwI7jW2N%Fa+-3Q`)e!CZ#_>@ wpm6G}hf9G(LSk=eqsXKRbrf|ZvY;>^*oEV$0&L3gEPl;z)8`KLvv=3=15OVcod5s; delta 92 zcmey>$@Hs}X~Q92M$^d$+5PP;QWMimEe(uQl9Q4R5{)g54UN)Llg!Oi(u~s5Op?vb wj4jMlOf3zQEYp(BlMGA}jf^c)lG7}blFW?Ej4dY{s) Date: Thu, 28 Mar 2024 10:28:37 +0000 Subject: [PATCH 378/497] Update codeql-for-javascript.rst --- docs/codeql/codeql-language-guides/codeql-for-javascript.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst index cfc98a1a7d3..9c4073bce1b 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-javascript.rst @@ -17,6 +17,7 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat using-type-tracking-for-api-modeling abstract-syntax-tree-classes-for-working-with-javascript-and-typescript-programs data-flow-cheat-sheet-for-javascript + customizing-library-models-for-javascript - :doc:`Basic query for JavaScript and TypeScript code `: Learn to write and run a simple CodeQL query. From bfce01cef672a7d0ca273be926497c94f86d25af Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 28 Mar 2024 11:38:39 +0100 Subject: [PATCH 379/497] Swift: add change note for Swift 5.10 upgrade --- swift/ql/lib/change-notes/2024-03-28-swift-5.10.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 swift/ql/lib/change-notes/2024-03-28-swift-5.10.md diff --git a/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md b/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md new file mode 100644 index 00000000000..bfc371a89e9 --- /dev/null +++ b/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- +* Upgraded to Swift 5.10 +* New AST node is extracted: `ThenStmt` From ece0d1f477a8220ac6b1e73bfd52c376da50899e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 28 Mar 2024 11:54:18 +0100 Subject: [PATCH 380/497] Swift: add upgrade/downgrade scripts --- .../downgrade.ql | 18 + .../old.dbscheme | 2786 +++++++++++++++++ .../swift.dbscheme | 2780 ++++++++++++++++ .../upgrade.properties | 5 + .../old.dbscheme | 2780 ++++++++++++++++ .../swift.dbscheme | 2786 +++++++++++++++++ .../upgrade.properties | 2 + 7 files changed, 11157 insertions(+) create mode 100644 swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql create mode 100644 swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme create mode 100644 swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme create mode 100644 swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties create mode 100644 swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme create mode 100644 swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme create mode 100644 swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql new file mode 100644 index 00000000000..3246fda8899 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql @@ -0,0 +1,18 @@ +class Element extends @element { + string toString() { none() } +} + +query predicate new_unspecified_elements(Element e, string property, string error) { + unspecified_elements(e, property, error) + or + error = + "ThenStmt nodes removed during database downgrade. Please update your CodeQL code." and + property = "" and + then_stmts(e, _) +} + +query predicate new_unspecified_element_children(Element e, int index, Element child) { + unspecified_element_children(e, index, child) + or + then_stmts(e, child) and index = 0 +} diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme new file mode 100644 index 00000000000..15a630f68e1 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/old.dbscheme @@ -0,0 +1,2786 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @then_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme new file mode 100644 index 00000000000..60be249ad16 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/swift.dbscheme @@ -0,0 +1,2780 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties new file mode 100644 index 00000000000..b8ecfe23828 --- /dev/null +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/upgrade.properties @@ -0,0 +1,5 @@ +description: Remove `ThenStmt` wrapper nodes. +compatibility: partial +unspecified_elements.rel: run downgrade.ql new_unspecified_elements +unspecified_element_children.rel: run downgrade.ql new_unspecified_element_children +then_stmts.rel: delete diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme new file mode 100644 index 00000000000..60be249ad16 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/old.dbscheme @@ -0,0 +1,2780 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme new file mode 100644 index 00000000000..15a630f68e1 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/swift.dbscheme @@ -0,0 +1,2786 @@ +// generated by codegen/codegen.py + +// from prefix.dbscheme +/** + * The source location of the snapshot. + */ +sourceLocationPrefix( + string prefix: string ref +); + + +// from schema.py + +@element = + @callable +| @file +| @generic_context +| @locatable +| @location +| @type +; + +#keyset[id] +element_is_unknown( + int id: @element ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_names( + int id: @callable ref, + string name: string ref +); + +#keyset[id] +callable_self_params( + int id: @callable ref, + int self_param: @param_decl_or_none ref +); + +#keyset[id, index] +callable_params( + int id: @callable ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +#keyset[id] +callable_bodies( + int id: @callable ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id, index] +callable_captures( + int id: @callable ref, + int index: int ref, + int capture: @captured_decl_or_none ref +); + +@file = + @db_file +; + +#keyset[id] +files( + int id: @file ref, + string name: string ref +); + +#keyset[id] +file_is_successfully_extracted( + int id: @file ref +); + +@locatable = + @argument +| @ast_node +| @comment +| @diagnostics +| @error_element +; + +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_or_none ref +); + +@location = + @db_location +; + +#keyset[id] +locations( + int id: @location ref, + int file: @file_or_none ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +@ast_node = + @availability_info +| @availability_spec +| @case_label_item +| @condition_element +| @decl +| @expr +| @key_path_component +| @macro_role +| @pattern +| @stmt +| @stmt_condition +| @type_repr +; + +comments( + unique int id: @comment, + string text: string ref +); + +db_files( + unique int id: @db_file +); + +db_locations( + unique int id: @db_location +); + +diagnostics( + unique int id: @diagnostics, + string text: string ref, + int kind: int ref +); + +@error_element = + @error_expr +| @error_type +| @overloaded_decl_ref_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_chain_result_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @unresolved_type +| @unresolved_type_conversion_expr +| @unspecified_element +; + +availability_infos( + unique int id: @availability_info +); + +#keyset[id] +availability_info_is_unavailable( + int id: @availability_info ref +); + +#keyset[id, index] +availability_info_specs( + int id: @availability_info ref, + int index: int ref, + int spec: @availability_spec_or_none ref +); + +@availability_spec = + @other_availability_spec +| @platform_version_availability_spec +; + +key_path_components( + unique int id: @key_path_component, + int kind: int ref, + int component_type: @type_or_none ref +); + +#keyset[id, index] +key_path_component_subscript_arguments( + int id: @key_path_component ref, + int index: int ref, + int subscript_argument: @argument_or_none ref +); + +#keyset[id] +key_path_component_tuple_indices( + int id: @key_path_component ref, + int tuple_index: int ref +); + +#keyset[id] +key_path_component_decl_refs( + int id: @key_path_component ref, + int decl_ref: @value_decl_or_none ref +); + +macro_roles( + unique int id: @macro_role, + int kind: int ref, + int macro_syntax: int ref +); + +#keyset[id, index] +macro_role_conformances( + int id: @macro_role ref, + int index: int ref, + int conformance: @type_expr_or_none ref +); + +#keyset[id, index] +macro_role_names( + int id: @macro_role ref, + int index: int ref, + string name: string ref +); + +unspecified_elements( + unique int id: @unspecified_element, + string property: string ref, + string error: string ref +); + +#keyset[id] +unspecified_element_parents( + int id: @unspecified_element ref, + int parent: @element ref +); + +#keyset[id] +unspecified_element_indices( + int id: @unspecified_element ref, + int index: int ref +); + +#keyset[id, index] +unspecified_element_children( + int id: @unspecified_element ref, + int index: int ref, + int child: @ast_node_or_none ref +); + +other_availability_specs( + unique int id: @other_availability_spec +); + +platform_version_availability_specs( + unique int id: @platform_version_availability_spec, + string platform: string ref, + string version: string ref +); + +@decl = + @captured_decl +| @enum_case_decl +| @extension_decl +| @if_config_decl +| @import_decl +| @missing_member_decl +| @operator_decl +| @pattern_binding_decl +| @pound_diagnostic_decl +| @precedence_group_decl +| @top_level_code_decl +| @value_decl +; + +#keyset[id] +decls( //dir=decl + int id: @decl ref, + int module: @module_decl_or_none ref +); + +#keyset[id, index] +decl_members( //dir=decl + int id: @decl ref, + int index: int ref, + int member: @decl_or_none ref +); + +@generic_context = + @extension_decl +| @function +| @generic_type_decl +| @macro_decl +| @subscript_decl +; + +#keyset[id, index] +generic_context_generic_type_params( //dir=decl + int id: @generic_context ref, + int index: int ref, + int generic_type_param: @generic_type_param_decl_or_none ref +); + +captured_decls( //dir=decl + unique int id: @captured_decl, + int decl: @value_decl_or_none ref +); + +#keyset[id] +captured_decl_is_direct( //dir=decl + int id: @captured_decl ref +); + +#keyset[id] +captured_decl_is_escaping( //dir=decl + int id: @captured_decl ref +); + +enum_case_decls( //dir=decl + unique int id: @enum_case_decl +); + +#keyset[id, index] +enum_case_decl_elements( //dir=decl + int id: @enum_case_decl ref, + int index: int ref, + int element: @enum_element_decl_or_none ref +); + +extension_decls( //dir=decl + unique int id: @extension_decl, + int extended_type_decl: @nominal_type_decl_or_none ref +); + +#keyset[id, index] +extension_decl_protocols( //dir=decl + int id: @extension_decl ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +if_config_decls( //dir=decl + unique int id: @if_config_decl +); + +#keyset[id, index] +if_config_decl_active_elements( //dir=decl + int id: @if_config_decl ref, + int index: int ref, + int active_element: @ast_node_or_none ref +); + +import_decls( //dir=decl + unique int id: @import_decl +); + +#keyset[id] +import_decl_is_exported( //dir=decl + int id: @import_decl ref +); + +#keyset[id] +import_decl_imported_modules( //dir=decl + int id: @import_decl ref, + int imported_module: @module_decl_or_none ref +); + +#keyset[id, index] +import_decl_declarations( //dir=decl + int id: @import_decl ref, + int index: int ref, + int declaration: @value_decl_or_none ref +); + +missing_member_decls( //dir=decl + unique int id: @missing_member_decl, + string name: string ref +); + +@operator_decl = + @infix_operator_decl +| @postfix_operator_decl +| @prefix_operator_decl +; + +#keyset[id] +operator_decls( //dir=decl + int id: @operator_decl ref, + string name: string ref +); + +pattern_binding_decls( //dir=decl + unique int id: @pattern_binding_decl +); + +#keyset[id, index] +pattern_binding_decl_inits( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int init: @expr_or_none ref +); + +#keyset[id, index] +pattern_binding_decl_patterns( //dir=decl + int id: @pattern_binding_decl ref, + int index: int ref, + int pattern: @pattern_or_none ref +); + +pound_diagnostic_decls( //dir=decl + unique int id: @pound_diagnostic_decl, + int kind: int ref, + int message: @string_literal_expr_or_none ref +); + +precedence_group_decls( //dir=decl + unique int id: @precedence_group_decl +); + +top_level_code_decls( //dir=decl + unique int id: @top_level_code_decl, + int body: @brace_stmt_or_none ref +); + +@value_decl = + @abstract_storage_decl +| @enum_element_decl +| @function +| @macro_decl +| @type_decl +; + +#keyset[id] +value_decls( //dir=decl + int id: @value_decl ref, + int interface_type: @type_or_none ref +); + +@abstract_storage_decl = + @subscript_decl +| @var_decl +; + +#keyset[id, index] +abstract_storage_decl_accessors( //dir=decl + int id: @abstract_storage_decl ref, + int index: int ref, + int accessor: @accessor_or_none ref +); + +enum_element_decls( //dir=decl + unique int id: @enum_element_decl, + string name: string ref +); + +#keyset[id, index] +enum_element_decl_params( //dir=decl + int id: @enum_element_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@function = + @accessor_or_named_function +| @deinitializer +| @initializer +; + +infix_operator_decls( //dir=decl + unique int id: @infix_operator_decl +); + +#keyset[id] +infix_operator_decl_precedence_groups( //dir=decl + int id: @infix_operator_decl ref, + int precedence_group: @precedence_group_decl_or_none ref +); + +macro_decls( //dir=decl + unique int id: @macro_decl, + string name: string ref +); + +#keyset[id, index] +macro_decl_parameters( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int parameter: @param_decl_or_none ref +); + +#keyset[id, index] +macro_decl_roles( //dir=decl + int id: @macro_decl ref, + int index: int ref, + int role: @macro_role_or_none ref +); + +postfix_operator_decls( //dir=decl + unique int id: @postfix_operator_decl +); + +prefix_operator_decls( //dir=decl + unique int id: @prefix_operator_decl +); + +@type_decl = + @abstract_type_param_decl +| @generic_type_decl +| @module_decl +; + +#keyset[id] +type_decls( //dir=decl + int id: @type_decl ref, + string name: string ref +); + +#keyset[id, index] +type_decl_inherited_types( //dir=decl + int id: @type_decl ref, + int index: int ref, + int inherited_type: @type_or_none ref +); + +@abstract_type_param_decl = + @associated_type_decl +| @generic_type_param_decl +; + +@accessor_or_named_function = + @accessor +| @named_function +; + +deinitializers( //dir=decl + unique int id: @deinitializer +); + +@generic_type_decl = + @nominal_type_decl +| @opaque_type_decl +| @type_alias_decl +; + +initializers( //dir=decl + unique int id: @initializer +); + +module_decls( //dir=decl + unique int id: @module_decl +); + +#keyset[id] +module_decl_is_builtin_module( //dir=decl + int id: @module_decl ref +); + +#keyset[id] +module_decl_is_system_module( //dir=decl + int id: @module_decl ref +); + +module_decl_imported_modules( //dir=decl + int id: @module_decl ref, + int imported_module: @module_decl_or_none ref +); + +module_decl_exported_modules( //dir=decl + int id: @module_decl ref, + int exported_module: @module_decl_or_none ref +); + +subscript_decls( //dir=decl + unique int id: @subscript_decl, + int element_type: @type_or_none ref +); + +#keyset[id, index] +subscript_decl_params( //dir=decl + int id: @subscript_decl ref, + int index: int ref, + int param: @param_decl_or_none ref +); + +@var_decl = + @concrete_var_decl +| @param_decl +; + +#keyset[id] +var_decls( //dir=decl + int id: @var_decl ref, + string name: string ref, + int type_: @type_or_none ref +); + +#keyset[id] +var_decl_attached_property_wrapper_types( //dir=decl + int id: @var_decl ref, + int attached_property_wrapper_type: @type_or_none ref +); + +#keyset[id] +var_decl_parent_patterns( //dir=decl + int id: @var_decl ref, + int parent_pattern: @pattern_or_none ref +); + +#keyset[id] +var_decl_parent_initializers( //dir=decl + int id: @var_decl ref, + int parent_initializer: @expr_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_backing_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_backing_var: @var_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_var_bindings( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +var_decl_property_wrapper_projection_vars( //dir=decl + int id: @var_decl ref, + int property_wrapper_projection_var: @var_decl_or_none ref +); + +accessors( //dir=decl + unique int id: @accessor +); + +#keyset[id] +accessor_is_getter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_setter( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_will_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_did_set( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_read( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_modify( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_address( //dir=decl + int id: @accessor ref +); + +#keyset[id] +accessor_is_unsafe_mutable_address( //dir=decl + int id: @accessor ref +); + +associated_type_decls( //dir=decl + unique int id: @associated_type_decl +); + +concrete_var_decls( //dir=decl + unique int id: @concrete_var_decl, + int introducer_int: int ref +); + +generic_type_param_decls( //dir=decl + unique int id: @generic_type_param_decl +); + +named_functions( //dir=decl + unique int id: @named_function +); + +@nominal_type_decl = + @class_decl +| @enum_decl +| @protocol_decl +| @struct_decl +; + +#keyset[id] +nominal_type_decls( //dir=decl + int id: @nominal_type_decl ref, + int type_: @type_or_none ref +); + +opaque_type_decls( //dir=decl + unique int id: @opaque_type_decl, + int naming_declaration: @value_decl_or_none ref +); + +#keyset[id, index] +opaque_type_decl_opaque_generic_params( //dir=decl + int id: @opaque_type_decl ref, + int index: int ref, + int opaque_generic_param: @generic_type_param_type_or_none ref +); + +param_decls( //dir=decl + unique int id: @param_decl +); + +#keyset[id] +param_decl_is_inout( //dir=decl + int id: @param_decl ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref +); + +#keyset[id] +param_decl_property_wrapper_local_wrapped_vars( //dir=decl + int id: @param_decl ref, + int property_wrapper_local_wrapped_var: @var_decl_or_none ref +); + +type_alias_decls( //dir=decl + unique int id: @type_alias_decl, + int aliased_type: @type_or_none ref +); + +class_decls( //dir=decl + unique int id: @class_decl +); + +enum_decls( //dir=decl + unique int id: @enum_decl +); + +protocol_decls( //dir=decl + unique int id: @protocol_decl +); + +struct_decls( //dir=decl + unique int id: @struct_decl +); + +arguments( //dir=expr + unique int id: @argument, + string label: string ref, + int expr: @expr_or_none ref +); + +@expr = + @any_try_expr +| @applied_property_wrapper_expr +| @apply_expr +| @assign_expr +| @bind_optional_expr +| @capture_list_expr +| @closure_expr +| @collection_expr +| @consume_expr +| @copy_expr +| @decl_ref_expr +| @default_argument_expr +| @discard_assignment_expr +| @dot_syntax_base_ignored_expr +| @dynamic_type_expr +| @enum_is_case_expr +| @error_expr +| @explicit_cast_expr +| @force_value_expr +| @identity_expr +| @if_expr +| @implicit_conversion_expr +| @in_out_expr +| @key_path_application_expr +| @key_path_dot_expr +| @key_path_expr +| @lazy_initialization_expr +| @literal_expr +| @lookup_expr +| @make_temporarily_escapable_expr +| @materialize_pack_expr +| @obj_c_selector_expr +| @one_way_expr +| @opaque_value_expr +| @open_existential_expr +| @optional_evaluation_expr +| @other_initializer_ref_expr +| @overloaded_decl_ref_expr +| @pack_element_expr +| @pack_expansion_expr +| @property_wrapper_value_placeholder_expr +| @rebind_self_in_initializer_expr +| @sequence_expr +| @single_value_stmt_expr +| @super_ref_expr +| @tap_expr +| @tuple_element_expr +| @tuple_expr +| @type_expr +| @unresolved_decl_ref_expr +| @unresolved_dot_expr +| @unresolved_member_expr +| @unresolved_pattern_expr +| @unresolved_specialize_expr +| @vararg_expansion_expr +; + +#keyset[id] +expr_types( //dir=expr + int id: @expr ref, + int type_: @type_or_none ref +); + +@any_try_expr = + @force_try_expr +| @optional_try_expr +| @try_expr +; + +#keyset[id] +any_try_exprs( //dir=expr + int id: @any_try_expr ref, + int sub_expr: @expr_or_none ref +); + +applied_property_wrapper_exprs( //dir=expr + unique int id: @applied_property_wrapper_expr, + int kind: int ref, + int value: @expr_or_none ref, + int param: @param_decl_or_none ref +); + +@apply_expr = + @binary_expr +| @call_expr +| @postfix_unary_expr +| @prefix_unary_expr +| @self_apply_expr +; + +#keyset[id] +apply_exprs( //dir=expr + int id: @apply_expr ref, + int function: @expr_or_none ref +); + +#keyset[id, index] +apply_expr_arguments( //dir=expr + int id: @apply_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +assign_exprs( //dir=expr + unique int id: @assign_expr, + int dest: @expr_or_none ref, + int source: @expr_or_none ref +); + +bind_optional_exprs( //dir=expr + unique int id: @bind_optional_expr, + int sub_expr: @expr_or_none ref +); + +capture_list_exprs( //dir=expr + unique int id: @capture_list_expr, + int closure_body: @closure_expr_or_none ref +); + +#keyset[id, index] +capture_list_expr_binding_decls( //dir=expr + int id: @capture_list_expr ref, + int index: int ref, + int binding_decl: @pattern_binding_decl_or_none ref +); + +@closure_expr = + @auto_closure_expr +| @explicit_closure_expr +; + +@collection_expr = + @array_expr +| @dictionary_expr +; + +consume_exprs( //dir=expr + unique int id: @consume_expr, + int sub_expr: @expr_or_none ref +); + +copy_exprs( //dir=expr + unique int id: @copy_expr, + int sub_expr: @expr_or_none ref +); + +decl_ref_exprs( //dir=expr + unique int id: @decl_ref_expr, + int decl: @decl_or_none ref +); + +#keyset[id, index] +decl_ref_expr_replacement_types( //dir=expr + int id: @decl_ref_expr ref, + int index: int ref, + int replacement_type: @type_or_none ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_ordinary_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +#keyset[id] +decl_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @decl_ref_expr ref +); + +default_argument_exprs( //dir=expr + unique int id: @default_argument_expr, + int param_decl: @param_decl_or_none ref, + int param_index: int ref +); + +#keyset[id] +default_argument_expr_caller_side_defaults( //dir=expr + int id: @default_argument_expr ref, + int caller_side_default: @expr_or_none ref +); + +discard_assignment_exprs( //dir=expr + unique int id: @discard_assignment_expr +); + +dot_syntax_base_ignored_exprs( //dir=expr + unique int id: @dot_syntax_base_ignored_expr, + int qualifier: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +dynamic_type_exprs( //dir=expr + unique int id: @dynamic_type_expr, + int base: @expr_or_none ref +); + +enum_is_case_exprs( //dir=expr + unique int id: @enum_is_case_expr, + int sub_expr: @expr_or_none ref, + int element: @enum_element_decl_or_none ref +); + +error_exprs( //dir=expr + unique int id: @error_expr +); + +@explicit_cast_expr = + @checked_cast_expr +| @coerce_expr +; + +#keyset[id] +explicit_cast_exprs( //dir=expr + int id: @explicit_cast_expr ref, + int sub_expr: @expr_or_none ref +); + +force_value_exprs( //dir=expr + unique int id: @force_value_expr, + int sub_expr: @expr_or_none ref +); + +@identity_expr = + @await_expr +| @borrow_expr +| @dot_self_expr +| @paren_expr +| @unresolved_member_chain_result_expr +; + +#keyset[id] +identity_exprs( //dir=expr + int id: @identity_expr ref, + int sub_expr: @expr_or_none ref +); + +if_exprs( //dir=expr + unique int id: @if_expr, + int condition: @expr_or_none ref, + int then_expr: @expr_or_none ref, + int else_expr: @expr_or_none ref +); + +@implicit_conversion_expr = + @abi_safe_conversion_expr +| @any_hashable_erasure_expr +| @archetype_to_super_expr +| @array_to_pointer_expr +| @bridge_from_obj_c_expr +| @bridge_to_obj_c_expr +| @class_metatype_to_object_expr +| @collection_upcast_conversion_expr +| @conditional_bridge_from_obj_c_expr +| @covariant_function_conversion_expr +| @covariant_return_conversion_expr +| @derived_to_base_expr +| @destructure_tuple_expr +| @differentiable_function_expr +| @differentiable_function_extract_original_expr +| @erasure_expr +| @existential_metatype_to_object_expr +| @foreign_object_conversion_expr +| @function_conversion_expr +| @in_out_to_pointer_expr +| @inject_into_optional_expr +| @linear_function_expr +| @linear_function_extract_original_expr +| @linear_to_differentiable_function_expr +| @load_expr +| @metatype_conversion_expr +| @pointer_to_pointer_expr +| @protocol_metatype_to_object_expr +| @string_to_pointer_expr +| @underlying_to_opaque_expr +| @unevaluated_instance_expr +| @unresolved_type_conversion_expr +; + +#keyset[id] +implicit_conversion_exprs( //dir=expr + int id: @implicit_conversion_expr ref, + int sub_expr: @expr_or_none ref +); + +in_out_exprs( //dir=expr + unique int id: @in_out_expr, + int sub_expr: @expr_or_none ref +); + +key_path_application_exprs( //dir=expr + unique int id: @key_path_application_expr, + int base: @expr_or_none ref, + int key_path: @expr_or_none ref +); + +key_path_dot_exprs( //dir=expr + unique int id: @key_path_dot_expr +); + +key_path_exprs( //dir=expr + unique int id: @key_path_expr +); + +#keyset[id] +key_path_expr_roots( //dir=expr + int id: @key_path_expr ref, + int root: @type_repr_or_none ref +); + +#keyset[id, index] +key_path_expr_components( //dir=expr + int id: @key_path_expr ref, + int index: int ref, + int component: @key_path_component_or_none ref +); + +lazy_initialization_exprs( //dir=expr + unique int id: @lazy_initialization_expr, + int sub_expr: @expr_or_none ref +); + +@literal_expr = + @builtin_literal_expr +| @interpolated_string_literal_expr +| @nil_literal_expr +| @object_literal_expr +| @regex_literal_expr +; + +@lookup_expr = + @dynamic_lookup_expr +| @member_ref_expr +| @subscript_expr +; + +#keyset[id] +lookup_exprs( //dir=expr + int id: @lookup_expr ref, + int base: @expr_or_none ref +); + +#keyset[id] +lookup_expr_members( //dir=expr + int id: @lookup_expr ref, + int member: @decl_or_none ref +); + +make_temporarily_escapable_exprs( //dir=expr + unique int id: @make_temporarily_escapable_expr, + int escaping_closure: @opaque_value_expr_or_none ref, + int nonescaping_closure: @expr_or_none ref, + int sub_expr: @expr_or_none ref +); + +materialize_pack_exprs( //dir=expr + unique int id: @materialize_pack_expr, + int sub_expr: @expr_or_none ref +); + +obj_c_selector_exprs( //dir=expr + unique int id: @obj_c_selector_expr, + int sub_expr: @expr_or_none ref, + int method: @function_or_none ref +); + +one_way_exprs( //dir=expr + unique int id: @one_way_expr, + int sub_expr: @expr_or_none ref +); + +opaque_value_exprs( //dir=expr + unique int id: @opaque_value_expr +); + +open_existential_exprs( //dir=expr + unique int id: @open_existential_expr, + int sub_expr: @expr_or_none ref, + int existential: @expr_or_none ref, + int opaque_expr: @opaque_value_expr_or_none ref +); + +optional_evaluation_exprs( //dir=expr + unique int id: @optional_evaluation_expr, + int sub_expr: @expr_or_none ref +); + +other_initializer_ref_exprs( //dir=expr + unique int id: @other_initializer_ref_expr, + int initializer: @initializer_or_none ref +); + +overloaded_decl_ref_exprs( //dir=expr + unique int id: @overloaded_decl_ref_expr +); + +#keyset[id, index] +overloaded_decl_ref_expr_possible_declarations( //dir=expr + int id: @overloaded_decl_ref_expr ref, + int index: int ref, + int possible_declaration: @value_decl_or_none ref +); + +pack_element_exprs( //dir=expr + unique int id: @pack_element_expr, + int sub_expr: @expr_or_none ref +); + +pack_expansion_exprs( //dir=expr + unique int id: @pack_expansion_expr, + int pattern_expr: @expr_or_none ref +); + +property_wrapper_value_placeholder_exprs( //dir=expr + unique int id: @property_wrapper_value_placeholder_expr, + int placeholder: @opaque_value_expr_or_none ref +); + +#keyset[id] +property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr + int id: @property_wrapper_value_placeholder_expr ref, + int wrapped_value: @expr_or_none ref +); + +rebind_self_in_initializer_exprs( //dir=expr + unique int id: @rebind_self_in_initializer_expr, + int sub_expr: @expr_or_none ref, + int self: @var_decl_or_none ref +); + +sequence_exprs( //dir=expr + unique int id: @sequence_expr +); + +#keyset[id, index] +sequence_expr_elements( //dir=expr + int id: @sequence_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +single_value_stmt_exprs( //dir=expr + unique int id: @single_value_stmt_expr, + int stmt: @stmt_or_none ref +); + +super_ref_exprs( //dir=expr + unique int id: @super_ref_expr, + int self: @var_decl_or_none ref +); + +tap_exprs( //dir=expr + unique int id: @tap_expr, + int body: @brace_stmt_or_none ref, + int var: @var_decl_or_none ref +); + +#keyset[id] +tap_expr_sub_exprs( //dir=expr + int id: @tap_expr ref, + int sub_expr: @expr_or_none ref +); + +tuple_element_exprs( //dir=expr + unique int id: @tuple_element_expr, + int sub_expr: @expr_or_none ref, + int index: int ref +); + +tuple_exprs( //dir=expr + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_elements( //dir=expr + int id: @tuple_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +type_exprs( //dir=expr + unique int id: @type_expr +); + +#keyset[id] +type_expr_type_reprs( //dir=expr + int id: @type_expr ref, + int type_repr: @type_repr_or_none ref +); + +unresolved_decl_ref_exprs( //dir=expr + unique int id: @unresolved_decl_ref_expr +); + +#keyset[id] +unresolved_decl_ref_expr_names( //dir=expr + int id: @unresolved_decl_ref_expr ref, + string name: string ref +); + +unresolved_dot_exprs( //dir=expr + unique int id: @unresolved_dot_expr, + int base: @expr_or_none ref, + string name: string ref +); + +unresolved_member_exprs( //dir=expr + unique int id: @unresolved_member_expr, + string name: string ref +); + +unresolved_pattern_exprs( //dir=expr + unique int id: @unresolved_pattern_expr, + int sub_pattern: @pattern_or_none ref +); + +unresolved_specialize_exprs( //dir=expr + unique int id: @unresolved_specialize_expr, + int sub_expr: @expr_or_none ref +); + +vararg_expansion_exprs( //dir=expr + unique int id: @vararg_expansion_expr, + int sub_expr: @expr_or_none ref +); + +abi_safe_conversion_exprs( //dir=expr + unique int id: @abi_safe_conversion_expr +); + +any_hashable_erasure_exprs( //dir=expr + unique int id: @any_hashable_erasure_expr +); + +archetype_to_super_exprs( //dir=expr + unique int id: @archetype_to_super_expr +); + +array_exprs( //dir=expr + unique int id: @array_expr +); + +#keyset[id, index] +array_expr_elements( //dir=expr + int id: @array_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +array_to_pointer_exprs( //dir=expr + unique int id: @array_to_pointer_expr +); + +auto_closure_exprs( //dir=expr + unique int id: @auto_closure_expr +); + +await_exprs( //dir=expr + unique int id: @await_expr +); + +binary_exprs( //dir=expr + unique int id: @binary_expr +); + +borrow_exprs( //dir=expr + unique int id: @borrow_expr +); + +bridge_from_obj_c_exprs( //dir=expr + unique int id: @bridge_from_obj_c_expr +); + +bridge_to_obj_c_exprs( //dir=expr + unique int id: @bridge_to_obj_c_expr +); + +@builtin_literal_expr = + @boolean_literal_expr +| @magic_identifier_literal_expr +| @number_literal_expr +| @string_literal_expr +; + +call_exprs( //dir=expr + unique int id: @call_expr +); + +@checked_cast_expr = + @conditional_checked_cast_expr +| @forced_checked_cast_expr +| @is_expr +; + +class_metatype_to_object_exprs( //dir=expr + unique int id: @class_metatype_to_object_expr +); + +coerce_exprs( //dir=expr + unique int id: @coerce_expr +); + +collection_upcast_conversion_exprs( //dir=expr + unique int id: @collection_upcast_conversion_expr +); + +conditional_bridge_from_obj_c_exprs( //dir=expr + unique int id: @conditional_bridge_from_obj_c_expr +); + +covariant_function_conversion_exprs( //dir=expr + unique int id: @covariant_function_conversion_expr +); + +covariant_return_conversion_exprs( //dir=expr + unique int id: @covariant_return_conversion_expr +); + +derived_to_base_exprs( //dir=expr + unique int id: @derived_to_base_expr +); + +destructure_tuple_exprs( //dir=expr + unique int id: @destructure_tuple_expr +); + +dictionary_exprs( //dir=expr + unique int id: @dictionary_expr +); + +#keyset[id, index] +dictionary_expr_elements( //dir=expr + int id: @dictionary_expr ref, + int index: int ref, + int element: @expr_or_none ref +); + +differentiable_function_exprs( //dir=expr + unique int id: @differentiable_function_expr +); + +differentiable_function_extract_original_exprs( //dir=expr + unique int id: @differentiable_function_extract_original_expr +); + +dot_self_exprs( //dir=expr + unique int id: @dot_self_expr +); + +@dynamic_lookup_expr = + @dynamic_member_ref_expr +| @dynamic_subscript_expr +; + +erasure_exprs( //dir=expr + unique int id: @erasure_expr +); + +existential_metatype_to_object_exprs( //dir=expr + unique int id: @existential_metatype_to_object_expr +); + +explicit_closure_exprs( //dir=expr + unique int id: @explicit_closure_expr +); + +force_try_exprs( //dir=expr + unique int id: @force_try_expr +); + +foreign_object_conversion_exprs( //dir=expr + unique int id: @foreign_object_conversion_expr +); + +function_conversion_exprs( //dir=expr + unique int id: @function_conversion_expr +); + +in_out_to_pointer_exprs( //dir=expr + unique int id: @in_out_to_pointer_expr +); + +inject_into_optional_exprs( //dir=expr + unique int id: @inject_into_optional_expr +); + +interpolated_string_literal_exprs( //dir=expr + unique int id: @interpolated_string_literal_expr +); + +#keyset[id] +interpolated_string_literal_expr_interpolation_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int interpolation_expr: @opaque_value_expr_or_none ref +); + +#keyset[id] +interpolated_string_literal_expr_appending_exprs( //dir=expr + int id: @interpolated_string_literal_expr ref, + int appending_expr: @tap_expr_or_none ref +); + +linear_function_exprs( //dir=expr + unique int id: @linear_function_expr +); + +linear_function_extract_original_exprs( //dir=expr + unique int id: @linear_function_extract_original_expr +); + +linear_to_differentiable_function_exprs( //dir=expr + unique int id: @linear_to_differentiable_function_expr +); + +load_exprs( //dir=expr + unique int id: @load_expr +); + +member_ref_exprs( //dir=expr + unique int id: @member_ref_expr +); + +#keyset[id] +member_ref_expr_has_direct_to_storage_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_ordinary_semantics( //dir=expr + int id: @member_ref_expr ref +); + +#keyset[id] +member_ref_expr_has_distributed_thunk_semantics( //dir=expr + int id: @member_ref_expr ref +); + +metatype_conversion_exprs( //dir=expr + unique int id: @metatype_conversion_expr +); + +nil_literal_exprs( //dir=expr + unique int id: @nil_literal_expr +); + +object_literal_exprs( //dir=expr + unique int id: @object_literal_expr, + int kind: int ref +); + +#keyset[id, index] +object_literal_expr_arguments( //dir=expr + int id: @object_literal_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +optional_try_exprs( //dir=expr + unique int id: @optional_try_expr +); + +paren_exprs( //dir=expr + unique int id: @paren_expr +); + +pointer_to_pointer_exprs( //dir=expr + unique int id: @pointer_to_pointer_expr +); + +postfix_unary_exprs( //dir=expr + unique int id: @postfix_unary_expr +); + +prefix_unary_exprs( //dir=expr + unique int id: @prefix_unary_expr +); + +protocol_metatype_to_object_exprs( //dir=expr + unique int id: @protocol_metatype_to_object_expr +); + +regex_literal_exprs( //dir=expr + unique int id: @regex_literal_expr, + string pattern: string ref, + int version: int ref +); + +@self_apply_expr = + @dot_syntax_call_expr +| @initializer_ref_call_expr +; + +#keyset[id] +self_apply_exprs( //dir=expr + int id: @self_apply_expr ref, + int base: @expr_or_none ref +); + +string_to_pointer_exprs( //dir=expr + unique int id: @string_to_pointer_expr +); + +subscript_exprs( //dir=expr + unique int id: @subscript_expr +); + +#keyset[id, index] +subscript_expr_arguments( //dir=expr + int id: @subscript_expr ref, + int index: int ref, + int argument: @argument_or_none ref +); + +#keyset[id] +subscript_expr_has_direct_to_storage_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_direct_to_implementation_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_ordinary_semantics( //dir=expr + int id: @subscript_expr ref +); + +#keyset[id] +subscript_expr_has_distributed_thunk_semantics( //dir=expr + int id: @subscript_expr ref +); + +try_exprs( //dir=expr + unique int id: @try_expr +); + +underlying_to_opaque_exprs( //dir=expr + unique int id: @underlying_to_opaque_expr +); + +unevaluated_instance_exprs( //dir=expr + unique int id: @unevaluated_instance_expr +); + +unresolved_member_chain_result_exprs( //dir=expr + unique int id: @unresolved_member_chain_result_expr +); + +unresolved_type_conversion_exprs( //dir=expr + unique int id: @unresolved_type_conversion_expr +); + +boolean_literal_exprs( //dir=expr + unique int id: @boolean_literal_expr, + boolean value: boolean ref +); + +conditional_checked_cast_exprs( //dir=expr + unique int id: @conditional_checked_cast_expr +); + +dot_syntax_call_exprs( //dir=expr + unique int id: @dot_syntax_call_expr +); + +dynamic_member_ref_exprs( //dir=expr + unique int id: @dynamic_member_ref_expr +); + +dynamic_subscript_exprs( //dir=expr + unique int id: @dynamic_subscript_expr +); + +forced_checked_cast_exprs( //dir=expr + unique int id: @forced_checked_cast_expr +); + +initializer_ref_call_exprs( //dir=expr + unique int id: @initializer_ref_call_expr +); + +is_exprs( //dir=expr + unique int id: @is_expr +); + +magic_identifier_literal_exprs( //dir=expr + unique int id: @magic_identifier_literal_expr, + string kind: string ref +); + +@number_literal_expr = + @float_literal_expr +| @integer_literal_expr +; + +string_literal_exprs( //dir=expr + unique int id: @string_literal_expr, + string value: string ref +); + +float_literal_exprs( //dir=expr + unique int id: @float_literal_expr, + string string_value: string ref +); + +integer_literal_exprs( //dir=expr + unique int id: @integer_literal_expr, + string string_value: string ref +); + +@pattern = + @any_pattern +| @binding_pattern +| @bool_pattern +| @enum_element_pattern +| @expr_pattern +| @is_pattern +| @named_pattern +| @optional_some_pattern +| @paren_pattern +| @tuple_pattern +| @typed_pattern +; + +#keyset[id] +pattern_types( //dir=pattern + int id: @pattern ref, + int type_: @type_or_none ref +); + +any_patterns( //dir=pattern + unique int id: @any_pattern +); + +binding_patterns( //dir=pattern + unique int id: @binding_pattern, + int sub_pattern: @pattern_or_none ref +); + +bool_patterns( //dir=pattern + unique int id: @bool_pattern, + boolean value: boolean ref +); + +enum_element_patterns( //dir=pattern + unique int id: @enum_element_pattern, + int element: @enum_element_decl_or_none ref +); + +#keyset[id] +enum_element_pattern_sub_patterns( //dir=pattern + int id: @enum_element_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +expr_patterns( //dir=pattern + unique int id: @expr_pattern, + int sub_expr: @expr_or_none ref +); + +is_patterns( //dir=pattern + unique int id: @is_pattern +); + +#keyset[id] +is_pattern_cast_type_reprs( //dir=pattern + int id: @is_pattern ref, + int cast_type_repr: @type_repr_or_none ref +); + +#keyset[id] +is_pattern_sub_patterns( //dir=pattern + int id: @is_pattern ref, + int sub_pattern: @pattern_or_none ref +); + +named_patterns( //dir=pattern + unique int id: @named_pattern, + int var_decl: @var_decl_or_none ref +); + +optional_some_patterns( //dir=pattern + unique int id: @optional_some_pattern, + int sub_pattern: @pattern_or_none ref +); + +paren_patterns( //dir=pattern + unique int id: @paren_pattern, + int sub_pattern: @pattern_or_none ref +); + +tuple_patterns( //dir=pattern + unique int id: @tuple_pattern +); + +#keyset[id, index] +tuple_pattern_elements( //dir=pattern + int id: @tuple_pattern ref, + int index: int ref, + int element: @pattern_or_none ref +); + +typed_patterns( //dir=pattern + unique int id: @typed_pattern, + int sub_pattern: @pattern_or_none ref +); + +#keyset[id] +typed_pattern_type_reprs( //dir=pattern + int id: @typed_pattern ref, + int type_repr: @type_repr_or_none ref +); + +case_label_items( //dir=stmt + unique int id: @case_label_item, + int pattern: @pattern_or_none ref +); + +#keyset[id] +case_label_item_guards( //dir=stmt + int id: @case_label_item ref, + int guard: @expr_or_none ref +); + +condition_elements( //dir=stmt + unique int id: @condition_element +); + +#keyset[id] +condition_element_booleans( //dir=stmt + int id: @condition_element ref, + int boolean_: @expr_or_none ref +); + +#keyset[id] +condition_element_patterns( //dir=stmt + int id: @condition_element ref, + int pattern: @pattern_or_none ref +); + +#keyset[id] +condition_element_initializers( //dir=stmt + int id: @condition_element ref, + int initializer: @expr_or_none ref +); + +#keyset[id] +condition_element_availabilities( //dir=stmt + int id: @condition_element ref, + int availability: @availability_info_or_none ref +); + +@stmt = + @brace_stmt +| @break_stmt +| @case_stmt +| @continue_stmt +| @defer_stmt +| @discard_stmt +| @fail_stmt +| @fallthrough_stmt +| @labeled_stmt +| @pound_assert_stmt +| @return_stmt +| @then_stmt +| @throw_stmt +| @yield_stmt +; + +stmt_conditions( //dir=stmt + unique int id: @stmt_condition +); + +#keyset[id, index] +stmt_condition_elements( //dir=stmt + int id: @stmt_condition ref, + int index: int ref, + int element: @condition_element_or_none ref +); + +brace_stmts( //dir=stmt + unique int id: @brace_stmt +); + +#keyset[id, index] +brace_stmt_elements( //dir=stmt + int id: @brace_stmt ref, + int index: int ref, + int element: @ast_node_or_none ref +); + +break_stmts( //dir=stmt + unique int id: @break_stmt +); + +#keyset[id] +break_stmt_target_names( //dir=stmt + int id: @break_stmt ref, + string target_name: string ref +); + +#keyset[id] +break_stmt_targets( //dir=stmt + int id: @break_stmt ref, + int target: @stmt_or_none ref +); + +case_stmts( //dir=stmt + unique int id: @case_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +case_stmt_labels( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int label: @case_label_item_or_none ref +); + +#keyset[id, index] +case_stmt_variables( //dir=stmt + int id: @case_stmt ref, + int index: int ref, + int variable: @var_decl_or_none ref +); + +continue_stmts( //dir=stmt + unique int id: @continue_stmt +); + +#keyset[id] +continue_stmt_target_names( //dir=stmt + int id: @continue_stmt ref, + string target_name: string ref +); + +#keyset[id] +continue_stmt_targets( //dir=stmt + int id: @continue_stmt ref, + int target: @stmt_or_none ref +); + +defer_stmts( //dir=stmt + unique int id: @defer_stmt, + int body: @brace_stmt_or_none ref +); + +discard_stmts( //dir=stmt + unique int id: @discard_stmt, + int sub_expr: @expr_or_none ref +); + +fail_stmts( //dir=stmt + unique int id: @fail_stmt +); + +fallthrough_stmts( //dir=stmt + unique int id: @fallthrough_stmt, + int fallthrough_source: @case_stmt_or_none ref, + int fallthrough_dest: @case_stmt_or_none ref +); + +@labeled_stmt = + @do_catch_stmt +| @do_stmt +| @for_each_stmt +| @labeled_conditional_stmt +| @repeat_while_stmt +| @switch_stmt +; + +#keyset[id] +labeled_stmt_labels( //dir=stmt + int id: @labeled_stmt ref, + string label: string ref +); + +pound_assert_stmts( //dir=stmt + unique int id: @pound_assert_stmt, + int condition: @expr_or_none ref, + string message: string ref +); + +return_stmts( //dir=stmt + unique int id: @return_stmt +); + +#keyset[id] +return_stmt_results( //dir=stmt + int id: @return_stmt ref, + int result: @expr_or_none ref +); + +then_stmts( //dir=stmt + unique int id: @then_stmt, + int result: @expr_or_none ref +); + +throw_stmts( //dir=stmt + unique int id: @throw_stmt, + int sub_expr: @expr_or_none ref +); + +yield_stmts( //dir=stmt + unique int id: @yield_stmt +); + +#keyset[id, index] +yield_stmt_results( //dir=stmt + int id: @yield_stmt ref, + int index: int ref, + int result: @expr_or_none ref +); + +do_catch_stmts( //dir=stmt + unique int id: @do_catch_stmt, + int body: @stmt_or_none ref +); + +#keyset[id, index] +do_catch_stmt_catches( //dir=stmt + int id: @do_catch_stmt ref, + int index: int ref, + int catch: @case_stmt_or_none ref +); + +do_stmts( //dir=stmt + unique int id: @do_stmt, + int body: @brace_stmt_or_none ref +); + +for_each_stmts( //dir=stmt + unique int id: @for_each_stmt, + int pattern: @pattern_or_none ref, + int body: @brace_stmt_or_none ref +); + +#keyset[id] +for_each_stmt_wheres( //dir=stmt + int id: @for_each_stmt ref, + int where: @expr_or_none ref +); + +#keyset[id] +for_each_stmt_iterator_vars( //dir=stmt + int id: @for_each_stmt ref, + int iteratorVar: @pattern_binding_decl_or_none ref +); + +#keyset[id] +for_each_stmt_next_calls( //dir=stmt + int id: @for_each_stmt ref, + int nextCall: @expr_or_none ref +); + +@labeled_conditional_stmt = + @guard_stmt +| @if_stmt +| @while_stmt +; + +#keyset[id] +labeled_conditional_stmts( //dir=stmt + int id: @labeled_conditional_stmt ref, + int condition: @stmt_condition_or_none ref +); + +repeat_while_stmts( //dir=stmt + unique int id: @repeat_while_stmt, + int condition: @expr_or_none ref, + int body: @stmt_or_none ref +); + +switch_stmts( //dir=stmt + unique int id: @switch_stmt, + int expr: @expr_or_none ref +); + +#keyset[id, index] +switch_stmt_cases( //dir=stmt + int id: @switch_stmt ref, + int index: int ref, + int case_: @case_stmt_or_none ref +); + +guard_stmts( //dir=stmt + unique int id: @guard_stmt, + int body: @brace_stmt_or_none ref +); + +if_stmts( //dir=stmt + unique int id: @if_stmt, + int then: @stmt_or_none ref +); + +#keyset[id] +if_stmt_elses( //dir=stmt + int id: @if_stmt ref, + int else: @stmt_or_none ref +); + +while_stmts( //dir=stmt + unique int id: @while_stmt, + int body: @stmt_or_none ref +); + +@type = + @any_function_type +| @any_generic_type +| @any_metatype_type +| @builtin_type +| @dependent_member_type +| @dynamic_self_type +| @error_type +| @existential_type +| @in_out_type +| @l_value_type +| @module_type +| @pack_element_type +| @pack_expansion_type +| @pack_type +| @parameterized_protocol_type +| @protocol_composition_type +| @reference_storage_type +| @substitutable_type +| @sugar_type +| @tuple_type +| @unresolved_type +; + +#keyset[id] +types( //dir=type + int id: @type ref, + string name: string ref, + int canonical_type: @type_or_none ref +); + +type_reprs( //dir=type + unique int id: @type_repr, + int type_: @type_or_none ref +); + +@any_function_type = + @function_type +| @generic_function_type +; + +#keyset[id] +any_function_types( //dir=type + int id: @any_function_type ref, + int result: @type_or_none ref +); + +#keyset[id, index] +any_function_type_param_types( //dir=type + int id: @any_function_type ref, + int index: int ref, + int param_type: @type_or_none ref +); + +#keyset[id] +any_function_type_is_throwing( //dir=type + int id: @any_function_type ref +); + +#keyset[id] +any_function_type_is_async( //dir=type + int id: @any_function_type ref +); + +@any_generic_type = + @nominal_or_bound_generic_nominal_type +| @unbound_generic_type +; + +#keyset[id] +any_generic_types( //dir=type + int id: @any_generic_type ref, + int declaration: @generic_type_decl_or_none ref +); + +#keyset[id] +any_generic_type_parents( //dir=type + int id: @any_generic_type ref, + int parent: @type_or_none ref +); + +@any_metatype_type = + @existential_metatype_type +| @metatype_type +; + +@builtin_type = + @any_builtin_integer_type +| @builtin_bridge_object_type +| @builtin_default_actor_storage_type +| @builtin_executor_type +| @builtin_float_type +| @builtin_job_type +| @builtin_native_object_type +| @builtin_raw_pointer_type +| @builtin_raw_unsafe_continuation_type +| @builtin_unsafe_value_buffer_type +| @builtin_vector_type +; + +dependent_member_types( //dir=type + unique int id: @dependent_member_type, + int base_type: @type_or_none ref, + int associated_type_decl: @associated_type_decl_or_none ref +); + +dynamic_self_types( //dir=type + unique int id: @dynamic_self_type, + int static_self_type: @type_or_none ref +); + +error_types( //dir=type + unique int id: @error_type +); + +existential_types( //dir=type + unique int id: @existential_type, + int constraint: @type_or_none ref +); + +in_out_types( //dir=type + unique int id: @in_out_type, + int object_type: @type_or_none ref +); + +l_value_types( //dir=type + unique int id: @l_value_type, + int object_type: @type_or_none ref +); + +module_types( //dir=type + unique int id: @module_type, + int module: @module_decl_or_none ref +); + +pack_element_types( //dir=type + unique int id: @pack_element_type, + int pack_type: @type_or_none ref +); + +pack_expansion_types( //dir=type + unique int id: @pack_expansion_type, + int pattern_type: @type_or_none ref, + int count_type: @type_or_none ref +); + +pack_types( //dir=type + unique int id: @pack_type +); + +#keyset[id, index] +pack_type_elements( //dir=type + int id: @pack_type ref, + int index: int ref, + int element: @type_or_none ref +); + +parameterized_protocol_types( //dir=type + unique int id: @parameterized_protocol_type, + int base: @protocol_type_or_none ref +); + +#keyset[id, index] +parameterized_protocol_type_args( //dir=type + int id: @parameterized_protocol_type ref, + int index: int ref, + int arg: @type_or_none ref +); + +protocol_composition_types( //dir=type + unique int id: @protocol_composition_type +); + +#keyset[id, index] +protocol_composition_type_members( //dir=type + int id: @protocol_composition_type ref, + int index: int ref, + int member: @type_or_none ref +); + +@reference_storage_type = + @unmanaged_storage_type +| @unowned_storage_type +| @weak_storage_type +; + +#keyset[id] +reference_storage_types( //dir=type + int id: @reference_storage_type ref, + int referent_type: @type_or_none ref +); + +@substitutable_type = + @archetype_type +| @generic_type_param_type +; + +@sugar_type = + @paren_type +| @syntax_sugar_type +| @type_alias_type +; + +tuple_types( //dir=type + unique int id: @tuple_type +); + +#keyset[id, index] +tuple_type_types( //dir=type + int id: @tuple_type ref, + int index: int ref, + int type_: @type_or_none ref +); + +#keyset[id, index] +tuple_type_names( //dir=type + int id: @tuple_type ref, + int index: int ref, + string name: string ref +); + +unresolved_types( //dir=type + unique int id: @unresolved_type +); + +@any_builtin_integer_type = + @builtin_integer_literal_type +| @builtin_integer_type +; + +@archetype_type = + @local_archetype_type +| @opaque_type_archetype_type +| @pack_archetype_type +| @primary_archetype_type +; + +#keyset[id] +archetype_types( //dir=type + int id: @archetype_type ref, + int interface_type: @type_or_none ref +); + +#keyset[id] +archetype_type_superclasses( //dir=type + int id: @archetype_type ref, + int superclass: @type_or_none ref +); + +#keyset[id, index] +archetype_type_protocols( //dir=type + int id: @archetype_type ref, + int index: int ref, + int protocol: @protocol_decl_or_none ref +); + +builtin_bridge_object_types( //dir=type + unique int id: @builtin_bridge_object_type +); + +builtin_default_actor_storage_types( //dir=type + unique int id: @builtin_default_actor_storage_type +); + +builtin_executor_types( //dir=type + unique int id: @builtin_executor_type +); + +builtin_float_types( //dir=type + unique int id: @builtin_float_type +); + +builtin_job_types( //dir=type + unique int id: @builtin_job_type +); + +builtin_native_object_types( //dir=type + unique int id: @builtin_native_object_type +); + +builtin_raw_pointer_types( //dir=type + unique int id: @builtin_raw_pointer_type +); + +builtin_raw_unsafe_continuation_types( //dir=type + unique int id: @builtin_raw_unsafe_continuation_type +); + +builtin_unsafe_value_buffer_types( //dir=type + unique int id: @builtin_unsafe_value_buffer_type +); + +builtin_vector_types( //dir=type + unique int id: @builtin_vector_type +); + +existential_metatype_types( //dir=type + unique int id: @existential_metatype_type +); + +function_types( //dir=type + unique int id: @function_type +); + +generic_function_types( //dir=type + unique int id: @generic_function_type +); + +#keyset[id, index] +generic_function_type_generic_params( //dir=type + int id: @generic_function_type ref, + int index: int ref, + int generic_param: @generic_type_param_type_or_none ref +); + +generic_type_param_types( //dir=type + unique int id: @generic_type_param_type +); + +metatype_types( //dir=type + unique int id: @metatype_type +); + +@nominal_or_bound_generic_nominal_type = + @bound_generic_type +| @nominal_type +; + +paren_types( //dir=type + unique int id: @paren_type, + int type_: @type_or_none ref +); + +@syntax_sugar_type = + @dictionary_type +| @unary_syntax_sugar_type +; + +type_alias_types( //dir=type + unique int id: @type_alias_type, + int decl: @type_alias_decl_or_none ref +); + +unbound_generic_types( //dir=type + unique int id: @unbound_generic_type +); + +unmanaged_storage_types( //dir=type + unique int id: @unmanaged_storage_type +); + +unowned_storage_types( //dir=type + unique int id: @unowned_storage_type +); + +weak_storage_types( //dir=type + unique int id: @weak_storage_type +); + +@bound_generic_type = + @bound_generic_class_type +| @bound_generic_enum_type +| @bound_generic_struct_type +; + +#keyset[id, index] +bound_generic_type_arg_types( //dir=type + int id: @bound_generic_type ref, + int index: int ref, + int arg_type: @type_or_none ref +); + +builtin_integer_literal_types( //dir=type + unique int id: @builtin_integer_literal_type +); + +builtin_integer_types( //dir=type + unique int id: @builtin_integer_type +); + +#keyset[id] +builtin_integer_type_widths( //dir=type + int id: @builtin_integer_type ref, + int width: int ref +); + +dictionary_types( //dir=type + unique int id: @dictionary_type, + int key_type: @type_or_none ref, + int value_type: @type_or_none ref +); + +@local_archetype_type = + @element_archetype_type +| @opened_archetype_type +; + +@nominal_type = + @class_type +| @enum_type +| @protocol_type +| @struct_type +; + +opaque_type_archetype_types( //dir=type + unique int id: @opaque_type_archetype_type, + int declaration: @opaque_type_decl_or_none ref +); + +pack_archetype_types( //dir=type + unique int id: @pack_archetype_type +); + +primary_archetype_types( //dir=type + unique int id: @primary_archetype_type +); + +@unary_syntax_sugar_type = + @array_slice_type +| @optional_type +| @variadic_sequence_type +; + +#keyset[id] +unary_syntax_sugar_types( //dir=type + int id: @unary_syntax_sugar_type ref, + int base_type: @type_or_none ref +); + +array_slice_types( //dir=type + unique int id: @array_slice_type +); + +bound_generic_class_types( //dir=type + unique int id: @bound_generic_class_type +); + +bound_generic_enum_types( //dir=type + unique int id: @bound_generic_enum_type +); + +bound_generic_struct_types( //dir=type + unique int id: @bound_generic_struct_type +); + +class_types( //dir=type + unique int id: @class_type +); + +element_archetype_types( //dir=type + unique int id: @element_archetype_type +); + +enum_types( //dir=type + unique int id: @enum_type +); + +opened_archetype_types( //dir=type + unique int id: @opened_archetype_type +); + +optional_types( //dir=type + unique int id: @optional_type +); + +protocol_types( //dir=type + unique int id: @protocol_type +); + +struct_types( //dir=type + unique int id: @struct_type +); + +variadic_sequence_types( //dir=type + unique int id: @variadic_sequence_type +); + +@accessor_or_none = + @accessor +| @unspecified_element +; + +@argument_or_none = + @argument +| @unspecified_element +; + +@associated_type_decl_or_none = + @associated_type_decl +| @unspecified_element +; + +@ast_node_or_none = + @ast_node +| @unspecified_element +; + +@availability_info_or_none = + @availability_info +| @unspecified_element +; + +@availability_spec_or_none = + @availability_spec +| @unspecified_element +; + +@brace_stmt_or_none = + @brace_stmt +| @unspecified_element +; + +@captured_decl_or_none = + @captured_decl +| @unspecified_element +; + +@case_label_item_or_none = + @case_label_item +| @unspecified_element +; + +@case_stmt_or_none = + @case_stmt +| @unspecified_element +; + +@closure_expr_or_none = + @closure_expr +| @unspecified_element +; + +@condition_element_or_none = + @condition_element +| @unspecified_element +; + +@decl_or_none = + @decl +| @unspecified_element +; + +@enum_element_decl_or_none = + @enum_element_decl +| @unspecified_element +; + +@expr_or_none = + @expr +| @unspecified_element +; + +@file_or_none = + @file +| @unspecified_element +; + +@function_or_none = + @function +| @unspecified_element +; + +@generic_type_decl_or_none = + @generic_type_decl +| @unspecified_element +; + +@generic_type_param_decl_or_none = + @generic_type_param_decl +| @unspecified_element +; + +@generic_type_param_type_or_none = + @generic_type_param_type +| @unspecified_element +; + +@initializer_or_none = + @initializer +| @unspecified_element +; + +@key_path_component_or_none = + @key_path_component +| @unspecified_element +; + +@location_or_none = + @location +| @unspecified_element +; + +@macro_role_or_none = + @macro_role +| @unspecified_element +; + +@module_decl_or_none = + @module_decl +| @unspecified_element +; + +@nominal_type_decl_or_none = + @nominal_type_decl +| @unspecified_element +; + +@opaque_type_decl_or_none = + @opaque_type_decl +| @unspecified_element +; + +@opaque_value_expr_or_none = + @opaque_value_expr +| @unspecified_element +; + +@param_decl_or_none = + @param_decl +| @unspecified_element +; + +@pattern_or_none = + @pattern +| @unspecified_element +; + +@pattern_binding_decl_or_none = + @pattern_binding_decl +| @unspecified_element +; + +@precedence_group_decl_or_none = + @precedence_group_decl +| @unspecified_element +; + +@protocol_decl_or_none = + @protocol_decl +| @unspecified_element +; + +@protocol_type_or_none = + @protocol_type +| @unspecified_element +; + +@stmt_or_none = + @stmt +| @unspecified_element +; + +@stmt_condition_or_none = + @stmt_condition +| @unspecified_element +; + +@string_literal_expr_or_none = + @string_literal_expr +| @unspecified_element +; + +@tap_expr_or_none = + @tap_expr +| @unspecified_element +; + +@type_or_none = + @type +| @unspecified_element +; + +@type_alias_decl_or_none = + @type_alias_decl +| @unspecified_element +; + +@type_expr_or_none = + @type_expr +| @unspecified_element +; + +@type_repr_or_none = + @type_repr +| @unspecified_element +; + +@value_decl_or_none = + @unspecified_element +| @value_decl +; + +@var_decl_or_none = + @unspecified_element +| @var_decl +; diff --git a/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties new file mode 100644 index 00000000000..0f8b0c447b5 --- /dev/null +++ b/swift/ql/lib/upgrades/60be249ad164f6e4b43c203323f1b3956dc97c2f/upgrade.properties @@ -0,0 +1,2 @@ +description: Add `ThenStmt` wrapper nodes. +compatibility: full From a34bb2608ddd03b1a4075291f1a4e9e56e651857 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 28 Mar 2024 11:57:09 +0100 Subject: [PATCH 381/497] Swift: fix ql format --- .../15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql index 3246fda8899..5870b93ac9f 100644 --- a/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql +++ b/swift/downgrades/15a630f68e14f053932cf6a23797f43d958eedc9/downgrade.ql @@ -5,8 +5,7 @@ class Element extends @element { query predicate new_unspecified_elements(Element e, string property, string error) { unspecified_elements(e, property, error) or - error = - "ThenStmt nodes removed during database downgrade. Please update your CodeQL code." and + error = "ThenStmt nodes removed during database downgrade. Please update your CodeQL code." and property = "" and then_stmts(e, _) } From 977ac71b26d103a5d8ea319275298170616ff709 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 28 Mar 2024 11:15:30 +0000 Subject: [PATCH 382/497] Update toolchain_test.go Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/extractor/toolchain/toolchain_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/extractor/toolchain/toolchain_test.go b/go/extractor/toolchain/toolchain_test.go index 18ca7a6601b..05b52af5d52 100644 --- a/go/extractor/toolchain/toolchain_test.go +++ b/go/extractor/toolchain/toolchain_test.go @@ -17,6 +17,6 @@ func TestParseGoVersion(t *testing.T) { func TestHasGoVersion(t *testing.T) { if HasGoVersion("1.21") { - t.Error("Exepected HasGoVersion(\"1.21\" to be false, but got true)") + t.Error("Exepected HasGoVersion(\"1.21\") to be false, but got true") } } From f6c22d466fc05c7e09e94b648e873d1645a9f000 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 28 Mar 2024 13:32:02 +0000 Subject: [PATCH 383/497] Update toolchain_test.go Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/extractor/toolchain/toolchain_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/extractor/toolchain/toolchain_test.go b/go/extractor/toolchain/toolchain_test.go index 05b52af5d52..e0f70a283e6 100644 --- a/go/extractor/toolchain/toolchain_test.go +++ b/go/extractor/toolchain/toolchain_test.go @@ -17,6 +17,6 @@ func TestParseGoVersion(t *testing.T) { func TestHasGoVersion(t *testing.T) { if HasGoVersion("1.21") { - t.Error("Exepected HasGoVersion(\"1.21\") to be false, but got true") + t.Error("Expected HasGoVersion(\"1.21\") to be false, but got true") } } From 24c4c3e06896edfcb69fa92f1ad2b640b7589f25 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Mar 2024 15:07:30 +0000 Subject: [PATCH 384/497] Kotlin 2: Accept a test change With: open class Root {} class Subclass1: Root() {} fun typeTests(x: Root, y: Subclass1) { val y1: Subclass1 = if (x is Subclass1) { x } else { y } } we now get a slightly different AST, which means we no longer need to insert a StmtExpr: BRANCH if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=.Subclass1 GET_VAR 'x: .Root declared in .typeTests' type=.Root origin=null - then: TYPE_OP type=.Subclass1 origin=IMPLICIT_CAST typeOperand=.Subclass1 - BLOCK type=.Root origin=null + then: BLOCK type=.Subclass1 origin=null + TYPE_OP type=.Subclass1 origin=IMPLICIT_CAST typeOperand=.Subclass1 GET_VAR 'x: .Root declared in .typeTests' type=.Root origin=null --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 529a3d0b66b..efca4e24984 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1423,7 +1423,6 @@ | exprs.kt:160:29:160:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:29:160:42 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:160:29:160:42 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:160:45:160:49 | | exprs.kt:156:1:163:1 | typeTests | StmtExpr | | exprs.kt:160:47:160:47 | | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | | exprs.kt:160:47:160:47 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:160:47:160:47 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | From 96723b1a8ff84401b1d39e2b1a7b23184ec956e1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Mar 2024 15:11:19 +0000 Subject: [PATCH 385/497] Kotlin 2: Accept some loc changes --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index efca4e24984..e97c57b6ad5 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1379,7 +1379,6 @@ | exprs.kt:137:12:137:23 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:137:23:137:23 | 0 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:138:9:138:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:138:9:138:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | ...=... | exprs.kt:4:1:142:1 | topLevelMethod | AssignExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | StmtExpr | | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | ImplicitCoercionToUnitExpr | @@ -1388,6 +1387,7 @@ | exprs.kt:138:9:138:18 | | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:138:9:138:18 | Unit | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | | exprs.kt:138:9:138:18 | dec(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | +| exprs.kt:138:9:138:18 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:141:12:141:14 | 123 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:141:18:141:20 | 456 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | @@ -1430,7 +1430,6 @@ | exprs.kt:160:58:160:58 | y | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:161:5:161:13 | q | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:161:13:161:13 | 1 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | -| exprs.kt:162:5:162:48 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:162:5:162:48 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:162:9:162:9 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:9:162:22 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | @@ -1438,8 +1437,9 @@ | exprs.kt:162:27:162:31 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | | exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:31:162:31 | 2 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | +| exprs.kt:162:40:162:48 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:162:42:162:46 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | -| exprs.kt:162:42:162:42 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | +| exprs.kt:162:42:162:46 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:46:162:46 | 3 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:165:1:172:1 | Unit | file://:0:0:0:0 | | TypeAccess | | exprs.kt:165:9:165:18 | Polygon | file://:0:0:0:0 | | TypeAccess | From 0fdc71bf576a6d5e6f5c16f41b00a0bcee3330f5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Mar 2024 15:23:27 +0000 Subject: [PATCH 386/497] Kotlin 2: Accept a test change For if(r != null) { val r2: Rectangle = r in Kotlin 2 mode, there is no IMPLICIT_NOTNULL check in Kotlin 2 mode: then: BLOCK type=kotlin.Unit origin=null VAR name:r2 type:java.awt.Rectangle [val] - TYPE_OP type=java.awt.Rectangle origin=IMPLICIT_NOTNULL typeOperand=java.awt.Rectangle - GET_VAR 'val r: @[FlexibleNullability] java.awt.Rectangle? [val] declared in .foo' type=@[FlexibleNullability] java.awt.Rectangle? origin=null + GET_VAR 'val r: @[FlexibleNullability] java.awt.Rectangle? [val] declared in .foo' type=@[FlexibleNullability] java.awt.Rectangle? origin=null VAR name:height type:kotlin.Int [val] GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:height type:kotlin.Int visibility:public' type=kotlin.Int origin=null receiver: GET_VAR 'val r2: java.awt.Rectangle [val] declared in .foo' type=java.awt.Rectangle origin=null --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index e97c57b6ad5..9633b6e47df 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1451,8 +1451,6 @@ | exprs.kt:167:8:167:16 | ... (value not-equals) ... | exprs.kt:165:1:172:1 | foo | ValueNEExpr | | exprs.kt:167:13:167:16 | null | exprs.kt:165:1:172:1 | foo | NullLiteral | | exprs.kt:168:9:168:29 | r2 | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | -| exprs.kt:168:29:168:29 | | exprs.kt:165:1:172:1 | foo | ImplicitNotNullExpr | -| exprs.kt:168:29:168:29 | Rectangle | exprs.kt:165:1:172:1 | foo | TypeAccess | | exprs.kt:168:29:168:29 | r | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:169:9:169:30 | height | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | | exprs.kt:169:22:169:23 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | From 568fba6940bf41a65c2ab995f68cc4ad1e8baf56 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Mar 2024 15:28:36 +0000 Subject: [PATCH 387/497] Kotlin 2: Accept some more test changes --- .../ql/test-kotlin2/library-tests/exprs/exprs.expected | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 9633b6e47df..4c2b25c5239 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1494,17 +1494,17 @@ | exprs.kt:175:25:175:28 | Direction | file://:0:0:0:0 | | TypeAccess | | exprs.kt:175:25:175:28 | Direction.EAST | exprs.kt:0:0:0:0 | | VarAccess | | exprs.kt:175:25:175:28 | new Direction(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | -| exprs.kt:178:1:182:1 | 0 | exprs.kt:178:6:182:1 | Color | IntegerLiteral | -| exprs.kt:178:1:182:1 | Color | exprs.kt:178:6:182:1 | Color | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Color[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:1:182:1 | Enum | exprs.kt:178:6:182:1 | Color | TypeAccess | | exprs.kt:178:1:182:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | -| exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | +| exprs.kt:178:17:178:30 | 0 | exprs.kt:178:17:178:30 | Color | IntegerLiteral | +| exprs.kt:178:17:178:30 | Color | exprs.kt:178:17:178:30 | Color | TypeAccess | +| exprs.kt:178:17:178:30 | Enum | exprs.kt:178:17:178:30 | Color | TypeAccess | +| exprs.kt:178:17:178:30 | new Enum(...) | exprs.kt:178:17:178:30 | Color | ClassInstanceExpr | +| exprs.kt:178:17:178:30 | null | exprs.kt:178:17:178:30 | Color | NullLiteral | | exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:17:178:30 | Color | KtInitializerAssignExpr | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:18:178:29 | int | file://:0:0:0:0 | | TypeAccess | From 3acdc73f22bae85e9cb7005e0a696b25773b6189 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Mar 2024 16:15:37 +0000 Subject: [PATCH 388/497] Kotlin 2: Accept some more location changes --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 529a3d0b66b..e6d5c19b8b6 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -121,8 +121,8 @@ | delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:9:23:31 | | TypeAccess | | delegatedProperties.kt:23:29:23:31 | String | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:9:23:31 | invoke | MethodCall | -| delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:29:23:31 | | MethodCall | +| delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:29:23:31 | invoke | MethodCall | +| delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:9:23:31 | | MethodCall | | delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | | delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:9:23:31 | | VarAccess | | delegatedProperties.kt:23:29:23:31 | new (...) | delegatedProperties.kt:23:29:23:31 | get | ClassInstanceExpr | @@ -158,8 +158,8 @@ | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:28:50:28:71 | KProperty | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:74:28:83 | int | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:29:17:29:24 | setCurValue(...) | delegatedProperties.kt:28:13:30:13 | setValue | MethodCall | -| delegatedProperties.kt:29:17:29:24 | this | delegatedProperties.kt:28:13:30:13 | setValue | ThisAccess | +| delegatedProperties.kt:29:17:29:32 | setCurValue(...) | delegatedProperties.kt:28:13:30:13 | setValue | MethodCall | +| delegatedProperties.kt:29:17:29:32 | this | delegatedProperties.kt:28:13:30:13 | setValue | ThisAccess | | delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:13:30:13 | setValue | VarAccess | | delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:9:33:47 | | PropertyRefExpr | | delegatedProperties.kt:33:30:33:47 | (...) | delegatedProperties.kt:33:30:33:47 | get | MethodCall | From 2f8c4df309a177c46aa5d2ad60919ebad815db62 Mon Sep 17 00:00:00 2001 From: Jami <57204504+jcogs33@users.noreply.github.com> Date: Thu, 28 Mar 2024 16:15:05 -0400 Subject: [PATCH 389/497] docs wording updates Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp | 6 +++--- java/ql/src/Security/CWE/CWE-552/UrlForward.ql | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp index 2b06a851a2b..71316385335 100644 --- a/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.qhelp @@ -11,9 +11,9 @@ can cause file information disclosure by allowing an attacker to access unauthor -

    To guard against untrusted URL forwarding, it is advisable to avoid putting user input -directly into a forwarded URL. Instead, maintain a list of authorized -URLs on the server; then choose from that list based on the user input provided.

    +

    To guard against untrusted URL forwarding, you should avoid putting user input +directly into a forwarded URL. Instead, you should maintain a list of authorized +URLs on the server, then choose from that list based on the user input provided.

    diff --git a/java/ql/src/Security/CWE/CWE-552/UrlForward.ql b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql index 95c540049a2..91e244a8152 100644 --- a/java/ql/src/Security/CWE/CWE-552/UrlForward.ql +++ b/java/ql/src/Security/CWE/CWE-552/UrlForward.ql @@ -1,6 +1,6 @@ /** * @name URL forward from a remote source - * @description URL forward based on unvalidated user-input + * @description URL forward based on unvalidated user input * may cause file information disclosure. * @kind path-problem * @problem.severity error From 919436efbb7fa53243e0482b763557141425abbf Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 14 Mar 2024 15:55:57 +0000 Subject: [PATCH 390/497] Remove df-gen models we have deliberately modeled Manual models always take precedence over generated models, so there is no point in keeping the generated models. These manual models were deliberately written to take precedence over the corresponding df-gen models. --- .../ql/lib/ext/generated/java.beans.model.yml | 4 - java/ql/lib/ext/generated/java.io.model.yml | 13 --- java/ql/lib/ext/generated/java.lang.model.yml | 18 --- java/ql/lib/ext/generated/java.net.model.yml | 9 -- .../lib/ext/generated/java.nio.file.model.yml | 37 ------ .../generated/java.security.cert.model.yml | 45 -------- .../lib/ext/generated/java.security.model.yml | 8 -- java/ql/lib/ext/generated/java.text.model.yml | 13 --- .../ext/generated/java.util.logging.model.yml | 2 - java/ql/lib/ext/generated/java.util.model.yml | 107 ------------------ .../ext/generated/java.util.prefs.model.yml | 17 --- .../ext/generated/java.util.regex.model.yml | 13 --- .../ext/generated/java.util.stream.model.yml | 5 - .../lib/ext/generated/javax.crypto.model.yml | 61 ---------- .../ext/generated/javax.crypto.spec.model.yml | 4 - 15 files changed, 356 deletions(-) diff --git a/java/ql/lib/ext/generated/java.beans.model.yml b/java/ql/lib/ext/generated/java.beans.model.yml index 1ae8e6c73b5..2767fb30102 100644 --- a/java/ql/lib/ext/generated/java.beans.model.yml +++ b/java/ql/lib/ext/generated/java.beans.model.yml @@ -122,10 +122,6 @@ extensions: - ["java.beans", "PropertyDescriptor", True, "setReadMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.beans", "PropertyDescriptor", True, "setWriteMethod", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.beans", "PropertyEditor", True, "addPropertyChangeListener", "(PropertyChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.beans", "PropertyEditor", True, "getAsText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.beans", "PropertyEditor", True, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.beans", "PropertyEditor", True, "setAsText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.beans", "PropertyEditor", True, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.beans", "PropertyEditorSupport", True, "PropertyEditorSupport", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.beans", "PropertyEditorSupport", True, "getSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.beans", "PropertyEditorSupport", True, "setSource", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.io.model.yml b/java/ql/lib/ext/generated/java.io.model.yml index 248971d2a5a..8ecad6c31d6 100644 --- a/java/ql/lib/ext/generated/java.io.model.yml +++ b/java/ql/lib/ext/generated/java.io.model.yml @@ -38,18 +38,6 @@ extensions: - ["java.io", "EOFException", True, "EOFException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.io", "Externalizable", True, "readExternal", "(ObjectInput)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.io", "Externalizable", True, "writeExternal", "(ObjectOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.io", "File", True, "createTempFile", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "createTempFile", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "listFiles", "(FileFilter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "listFiles", "(FilenameFilter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "File", True, "toURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.io", "FileInputStream", True, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.io", "FileInputStream", True, "getFD", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.io", "FileNotFoundException", True, "FileNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -90,7 +78,6 @@ extensions: - ["java.io", "LineNumberReader", True, "LineNumberReader", "(Reader,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.io", "NotActiveException", True, "NotActiveException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.io", "NotSerializableException", True, "NotSerializableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.io", "ObjectInput", True, "readObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.io", "ObjectInputFilter$Config", False, "createFilter", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.io", "ObjectInputFilter", True, "allowFilter", "(Predicate,ObjectInputFilter$Status)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.io", "ObjectInputFilter", True, "merge", "(ObjectInputFilter,ObjectInputFilter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.lang.model.yml b/java/ql/lib/ext/generated/java.lang.model.yml index c8af5bdc004..e9b8c6c85ea 100644 --- a/java/ql/lib/ext/generated/java.lang.model.yml +++ b/java/ql/lib/ext/generated/java.lang.model.yml @@ -22,17 +22,6 @@ extensions: - ["java.lang", "ClassCastException", True, "ClassCastException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "ClassCircularityError", True, "ClassCircularityError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "ClassFormatError", True, "ClassFormatError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "findResource", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getDefinedPackage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getDefinedPackage", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getSystemResource", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "getUnnamedModule", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "loadClass", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "loadClass", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "setClassAssertionStatus", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.lang", "ClassLoader", True, "setPackageAssertionStatus", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "ClassNotFoundException", True, "ClassNotFoundException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] @@ -200,16 +189,12 @@ extensions: - ["java.lang", "StackWalker$StackFrame", True, "toStackTraceElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "StackWalker", False, "getInstance", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.lang", "StackWalker", False, "getInstance", "(Set,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "String", False, "lines", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "StringIndexOutOfBoundsException", True, "StringIndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "System$LoggerFinder", True, "getLocalizedLogger", "(String,ResourceBundle,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "System", False, "getLogger", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "System", False, "getLogger", "(String,ResourceBundle)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "System", False, "getProperty", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "System", False, "setProperty", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "System", False, "setProperty", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "Thread", True, "Thread", "(Runnable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "Thread", True, "Thread", "(ThreadGroup,Runnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -240,8 +225,6 @@ extensions: - ["java.lang", "ThreadGroup", True, "enumerate", "(Thread[],boolean)", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] - ["java.lang", "ThreadGroup", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.lang", "ThreadGroup", True, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "Throwable", True, "fillInStackTrace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.lang", "Throwable", True, "printStackTrace", "(PrintWriter)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "TypeNotPresentException", True, "TypeNotPresentException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.lang", "TypeNotPresentException", True, "typeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -711,7 +694,6 @@ extensions: - ["java.lang", "ProcessHandle", "pid", "()", "summary", "df-generated"] - ["java.lang", "ProcessHandle", "supportsNormalTermination", "()", "summary", "df-generated"] - ["java.lang", "Readable", "read", "(CharBuffer)", "summary", "df-generated"] - - ["java.lang", "Runnable", "run", "()", "summary", "df-generated"] - ["java.lang", "Runtime$Version", "compareToIgnoreOptional", "(Runtime$Version)", "summary", "df-generated"] - ["java.lang", "Runtime$Version", "equalsIgnoreOptional", "(Object)", "summary", "df-generated"] - ["java.lang", "Runtime$Version", "feature", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.net.model.yml b/java/ql/lib/ext/generated/java.net.model.yml index 7ca397cdb5c..6f0a35897f2 100644 --- a/java/ql/lib/ext/generated/java.net.model.yml +++ b/java/ql/lib/ext/generated/java.net.model.yml @@ -132,11 +132,8 @@ extensions: - ["java.net", "Socket", True, "Socket", "(String,int,InetAddress,int)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["java.net", "Socket", True, "Socket", "(String,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.net", "Socket", True, "bind", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.net", "Socket", True, "connect", "(SocketAddress)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.net", "Socket", True, "connect", "(SocketAddress,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.net", "Socket", True, "getInetAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "Socket", True, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.net", "Socket", True, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "Socket", True, "getRemoteSocketAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "Socket", True, "setOption", "(SocketOption,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["java.net", "Socket", True, "supportedOptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -181,14 +178,11 @@ extensions: - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.net", "URL", False, "URL", "(URL,String,URLStreamHandler)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["java.net", "URL", False, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.net", "URL", False, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "getContent", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "getHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "getProtocol", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.net", "URL", False, "getQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "getRef", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "getUserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.net", "URL", False, "openConnection", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.net", "URLClassLoader", True, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -430,9 +424,6 @@ extensions: - ["java.net", "URI", "isAbsolute", "()", "summary", "df-generated"] - ["java.net", "URI", "isOpaque", "()", "summary", "df-generated"] - ["java.net", "URISyntaxException", "getIndex", "()", "summary", "df-generated"] - - ["java.net", "URL", "getDefaultPort", "()", "summary", "df-generated"] - - ["java.net", "URL", "getPort", "()", "summary", "df-generated"] - - ["java.net", "URL", "openStream", "()", "summary", "df-generated"] - ["java.net", "URL", "sameFile", "(URL)", "summary", "df-generated"] - ["java.net", "URL", "setURLStreamHandlerFactory", "(URLStreamHandlerFactory)", "summary", "df-generated"] - ["java.net", "URLClassLoader", "URLClassLoader", "(URL[])", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.nio.file.model.yml b/java/ql/lib/ext/generated/java.nio.file.model.yml index 342de82e556..4c88fbbe5ec 100644 --- a/java/ql/lib/ext/generated/java.nio.file.model.yml +++ b/java/ql/lib/ext/generated/java.nio.file.model.yml @@ -40,49 +40,21 @@ extensions: - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map,ClassLoader)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "copy", "(Path,OutputStream)", "", "Argument[0].Element", "Argument[1]", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "copy", "(Path,Path,CopyOption[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createDirectories", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createDirectory", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createFile", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createLink", "(Path,Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createSymbolicLink", "(Path,Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempDirectory", "(Path,String,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempDirectory", "(Path,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempDirectory", "(String,FileAttribute[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempFile", "(String,String,FileAttribute[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "createTempFile", "(String,String,FileAttribute[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "getAttribute", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "getFileAttributeView", "(Path,Class,LinkOption[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "getFileStore", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "move", "(Path,Path,CopyOption[])", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "newDirectoryStream", "(Path,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "newInputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "newOutputStream", "(Path,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "readAllBytes", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "readAllLines", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "readAllLines", "(Path,Charset)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "readAttributes", "(Path,Class,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "readAttributes", "(Path,String,LinkOption[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "readString", "(Path)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "readString", "(Path,Charset)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "setAttribute", "(Path,String,Object,LinkOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "setLastModifiedTime", "(Path,FileTime)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "setOwner", "(Path,UserPrincipal)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "setPosixFilePermissions", "(Path,Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "walkFileTree", "(Path,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "Files", False, "walkFileTree", "(Path,Set,int,FileVisitor)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "write", "(Path,Iterable,Charset,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "write", "(Path,Iterable,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "write", "(Path,byte[],OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "writeString", "(Path,CharSequence,Charset,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.nio.file", "Files", False, "writeString", "(Path,CharSequence,OpenOption[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.nio.file", "InvalidPathException", True, "InvalidPathException", "(String,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -127,9 +99,6 @@ extensions: - ["java.nio.file", "FileSystem", "supportedFileAttributeViews", "()", "summary", "df-generated"] - ["java.nio.file", "FileSystems", "getDefault", "()", "summary", "df-generated"] - ["java.nio.file", "FileSystems", "getFileSystem", "(URI)", "summary", "df-generated"] - - ["java.nio.file", "Files", "copy", "(InputStream,Path,CopyOption[])", "summary", "df-generated"] - - ["java.nio.file", "Files", "delete", "(Path)", "summary", "df-generated"] - - ["java.nio.file", "Files", "deleteIfExists", "(Path)", "summary", "df-generated"] - ["java.nio.file", "Files", "getLastModifiedTime", "(Path,LinkOption[])", "summary", "df-generated"] - ["java.nio.file", "Files", "getOwner", "(Path,LinkOption[])", "summary", "df-generated"] - ["java.nio.file", "Files", "getPosixFilePermissions", "(Path,LinkOption[])", "summary", "df-generated"] @@ -141,13 +110,7 @@ extensions: - ["java.nio.file", "Files", "isSameFile", "(Path,Path)", "summary", "df-generated"] - ["java.nio.file", "Files", "isSymbolicLink", "(Path)", "summary", "df-generated"] - ["java.nio.file", "Files", "isWritable", "(Path)", "summary", "df-generated"] - - ["java.nio.file", "Files", "lines", "(Path)", "summary", "df-generated"] - - ["java.nio.file", "Files", "lines", "(Path,Charset)", "summary", "df-generated"] - ["java.nio.file", "Files", "mismatch", "(Path,Path)", "summary", "df-generated"] - - ["java.nio.file", "Files", "newBufferedWriter", "(Path,Charset,OpenOption[])", "summary", "df-generated"] - - ["java.nio.file", "Files", "newBufferedWriter", "(Path,OpenOption[])", "summary", "df-generated"] - - ["java.nio.file", "Files", "notExists", "(Path,LinkOption[])", "summary", "df-generated"] - - ["java.nio.file", "Files", "probeContentType", "(Path)", "summary", "df-generated"] - ["java.nio.file", "Files", "size", "(Path)", "summary", "df-generated"] - ["java.nio.file", "Files", "walk", "(Path,int,FileVisitOption[])", "summary", "df-generated"] - ["java.nio.file", "InvalidPathException", "getIndex", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.cert.model.yml b/java/ql/lib/ext/generated/java.security.cert.model.yml index 4d98781cac2..7f08c1a7d20 100644 --- a/java/ql/lib/ext/generated/java.security.cert.model.yml +++ b/java/ql/lib/ext/generated/java.security.cert.model.yml @@ -42,18 +42,7 @@ extensions: - ["java.security.cert", "CertPathValidatorException", True, "CertPathValidatorException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertPathValidatorException", True, "getCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "CertPathValidatorException", True, "getReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getCRLs", "(CRLSelector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "CertStore", True, "getCertStoreParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getCertificates", "(CertSelector)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,Provider)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getInstance", "(String,CertStoreParameters,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertStore", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertStoreException", True, "CertStoreException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] @@ -68,15 +57,6 @@ extensions: - ["java.security.cert", "CertificateException", True, "CertificateException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertificateException", True, "CertificateException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertificateExpiredException", True, "CertificateExpiredException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "generateCRL", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "generateCertPath", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "generateCertificate", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "CertificateFactory", True, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "CertificateNotYetValidException", True, "CertificateNotYetValidException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "CertificateParsingException", True, "CertificateParsingException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -105,23 +85,7 @@ extensions: - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPolicyTree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "PKIXCertPathValidatorResult", True, "getTrustAnchor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "PKIXParameters", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "addCertPathChecker", "(PKIXCertPathChecker)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "addCertStore", "(CertStore)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getCertPathCheckers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getCertStores", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getInitialPolicies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getSigProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getTargetCertConstraints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "getTrustAnchors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setCertPathCheckers", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setCertStores", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setDate", "(Date)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "PKIXParameters", True, "setInitialPolicies", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setSigProvider", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setTargetCertConstraints", "(CertSelector)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security.cert", "PKIXParameters", True, "setTrustAnchors", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security.cert", "PKIXRevocationChecker", True, "getOcspResponderCert", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -215,7 +179,6 @@ extensions: - ["java.security.cert", "CertPathValidatorSpi", "engineGetRevocationChecker", "()", "summary", "df-generated"] - ["java.security.cert", "CertPathValidatorSpi", "engineValidate", "(CertPath,CertPathParameters)", "summary", "df-generated"] - ["java.security.cert", "CertSelector", "match", "(Certificate)", "summary", "df-generated"] - - ["java.security.cert", "CertStore", "getDefaultType", "()", "summary", "df-generated"] - ["java.security.cert", "CertStoreSpi", "CertStoreSpi", "(CertStoreParameters)", "summary", "df-generated"] - ["java.security.cert", "CertStoreSpi", "engineGetCRLs", "(CRLSelector)", "summary", "df-generated"] - ["java.security.cert", "CertStoreSpi", "engineGetCertificates", "(CertSelector)", "summary", "df-generated"] @@ -224,11 +187,6 @@ extensions: - ["java.security.cert", "Certificate", "verify", "(PublicKey)", "summary", "df-generated"] - ["java.security.cert", "Certificate", "verify", "(PublicKey,Provider)", "summary", "df-generated"] - ["java.security.cert", "Certificate", "verify", "(PublicKey,String)", "summary", "df-generated"] - - ["java.security.cert", "CertificateFactory", "generateCRLs", "(InputStream)", "summary", "df-generated"] - - ["java.security.cert", "CertificateFactory", "generateCertPath", "(InputStream)", "summary", "df-generated"] - - ["java.security.cert", "CertificateFactory", "generateCertPath", "(InputStream,String)", "summary", "df-generated"] - - ["java.security.cert", "CertificateFactory", "generateCertificates", "(InputStream)", "summary", "df-generated"] - - ["java.security.cert", "CertificateFactory", "getCertPathEncodings", "()", "summary", "df-generated"] - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRL", "(InputStream)", "summary", "df-generated"] - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCRLs", "(InputStream)", "summary", "df-generated"] - ["java.security.cert", "CertificateFactorySpi", "engineGenerateCertPath", "(InputStream)", "summary", "df-generated"] @@ -244,13 +202,10 @@ extensions: - ["java.security.cert", "PKIXBuilderParameters", "setMaxPathLength", "(int)", "summary", "df-generated"] - ["java.security.cert", "PKIXCertPathChecker", "check", "(Certificate,Collection)", "summary", "df-generated"] - ["java.security.cert", "PKIXCertPathChecker", "getSupportedExtensions", "()", "summary", "df-generated"] - - ["java.security.cert", "PKIXParameters", "PKIXParameters", "(KeyStore)", "summary", "df-generated"] - - ["java.security.cert", "PKIXParameters", "getPolicyQualifiersRejected", "()", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "isAnyPolicyInhibited", "()", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "isExplicitPolicyRequired", "()", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "isPolicyMappingInhibited", "()", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "isRevocationEnabled", "()", "summary", "df-generated"] - - ["java.security.cert", "PKIXParameters", "setAnyPolicyInhibited", "(boolean)", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "setExplicitPolicyRequired", "(boolean)", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "setPolicyMappingInhibited", "(boolean)", "summary", "df-generated"] - ["java.security.cert", "PKIXParameters", "setPolicyQualifiersRejected", "(boolean)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.security.model.yml b/java/ql/lib/ext/generated/java.security.model.yml index d170abb8188..15b410e1fe8 100644 --- a/java/ql/lib/ext/generated/java.security.model.yml +++ b/java/ql/lib/ext/generated/java.security.model.yml @@ -48,13 +48,6 @@ extensions: - ["java.security", "CodeSigner", False, "CodeSigner", "(CertPath,Timestamp)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["java.security", "CodeSigner", False, "getSignerCertPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security", "CodeSigner", False, "getTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "CodeSource", "(URL,Certificate[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "CodeSource", "(URL,Certificate[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "CodeSource", "(URL,CodeSigner[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "CodeSource", "(URL,CodeSigner[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "getCertificates", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "getCodeSigners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.security", "CodeSource", True, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security", "DigestException", True, "DigestException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security", "DigestException", True, "DigestException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] @@ -200,7 +193,6 @@ extensions: - ["java.security", "KeyStoreException", True, "KeyStoreException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.security", "KeyStoreSpi", True, "engineGetEntry", "(String,KeyStore$ProtectionParameter)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security", "KeyStoreSpi", True, "engineSetEntry", "(String,KeyStore$Entry,KeyStore$ProtectionParameter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.security", "MessageDigest", True, "digest", "(byte[],int,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["java.security", "MessageDigest", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.security", "MessageDigest", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.security", "MessageDigest", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.text.model.yml b/java/ql/lib/ext/generated/java.text.model.yml index 6418b607358..2f384e7c178 100644 --- a/java/ql/lib/ext/generated/java.text.model.yml +++ b/java/ql/lib/ext/generated/java.text.model.yml @@ -88,24 +88,11 @@ extensions: - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.text", "FieldPosition", True, "FieldPosition", "(Format$Field,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.text", "FieldPosition", True, "getFieldAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - - ["java.text", "Format", True, "format", "(Object,StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.text", "Format", True, "parseObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.text", "Format", True, "parseObject", "(String,ParsePosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.text", "MessageFormat", True, "MessageFormat", "(String,Locale)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[0].ArrayElement", "Argument[1]", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(Object[],StringBuffer,FieldPosition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.text", "MessageFormat", True, "format", "(String,Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] - ["java.text", "MessageFormat", True, "getFormats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.text", "MessageFormat", True, "getFormatsByArgumentIndex", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.text", "MessageFormat", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.logging.model.yml b/java/ql/lib/ext/generated/java.util.logging.model.yml index 2ad409bc45e..5ca7ed9013a 100644 --- a/java/ql/lib/ext/generated/java.util.logging.model.yml +++ b/java/ql/lib/ext/generated/java.util.logging.model.yml @@ -37,7 +37,6 @@ extensions: - ["java.util.logging", "LogRecord", True, "getLoggerName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.logging", "LogRecord", True, "getResourceBundle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "getResourceBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "getSourceClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "getSourceMethodName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -47,7 +46,6 @@ extensions: - ["java.util.logging", "LogRecord", True, "setLoggerName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "setLongThreadID", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["java.util.logging", "LogRecord", True, "setMessage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.logging", "LogRecord", True, "setParameters", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "setResourceBundle", "(ResourceBundle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "setResourceBundleName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.logging", "LogRecord", True, "setSourceClassName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.model.yml b/java/ql/lib/ext/generated/java.util.model.yml index a8532c297ad..e6170696fba 100644 --- a/java/ql/lib/ext/generated/java.util.model.yml +++ b/java/ql/lib/ext/generated/java.util.model.yml @@ -4,7 +4,6 @@ extensions: pack: codeql/java-all extensible: summaryModel data: - - ["java.util", "Arrays", True, "deepToString", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] - ["java.util", "Base64$Encoder", True, "withoutPadding", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["java.util", "Base64", True, "getMimeEncoder", "(int,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Calendar$Builder", True, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -29,10 +28,6 @@ extensions: - ["java.util", "Calendar", True, "getInstance", "(TimeZone,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Calendar", True, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Calendar", True, "setTimeZone", "(TimeZone)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Collections", True, "asLifoQueue", "(Deque)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Collections", True, "checkedQueue", "(Queue,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Collections", True, "newSetFromMap", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Collections", True, "reverseOrder", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Comparator", True, "nullsFirst", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Comparator", True, "nullsLast", "(Comparator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Comparator", True, "reversed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -51,26 +46,6 @@ extensions: - ["java.util", "Currency", False, "getSymbol", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "DuplicateFormatFlagsException", True, "DuplicateFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "DuplicateFormatFlagsException", True, "getFlags", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "complementOf", "(EnumSet)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "copyOf", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "copyOf", "(EnumSet)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum,Enum,Enum,Enum)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "EnumSet", True, "of", "(Enum,Enum[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] - ["java.util", "EventListenerProxy", True, "EventListenerProxy", "(EventListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "EventListenerProxy", True, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "FormatFlagsConversionMismatchException", True, "FormatFlagsConversionMismatchException", "(String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -125,62 +100,6 @@ extensions: - ["java.util", "InputMismatchException", True, "InputMismatchException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "InvalidPropertiesFormatException", True, "InvalidPropertiesFormatException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale$Builder", False, "addUnicodeLocaleAttribute", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$Builder", False, "clear", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "clearExtensions", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "removeUnicodeLocaleAttribute", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setExtension", "(char,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setLanguage", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setLanguageTag", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setLocale", "(Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale$Builder", False, "setLocale", "(Locale)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setRegion", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setScript", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setUnicodeLocaleKeyword", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$Builder", False, "setVariant", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale$Builder", False, "setVariant", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "LanguageRange", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "LanguageRange", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "getRange", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "mapEquivalents", "(List,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "mapEquivalents", "(List,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "parse", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale$LanguageRange", False, "parse", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "Locale", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Locale", False, "filterTags", "(List,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "filterTags", "(List,Collection,Locale$FilteringMode)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getCountry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayCountry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayCountry", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayCountry", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayLanguage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayLanguage", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayLanguage", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayName", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayName", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayScript", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayScript", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayScript", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayVariant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayVariant", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getDisplayVariant", "(Locale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getExtensionKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getISO3Language", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getLanguage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getScript", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "getVariant", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "lookupTag", "(List,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "stripExtensions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Locale", False, "toLanguageTag", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "Map", True, "compute", "(Object,BiFunction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "Map", True, "computeIfPresent", "(Object,BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -217,19 +136,6 @@ extensions: - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle$Control", True, "toResourceName", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "getBaseBundleName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ClassLoader,ResourceBundle$Control)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,Module)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Locale,ResourceBundle$Control)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,Module)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "ResourceBundle", True, "getBundle", "(String,ResourceBundle$Control)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "getKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "getObject", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -238,15 +144,6 @@ extensions: - ["java.util", "ResourceBundle", True, "getStringArray", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "handleGetObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ResourceBundle", True, "keySet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "delimiter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "findAll", "(Pattern)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "findAll", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "findAll", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "hasNext", "(Pattern)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Scanner", False, "hasNext", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "Scanner", False, "ioException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "locale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util", "Scanner", False, "match", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "ServiceConfigurationError", True, "ServiceConfigurationError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] @@ -284,8 +181,6 @@ extensions: - ["java.util", "Timer", True, "Timer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "Timer", True, "Timer", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "TooManyListenersException", True, "TooManyListenersException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "TreeMap", True, "TreeMap", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util", "TreeSet", True, "TreeSet", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "UnknownFormatConversionException", True, "UnknownFormatConversionException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util", "UnknownFormatConversionException", True, "getConversion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util", "UnknownFormatFlagsException", True, "UnknownFormatFlagsException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -592,8 +487,6 @@ extensions: - ["java.util", "DoubleSummaryStatistics", "getMin", "()", "summary", "df-generated"] - ["java.util", "DoubleSummaryStatistics", "getSum", "()", "summary", "df-generated"] - ["java.util", "EnumMap", "EnumMap", "(Class)", "summary", "df-generated"] - - ["java.util", "EnumSet", "allOf", "(Class)", "summary", "df-generated"] - - ["java.util", "EnumSet", "noneOf", "(Class)", "summary", "df-generated"] - ["java.util", "EnumSet", "range", "(Enum,Enum)", "summary", "df-generated"] - ["java.util", "FormatFlagsConversionMismatchException", "getConversion", "()", "summary", "df-generated"] - ["java.util", "Formatter", "Formatter", "(File)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.prefs.model.yml b/java/ql/lib/ext/generated/java.util.prefs.model.yml index bb056466a61..e87f3c13a9a 100644 --- a/java/ql/lib/ext/generated/java.util.prefs.model.yml +++ b/java/ql/lib/ext/generated/java.util.prefs.model.yml @@ -24,22 +24,11 @@ extensions: - ["java.util.prefs", "Preferences", True, "addNodeChangeListener", "(NodeChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "addPreferenceChangeListener", "(PreferenceChangeListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "childrenNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "get", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "get", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "getByteArray", "(String,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["java.util.prefs", "Preferences", True, "node", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["java.util.prefs", "Preferences", True, "parent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "put", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "put", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putBoolean", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putByteArray", "(String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putDouble", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putFloat", "(String,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putInt", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["java.util.prefs", "Preferences", True, "putLong", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - addsTo: pack: codeql/java-all extensible: neutralModel @@ -48,14 +37,8 @@ extensions: - ["java.util.prefs", "Preferences", "exportNode", "(OutputStream)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "exportSubtree", "(OutputStream)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "flush", "()", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "getBoolean", "(String,boolean)", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "getDouble", "(String,double)", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "getFloat", "(String,float)", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "getInt", "(String,int)", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "getLong", "(String,long)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "importPreferences", "(InputStream)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "isUserNode", "()", "summary", "df-generated"] - - ["java.util.prefs", "Preferences", "nodeExists", "(String)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "remove", "(String)", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "removeNode", "()", "summary", "df-generated"] - ["java.util.prefs", "Preferences", "removeNodeChangeListener", "(NodeChangeListener)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.regex.model.yml b/java/ql/lib/ext/generated/java.util.regex.model.yml index 6796f7ba32a..8b5680b1311 100644 --- a/java/ql/lib/ext/generated/java.util.regex.model.yml +++ b/java/ql/lib/ext/generated/java.util.regex.model.yml @@ -6,17 +6,6 @@ extensions: data: - ["java.util.regex", "MatchResult", True, "group", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.regex", "MatchResult", True, "group", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuffer,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuffer,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuilder,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendReplacement", "(StringBuilder,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuffer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "appendTail", "(StringBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["java.util.regex", "Matcher", False, "pattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["java.util.regex", "Matcher", False, "quoteReplacement", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["java.util.regex", "Matcher", False, "region", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - ["java.util.regex", "Matcher", False, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] @@ -44,12 +33,10 @@ extensions: - ["java.util.regex", "MatchResult", "start", "()", "summary", "df-generated"] - ["java.util.regex", "MatchResult", "start", "(int)", "summary", "df-generated"] - ["java.util.regex", "Matcher", "end", "(String)", "summary", "df-generated"] - - ["java.util.regex", "Matcher", "find", "(int)", "summary", "df-generated"] - ["java.util.regex", "Matcher", "hasAnchoringBounds", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "hasTransparentBounds", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "hitEnd", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "lookingAt", "()", "summary", "df-generated"] - - ["java.util.regex", "Matcher", "matches", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "regionEnd", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "regionStart", "()", "summary", "df-generated"] - ["java.util.regex", "Matcher", "requireEnd", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/java.util.stream.model.yml b/java/ql/lib/ext/generated/java.util.stream.model.yml index edd36e33405..ce97043b8dd 100644 --- a/java/ql/lib/ext/generated/java.util.stream.model.yml +++ b/java/ql/lib/ext/generated/java.util.stream.model.yml @@ -116,9 +116,6 @@ extensions: - ["java.util.stream", "Collectors", "groupingBy", "(Function,Collector)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "groupingByConcurrent", "(Function,Collector)", "summary", "df-generated"] - - ["java.util.stream", "Collectors", "joining", "()", "summary", "df-generated"] - - ["java.util.stream", "Collectors", "joining", "(CharSequence)", "summary", "df-generated"] - - ["java.util.stream", "Collectors", "joining", "(CharSequence,CharSequence,CharSequence)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "maxBy", "(Comparator)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "minBy", "(Comparator)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "partitioningBy", "(Predicate)", "summary", "df-generated"] @@ -134,8 +131,6 @@ extensions: - ["java.util.stream", "Collectors", "summingLong", "(ToLongFunction)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "toConcurrentMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] - - ["java.util.stream", "Collectors", "toMap", "(Function,Function)", "summary", "df-generated"] - - ["java.util.stream", "Collectors", "toMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "toUnmodifiableList", "()", "summary", "df-generated"] - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function)", "summary", "df-generated"] - ["java.util.stream", "Collectors", "toUnmodifiableMap", "(Function,Function,BinaryOperator)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.model.yml b/java/ql/lib/ext/generated/javax.crypto.model.yml index 84a2a5c724b..727ba26863f 100644 --- a/java/ql/lib/ext/generated/javax.crypto.model.yml +++ b/java/ql/lib/ext/generated/javax.crypto.model.yml @@ -6,65 +6,6 @@ extensions: data: - ["javax.crypto", "AEADBadTagException", True, "AEADBadTagException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "BadPaddingException", True, "BadPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getExemptionMechanism", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Certificate,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameters,SecureRandom)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "init", "(int,Key,SecureRandom)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "updateAAD", "(ByteBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "updateAAD", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "updateAAD", "(byte[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "CipherInputStream", True, "CipherInputStream", "(InputStream,Cipher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "CipherOutputStream", True, "CipherOutputStream", "(OutputStream,Cipher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -120,7 +61,6 @@ extensions: - ["javax.crypto", "KeyGenerator", True, "init", "(AlgorithmParameterSpec,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "KeyGenerator", True, "init", "(SecureRandom)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "KeyGenerator", True, "init", "(int,SecureRandom)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto", "Mac", True, "doFinal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "doFinal", "(byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "doFinal", "(byte[],int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -129,7 +69,6 @@ extensions: - ["javax.crypto", "Mac", True, "getInstance", "(String,Provider)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto", "Mac", True, "init", "(Key)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "Mac", True, "init", "(Key,AlgorithmParameterSpec)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "NoSuchPaddingException", True, "NoSuchPaddingException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["javax.crypto", "SealedObject", True, "SealedObject", "(Serializable,Cipher)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] diff --git a/java/ql/lib/ext/generated/javax.crypto.spec.model.yml b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml index d8eab143d30..9f7408d3e36 100644 --- a/java/ql/lib/ext/generated/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/generated/javax.crypto.spec.model.yml @@ -39,10 +39,6 @@ extensions: - ["javax.crypto.spec", "PSource", True, "getAlgorithm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto.spec", "RC2ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["javax.crypto.spec", "RC5ParameterSpec", True, "getIV", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["javax.crypto.spec", "SecretKeySpec", True, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - addsTo: pack: codeql/java-all extensible: neutralModel From 52e6ea30e72fb1c8f9fce1228b5f02991f798f6b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 13 Jan 2024 16:17:54 +0000 Subject: [PATCH 391/497] Accept more capture summary models This line is added because `FileOutputStream`'s constructor is now modeled as propagating taint, not just as a sink. | p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated | --- .../utils/modelgenerator/dataflow/CaptureNeutralModels.expected | 1 - .../utils/modelgenerator/dataflow/CaptureSummaryModels.expected | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected index 5ae6398fb6f..df6a7bfc854 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureNeutralModels.expected @@ -14,7 +14,6 @@ | p;Pojo;getFloatArray;();summary;df-generated | | p;Pojo;getIntValue;();summary;df-generated | | p;Pojo;getPrimitiveArray;();summary;df-generated | -| p;PrivateFlowViaPublicInterface$SPI;openStream;();summary;df-generated | | p;PrivateFlowViaPublicInterface$SPI;openStreamNone;();summary;df-generated | | p;PrivateFlowViaPublicInterface;createAnSPIWithoutTrackingFile;(File);summary;df-generated | | p;Sinks;copyFileToDirectory;(Path,Path,CopyOption[]);summary;df-generated | diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected index 2654c4d94d6..50536e850d9 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected @@ -43,4 +43,5 @@ | p;Pojo;false;getCharArray;();;Argument[this];ReturnValue;taint;df-generated | | p;Pojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated | | p;Pojo;false;setValue;(String);;Argument[0];Argument[this];taint;df-generated | +| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated | | p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint;df-generated | From 776c9d9eb23e5fa4454b3aa21a09891bfd7d0f63 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 13 Jan 2024 16:19:04 +0000 Subject: [PATCH 392/497] Accept changes to top jdk apis test --- .../TopJdkApisTest/TopJdkApisTest.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected index 64748f77765..d5176a7a4de 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected @@ -14,10 +14,10 @@ | java.time.chrono | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time.format | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util | 0 | 0 | 86 | 64 | 150 | 0.5733333333333334 | 0.0 | 0.5733333333333334 | 0.0 | NaN | 0.4266666666666667 | -| java.util.concurrent | 0 | 0 | 9 | 9 | 18 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | +| java.util.concurrent | 1 | 0 | 9 | 8 | 18 | 0.5555555555555556 | 0.05555555555555555 | 0.5 | 0.0 | 0.0 | 0.4444444444444444 | | java.util.concurrent.atomic | 0 | 0 | 2 | 11 | 13 | 0.15384615384615385 | 0.0 | 0.15384615384615385 | 0.0 | NaN | 0.8461538461538461 | | java.util.concurrent.locks | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util.function | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util.logging | 0 | 0 | 1 | 1 | 2 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | | java.util.regex | 0 | 0 | 3 | 1 | 4 | 0.75 | 0.0 | 0.75 | 0.0 | NaN | 0.25 | -| java.util.stream | 0 | 0 | 18 | 8 | 26 | 0.6923076923076923 | 0.0 | 0.6923076923076923 | 0.0 | NaN | 0.3076923076923077 | +| java.util.stream | 1 | 0 | 18 | 7 | 26 | 0.7307692307692307 | 0.038461538461538464 | 0.6923076923076923 | 0.0 | 0.0 | 0.2692307692307692 | From 9067a337b004a074d5f94c8edea152ef77cdc0e0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 13 Jan 2024 16:21:00 +0000 Subject: [PATCH 393/497] Test fixed by model for `BasicAttributes(String, Object)` --- .../security/CWE-090/LdapInjection.expected | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected index 69c97ca8487..caf00094074 100644 --- a/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected +++ b/java/ql/test/query-tests/security/CWE-090/LdapInjection.expected @@ -8,14 +8,20 @@ edges | LdapInjection.java:63:28:63:59 | jBadInitial : String | LdapInjection.java:65:29:65:55 | ... + ... | provenance | | | LdapInjection.java:69:28:69:52 | jBad : String | LdapInjection.java:71:84:71:103 | ... + ... | provenance | | | LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | LdapInjection.java:71:53:71:79 | ... + ... : String | provenance | | +| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | | +| LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | LdapInjection.java:71:16:71:81 | addAll(...) | provenance | | | LdapInjection.java:71:53:71:79 | ... + ... : String | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:75:28:75:52 | jBad : String | LdapInjection.java:79:47:79:66 | ... + ... | provenance | | | LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | LdapInjection.java:78:30:78:57 | ... + ... : String | provenance | | | LdapInjection.java:78:5:78:8 | name : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | +| LdapInjection.java:78:5:78:8 | name [post update] : LdapName | LdapInjection.java:79:40:79:43 | name : LdapName | provenance | | | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | LdapInjection.java:78:17:78:68 | getRdns(...) : List | provenance | | | LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name : LdapName | provenance | | +| LdapInjection.java:78:17:78:68 | getRdns(...) : List | LdapInjection.java:78:5:78:8 | name [post update] : LdapName | provenance | | | LdapInjection.java:78:30:78:57 | ... + ... : String | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | | +| LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | provenance | | | LdapInjection.java:79:40:79:43 | name : LdapName | LdapInjection.java:79:16:79:44 | addAll(...) | provenance | | | LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | provenance | | | LdapInjection.java:83:55:83:93 | jBadDNNameToString : String | LdapInjection.java:85:29:85:60 | ... + ... : String | provenance | | @@ -26,6 +32,8 @@ edges | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | LdapInjection.java:91:23:91:73 | clone(...) : Object | provenance | | | LdapInjection.java:91:23:91:73 | clone(...) : Object | LdapInjection.java:91:16:91:73 | (...)... | provenance | | | LdapInjection.java:91:36:91:64 | ... + ... : String | LdapInjection.java:91:23:91:65 | new LdapName(...) : LdapName | provenance | | +| LdapInjection.java:100:27:100:59 | jOkAttribute : String | LdapInjection.java:101:49:101:60 | jOkAttribute : String | provenance | | +| LdapInjection.java:101:49:101:60 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | provenance | | | LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | provenance | | | LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | provenance | | | LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:72:113:87 | uBadFilterCreate : String | provenance | | @@ -154,6 +162,7 @@ nodes | LdapInjection.java:65:29:65:55 | ... + ... | semmle.label | ... + ... | | LdapInjection.java:69:28:69:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:69:55:69:88 | jBadDNNameAdd : String | semmle.label | jBadDNNameAdd : String | +| LdapInjection.java:71:16:71:31 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:71:16:71:81 | addAll(...) | semmle.label | addAll(...) | | LdapInjection.java:71:40:71:80 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:71:53:71:79 | ... + ... : String | semmle.label | ... + ... : String | @@ -161,9 +170,11 @@ nodes | LdapInjection.java:75:28:75:52 | jBad : String | semmle.label | jBad : String | | LdapInjection.java:75:55:75:89 | jBadDNNameAdd2 : String | semmle.label | jBadDNNameAdd2 : String | | LdapInjection.java:78:5:78:8 | name : LdapName | semmle.label | name : LdapName | +| LdapInjection.java:78:5:78:8 | name [post update] : LdapName | semmle.label | name [post update] : LdapName | | LdapInjection.java:78:17:78:58 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:78:17:78:68 | getRdns(...) : List | semmle.label | getRdns(...) : List | | LdapInjection.java:78:30:78:57 | ... + ... : String | semmle.label | ... + ... : String | +| LdapInjection.java:79:16:79:31 | new LdapName(...) : LdapName | semmle.label | new LdapName(...) : LdapName | | LdapInjection.java:79:16:79:44 | addAll(...) | semmle.label | addAll(...) | | LdapInjection.java:79:40:79:43 | name : LdapName | semmle.label | name : LdapName | | LdapInjection.java:79:47:79:66 | ... + ... | semmle.label | ... + ... | @@ -180,6 +191,9 @@ nodes | LdapInjection.java:91:23:91:73 | clone(...) : Object | semmle.label | clone(...) : Object | | LdapInjection.java:91:36:91:64 | ... + ... : String | semmle.label | ... + ... : String | | LdapInjection.java:91:76:91:95 | ... + ... | semmle.label | ... + ... | +| LdapInjection.java:100:27:100:59 | jOkAttribute : String | semmle.label | jOkAttribute : String | +| LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | semmle.label | new BasicAttributes(...) | +| LdapInjection.java:101:49:101:60 | jOkAttribute : String | semmle.label | jOkAttribute : String | | LdapInjection.java:106:31:106:55 | uBad : String | semmle.label | uBad : String | | LdapInjection.java:106:58:106:84 | uBadDN : String | semmle.label | uBadDN : String | | LdapInjection.java:108:20:108:39 | ... + ... | semmle.label | ... + ... | @@ -348,6 +362,7 @@ subpaths | LdapInjection.java:85:75:85:94 | ... + ... | LdapInjection.java:83:28:83:52 | jBad : String | LdapInjection.java:85:75:85:94 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:83:28:83:52 | jBad | user-provided value | | LdapInjection.java:91:16:91:73 | (...)... | LdapInjection.java:89:55:89:90 | jBadDNNameClone : String | LdapInjection.java:91:16:91:73 | (...)... | This LDAP query depends on a $@. | LdapInjection.java:89:55:89:90 | jBadDNNameClone | user-provided value | | LdapInjection.java:91:76:91:95 | ... + ... | LdapInjection.java:89:28:89:52 | jBad : String | LdapInjection.java:91:76:91:95 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:89:28:89:52 | jBad | user-provided value | +| LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | LdapInjection.java:100:27:100:59 | jOkAttribute : String | LdapInjection.java:101:29:101:75 | new BasicAttributes(...) | This LDAP query depends on a $@. | LdapInjection.java:100:27:100:59 | jOkAttribute | user-provided value | | LdapInjection.java:108:20:108:39 | ... + ... | LdapInjection.java:106:58:106:84 | uBadDN : String | LdapInjection.java:108:20:108:39 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:106:58:106:84 | uBadDN | user-provided value | | LdapInjection.java:108:67:108:86 | ... + ... | LdapInjection.java:106:31:106:55 | uBad : String | LdapInjection.java:108:67:108:86 | ... + ... | This LDAP query depends on a $@. | LdapInjection.java:106:31:106:55 | uBad | user-provided value | | LdapInjection.java:113:58:113:88 | create(...) | LdapInjection.java:112:31:112:67 | uBadFilterCreate : String | LdapInjection.java:113:58:113:88 | create(...) | This LDAP query depends on a $@. | LdapInjection.java:112:31:112:67 | uBadFilterCreate | user-provided value | From 2d24fe011bfc70b5518cd69b9b24bb79bd3c1285 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 13 Jan 2024 16:35:39 +0000 Subject: [PATCH 394/497] Accept that lots of sinks are now summaries as well --- .../modeleditor/ApplicationModeEndpoints.expected | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected index 4d32cb7e922..d6ee3584afd 100644 --- a/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected +++ b/java/ql/test/utils/modeleditor/ApplicationModeEndpoints.expected @@ -1,13 +1,23 @@ | com/github/codeql/test/NonPublicClass.java:5:5:5:28 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/NonPublicClass.java:5:5:5:28 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:8:5:8:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:8:5:8:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:12:5:12:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:12:5:12:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:16:5:16:45 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:16:5:16:45 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:16:24:16:44 | get(...) | java.nio.file | Paths | get | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:20:5:20:68 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | -| com/github/codeql/test/PublicClass.java:20:24:20:47 | getDefault(...) | java.nio.file | FileSystems | getDefault | () | false | rt.jar | | | source | +| com/github/codeql/test/PublicClass.java:20:5:20:68 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | +| com/github/codeql/test/PublicClass.java:20:24:20:47 | getDefault(...) | java.nio.file | FileSystems | getDefault | () | true | rt.jar | | neutral | source | | com/github/codeql/test/PublicClass.java:20:24:20:67 | getPath(...) | java.nio.file | FileSystem | getPath | (String,String[]) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicClass.java:24:5:24:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicClass.java:24:5:24:27 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericClass.java:7:5:7:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericClass.java:7:5:7:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericClass.java:11:5:11:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericClass.java:11:5:11:27 | println(...) | java.io | PrintStream | println | (Object) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicGenericInterface.java:8:7:8:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicGenericInterface.java:8:7:8:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | | com/github/codeql/test/PublicInterface.java:7:7:7:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | sink | source | +| com/github/codeql/test/PublicInterface.java:7:7:7:29 | println(...) | java.io | PrintStream | println | (String) | true | rt.jar | | summary | source | From fa614df3f4c5c506bb6a7f0c4698c4dd965aa397 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 6 Dec 2023 17:09:08 +0000 Subject: [PATCH 395/497] Tests fixed by model for `CharBuffer.wrap(char[])` --- .../frameworks/apache-commons-lang3/StrBuilderTest.java | 6 +++--- .../frameworks/apache-commons-lang3/StrBuilderTextTest.java | 6 +++--- .../apache-commons-lang3/TextStringBuilderTest.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java index 35a118f8048..fe197b4f264 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTest.java @@ -18,8 +18,8 @@ class StrBuilderTest { StrBuilder sb1 = new StrBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow StrBuilder sb2 = new StrBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow StrBuilder sb5 = new StrBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow StrBuilder sb6 = new StrBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow StrBuilder sb7 = new StrBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -206,4 +206,4 @@ class StrBuilderTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java index 43171647004..b3aa3ed9997 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/StrBuilderTextTest.java @@ -18,8 +18,8 @@ class StrBuilderTextTest { StrBuilder sb1 = new StrBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow StrBuilder sb2 = new StrBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + StrBuilder sb3 = new StrBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + StrBuilder sb4 = new StrBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow StrBuilder sb5 = new StrBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow StrBuilder sb6 = new StrBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow StrBuilder sb7 = new StrBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -206,4 +206,4 @@ class StrBuilderTextTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java b/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java index 41941cca223..5a7c66c7526 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/TextStringBuilderTest.java @@ -19,8 +19,8 @@ class TextStringBuilderTest { TextStringBuilder sb1 = new TextStringBuilder(); sb1.append(taint().toCharArray()); sink(sb1.toString()); // $hasTaintFlow TextStringBuilder sb2 = new TextStringBuilder(); sb2.append(taint().toCharArray(), 0, 0); sink(sb2.toString()); // $hasTaintFlow - TextStringBuilder sb3 = new TextStringBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ MISSING: hasTaintFlow - TextStringBuilder sb4 = new TextStringBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ MISSING: hasTaintFlow + TextStringBuilder sb3 = new TextStringBuilder(); sb3.append(CharBuffer.wrap(taint().toCharArray())); sink(sb3.toString()); // $ hasTaintFlow + TextStringBuilder sb4 = new TextStringBuilder(); sb4.append(CharBuffer.wrap(taint().toCharArray()), 0, 0); sink(sb4.toString()); // $ hasTaintFlow TextStringBuilder sb5 = new TextStringBuilder(); sb5.append((CharSequence)taint()); sink(sb5.toString()); // $hasTaintFlow TextStringBuilder sb6 = new TextStringBuilder(); sb6.append((CharSequence)taint(), 0, 0); sink(sb6.toString()); // $hasTaintFlow TextStringBuilder sb7 = new TextStringBuilder(); sb7.append((Object)taint()); sink(sb7.toString()); // $hasTaintFlow @@ -207,4 +207,4 @@ class TextStringBuilderTest { sink(fluentAllMethodsTest2); // $hasTaintFlow } -} \ No newline at end of file +} From a5979e209ae332f03c2d0e2f66c8f941d12022fc Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 19 Mar 2024 13:53:10 +0000 Subject: [PATCH 396/497] Add change note --- .../lib/change-notes/2024-03-19-many-generated-jdk-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md diff --git a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md new file mode 100644 index 00000000000..c4abc9a0385 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* About 15,000 summary models and neutral summary models for the JDK that were generated using data flow have been added. This may lead to new results being reported. From e3fb40a842aa64a4a44a5f5f562a02d27ef7d126 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 20 Mar 2024 14:49:22 +0000 Subject: [PATCH 397/497] Adjust change note --- .../ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md index c4abc9a0385..271e313d6d0 100644 --- a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md +++ b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* About 15,000 summary models and neutral summary models for the JDK that were generated using data flow have been added. This may lead to new results being reported. +* About 15,000 summary models and neutral summary models for the JDK that were generated using data flow have been added. This may lead to new alerts being reported. From fdafaa2ff4e7226ea222df27ebf2271497f9aae9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 25 Mar 2024 15:09:06 +0000 Subject: [PATCH 398/497] Change note: update numbers of models added --- .../ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md index 271e313d6d0..72279ea8983 100644 --- a/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md +++ b/java/ql/lib/change-notes/2024-03-19-many-generated-jdk-models.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* About 15,000 summary models and neutral summary models for the JDK that were generated using data flow have been added. This may lead to new alerts being reported. +* About 6,700 summary models and 6,800 neutral summary models for the JDK that were generated using data flow have been added. This may lead to new alerts being reported. From ec97d9a3043ac34e3aae2951b261fa0d978955e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Apr 2024 13:46:57 +0000 Subject: [PATCH 399/497] Release preparation for version 2.17.0 --- cpp/ql/lib/CHANGELOG.md | 15 +++++++++++++++ .../2024-03-15-switches-in-guard-conditions.md | 4 ---- .../2024-03-19-ir-temp-extended-destructors.md | 4 ---- ...3-19-predicates-for-switches-as-guards-2.md | 5 ----- ...-03-19-predicates-for-switches-as-guards.md | 5 ----- .../2024-03-26-taint-inheriting-content.md | 4 ---- cpp/ql/lib/change-notes/released/0.12.10.md | 14 ++++++++++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 16 ++++++++++++++++ .../2024-03-05-type-confusion-query.md | 4 ---- .../2024-03-13-glib-alloc-and-dealloc.md | 4 ---- ...4-03-18-uninitialized-local-path-problem.md | 4 ---- ...4-03-20-missing-check-scanf-path-problem.md | 4 ---- .../src/change-notes/2024-03-22-boost-ssl.md | 4 ---- cpp/ql/src/change-notes/released/0.9.9.md | 15 +++++++++++++++ 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.13.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.13.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 18 ++++++++++++++++++ .../2024-03-04-deprecate-dotnet-and-cil.md | 4 ---- ...-03-04-fixed-system.io.textreader-models.md | 4 ---- ...5-new-commandargs-and-environment-models.md | 5 ----- .../2024-03-07-remove-cil-extractor.md | 4 ---- ...ystem.net.http.httprequestmessage-models.md | 4 ---- .../2024-03-11-csharp12-dotnet8.md | 4 ---- .../2024-03-11-registry-sources.md | 4 ---- .../2024-03-13-system.io-models.md | 4 ---- .../2024-03-14-dapper-source-models.md | 4 ---- csharp/ql/lib/change-notes/released/0.9.0.md | 17 +++++++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 11 +++++++++++ .../2024-03-06-remove-default-local-sources.md | 5 ----- .../2024-03-11-remove-stored-query-variants.md | 5 ----- .../2024-03-21-change-compareto-signature.md | 5 ----- csharp/ql/src/change-notes/released/0.8.13.md | 10 ++++++++++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 7 +++++++ .../change-notes/2024-03-04-macaron-sources.md | 4 ---- .../0.7.13.md} | 8 +++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 11 +++++++++++ .../2024-03-05-squirrel-sqli-sinks.md | 4 ---- ...03-14-hardcoded-credentials-more-sources.md | 4 ---- .../0.7.13.md} | 12 +++++++++--- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../src/change-notes/released/0.0.20.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 13 +++++++++++++ ...3-11-add-parcelfiledescriptor-open-model.md | 4 ---- .../ql/lib/change-notes/2024-03-21-env-vars.md | 4 ---- .../2024-03-22-anonymous-variables.md | 5 ----- .../2024-03-26-url-models-precision.md | 4 ---- java/ql/lib/change-notes/released/0.9.0.md | 12 ++++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 +++++++++++++++ .../2024-03-06-url-forward-query.md | 4 ---- .../2024-03-12-request-sanitizers.md | 4 ---- ...03-24-sensitive-log-whitelist-tokenimage.md | 4 ---- .../2024-03-27-MissingEnumInSwitch.md | 4 ---- java/ql/src/change-notes/released/0.8.13.md | 14 ++++++++++++++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 6 ++++++ .../change-notes/2024-02-02-typescript-5-4.md | 4 ---- .../ql/lib/change-notes/released/0.8.13.md | 5 +++++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 10 ++++++++++ .../2024-03-07-lift-cg-restriction.md | 4 ---- .../2024-03-21-target-blank-precision.md | 4 ---- .../ql/src/change-notes/released/0.8.13.md | 9 +++++++++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/0.7.13.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/0.11.13.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.13.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 10 ++++++++++ .../change-notes/2024-02-27-process-spawn.md | 4 ---- .../2024-03-01-typhoeus-request.md | 4 ---- .../2024-03-08-activerecord-from.md | 4 ---- .../2024-03-14-actiondispatch-uploadedfile.md | 4 ---- .../2024-03-19-activerecord-scopes.md | 4 ---- ruby/ql/lib/change-notes/released/0.8.13.md | 9 +++++++++ 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/0.8.13.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/0.1.13.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ++++++ .../0.2.4.md} | 7 ++++--- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.13.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.13.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.13.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.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/0.2.13.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/0.2.13.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.13.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.13.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.13.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 7 +++++++ .../0.3.13.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/0.3.13.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 173 files changed, 478 insertions(+), 249 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md create mode 100644 cpp/ql/lib/change-notes/released/0.12.10.md delete mode 100644 cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md delete mode 100644 cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md delete mode 100644 cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md delete mode 100644 cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md delete mode 100644 cpp/ql/src/change-notes/2024-03-22-boost-ssl.md create mode 100644 cpp/ql/src/change-notes/released/0.9.9.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-11-registry-sources.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-13-system.io-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md create mode 100644 csharp/ql/lib/change-notes/released/0.9.0.md delete mode 100644 csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md delete mode 100644 csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md delete mode 100644 csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md create mode 100644 csharp/ql/src/change-notes/released/0.8.13.md create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.12.md delete mode 100644 go/ql/lib/change-notes/2024-03-04-macaron-sources.md rename go/ql/lib/change-notes/{2024-03-20-dependecy-retrieval-improvement.md => released/0.7.13.md} (63%) delete mode 100644 go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md delete mode 100644 go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md rename go/ql/src/change-notes/{2024-03-07-uncontrolled-allocation-size.md => released/0.7.13.md} (53%) create mode 100644 java/ql/automodel/src/change-notes/released/0.0.20.md delete mode 100644 java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md delete mode 100644 java/ql/lib/change-notes/2024-03-21-env-vars.md delete mode 100644 java/ql/lib/change-notes/2024-03-22-anonymous-variables.md delete mode 100644 java/ql/lib/change-notes/2024-03-26-url-models-precision.md create mode 100644 java/ql/lib/change-notes/released/0.9.0.md delete mode 100644 java/ql/src/change-notes/2024-03-06-url-forward-query.md delete mode 100644 java/ql/src/change-notes/2024-03-12-request-sanitizers.md delete mode 100644 java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md delete mode 100644 java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md create mode 100644 java/ql/src/change-notes/released/0.8.13.md delete mode 100644 javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.13.md delete mode 100644 javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md delete mode 100644 javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md create mode 100644 javascript/ql/src/change-notes/released/0.8.13.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.13.md create mode 100644 python/ql/lib/change-notes/released/0.11.13.md create mode 100644 python/ql/src/change-notes/released/0.9.13.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-27-process-spawn.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.13.md create mode 100644 ruby/ql/src/change-notes/released/0.8.13.md create mode 100644 shared/controlflow/change-notes/released/0.1.13.md rename shared/dataflow/change-notes/{2024-02-28-hidden-subpaths.md => released/0.2.4.md} (90%) create mode 100644 shared/mad/change-notes/released/0.2.13.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.12.md create mode 100644 shared/regex/change-notes/released/0.2.13.md create mode 100644 shared/ssa/change-notes/released/0.2.13.md create mode 100644 shared/threat-models/change-notes/released/0.0.12.md create mode 100644 shared/tutorial/change-notes/released/0.2.13.md create mode 100644 shared/typetracking/change-notes/released/0.2.13.md create mode 100644 shared/typos/change-notes/released/0.2.13.md create mode 100644 shared/util/change-notes/released/0.2.13.md create mode 100644 shared/yaml/change-notes/released/0.2.13.md rename swift/ql/lib/change-notes/{2024-03-28-swift-5.10.md => released/0.3.13.md} (59%) create mode 100644 swift/ql/src/change-notes/released/0.3.13.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 4b69a1d5b36..0ca4b539325 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. + ## 0.12.9 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md deleted file mode 100644 index cf0b920e29d..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md deleted file mode 100644 index 6def8303336..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added destructors for temporary objects with extended lifetimes to the intermediate representation. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md deleted file mode 100644 index 88b4048f8cd..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md deleted file mode 100644 index 3dde8805599..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md deleted file mode 100644 index 759386e461f..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.12.10.md b/cpp/ql/lib/change-notes/released/0.12.10.md new file mode 100644 index 00000000000..64d91af2118 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.10.md @@ -0,0 +1,14 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index dce1e02b646..bd659eb114f 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.9 +lastReleaseVersion: 0.12.10 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index eebc47c089b..f8358ae72df 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.10-dev +version: 0.12.10 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 52c46f65267..01ec26e694f 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. + ## 0.9.8 No user-facing changes. diff --git a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md deleted file mode 100644 index f96a4684b76..00000000000 --- a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md deleted file mode 100644 index bc9082285d4..00000000000 --- a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md deleted file mode 100644 index 14a8c2e7ce7..00000000000 --- a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md deleted file mode 100644 index 12a185add1e..00000000000 --- a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md deleted file mode 100644 index d4a4e0a7307..00000000000 --- a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. diff --git a/cpp/ql/src/change-notes/released/0.9.9.md b/cpp/ql/src/change-notes/released/0.9.9.md new file mode 100644 index 00000000000..46f120c28d7 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.9.md @@ -0,0 +1,15 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 9ca6c6f2678..aabed7c396b 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.8 +lastReleaseVersion: 0.9.9 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ce202c1b85d..5d9a5252c00 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.9-dev +version: 0.9.9 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index bea6df22685..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.13 + +No user-facing changes. + ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +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 6d169efe920..e5f93542dfc 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.12 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index f3bf8992f7d..f12c8e2c95e 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.13-dev +version: 1.7.13 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index bea6df22685..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.13 + +No user-facing changes. + ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +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 6d169efe920..e5f93542dfc 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.12 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index a732080cfb4..74444203f84 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.13-dev +version: 1.7.13 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 37d2c804be8..27133addc5c 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. + ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md deleted file mode 100644 index fea31bb8bbb..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md deleted file mode 100644 index a32f8a7c22c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md deleted file mode 100644 index 0bee733157c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. -* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. diff --git a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md deleted file mode 100644 index 36be2372b4e..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md deleted file mode 100644 index 2ac3a1059c6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md deleted file mode 100644 index 7111e8966d6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Support for C# 12 / .NET8. diff --git a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md deleted file mode 100644 index 1d105049185..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. diff --git a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md deleted file mode 100644 index 84db6a663ae..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. diff --git a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md deleted file mode 100644 index 204ae7db3ae..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. diff --git a/csharp/ql/lib/change-notes/released/0.9.0.md b/csharp/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..32e8e35d76d --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,17 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index af4e83c549e..8b9fc185202 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.9.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 7d389b9e560..bd9558fa249 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.13-dev +version: 0.9.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index df97b469252..bbd7f8bc147 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. + ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md deleted file mode 100644 index 19494571ad1..00000000000 --- a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. - diff --git a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md deleted file mode 100644 index 3ca0b14f7b2..00000000000 --- a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: majorAnalysis ---- -* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. - diff --git a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md deleted file mode 100644 index 026321ea9af..00000000000 --- a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. - diff --git a/csharp/ql/src/change-notes/released/0.8.13.md b/csharp/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..e534c66fc8e --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,10 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index e9d1d526a81..609c625fe5a 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.13-dev +version: 0.8.13 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index d9dd6b6f2e2..83a42fb0551 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.12.md b/go/ql/consistency-queries/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +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 e679dc42092..997fb8da83c 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 3c398a7cf84..fbd2978d438 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: 0.0.12-dev +version: 0.0.12 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index bc6537af817..0fa4dfe0ec8 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.7.13 + +### Minor Analysis Improvements + +* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. + ## 0.7.12 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md deleted file mode 100644 index 72ea242510d..00000000000 --- a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md b/go/ql/lib/change-notes/released/0.7.13.md similarity index 63% rename from go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md rename to go/ql/lib/change-notes/released/0.7.13.md index 42fc258f973..c6fab4935a1 100644 --- a/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md +++ b/go/ql/lib/change-notes/released/0.7.13.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.7.13 + +### Minor Analysis Improvements + * The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 8cc40e77dec..2c1fbe254fa 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.13-dev +version: 0.7.13 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 497f82e8679..2bee579db9c 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.13 + +### New Queries + +* The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. + ## 0.7.12 No user-facing changes. diff --git a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md deleted file mode 100644 index 0b6a78df9f9..00000000000 --- a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md deleted file mode 100644 index ad6f712958e..00000000000 --- a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. diff --git a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md b/go/ql/src/change-notes/released/0.7.13.md similarity index 53% rename from go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md rename to go/ql/src/change-notes/released/0.7.13.md index 663932005eb..e11b3986979 100644 --- a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md +++ b/go/ql/src/change-notes/released/0.7.13.md @@ -1,4 +1,10 @@ ---- -category: newQuery ---- +## 0.7.13 + +### New Queries + * The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 080d257b8d0..2ab9616891b 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.13-dev +version: 0.7.13 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 0205da54adf..af83bbb0700 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.20 + +No user-facing changes. + ## 0.0.19 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.20.md b/java/ql/automodel/src/change-notes/released/0.0.20.md new file mode 100644 index 00000000000..98daf20a59a --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.20.md @@ -0,0 +1,3 @@ +## 0.0.20 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index f406319f372..d2e86745bca 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.19 +lastReleaseVersion: 0.0.20 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 1c22e00eb0e..c4b5940f928 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.20-dev +version: 0.0.20 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 5f8d993294a..36c5ca2a6a6 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. + ## 0.8.12 No user-facing changes. diff --git a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md deleted file mode 100644 index 31f76712828..00000000000 --- a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/change-notes/2024-03-21-env-vars.md b/java/ql/lib/change-notes/2024-03-21-env-vars.md deleted file mode 100644 index 9306a814a7c..00000000000 --- a/java/ql/lib/change-notes/2024-03-21-env-vars.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. diff --git a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md deleted file mode 100644 index 029d3dfbff4..00000000000 --- a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. -* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. diff --git a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md deleted file mode 100644 index d6fb561e725..00000000000 --- a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. diff --git a/java/ql/lib/change-notes/released/0.9.0.md b/java/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..ad20fb98cbf --- /dev/null +++ b/java/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,12 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index af4e83c549e..8b9fc185202 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.9.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index c3a0a9476bb..768e57ad9c6 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.13-dev +version: 0.9.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 73ab2688c98..4b758396b91 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. + ## 0.8.12 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-03-06-url-forward-query.md b/java/ql/src/change-notes/2024-03-06-url-forward-query.md deleted file mode 100644 index 46028bda4f2..00000000000 --- a/java/ql/src/change-notes/2024-03-06-url-forward-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). diff --git a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md deleted file mode 100644 index 08229d6d7d0..00000000000 --- a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md deleted file mode 100644 index 017e5abd7ee..00000000000 --- a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. diff --git a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md deleted file mode 100644 index b1531dab655..00000000000 --- a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. diff --git a/java/ql/src/change-notes/released/0.8.13.md b/java/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..22dba4fa4fa --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,14 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ab853297ba9..d67193843be 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.13-dev +version: 0.8.13 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 2bdc2e4152a..4d66cfc9f6c 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. + ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md deleted file mode 100644 index 836719b5d6b..00000000000 --- a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for TypeScript 5.4. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/released/0.8.13.md b/javascript/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..bfa4a62d5ae --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,5 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index fd7d5476402..1ed74009ef0 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.13-dev +version: 0.8.13 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 43cbc8facf8..2ae12bca484 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. + ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md deleted file mode 100644 index 4d591aaf9a2..00000000000 --- a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md deleted file mode 100644 index 5bcb0ba7463..00000000000 --- a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/0.8.13.md b/javascript/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..282e759a49e --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 6967bcbff04..49576a207cd 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.13-dev +version: 0.8.13 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index c61f0b26d00..3b1863cfbf1 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.13 + +No user-facing changes. + ## 0.7.12 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.13.md b/misc/suite-helpers/change-notes/released/0.7.13.md new file mode 100644 index 00000000000..fac5f02103f --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.13.md @@ -0,0 +1,3 @@ +## 0.7.13 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c366cba2c91..94ac367a755 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.13-dev +version: 0.7.13 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 966356feed2..645b686ac8c 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.13 + +No user-facing changes. + ## 0.11.12 No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.13.md b/python/ql/lib/change-notes/released/0.11.13.md new file mode 100644 index 00000000000..e8bde4caf9f --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.13.md @@ -0,0 +1,3 @@ +## 0.11.13 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 28f7725cf85..387883efdfb 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.12 +lastReleaseVersion: 0.11.13 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index f2357da6c2c..c150a37790c 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.13-dev +version: 0.11.13 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index d8737a310b3..53ed161fecb 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.13 + +No user-facing changes. + ## 0.9.12 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.13.md b/python/ql/src/change-notes/released/0.9.13.md new file mode 100644 index 00000000000..e188021618c --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.13.md @@ -0,0 +1,3 @@ +## 0.9.13 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 12f1a311eca..74bee36d150 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.12 +lastReleaseVersion: 0.9.13 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index c6d2ef63f29..b24b25bd821 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.13-dev +version: 0.9.13 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 9b2503120f9..a3305576053 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. + ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md deleted file mode 100644 index 9c20f05d865..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md deleted file mode 100644 index f008869fbcd..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md deleted file mode 100644 index 704a4f27a61..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md deleted file mode 100644 index a02ca0d00a2..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md deleted file mode 100644 index 963479568a0..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow is now tracked through `ActiveRecord` scopes. diff --git a/ruby/ql/lib/change-notes/released/0.8.13.md b/ruby/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..cc844ffc764 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index bc8a4aa2813..1d8218b6fa0 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.13-dev +version: 0.8.13 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 3810951acb5..508fa71de4a 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.13 + +No user-facing changes. + ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.13.md b/ruby/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..4f7ef70cec5 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,3 @@ +## 0.8.13 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b1821390958..029e052108f 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.13-dev +version: 0.8.13 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index fc8378ff3b9..aaebbbb4318 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.13 + +No user-facing changes. + ## 0.1.12 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.13.md b/shared/controlflow/change-notes/released/0.1.13.md new file mode 100644 index 00000000000..827f5e3ec44 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.13.md @@ -0,0 +1,3 @@ +## 0.1.13 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index bfd6e903641..f43379f8196 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.12 +lastReleaseVersion: 0.1.13 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 3a6d1131f86..cb04f661c85 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.13-dev +version: 0.1.13 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 458cde63603..b5267b6d9b0 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.4 + +### Minor Analysis Improvements + +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. + ## 0.2.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/released/0.2.4.md similarity index 90% rename from shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md rename to shared/dataflow/change-notes/released/0.2.4.md index 05a48eb8050..075802f2b5d 100644 --- a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md +++ b/shared/dataflow/change-notes/released/0.2.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.2.4 + +### Minor Analysis Improvements + * Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 0b605901b42..7f1e3841dcd 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.3 +lastReleaseVersion: 0.2.4 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 386290bde29..9c0976ca109 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.4-dev +version: 0.2.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index df97cb97717..afeee789487 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.13.md b/shared/mad/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index a5ea1168b92..77a69168fe9 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 7f284f0bfb8..465ab789d4a 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.12.md b/shared/rangeanalysis/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index e679dc42092..997fb8da83c 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 4d8f0196bec..df8fbd5e837 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.12-dev +version: 0.0.12 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 2b955eaf376..6b0950887f9 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.13.md b/shared/regex/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 607c548a2a3..e47715dd322 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 7e74b25e47e..7b073dbfe7b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.13.md b/shared/ssa/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 5c773a56a66..3877a1a98f9 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index d9dd6b6f2e2..83a42fb0551 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.12.md b/shared/threat-models/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index e679dc42092..997fb8da83c 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 08e2ae0c330..1d8b017f798 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.12-dev +version: 0.0.12 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 01fdf65587a..32d42cbeb39 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.13.md b/shared/tutorial/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index cf4f16583a3..ee00cd14490 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: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 242657d19d8..18024e28981 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.13.md b/shared/typetracking/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 166a7c170cd..7f1ce51b4df 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 26e1c3ae546..dbf4204fcad 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.13.md b/shared/typos/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 47bc18e8902..36250357dae 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index b8ae5cf523d..1c0c715c928 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.13.md b/shared/util/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/util/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 7862cb35d81..e4c8f9b2166 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 9a5910ec374..67d1e732a0f 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.13.md b/shared/yaml/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 9813c6fb57c..f12c77ef671 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 5a35f47aa89..4bc92a92c82 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.3.13 + +### Major Analysis Improvements + +* Upgraded to Swift 5.10 +* New AST node is extracted: `ThenStmt` + ## 0.3.12 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md b/swift/ql/lib/change-notes/released/0.3.13.md similarity index 59% rename from swift/ql/lib/change-notes/2024-03-28-swift-5.10.md rename to swift/ql/lib/change-notes/released/0.3.13.md index bfc371a89e9..c1639172fd4 100644 --- a/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md +++ b/swift/ql/lib/change-notes/released/0.3.13.md @@ -1,5 +1,6 @@ ---- -category: majorAnalysis ---- +## 0.3.13 + +### Major Analysis Improvements + * Upgraded to Swift 5.10 * New AST node is extracted: `ThenStmt` diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3e6664ee4b6..8791b4867d1 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.12 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index d06a216db89..f4143f29340 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.13-dev +version: 0.3.13 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 4ae49cfbfea..2b745bd7bb1 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.13 + +No user-facing changes. + ## 0.3.12 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.13.md b/swift/ql/src/change-notes/released/0.3.13.md new file mode 100644 index 00000000000..890ab1e3e3f --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.13.md @@ -0,0 +1,3 @@ +## 0.3.13 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3e6664ee4b6..8791b4867d1 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.12 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 1dace3146de..21fae0156ea 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.13-dev +version: 0.3.13 groups: - swift - queries From 8e61c6625bb59ec0c340c6156fb80ff85a889d38 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Apr 2024 15:27:42 +0000 Subject: [PATCH 400/497] Post-release preparation for codeql-cli-2.17.0 --- 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/automodel/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 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/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/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f8358ae72df..b30dbe69bdf 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.10 +version: 0.12.11-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 5d9a5252c00..f50b33af9b7 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.9 +version: 0.9.10-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index f12c8e2c95e..aca41e884d3 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.13 +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 74444203f84..66d7baf4780 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.13 +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index bd9558fa249..a9f7479eb79 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.9.0 +version: 0.9.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 609c625fe5a..98079d4221d 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.13 +version: 0.8.14-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index fbd2978d438..394af7249ef 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: 0.0.12 +version: 0.0.13-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 2c1fbe254fa..223333b72f8 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.13 +version: 0.7.14-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 2ab9616891b..d4c2ffb9813 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.13 +version: 0.7.14-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index c4b5940f928..f8e68acb110 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.20 +version: 0.0.21-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 768e57ad9c6..7b2749aac2b 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.9.0 +version: 0.9.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 d67193843be..a65abf369a2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.13 +version: 0.8.14-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 1ed74009ef0..38c25fa5a2a 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.13 +version: 0.8.14-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 49576a207cd..ffae5cff5fc 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.13 +version: 0.8.14-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 94ac367a755..b97bfa5c48e 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.13 +version: 0.7.14-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index c150a37790c..e1da2c2e6d2 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.13 +version: 0.11.14-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index b24b25bd821..d51237e1530 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.13 +version: 0.9.14-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 1d8218b6fa0..ad8045b2c74 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.13 +version: 0.8.14-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 029e052108f..4eac4d7e8c3 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.13 +version: 0.8.14-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index cb04f661c85..de39d621324 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.13 +version: 0.1.14-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9c0976ca109..162b5dd0490 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.4 +version: 0.2.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 77a69168fe9..97c5f74aead 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index df8fbd5e837..bdf15a5964d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.12 +version: 0.0.13-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index e47715dd322..166f8c54d5d 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 3877a1a98f9..ddfa057d1ca 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 1d8b017f798..2a03df5358e 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.12 +version: 0.0.13-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index ee00cd14490..a5430d0a98b 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: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 7f1ce51b4df..39ee0cfe8e7 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 36250357dae..6f20df0d94b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index e4c8f9b2166..c81bb89d78c 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index f12c77ef671..ca9995d0e56 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index f4143f29340..ff871c756bf 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.13 +version: 0.3.14-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 21fae0156ea..2ab77eb339d 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.13 +version: 0.3.14-dev groups: - swift - queries From 55987d9c1fdf4a1f52cd78a3e79d58bb5c890765 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 Apr 2024 00:16:19 +0000 Subject: [PATCH 401/497] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 88 +-- .../library-coverage/coverage.rst | 6 +- .../library-coverage/coverage.csv | 509 +++++++++--------- .../library-coverage/coverage.rst | 10 +- 4 files changed, 308 insertions(+), 305 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 6da4acdabe6..fb0bbc0db2d 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -1,44 +1,44 @@ -package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:commandargs,source:environment,source:file,source:file-write,source:local,source:remote,source:windows-registry,summary:taint,summary:value -Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,6,,, -Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,, -Dapper,55,,,,,,,,,,,,55,,,,,,,,, -ILCompiler,,,81,,,,,,,,,,,,,,,,,,81, -ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,63, -ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,29,3 -ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,5, -Internal.IL,,,69,,,,,,,,,,,,,,,,,,67,2 -Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,8,1 -Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,331,36 -JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,14, -Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,, -Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,24, -Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,13, -Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,12 -Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,,,,15, -Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,,,,37,1 -Microsoft.Extensions.Configuration,,2,89,,,,,,,,,,,,2,,,,,,86,3 -Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,120, -Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,12, -Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,13, -Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,15, -Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,14,2 -Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,22,1 -Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,,,,10, -Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,59,1 -Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,8, -Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,64, -Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,78, -Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,1, -Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,7, -Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,5,5 -Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,3, -Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,4,4, -Mono.Linker,,,163,,,,,,,,,,,,,,,,,,163, -MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,, -Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,73,18 -ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,7, -SourceGenerators,,,4,,,,,,,,,,,,,,,,,,4, -System,67,30,11864,,8,8,9,,,4,5,,33,2,3,1,17,3,4,,9898,1966 -Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,, +package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:commandargs,source:database,source:environment,source:file,source:file-write,source:local,source:remote,source:windows-registry,summary:taint,summary:value +Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,,6,,, +Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,,, +Dapper,55,42,1,,,,,,,,,,55,,42,,,,,,,,1 +ILCompiler,,,81,,,,,,,,,,,,,,,,,,,81, +ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,,63, +ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,,29,3 +ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,,5, +Internal.IL,,,69,,,,,,,,,,,,,,,,,,,67,2 +Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,,8,1 +Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,,331,36 +JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,,14, +Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,,, +Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,,24, +Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,,13, +Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,,12 +Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,,,,,37,1 +Microsoft.Extensions.Configuration,,2,89,,,,,,,,,,,,,2,,,,,,86,3 +Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,,120, +Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,,12, +Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,,13, +Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,,14,2 +Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,,22,1 +Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,,,,,10, +Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,,59,1 +Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,,8, +Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,,64, +Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,,78, +Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,,1, +Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,,7, +Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,,5,5 +Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,,3, +Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,,4,4, +Mono.Linker,,,163,,,,,,,,,,,,,,,,,,,163, +MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, +Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 +ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, +SourceGenerators,,,4,,,,,,,,,,,,,,,,,,,4, +System,67,44,11872,,8,8,9,,,4,5,,33,2,,3,15,17,3,4,,9906,1966 +Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 0b11da25d91..3b2123f7ec5 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",30,11864,67,9 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",12,1547,148, - Totals,,42,13418,409,9 + System,"``System.*``, ``System``",44,11872,67,9 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",54,1548,148, + Totals,,98,13427,409,9 diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 03d97bcb9d8..3c7ab6453c5 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,253 +1,256 @@ -package,sink,source,summary,sink:bean-validation,sink:command-injection,sink:credentials-key,sink:credentials-password,sink:credentials-username,sink:encryption-iv,sink:encryption-salt,sink:environment-injection,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:notification,sink:ognl-injection,sink:path-injection,sink:pending-intents,sink:regex-use,sink:regex-use[-1],sink:regex-use[0],sink:regex-use[],sink:regex-use[f-1],sink:regex-use[f1],sink:regex-use[f],sink:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:trust-boundary-violation,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:database,source:environment,source:file,source:remote,summary:taint,summary:value -actions.osgi,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, -android.app,77,,103,,,,,,,,,,11,,,,,7,,,,,,,42,,,17,,,,,,,,,,,,,,,,,,,,,,18,85 -android.content,24,31,154,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,8,,,,,,4,27,,,,,63,91 -android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,,,41, -android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 -android.os,1,2,122,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,2,,,,,,41,81 -android.support.v4.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -android.util,6,16,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, -androidx.core.app,47,,95,,,,,,,,,,,,,,,,,,,,,,41,,,6,,,,,,,,,,,,,,,,,,,,,,12,83 -androidx.fragment.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,5,,,,,27,61 -antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -ch.ethz.ssh2,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.alibaba.druid.sql,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,1, -com.alibaba.fastjson2,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.amazonaws.auth,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.auth0.jwt.algorithms,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.azure.identity,3,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,2,,8,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,8, -com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,,,,,63,24 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.flogger,29,,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.google.common.io,10,,73,,,,,,,,,1,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,72,1 -com.google.gson,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,14 -com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, -com.jcraft.jsch,5,,1,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1, -com.microsoft.sqlserver.jdbc,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.mitchellbosecke.pebble,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, -com.mongodb,10,,,,,,4,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.opensymphony.xwork2,56,,961,,,,,,,,,,,,,,,,,,,,,,,56,,,,,,,,,,,,,,,,,,,,,,,,867,94 -com.rabbitmq.client,,21,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,7, -com.sshtools.j2ssh.authentication,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.crypto.provider,19,,,,,17,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.jndi.ldap,4,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.net.httpserver,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.net.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.rowset,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.auth.module,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.ntlm,5,,,,,,3,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.sun.security.sasl.digest,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.thoughtworks.xstream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -com.trilead.ssh2,13,,,,,2,4,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.unboundid.ldap.sdk,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.zaxxer.hikari,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, -freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,, -groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,5,4,2572,76 -io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, -io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,, -io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 -io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,2,, -io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,,,,,13,143,116 -io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,, -io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -io.netty.util,2,,23,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,21,2 -jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,2, -jakarta.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,1, -jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, -jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 -jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 -java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,51,1,47,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,45,2 -java.lang,38,3,102,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,59,43 -java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, -java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, -java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,529,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,49,480 -javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, -javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -javax.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, -javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, -javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -javax.management,2,,1,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -javax.naming,7,,1,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -javax.net.ssl,4,,,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.portlet,,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,61, -javax.print.attribute.standard,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.script,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.security.auth.callback,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.security.auth.kerberos,6,,,,,4,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.servlet,7,21,3,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,3,,,2,,,,,,,,,21,3, -javax.sql,7,,,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, -javax.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, -javax.ws.rs.core,3,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,2,,,,,,,,,94,55 -javax.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, -javax.xml.transform,2,,6,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,1,,,,,,,6, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, -jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23 -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 -kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,1836,13 -liquibase.database.jvm,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -liquibase.statement.core,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -net.schmizz.sshj,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,321,17 -net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,, -ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,, -okhttp3,4,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,23,27 -org.acegisecurity,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,49, -org.antlr.runtime,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, -org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,548,14 -org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, -org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.lang,,,767,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,596,171 -org.apache.commons.lang3,6,,425,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,294,131 -org.apache.commons.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.net,13,12,,,,,2,2,,,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,,,,,12,, -org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 -org.apache.cxf.catalog,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.apache.cxf.common.classloader,3,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,,,,,,,,,,,,, -org.apache.cxf.common.jaxb,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.common.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.configuration.jsse,2,,,,,,,,,,,,,,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.helpers,10,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,,,,,,,,,5,,,,,,,,, -org.apache.cxf.resource,9,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,5,,,,,,,,,,,,,,, -org.apache.cxf.staxutils,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, -org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,11, -org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,, -org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,,,,,, -org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,, -org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,, -org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,73,2,45,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,72,,,,,,,,,,,,,2,45, -org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 -org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.apache.http,48,3,95,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,46,,,,,,,,,,,,,3,86,9 -org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,57, -org.apache.ibatis.mapping,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.log4j,11,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.logging.log4j,359,,8,,,,,,,,,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4 -org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.shiro.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.sshd.client.session,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.struts.beanvalidation.validation.interceptor,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -org.apache.struts2,14,,3873,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,3,,,,,,,,,,3839,34 -org.apache.tools.ant,12,,,,1,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, -org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, -org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, -org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, -org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.jdbi.v3.core,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, -org.jenkins.ui.icon,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,1 -org.jenkins.ui.symbol,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,8 -org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 -org.keycloak.models.map.storage,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -org.kohsuke.stapler,20,24,363,,,,,,,,,,,,,2,,,,,,,,,,,9,,,,,,,,,4,,,,,5,,,,,,,,24,352,11 -org.mvel2,16,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.openjdk.jmh.runner.options,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.owasp.esapi,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.pac4j.jwt.config.encryption,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.pac4j.jwt.config.signature,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.scijava.log,13,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.slf4j,55,,6,,,,,,,,,,,,,,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4 -org.springframework.beans,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30 -org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 -org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.springframework.core.io,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, -org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -org.springframework.http,14,,77,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,67,10 -org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,, -org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,, -org.springframework.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.ldap,47,,,,,,,,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.security.core.userdetails,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,3,,142,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,90,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -org.springframework.web.util,,9,157,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,132,25 -org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,2, -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, -org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, -play.mvc,1,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,13,24, -ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 -ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -retrofit2,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1, -sun.jvmstat.perfdata.monitor.protocol.local,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.jvmstat.perfdata.monitor.protocol.rmi,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.misc,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.net.ftp,5,,,,,,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.net.www.protocol.http,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.acl,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.jgss.krb5,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.krb5,9,,,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.pkcs,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.pkcs11,3,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.provider,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.security.x509,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -sun.tools.jconsole,28,,,,,,13,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +package,sink,source,summary,sink:bean-validation,sink:command-injection,sink:credentials-key,sink:credentials-password,sink:credentials-username,sink:encryption-iv,sink:encryption-salt,sink:environment-injection,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:notification,sink:ognl-injection,sink:path-injection,sink:pending-intents,sink:regex-use,sink:regex-use[-1],sink:regex-use[0],sink:regex-use[],sink:regex-use[f-1],sink:regex-use[f1],sink:regex-use[f],sink:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:trust-boundary-violation,sink:url-forward,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:database,source:environment,source:file,source:remote,summary:taint,summary:value +actions.osgi,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, +android.app,77,,103,,,,,,,,,,11,,,,,7,,,,,,,42,,,17,,,,,,,,,,,,,,,,,,,,,,,18,85 +android.content,24,31,154,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,8,,,,,,,4,27,,,,,63,91 +android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,,,,41, +android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 +android.os,1,2,122,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,2,,,,,,41,81 +android.support.v4.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +android.util,6,16,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, +androidx.core.app,47,,95,,,,,,,,,,,,,,,,,,,,,,41,,,6,,,,,,,,,,,,,,,,,,,,,,,12,83 +androidx.fragment.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,5,,,,,27,61 +antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +ch.ethz.ssh2,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.alibaba.druid.sql,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,1, +com.alibaba.fastjson2,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.amazonaws.auth,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.auth0.jwt.algorithms,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.azure.identity,3,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,2,,8,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,8, +com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,,,,,,63,24 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.flogger,29,,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.google.common.io,10,,73,,,,,,,,,1,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,,72,1 +com.google.gson,,,52,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38,14 +com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,, +com.jcraft.jsch,5,,1,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1, +com.microsoft.sqlserver.jdbc,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.mitchellbosecke.pebble,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,, +com.mongodb,10,,,,,,4,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.opensymphony.xwork2,56,,961,,,,,,,,,,,,,,,,,,,,,,,56,,,,,,,,,,,,,,,,,,,,,,,,,867,94 +com.rabbitmq.client,,21,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,7, +com.sshtools.j2ssh.authentication,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.crypto.provider,19,,,,,17,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.jndi.ldap,4,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.net.httpserver,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.net.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.rowset,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.auth.module,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.ntlm,5,,,,,,3,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.sun.security.sasl.digest,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.thoughtworks.xstream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +com.trilead.ssh2,13,,,,,2,4,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.unboundid.ldap.sdk,17,,,,,,,,,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +com.zaxxer.hikari,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, +freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, +groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,,5,4,2572,76 +io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, +io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,, +io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 +io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,,2,, +io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,,,,,,13,143,116 +io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,, +io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +io.netty.util,2,,23,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,21,2 +jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,2, +jakarta.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, +jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,1, +jakarta.servlet,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,, +jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 +jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +java.io,51,1,47,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,1,,45,2 +java.lang,38,3,102,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,3,,,59,43 +java.net,23,3,31,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,3,31, +java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,,38, +java.security,21,,7,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,4 +java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,,1,,,,2, +java.util,47,2,529,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,,2,,,49,480 +javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,7, +javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +javax.faces.context,2,7,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, +javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +javax.management,2,,1,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.naming,7,,1,,,,,,,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.net.ssl,4,,,,,,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.portlet,1,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,61, +javax.print.attribute.standard,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.script,1,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.security.auth.callback,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.security.auth.kerberos,6,,,,,4,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.servlet,9,22,3,,,,,,,,,,,,,,1,,,,,,,,,,1,,,,,,,,,,3,,,2,2,,,,,,,,,22,3, +javax.sql,7,,,,,,4,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +javax.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +javax.ws.rs.core,3,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,2,,,,,,,,,94,55 +javax.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, +javax.xml.transform,2,,6,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,,,,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, +jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23 +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 +kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,,1836,13 +liquibase.database.jvm,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +liquibase.statement.core,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +net.schmizz.sshj,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,321,17 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,, +ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,, +okhttp3,4,,50,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,23,27 +org.acegisecurity,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,49, +org.antlr.runtime,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6, +org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,,548,14 +org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,, +org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.lang,,,767,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,596,171 +org.apache.commons.lang3,6,,425,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,294,131 +org.apache.commons.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.net,13,12,,,,,2,2,,,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,,,,,,12,, +org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.cxf.catalog,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.apache.cxf.common.classloader,3,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,2,,,,,,,,,,,,,,,, +org.apache.cxf.common.jaxb,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.common.logging,6,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.configuration.jsse,2,,,,,,,,,,,,,,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.helpers,10,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,5,,,,,,,,, +org.apache.cxf.resource,9,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,5,,,,,,,,,,,,,,,, +org.apache.cxf.staxutils,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, +org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,11, +org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,, +org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,, +org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,,, +org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,73,2,45,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,72,,,,,,,,,,,,,,2,45, +org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.apache.http,48,3,95,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,46,,,,,,,,,,,,,,3,86,9 +org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,57, +org.apache.ibatis.mapping,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.log4j,11,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.logging.log4j,359,,8,,,,,,,,,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,4 +org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.shiro.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.sshd.client.session,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.struts.beanvalidation.validation.interceptor,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +org.apache.struts2,14,,3873,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,3,,,,,,,,,,,3839,34 +org.apache.tools.ant,12,,,,1,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,, +org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,, +org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, +org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, +org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,,, +org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.jdbi.v3.core,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,, +org.jenkins.ui.icon,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,1 +org.jenkins.ui.symbol,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,8 +org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 +org.keycloak.models.map.storage,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +org.kohsuke.stapler,20,24,363,,,,,,,,,,,,,2,,,,,,,,,,,9,,,,,,,,,3,,,,,1,5,,,,,,,,24,352,11 +org.mvel2,16,,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.openjdk.jmh.runner.options,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,, +org.owasp.esapi,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.pac4j.jwt.config.encryption,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.pac4j.jwt.config.signature,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.scijava.log,13,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.slf4j,55,,6,,,,,,,,,,,,,,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4 +org.springframework.beans,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30 +org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.springframework.core.io,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,,, +org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +org.springframework.http,14,,77,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,,,67,10 +org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,, +org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,,, +org.springframework.jndi,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.ldap,47,,,,,,,,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.security.core.userdetails,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,3,,142,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,90,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.portlet,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +org.springframework.web.servlet,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.util,,9,157,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,132,25 +org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,2, +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, +org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,, +play.mvc,1,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,13,24, +ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 +ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +retrofit2,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1, +sun.jvmstat.perfdata.monitor.protocol.local,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.jvmstat.perfdata.monitor.protocol.rmi,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.misc,3,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.net.ftp,5,,,,,,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.net.www.protocol.http,3,,,,,,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.acl,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.jgss.krb5,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.krb5,9,,,,,3,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.pkcs,4,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.pkcs11,3,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.provider,2,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.ssl,3,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.security.x509,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +sun.tools.jconsole,28,,,,,,13,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index ce93e37f09a..7168c29ee3e 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,746,239,80,,9,,,25 - Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 + Java Standard Library,``java.*``,10,760,240,80,,9,,,26 + Java extensions,"``javax.*``, ``jakarta.*``",69,688,85,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 - `Spring `_,``org.springframework.*``,38,481,118,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,209 - Totals,,308,18962,2559,338,16,128,33,1,409 + `Spring `_,``org.springframework.*``,38,481,122,5,,28,14,,35 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,208 + Totals,,310,18976,2569,338,16,128,33,1,409 From a5d4fad8066f14f48aecdeda68633cad55bdd4f4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 26 Mar 2024 15:43:16 +0100 Subject: [PATCH 402/497] C++: Output destructor calls for delete expressions --- cpp/ql/lib/semmle/code/cpp/PrintAST.qll | 2 +- cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 25 +- .../raw/internal/TranslatedElement.qll | 5 - .../raw/internal/TranslatedExpr.qll | 8 +- .../examples/expressions/PrintAST.expected | 5 +- .../compilerGenerated.expected | 1 + .../library-tests/ir/ir/PrintAST.expected | 49 ++-- .../library-tests/ir/ir/aliased_ir.expected | 222 +++++++++++------- .../ir/ir/operand_locations.expected | 120 ++++++++-- .../test/library-tests/ir/ir/raw_ir.expected | 132 +++++++---- 10 files changed, 391 insertions(+), 178 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 88dce1ce0b4..cfb2632bb8a 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -862,7 +862,7 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(DeleteOrDeleteArrayExpr).getDestructorCall() = ele and pred = "getDestructorCall()" or - expr.(DeleteOrDeleteArrayExpr).getExpr() = ele and pred = "getExpr()" + expr.(DeleteOrDeleteArrayExpr).getExprWithReuse() = ele and pred = "getExprWithReuse()" or expr.(DestructorFieldDestruction).getExpr() = ele and pred = "getExpr()" or diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index a41a0b35fc8..50ccf2c3fc5 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1015,8 +1015,19 @@ class DeleteOrDeleteArrayExpr extends Expr, TDeleteOrDeleteArrayExpr { Expr getExpr() { // If there is a destructor call, the object being deleted is the qualifier // otherwise it is the third child. - result = this.getChild(3) or result = this.getDestructorCall().getQualifier() + exists(Expr exprWithReuse | exprWithReuse = this.getExprWithReuse() | + if not exprWithReuse instanceof ReuseExpr + then result = exprWithReuse + else result = this.getDestructorCall().getQualifier() + ) } + + /** + * Gets the object or array being deleted, and gets a re-use expression when + * there is a destructor call and the object is also the qualifier of the + * call. + */ + Expr getExprWithReuse() { result = this.getChild(3) } } /** @@ -1340,7 +1351,17 @@ class ReuseExpr extends Expr, @reuseexpr { /** * Gets the expression that is being re-used. */ - Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result), _) } + Expr getReusedExpr() { + // In the case of a prvalue, the extractor outputs the expression + // before conversion, but the converted expression is intended. + if this.isPRValueCategory() + then result = this.getBaseReusedExpr().getFullyConverted() + else result = this.getBaseReusedExpr() + } + + private Expr getBaseReusedExpr() { + expr_reuse(underlyingElement(this), unresolveElement(result), _) + } override Type getType() { result = this.getReusedExpr().getType() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 134b7802fc8..d6ad6b8fde4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -150,11 +150,6 @@ private predicate ignoreExprOnly(Expr expr) { or not translateFunction(getEnclosingFunction(expr)) and not Raw::varHasIRFunc(getEnclosingVariable(expr)) - or - exists(DeleteOrDeleteArrayExpr deleteExpr | - // Ignore the destructor call, because the duplicated qualifier breaks control flow. - deleteExpr.getDestructorCall() = expr - ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 8684f4e5606..1a668ad6c23 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -2245,7 +2245,11 @@ class TranslatedDeleteOrDeleteArrayExpr extends TranslatedNonConstantExpr, Trans final override Type getCallResultType() { result = expr.getType() } - final override TranslatedExpr getQualifier() { none() } + final override TranslatedExpr getQualifier() { + result = getTranslatedExpr(expr.getDestructorCall()) + } + + final override Instruction getQualifierResult() { none() } final override predicate hasArguments() { // All deallocator calls have at least one argument. @@ -2260,7 +2264,7 @@ class TranslatedDeleteOrDeleteArrayExpr extends TranslatedNonConstantExpr, Trans final override TranslatedExpr getArgument(int index) { // The only argument we define is the pointer to be deallocated. index = 0 and - result = getTranslatedExpr(expr.getExpr().getFullyConverted()) + result = getTranslatedExpr(expr.getExprWithReuse().getFullyConverted()) } final override predicate mayThrowException() { diff --git a/cpp/ql/test/examples/expressions/PrintAST.expected b/cpp/ql/test/examples/expressions/PrintAST.expected index 4aefbff5c55..7de95cb8b4a 100644 --- a/cpp/ql/test/examples/expressions/PrintAST.expected +++ b/cpp/ql/test/examples/expressions/PrintAST.expected @@ -426,11 +426,14 @@ DestructorCall.cpp: # 12| getQualifier(): [VariableAccess] c # 12| Type = [PointerType] C * # 12| ValueCategory = prvalue(load) +# 12| getExprWithReuse(): [ReuseExpr] reuse of c +# 12| Type = [PointerType] C * +# 12| ValueCategory = prvalue # 13| getStmt(1): [ExprStmt] ExprStmt # 13| getExpr(): [DeleteExpr] delete # 13| Type = [VoidType] void # 13| ValueCategory = prvalue -# 13| getExpr(): [VariableAccess] d +# 13| getExprWithReuse(): [VariableAccess] d # 13| Type = [PointerType] D * # 13| ValueCategory = prvalue(load) # 14| getStmt(2): [ReturnStmt] return ... diff --git a/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected b/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected index f7c1dd25dc5..b61085ff7c6 100644 --- a/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected +++ b/cpp/ql/test/library-tests/compiler_generated/compilerGenerated.expected @@ -14,6 +14,7 @@ | cpp.cpp:10:7:10:7 | operator= | Function | | cpp.cpp:10:7:10:7 | ~MyClass | Function | | cpp.cpp:15:5:15:12 | call to ~MyClass | Expr | +| cpp.cpp:15:12:15:12 | reuse of m | Expr | | cpp.cpp:16:1:16:1 | return ... | Stmt | | file://:0:0:0:0 | operator delete | Function | | file://:0:0:0:0 | operator new | Function | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 7f667cd61cf..ea9f82fbf40 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9068,11 +9068,11 @@ ir.cpp: # 1016| getExpr(): [DeleteExpr] delete # 1016| Type = [VoidType] void # 1016| ValueCategory = prvalue -# 1016| getExpr(): [Literal] 0 +# 1016| getExprWithReuse(): [Literal] 0 # 1016| Type = [NullPointerType] decltype(nullptr) # 1016| Value = [Literal] 0 # 1016| ValueCategory = prvalue -# 1016| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1016| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1016| Conversion = [PointerConversion] pointer conversion # 1016| Type = [IntPointerType] int * # 1016| Value = [StaticCast] 0 @@ -9093,6 +9093,9 @@ ir.cpp: # 1017| Type = [PointerType] String * # 1017| Value = [StaticCast] 0 # 1017| ValueCategory = prvalue +# 1017| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1017| Type = [PointerType] String * +# 1017| ValueCategory = prvalue # 1018| getStmt(2): [ExprStmt] ExprStmt # 1018| getExpr(): [DeleteExpr] delete # 1018| Type = [VoidType] void @@ -9100,11 +9103,11 @@ ir.cpp: # 1018| getDeallocatorCall(): [FunctionCall] call to operator delete # 1018| Type = [VoidType] void # 1018| ValueCategory = prvalue -# 1018| getExpr(): [Literal] 0 +# 1018| getExprWithReuse(): [Literal] 0 # 1018| Type = [NullPointerType] decltype(nullptr) # 1018| Value = [Literal] 0 # 1018| ValueCategory = prvalue -# 1018| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1018| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1018| Conversion = [PointerConversion] pointer conversion # 1018| Type = [PointerType] SizedDealloc * # 1018| Value = [StaticCast] 0 @@ -9113,11 +9116,11 @@ ir.cpp: # 1019| getExpr(): [DeleteExpr] delete # 1019| Type = [VoidType] void # 1019| ValueCategory = prvalue -# 1019| getExpr(): [Literal] 0 +# 1019| getExprWithReuse(): [Literal] 0 # 1019| Type = [NullPointerType] decltype(nullptr) # 1019| Value = [Literal] 0 # 1019| ValueCategory = prvalue -# 1019| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1019| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1019| Conversion = [PointerConversion] pointer conversion # 1019| Type = [PointerType] Overaligned * # 1019| Value = [StaticCast] 0 @@ -9138,6 +9141,9 @@ ir.cpp: # 1020| Type = [PointerType] PolymorphicBase * # 1020| Value = [StaticCast] 0 # 1020| ValueCategory = prvalue +# 1020| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1020| Type = [PointerType] PolymorphicBase * +# 1020| ValueCategory = prvalue # 1021| getStmt(5): [ReturnStmt] return ... # 1024| [TopLevelFunction] void OperatorDeleteArray() # 1024| : @@ -9146,11 +9152,11 @@ ir.cpp: # 1025| getExpr(): [DeleteArrayExpr] delete[] # 1025| Type = [VoidType] void # 1025| ValueCategory = prvalue -# 1025| getExpr(): [Literal] 0 +# 1025| getExprWithReuse(): [Literal] 0 # 1025| Type = [NullPointerType] decltype(nullptr) # 1025| Value = [Literal] 0 # 1025| ValueCategory = prvalue -# 1025| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1025| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1025| Conversion = [PointerConversion] pointer conversion # 1025| Type = [IntPointerType] int * # 1025| Value = [StaticCast] 0 @@ -9171,6 +9177,9 @@ ir.cpp: # 1026| Type = [PointerType] String * # 1026| Value = [StaticCast] 0 # 1026| ValueCategory = prvalue +# 1026| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1026| Type = [PointerType] String * +# 1026| ValueCategory = prvalue # 1027| getStmt(2): [ExprStmt] ExprStmt # 1027| getExpr(): [DeleteArrayExpr] delete[] # 1027| Type = [VoidType] void @@ -9178,11 +9187,11 @@ ir.cpp: # 1027| getDeallocatorCall(): [FunctionCall] call to operator delete[] # 1027| Type = [VoidType] void # 1027| ValueCategory = prvalue -# 1027| getExpr(): [Literal] 0 +# 1027| getExprWithReuse(): [Literal] 0 # 1027| Type = [NullPointerType] decltype(nullptr) # 1027| Value = [Literal] 0 # 1027| ValueCategory = prvalue -# 1027| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1027| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1027| Conversion = [PointerConversion] pointer conversion # 1027| Type = [PointerType] SizedDealloc * # 1027| Value = [StaticCast] 0 @@ -9191,11 +9200,11 @@ ir.cpp: # 1028| getExpr(): [DeleteArrayExpr] delete[] # 1028| Type = [VoidType] void # 1028| ValueCategory = prvalue -# 1028| getExpr(): [Literal] 0 +# 1028| getExprWithReuse(): [Literal] 0 # 1028| Type = [NullPointerType] decltype(nullptr) # 1028| Value = [Literal] 0 # 1028| ValueCategory = prvalue -# 1028| getExpr().getFullyConverted(): [StaticCast] static_cast... +# 1028| getExprWithReuse().getFullyConverted(): [StaticCast] static_cast... # 1028| Conversion = [PointerConversion] pointer conversion # 1028| Type = [PointerType] Overaligned * # 1028| Value = [StaticCast] 0 @@ -9216,6 +9225,9 @@ ir.cpp: # 1029| Type = [PointerType] PolymorphicBase * # 1029| Value = [StaticCast] 0 # 1029| ValueCategory = prvalue +# 1029| getExprWithReuse(): [ReuseExpr] reuse of static_cast... +# 1029| Type = [PointerType] PolymorphicBase * +# 1029| ValueCategory = prvalue # 1030| getStmt(5): [ReturnStmt] return ... # 1032| [CopyAssignmentOperator] EmptyStruct& EmptyStruct::operator=(EmptyStruct const&) # 1032| : @@ -16699,7 +16711,7 @@ ir.cpp: # 2085| getExpr(): [DeleteExpr] delete # 2085| Type = [VoidType] void # 2085| ValueCategory = prvalue -# 2085| getExpr(): [VariableAccess] x +# 2085| getExprWithReuse(): [VariableAccess] x # 2085| Type = [IntPointerType] int * # 2085| ValueCategory = prvalue(load) # 2086| getStmt(3): [ReturnStmt] return ... @@ -16783,6 +16795,9 @@ ir.cpp: # 2108| getQualifier(): [VariableAccess] b1 # 2108| Type = [PointerType] Base2 * # 2108| ValueCategory = prvalue(load) +# 2108| getExprWithReuse(): [ReuseExpr] reuse of b1 +# 2108| Type = [PointerType] Base2 * +# 2108| ValueCategory = prvalue # 2110| getStmt(2): [DeclStmt] declaration # 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 # 2110| Type = [PointerType] Base2 * @@ -16810,6 +16825,9 @@ ir.cpp: # 2111| getQualifier(): [VariableAccess] b2 # 2111| Type = [PointerType] Base2 * # 2111| ValueCategory = prvalue(load) +# 2111| getExprWithReuse(): [ReuseExpr] reuse of b2 +# 2111| Type = [PointerType] Base2 * +# 2111| ValueCategory = prvalue # 2113| getStmt(4): [DeclStmt] declaration # 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 2113| Type = [PointerType] Derived2 * @@ -16833,6 +16851,9 @@ ir.cpp: # 2114| getQualifier(): [VariableAccess] d # 2114| Type = [PointerType] Derived2 * # 2114| ValueCategory = prvalue(load) +# 2114| getExprWithReuse(): [ReuseExpr] reuse of d +# 2114| Type = [PointerType] Derived2 * +# 2114| ValueCategory = prvalue # 2115| getStmt(6): [ReturnStmt] return ... # 2117| [TopLevelFunction] void test_constant_folding_use(int) # 2117| : @@ -17168,7 +17189,7 @@ ir.cpp: # 2176| getExpr(): [DeleteExpr] delete # 2176| Type = [VoidType] void # 2176| ValueCategory = prvalue -# 2176| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2176| getExprWithReuse(): [ImplicitThisFieldAccess,PointerFieldAccess] x # 2176| Type = [CharPointerType] char * # 2176| ValueCategory = prvalue(load) # 2176| getQualifier(): [ThisExpr] this 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 a1e49dce3b1..cb7eb8386d0 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -6613,75 +6613,107 @@ ir.cpp: # 1015| void OperatorDelete() # 1015| Block 0 -# 1015| v1015_1(void) = EnterFunction : -# 1015| m1015_2(unknown) = AliasedDefinition : -# 1015| m1015_3(unknown) = InitializeNonLocal : -# 1015| m1015_4(unknown) = Chi : total:m1015_2, partial:m1015_3 -# 1016| r1016_1(glval) = FunctionAddress[operator delete] : -# 1016| r1016_2(int *) = Constant[0] : -# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 -# 1016| m1016_4(unknown) = ^CallSideEffect : ~m1015_4 -# 1016| m1016_5(unknown) = Chi : total:m1015_4, partial:m1016_4 -# 1017| r1017_1(glval) = FunctionAddress[operator delete] : -# 1017| r1017_2(String *) = Constant[0] : -# 1017| v1017_3(void) = Call[operator delete] : func:r1017_1, 0:r1017_2 -# 1017| m1017_4(unknown) = ^CallSideEffect : ~m1016_5 -# 1017| m1017_5(unknown) = Chi : total:m1016_5, partial:m1017_4 -# 1018| r1018_1(glval) = FunctionAddress[operator delete] : -# 1018| r1018_2(SizedDealloc *) = Constant[0] : -# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 -# 1018| m1018_4(unknown) = ^CallSideEffect : ~m1017_5 -# 1018| m1018_5(unknown) = Chi : total:m1017_5, partial:m1018_4 -# 1019| r1019_1(glval) = FunctionAddress[operator delete] : -# 1019| r1019_2(Overaligned *) = Constant[0] : -# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 -# 1019| m1019_4(unknown) = ^CallSideEffect : ~m1018_5 -# 1019| m1019_5(unknown) = Chi : total:m1018_5, partial:m1019_4 -# 1020| r1020_1(glval) = VirtualDeleteFunctionAddress : -# 1020| r1020_2(PolymorphicBase *) = Constant[0] : -# 1020| v1020_3(void) = Call[?] : func:r1020_1, 0:r1020_2 -# 1020| m1020_4(unknown) = ^CallSideEffect : ~m1019_5 -# 1020| m1020_5(unknown) = Chi : total:m1019_5, partial:m1020_4 -# 1021| v1021_1(void) = NoOp : -# 1015| v1015_5(void) = ReturnVoid : -# 1015| v1015_6(void) = AliasedUse : ~m1020_5 -# 1015| v1015_7(void) = ExitFunction : +# 1015| v1015_1(void) = EnterFunction : +# 1015| m1015_2(unknown) = AliasedDefinition : +# 1015| m1015_3(unknown) = InitializeNonLocal : +# 1015| m1015_4(unknown) = Chi : total:m1015_2, partial:m1015_3 +# 1016| r1016_1(glval) = FunctionAddress[operator delete] : +# 1016| r1016_2(int *) = Constant[0] : +# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 +# 1016| m1016_4(unknown) = ^CallSideEffect : ~m1015_4 +# 1016| m1016_5(unknown) = Chi : total:m1015_4, partial:m1016_4 +# 1017| r1017_1(String *) = Constant[0] : +# 1017| r1017_2(glval) = FunctionAddress[~String] : +# 1017| v1017_3(void) = Call[~String] : func:r1017_2 +# 1017| m1017_4(unknown) = ^CallSideEffect : ~m1016_5 +# 1017| m1017_5(unknown) = Chi : total:m1016_5, partial:m1017_4 +# 1017| v1017_6(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m1017_5 +# 1017| m1017_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 +# 1017| m1017_8(unknown) = Chi : total:m1017_5, partial:m1017_7 +# 1017| r1017_9(glval) = FunctionAddress[operator delete] : +# 1017| r1017_10(String *) = CopyValue : r1017_1 +# 1017| v1017_11(void) = Call[operator delete] : func:r1017_9, 0:r1017_10 +# 1017| m1017_12(unknown) = ^CallSideEffect : ~m1017_8 +# 1017| m1017_13(unknown) = Chi : total:m1017_8, partial:m1017_12 +# 1018| r1018_1(glval) = FunctionAddress[operator delete] : +# 1018| r1018_2(SizedDealloc *) = Constant[0] : +# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 +# 1018| m1018_4(unknown) = ^CallSideEffect : ~m1017_13 +# 1018| m1018_5(unknown) = Chi : total:m1017_13, partial:m1018_4 +# 1019| r1019_1(glval) = FunctionAddress[operator delete] : +# 1019| r1019_2(Overaligned *) = Constant[0] : +# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 +# 1019| m1019_4(unknown) = ^CallSideEffect : ~m1018_5 +# 1019| m1019_5(unknown) = Chi : total:m1018_5, partial:m1019_4 +# 1020| r1020_1(PolymorphicBase *) = Constant[0] : +# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 +# 1020| m1020_4(unknown) = ^CallSideEffect : ~m1019_5 +# 1020| m1020_5(unknown) = Chi : total:m1019_5, partial:m1020_4 +# 1020| v1020_6(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m1020_5 +# 1020| m1020_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 +# 1020| m1020_8(unknown) = Chi : total:m1020_5, partial:m1020_7 +# 1020| r1020_9(glval) = VirtualDeleteFunctionAddress : +# 1020| r1020_10(PolymorphicBase *) = CopyValue : r1020_1 +# 1020| v1020_11(void) = Call[?] : func:r1020_9, 0:r1020_10 +# 1020| m1020_12(unknown) = ^CallSideEffect : ~m1020_8 +# 1020| m1020_13(unknown) = Chi : total:m1020_8, partial:m1020_12 +# 1021| v1021_1(void) = NoOp : +# 1015| v1015_5(void) = ReturnVoid : +# 1015| v1015_6(void) = AliasedUse : ~m1020_13 +# 1015| v1015_7(void) = ExitFunction : # 1024| void OperatorDeleteArray() # 1024| Block 0 -# 1024| v1024_1(void) = EnterFunction : -# 1024| m1024_2(unknown) = AliasedDefinition : -# 1024| m1024_3(unknown) = InitializeNonLocal : -# 1024| m1024_4(unknown) = Chi : total:m1024_2, partial:m1024_3 -# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : -# 1025| r1025_2(int *) = Constant[0] : -# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 -# 1025| m1025_4(unknown) = ^CallSideEffect : ~m1024_4 -# 1025| m1025_5(unknown) = Chi : total:m1024_4, partial:m1025_4 -# 1026| r1026_1(glval) = FunctionAddress[operator delete[]] : -# 1026| r1026_2(String *) = Constant[0] : -# 1026| v1026_3(void) = Call[operator delete[]] : func:r1026_1, 0:r1026_2 -# 1026| m1026_4(unknown) = ^CallSideEffect : ~m1025_5 -# 1026| m1026_5(unknown) = Chi : total:m1025_5, partial:m1026_4 -# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : -# 1027| r1027_2(SizedDealloc *) = Constant[0] : -# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 -# 1027| m1027_4(unknown) = ^CallSideEffect : ~m1026_5 -# 1027| m1027_5(unknown) = Chi : total:m1026_5, partial:m1027_4 -# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : -# 1028| r1028_2(Overaligned *) = Constant[0] : -# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 -# 1028| m1028_4(unknown) = ^CallSideEffect : ~m1027_5 -# 1028| m1028_5(unknown) = Chi : total:m1027_5, partial:m1028_4 -# 1029| r1029_1(glval) = FunctionAddress[operator delete[]] : -# 1029| r1029_2(PolymorphicBase *) = Constant[0] : -# 1029| v1029_3(void) = Call[operator delete[]] : func:r1029_1, 0:r1029_2 -# 1029| m1029_4(unknown) = ^CallSideEffect : ~m1028_5 -# 1029| m1029_5(unknown) = Chi : total:m1028_5, partial:m1029_4 -# 1030| v1030_1(void) = NoOp : -# 1024| v1024_5(void) = ReturnVoid : -# 1024| v1024_6(void) = AliasedUse : ~m1029_5 -# 1024| v1024_7(void) = ExitFunction : +# 1024| v1024_1(void) = EnterFunction : +# 1024| m1024_2(unknown) = AliasedDefinition : +# 1024| m1024_3(unknown) = InitializeNonLocal : +# 1024| m1024_4(unknown) = Chi : total:m1024_2, partial:m1024_3 +# 1025| r1025_1(glval) = FunctionAddress[operator delete[]] : +# 1025| r1025_2(int *) = Constant[0] : +# 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 +# 1025| m1025_4(unknown) = ^CallSideEffect : ~m1024_4 +# 1025| m1025_5(unknown) = Chi : total:m1024_4, partial:m1025_4 +# 1026| r1026_1(String *) = Constant[0] : +# 1026| r1026_2(glval) = FunctionAddress[~String] : +# 1026| v1026_3(void) = Call[~String] : func:r1026_2 +# 1026| m1026_4(unknown) = ^CallSideEffect : ~m1025_5 +# 1026| m1026_5(unknown) = Chi : total:m1025_5, partial:m1026_4 +# 1026| v1026_6(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m1026_5 +# 1026| m1026_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 +# 1026| m1026_8(unknown) = Chi : total:m1026_5, partial:m1026_7 +# 1026| r1026_9(glval) = FunctionAddress[operator delete[]] : +# 1026| r1026_10(String *) = CopyValue : r1026_1 +# 1026| v1026_11(void) = Call[operator delete[]] : func:r1026_9, 0:r1026_10 +# 1026| m1026_12(unknown) = ^CallSideEffect : ~m1026_8 +# 1026| m1026_13(unknown) = Chi : total:m1026_8, partial:m1026_12 +# 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : +# 1027| r1027_2(SizedDealloc *) = Constant[0] : +# 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 +# 1027| m1027_4(unknown) = ^CallSideEffect : ~m1026_13 +# 1027| m1027_5(unknown) = Chi : total:m1026_13, partial:m1027_4 +# 1028| r1028_1(glval) = FunctionAddress[operator delete[]] : +# 1028| r1028_2(Overaligned *) = Constant[0] : +# 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 +# 1028| m1028_4(unknown) = ^CallSideEffect : ~m1027_5 +# 1028| m1028_5(unknown) = Chi : total:m1027_5, partial:m1028_4 +# 1029| r1029_1(PolymorphicBase *) = Constant[0] : +# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 +# 1029| m1029_4(unknown) = ^CallSideEffect : ~m1028_5 +# 1029| m1029_5(unknown) = Chi : total:m1028_5, partial:m1029_4 +# 1029| v1029_6(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m1029_5 +# 1029| m1029_7(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 +# 1029| m1029_8(unknown) = Chi : total:m1029_5, partial:m1029_7 +# 1029| r1029_9(glval) = FunctionAddress[operator delete[]] : +# 1029| r1029_10(PolymorphicBase *) = CopyValue : r1029_1 +# 1029| v1029_11(void) = Call[operator delete[]] : func:r1029_9, 0:r1029_10 +# 1029| m1029_12(unknown) = ^CallSideEffect : ~m1029_8 +# 1029| m1029_13(unknown) = Chi : total:m1029_8, partial:m1029_12 +# 1030| v1030_1(void) = NoOp : +# 1024| v1024_5(void) = ReturnVoid : +# 1024| v1024_6(void) = AliasedUse : ~m1029_13 +# 1024| v1024_7(void) = ExitFunction : # 1034| void EmptyStructInit() # 1034| Block 0 @@ -12830,18 +12862,26 @@ ir.cpp: # 2107| m2107_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_8 # 2107| m2107_14(unknown) = Chi : total:m2107_7, partial:m2107_13 # 2107| m2107_15(Base2 *) = Store[b1] : &:r2107_1, r2107_8 -# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_2(glval) = VariableAddress[b1] : -# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, m2107_15 -# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 +# 2108| r2108_1(glval) = VariableAddress[b1] : +# 2108| r2108_2(Base2 *) = Load[b1] : &:r2108_1, m2107_15 +# 2108| r2108_3(glval) = FunctionAddress[~Base2] : +# 2108| v2108_4(void) = Call[~Base2] : func:r2108_3 # 2108| m2108_5(unknown) = ^CallSideEffect : ~m2107_12 # 2108| m2108_6(unknown) = Chi : total:m2107_12, partial:m2108_5 +# 2108| v2108_7(void) = ^IndirectReadSideEffect[-1] : &:r2108_2, ~m2107_14 +# 2108| m2108_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2108_2 +# 2108| m2108_9(unknown) = Chi : total:m2107_14, partial:m2108_8 +# 2108| r2108_10(glval) = VirtualDeleteFunctionAddress : +# 2108| r2108_11(Base2 *) = CopyValue : r2108_1 +# 2108| v2108_12(void) = Call[?] : func:r2108_10, 0:r2108_11 +# 2108| m2108_13(unknown) = ^CallSideEffect : ~m2108_6 +# 2108| m2108_14(unknown) = Chi : total:m2108_6, partial:m2108_13 # 2110| r2110_1(glval) = VariableAddress[b2] : # 2110| r2110_2(glval) = FunctionAddress[operator new] : # 2110| r2110_3(unsigned long) = Constant[16] : # 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 -# 2110| m2110_5(unknown) = ^CallSideEffect : ~m2108_6 -# 2110| m2110_6(unknown) = Chi : total:m2108_6, partial:m2110_5 +# 2110| m2110_5(unknown) = ^CallSideEffect : ~m2108_14 +# 2110| m2110_6(unknown) = Chi : total:m2108_14, partial:m2110_5 # 2110| m2110_7(unknown) = ^InitializeDynamicAllocation : &:r2110_4 # 2110| r2110_8(Derived2 *) = Convert : r2110_4 # 2110| r2110_9(glval) = FunctionAddress[Derived2] : @@ -12852,18 +12892,26 @@ ir.cpp: # 2110| m2110_14(unknown) = Chi : total:m2110_7, partial:m2110_13 # 2110| r2110_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_8 # 2110| m2110_16(Base2 *) = Store[b2] : &:r2110_1, r2110_15 -# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_2(glval) = VariableAddress[b2] : -# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, m2110_16 -# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 +# 2111| r2111_1(glval) = VariableAddress[b2] : +# 2111| r2111_2(Base2 *) = Load[b2] : &:r2111_1, m2110_16 +# 2111| r2111_3(glval) = FunctionAddress[~Base2] : +# 2111| v2111_4(void) = Call[~Base2] : func:r2111_3 # 2111| m2111_5(unknown) = ^CallSideEffect : ~m2110_12 # 2111| m2111_6(unknown) = Chi : total:m2110_12, partial:m2111_5 +# 2111| v2111_7(void) = ^IndirectReadSideEffect[-1] : &:r2111_2, ~m2110_14 +# 2111| m2111_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_2 +# 2111| m2111_9(unknown) = Chi : total:m2110_14, partial:m2111_8 +# 2111| r2111_10(glval) = VirtualDeleteFunctionAddress : +# 2111| r2111_11(Base2 *) = CopyValue : r2111_1 +# 2111| v2111_12(void) = Call[?] : func:r2111_10, 0:r2111_11 +# 2111| m2111_13(unknown) = ^CallSideEffect : ~m2111_6 +# 2111| m2111_14(unknown) = Chi : total:m2111_6, partial:m2111_13 # 2113| r2113_1(glval) = VariableAddress[d] : # 2113| r2113_2(glval) = FunctionAddress[operator new] : # 2113| r2113_3(unsigned long) = Constant[16] : # 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 -# 2113| m2113_5(unknown) = ^CallSideEffect : ~m2111_6 -# 2113| m2113_6(unknown) = Chi : total:m2111_6, partial:m2113_5 +# 2113| m2113_5(unknown) = ^CallSideEffect : ~m2111_14 +# 2113| m2113_6(unknown) = Chi : total:m2111_14, partial:m2113_5 # 2113| m2113_7(unknown) = ^InitializeDynamicAllocation : &:r2113_4 # 2113| r2113_8(Derived2 *) = Convert : r2113_4 # 2113| r2113_9(glval) = FunctionAddress[Derived2] : @@ -12873,17 +12921,25 @@ ir.cpp: # 2113| m2113_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_8 # 2113| m2113_14(unknown) = Chi : total:m2113_7, partial:m2113_13 # 2113| m2113_15(Derived2 *) = Store[d] : &:r2113_1, r2113_8 -# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_2(glval) = VariableAddress[d] : -# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, m2113_15 -# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 +# 2114| r2114_1(glval) = VariableAddress[d] : +# 2114| r2114_2(Derived2 *) = Load[d] : &:r2114_1, m2113_15 +# 2114| r2114_3(glval) = FunctionAddress[~Derived2] : +# 2114| v2114_4(void) = Call[~Derived2] : func:r2114_3 # 2114| m2114_5(unknown) = ^CallSideEffect : ~m2113_12 # 2114| m2114_6(unknown) = Chi : total:m2113_12, partial:m2114_5 +# 2114| v2114_7(void) = ^IndirectReadSideEffect[-1] : &:r2114_2, ~m2113_14 +# 2114| m2114_8(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2114_2 +# 2114| m2114_9(unknown) = Chi : total:m2113_14, partial:m2114_8 +# 2114| r2114_10(glval) = VirtualDeleteFunctionAddress : +# 2114| r2114_11(Derived2 *) = CopyValue : r2114_1 +# 2114| v2114_12(void) = Call[?] : func:r2114_10, 0:r2114_11 +# 2114| m2114_13(unknown) = ^CallSideEffect : ~m2114_6 +# 2114| m2114_14(unknown) = Chi : total:m2114_6, partial:m2114_13 # 2115| r2115_1(glval) = VariableAddress[#return] : # 2115| m2115_2(int) = Uninitialized[#return] : &:r2115_1 # 2105| r2105_5(glval) = VariableAddress[#return] : # 2105| v2105_6(void) = ReturnValue : &:r2105_5, m2115_2 -# 2105| v2105_7(void) = AliasedUse : ~m2114_6 +# 2105| v2105_7(void) = AliasedUse : ~m2114_14 # 2105| v2105_8(void) = ExitFunction : # 2119| void test_constant_folding() diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index eaf35e9029a..80ec181a219 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -5654,60 +5654,100 @@ | ir.cpp:1011:12:1011:12 | Unary | r1011_3 | | ir.cpp:1015:6:1015:19 | ChiPartial | partial:m1015_3 | | ir.cpp:1015:6:1015:19 | ChiTotal | total:m1015_2 | -| ir.cpp:1015:6:1015:19 | SideEffect | ~m1020_5 | +| ir.cpp:1015:6:1015:19 | SideEffect | ~m1020_13 | | ir.cpp:1016:3:1016:35 | CallTarget | func:r1016_1 | | ir.cpp:1016:3:1016:35 | ChiPartial | partial:m1016_4 | | ir.cpp:1016:3:1016:35 | ChiTotal | total:m1015_4 | | ir.cpp:1016:3:1016:35 | SideEffect | ~m1015_4 | | ir.cpp:1016:10:1016:35 | Arg(0) | 0:r1016_2 | -| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_1 | +| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_2 | +| ir.cpp:1017:3:1017:38 | CallTarget | func:r1017_9 | | ir.cpp:1017:3:1017:38 | ChiPartial | partial:m1017_4 | +| ir.cpp:1017:3:1017:38 | ChiPartial | partial:m1017_12 | | ir.cpp:1017:3:1017:38 | ChiTotal | total:m1016_5 | +| ir.cpp:1017:3:1017:38 | ChiTotal | total:m1017_8 | | ir.cpp:1017:3:1017:38 | SideEffect | ~m1016_5 | -| ir.cpp:1017:10:1017:38 | Arg(0) | 0:r1017_2 | +| ir.cpp:1017:3:1017:38 | SideEffect | ~m1017_8 | +| ir.cpp:1017:10:1017:38 | Address | &:r1017_1 | +| ir.cpp:1017:10:1017:38 | Address | &:r1017_1 | +| ir.cpp:1017:10:1017:38 | Arg(0) | 0:r1017_10 | +| ir.cpp:1017:10:1017:38 | ChiPartial | partial:m1017_7 | +| ir.cpp:1017:10:1017:38 | ChiTotal | total:m1017_5 | +| ir.cpp:1017:10:1017:38 | SideEffect | ~m1017_5 | +| ir.cpp:1017:10:1017:38 | Unary | r1017_1 | | ir.cpp:1018:3:1018:44 | CallTarget | func:r1018_1 | | ir.cpp:1018:3:1018:44 | ChiPartial | partial:m1018_4 | -| ir.cpp:1018:3:1018:44 | ChiTotal | total:m1017_5 | -| ir.cpp:1018:3:1018:44 | SideEffect | ~m1017_5 | +| ir.cpp:1018:3:1018:44 | ChiTotal | total:m1017_13 | +| ir.cpp:1018:3:1018:44 | SideEffect | ~m1017_13 | | ir.cpp:1018:10:1018:44 | Arg(0) | 0:r1018_2 | | ir.cpp:1019:3:1019:43 | CallTarget | func:r1019_1 | | ir.cpp:1019:3:1019:43 | ChiPartial | partial:m1019_4 | | ir.cpp:1019:3:1019:43 | ChiTotal | total:m1018_5 | | ir.cpp:1019:3:1019:43 | SideEffect | ~m1018_5 | | ir.cpp:1019:10:1019:43 | Arg(0) | 0:r1019_2 | -| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_1 | +| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_2 | +| ir.cpp:1020:3:1020:47 | CallTarget | func:r1020_9 | | ir.cpp:1020:3:1020:47 | ChiPartial | partial:m1020_4 | +| ir.cpp:1020:3:1020:47 | ChiPartial | partial:m1020_12 | | ir.cpp:1020:3:1020:47 | ChiTotal | total:m1019_5 | +| ir.cpp:1020:3:1020:47 | ChiTotal | total:m1020_8 | | ir.cpp:1020:3:1020:47 | SideEffect | ~m1019_5 | -| ir.cpp:1020:10:1020:47 | Arg(0) | 0:r1020_2 | +| ir.cpp:1020:3:1020:47 | SideEffect | ~m1020_8 | +| ir.cpp:1020:10:1020:47 | Address | &:r1020_1 | +| ir.cpp:1020:10:1020:47 | Address | &:r1020_1 | +| ir.cpp:1020:10:1020:47 | Arg(0) | 0:r1020_10 | +| ir.cpp:1020:10:1020:47 | ChiPartial | partial:m1020_7 | +| ir.cpp:1020:10:1020:47 | ChiTotal | total:m1020_5 | +| ir.cpp:1020:10:1020:47 | SideEffect | ~m1020_5 | +| ir.cpp:1020:10:1020:47 | Unary | r1020_1 | | ir.cpp:1024:6:1024:24 | ChiPartial | partial:m1024_3 | | ir.cpp:1024:6:1024:24 | ChiTotal | total:m1024_2 | -| ir.cpp:1024:6:1024:24 | SideEffect | ~m1029_5 | +| ir.cpp:1024:6:1024:24 | SideEffect | ~m1029_13 | | ir.cpp:1025:3:1025:37 | CallTarget | func:r1025_1 | | ir.cpp:1025:3:1025:37 | ChiPartial | partial:m1025_4 | | ir.cpp:1025:3:1025:37 | ChiTotal | total:m1024_4 | | ir.cpp:1025:3:1025:37 | SideEffect | ~m1024_4 | | ir.cpp:1025:12:1025:37 | Arg(0) | 0:r1025_2 | -| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_1 | +| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_2 | +| ir.cpp:1026:3:1026:40 | CallTarget | func:r1026_9 | | ir.cpp:1026:3:1026:40 | ChiPartial | partial:m1026_4 | +| ir.cpp:1026:3:1026:40 | ChiPartial | partial:m1026_12 | | ir.cpp:1026:3:1026:40 | ChiTotal | total:m1025_5 | +| ir.cpp:1026:3:1026:40 | ChiTotal | total:m1026_8 | | ir.cpp:1026:3:1026:40 | SideEffect | ~m1025_5 | -| ir.cpp:1026:12:1026:40 | Arg(0) | 0:r1026_2 | +| ir.cpp:1026:3:1026:40 | SideEffect | ~m1026_8 | +| ir.cpp:1026:12:1026:40 | Address | &:r1026_1 | +| ir.cpp:1026:12:1026:40 | Address | &:r1026_1 | +| ir.cpp:1026:12:1026:40 | Arg(0) | 0:r1026_10 | +| ir.cpp:1026:12:1026:40 | ChiPartial | partial:m1026_7 | +| ir.cpp:1026:12:1026:40 | ChiTotal | total:m1026_5 | +| ir.cpp:1026:12:1026:40 | SideEffect | ~m1026_5 | +| ir.cpp:1026:12:1026:40 | Unary | r1026_1 | | ir.cpp:1027:3:1027:46 | CallTarget | func:r1027_1 | | ir.cpp:1027:3:1027:46 | ChiPartial | partial:m1027_4 | -| ir.cpp:1027:3:1027:46 | ChiTotal | total:m1026_5 | -| ir.cpp:1027:3:1027:46 | SideEffect | ~m1026_5 | +| ir.cpp:1027:3:1027:46 | ChiTotal | total:m1026_13 | +| ir.cpp:1027:3:1027:46 | SideEffect | ~m1026_13 | | ir.cpp:1027:12:1027:46 | Arg(0) | 0:r1027_2 | | ir.cpp:1028:3:1028:45 | CallTarget | func:r1028_1 | | ir.cpp:1028:3:1028:45 | ChiPartial | partial:m1028_4 | | ir.cpp:1028:3:1028:45 | ChiTotal | total:m1027_5 | | ir.cpp:1028:3:1028:45 | SideEffect | ~m1027_5 | | ir.cpp:1028:12:1028:45 | Arg(0) | 0:r1028_2 | -| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_1 | +| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_2 | +| ir.cpp:1029:3:1029:49 | CallTarget | func:r1029_9 | | ir.cpp:1029:3:1029:49 | ChiPartial | partial:m1029_4 | +| ir.cpp:1029:3:1029:49 | ChiPartial | partial:m1029_12 | | ir.cpp:1029:3:1029:49 | ChiTotal | total:m1028_5 | +| ir.cpp:1029:3:1029:49 | ChiTotal | total:m1029_8 | | ir.cpp:1029:3:1029:49 | SideEffect | ~m1028_5 | -| ir.cpp:1029:12:1029:49 | Arg(0) | 0:r1029_2 | +| ir.cpp:1029:3:1029:49 | SideEffect | ~m1029_8 | +| ir.cpp:1029:12:1029:49 | Address | &:r1029_1 | +| ir.cpp:1029:12:1029:49 | Address | &:r1029_1 | +| ir.cpp:1029:12:1029:49 | Arg(0) | 0:r1029_10 | +| ir.cpp:1029:12:1029:49 | ChiPartial | partial:m1029_7 | +| ir.cpp:1029:12:1029:49 | ChiTotal | total:m1029_5 | +| ir.cpp:1029:12:1029:49 | SideEffect | ~m1029_5 | +| ir.cpp:1029:12:1029:49 | Unary | r1029_1 | | ir.cpp:1034:6:1034:20 | ChiPartial | partial:m1034_3 | | ir.cpp:1034:6:1034:20 | ChiTotal | total:m1034_2 | | ir.cpp:1034:6:1034:20 | SideEffect | m1034_3 | @@ -10620,7 +10660,7 @@ | ir.cpp:2105:5:2105:18 | ChiPartial | partial:m2105_3 | | ir.cpp:2105:5:2105:18 | ChiTotal | total:m2105_2 | | ir.cpp:2105:5:2105:18 | Load | m2115_2 | -| ir.cpp:2105:5:2105:18 | SideEffect | ~m2114_6 | +| ir.cpp:2105:5:2105:18 | SideEffect | ~m2114_14 | | ir.cpp:2107:12:2107:13 | Address | &:r2107_1 | | ir.cpp:2107:17:2107:27 | Address | &:r2107_4 | | ir.cpp:2107:17:2107:27 | Address | &:r2107_8 | @@ -10638,13 +10678,23 @@ | ir.cpp:2107:17:2107:27 | SideEffect | ~m2107_6 | | ir.cpp:2107:17:2107:27 | StoreValue | r2107_8 | | ir.cpp:2107:17:2107:27 | Unary | r2107_4 | -| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_1 | +| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_3 | +| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_10 | | ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_5 | +| ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_13 | | ir.cpp:2108:5:2108:13 | ChiTotal | total:m2107_12 | +| ir.cpp:2108:5:2108:13 | ChiTotal | total:m2108_6 | | ir.cpp:2108:5:2108:13 | SideEffect | ~m2107_12 | +| ir.cpp:2108:5:2108:13 | SideEffect | ~m2108_6 | +| ir.cpp:2108:12:2108:13 | Address | &:r2108_1 | | ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | -| ir.cpp:2108:12:2108:13 | Arg(0) | 0:r2108_3 | +| ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | +| ir.cpp:2108:12:2108:13 | Arg(0) | 0:r2108_11 | +| ir.cpp:2108:12:2108:13 | ChiPartial | partial:m2108_8 | +| ir.cpp:2108:12:2108:13 | ChiTotal | total:m2107_14 | | ir.cpp:2108:12:2108:13 | Load | m2107_15 | +| ir.cpp:2108:12:2108:13 | SideEffect | ~m2107_14 | +| ir.cpp:2108:12:2108:13 | Unary | r2108_1 | | ir.cpp:2110:12:2110:13 | Address | &:r2110_1 | | ir.cpp:2110:17:2110:30 | Address | &:r2110_4 | | ir.cpp:2110:17:2110:30 | Address | &:r2110_8 | @@ -10655,21 +10705,31 @@ | ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_5 | | ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_11 | | ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_13 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2108_6 | +| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2108_14 | | ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_6 | | ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_7 | -| ir.cpp:2110:17:2110:30 | SideEffect | ~m2108_6 | +| ir.cpp:2110:17:2110:30 | SideEffect | ~m2108_14 | | ir.cpp:2110:17:2110:30 | SideEffect | ~m2110_6 | | ir.cpp:2110:17:2110:30 | StoreValue | r2110_15 | | ir.cpp:2110:17:2110:30 | Unary | r2110_4 | | ir.cpp:2110:17:2110:30 | Unary | r2110_8 | -| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_1 | +| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_3 | +| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_10 | | ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_5 | +| ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_13 | | ir.cpp:2111:5:2111:13 | ChiTotal | total:m2110_12 | +| ir.cpp:2111:5:2111:13 | ChiTotal | total:m2111_6 | | ir.cpp:2111:5:2111:13 | SideEffect | ~m2110_12 | +| ir.cpp:2111:5:2111:13 | SideEffect | ~m2111_6 | +| ir.cpp:2111:12:2111:13 | Address | &:r2111_1 | | ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | -| ir.cpp:2111:12:2111:13 | Arg(0) | 0:r2111_3 | +| ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | +| ir.cpp:2111:12:2111:13 | Arg(0) | 0:r2111_11 | +| ir.cpp:2111:12:2111:13 | ChiPartial | partial:m2111_8 | +| ir.cpp:2111:12:2111:13 | ChiTotal | total:m2110_14 | | ir.cpp:2111:12:2111:13 | Load | m2110_16 | +| ir.cpp:2111:12:2111:13 | SideEffect | ~m2110_14 | +| ir.cpp:2111:12:2111:13 | Unary | r2111_1 | | ir.cpp:2113:15:2113:15 | Address | &:r2113_1 | | ir.cpp:2113:19:2113:32 | Address | &:r2113_4 | | ir.cpp:2113:19:2113:32 | Address | &:r2113_8 | @@ -10680,20 +10740,30 @@ | ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_5 | | ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_11 | | ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_13 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2111_6 | +| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2111_14 | | ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_6 | | ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_7 | -| ir.cpp:2113:19:2113:32 | SideEffect | ~m2111_6 | +| ir.cpp:2113:19:2113:32 | SideEffect | ~m2111_14 | | ir.cpp:2113:19:2113:32 | SideEffect | ~m2113_6 | | ir.cpp:2113:19:2113:32 | StoreValue | r2113_8 | | ir.cpp:2113:19:2113:32 | Unary | r2113_4 | -| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_1 | +| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_3 | +| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_10 | | ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_5 | +| ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_13 | | ir.cpp:2114:5:2114:12 | ChiTotal | total:m2113_12 | +| ir.cpp:2114:5:2114:12 | ChiTotal | total:m2114_6 | | ir.cpp:2114:5:2114:12 | SideEffect | ~m2113_12 | +| ir.cpp:2114:5:2114:12 | SideEffect | ~m2114_6 | +| ir.cpp:2114:12:2114:12 | Address | &:r2114_1 | | ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | -| ir.cpp:2114:12:2114:12 | Arg(0) | 0:r2114_3 | +| ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | +| ir.cpp:2114:12:2114:12 | Arg(0) | 0:r2114_11 | +| ir.cpp:2114:12:2114:12 | ChiPartial | partial:m2114_8 | +| ir.cpp:2114:12:2114:12 | ChiTotal | total:m2113_14 | | ir.cpp:2114:12:2114:12 | Load | m2113_15 | +| ir.cpp:2114:12:2114:12 | SideEffect | ~m2113_14 | +| ir.cpp:2114:12:2114:12 | Unary | r2114_1 | | ir.cpp:2115:1:2115:1 | Address | &:r2115_1 | | ir.cpp:2119:6:2119:26 | ChiPartial | partial:m2119_3 | | ir.cpp:2119:6:2119:26 | ChiTotal | total:m2119_2 | 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 595eeb47460..25d6225d77e 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6226,33 +6226,45 @@ ir.cpp: # 1015| void OperatorDelete() # 1015| Block 0 -# 1015| v1015_1(void) = EnterFunction : -# 1015| mu1015_2(unknown) = AliasedDefinition : -# 1015| mu1015_3(unknown) = InitializeNonLocal : -# 1016| r1016_1(glval) = FunctionAddress[operator delete] : -# 1016| r1016_2(int *) = Constant[0] : -# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 -# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? -# 1017| r1017_1(glval) = FunctionAddress[operator delete] : -# 1017| r1017_2(String *) = Constant[0] : -# 1017| v1017_3(void) = Call[operator delete] : func:r1017_1, 0:r1017_2 -# 1017| mu1017_4(unknown) = ^CallSideEffect : ~m? -# 1018| r1018_1(glval) = FunctionAddress[operator delete] : -# 1018| r1018_2(SizedDealloc *) = Constant[0] : -# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 -# 1018| mu1018_4(unknown) = ^CallSideEffect : ~m? -# 1019| r1019_1(glval) = FunctionAddress[operator delete] : -# 1019| r1019_2(Overaligned *) = Constant[0] : -# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 -# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? -# 1020| r1020_1(glval) = VirtualDeleteFunctionAddress : -# 1020| r1020_2(PolymorphicBase *) = Constant[0] : -# 1020| v1020_3(void) = Call[?] : func:r1020_1, 0:r1020_2 -# 1020| mu1020_4(unknown) = ^CallSideEffect : ~m? -# 1021| v1021_1(void) = NoOp : -# 1015| v1015_4(void) = ReturnVoid : -# 1015| v1015_5(void) = AliasedUse : ~m? -# 1015| v1015_6(void) = ExitFunction : +# 1015| v1015_1(void) = EnterFunction : +# 1015| mu1015_2(unknown) = AliasedDefinition : +# 1015| mu1015_3(unknown) = InitializeNonLocal : +# 1016| r1016_1(glval) = FunctionAddress[operator delete] : +# 1016| r1016_2(int *) = Constant[0] : +# 1016| v1016_3(void) = Call[operator delete] : func:r1016_1, 0:r1016_2 +# 1016| mu1016_4(unknown) = ^CallSideEffect : ~m? +# 1017| r1017_1(String *) = Constant[0] : +# 1017| r1017_2(glval) = FunctionAddress[~String] : +# 1017| v1017_3(void) = Call[~String] : func:r1017_2 +# 1017| mu1017_4(unknown) = ^CallSideEffect : ~m? +# 1017| v1017_5(void) = ^IndirectReadSideEffect[-1] : &:r1017_1, ~m? +# 1017| mu1017_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1017_1 +# 1017| r1017_7(glval) = FunctionAddress[operator delete] : +# 1017| r1017_8(String *) = CopyValue : r1017_1 +# 1017| v1017_9(void) = Call[operator delete] : func:r1017_7, 0:r1017_8 +# 1017| mu1017_10(unknown) = ^CallSideEffect : ~m? +# 1018| r1018_1(glval) = FunctionAddress[operator delete] : +# 1018| r1018_2(SizedDealloc *) = Constant[0] : +# 1018| v1018_3(void) = Call[operator delete] : func:r1018_1, 0:r1018_2 +# 1018| mu1018_4(unknown) = ^CallSideEffect : ~m? +# 1019| r1019_1(glval) = FunctionAddress[operator delete] : +# 1019| r1019_2(Overaligned *) = Constant[0] : +# 1019| v1019_3(void) = Call[operator delete] : func:r1019_1, 0:r1019_2 +# 1019| mu1019_4(unknown) = ^CallSideEffect : ~m? +# 1020| r1020_1(PolymorphicBase *) = Constant[0] : +# 1020| r1020_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1020| v1020_3(void) = Call[~PolymorphicBase] : func:r1020_2 +# 1020| mu1020_4(unknown) = ^CallSideEffect : ~m? +# 1020| v1020_5(void) = ^IndirectReadSideEffect[-1] : &:r1020_1, ~m? +# 1020| mu1020_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1020_1 +# 1020| r1020_7(glval) = VirtualDeleteFunctionAddress : +# 1020| r1020_8(PolymorphicBase *) = CopyValue : r1020_1 +# 1020| v1020_9(void) = Call[?] : func:r1020_7, 0:r1020_8 +# 1020| mu1020_10(unknown) = ^CallSideEffect : ~m? +# 1021| v1021_1(void) = NoOp : +# 1015| v1015_4(void) = ReturnVoid : +# 1015| v1015_5(void) = AliasedUse : ~m? +# 1015| v1015_6(void) = ExitFunction : # 1024| void OperatorDeleteArray() # 1024| Block 0 @@ -6263,10 +6275,16 @@ ir.cpp: # 1025| r1025_2(int *) = Constant[0] : # 1025| v1025_3(void) = Call[operator delete[]] : func:r1025_1, 0:r1025_2 # 1025| mu1025_4(unknown) = ^CallSideEffect : ~m? -# 1026| r1026_1(glval) = FunctionAddress[operator delete[]] : -# 1026| r1026_2(String *) = Constant[0] : -# 1026| v1026_3(void) = Call[operator delete[]] : func:r1026_1, 0:r1026_2 +# 1026| r1026_1(String *) = Constant[0] : +# 1026| r1026_2(glval) = FunctionAddress[~String] : +# 1026| v1026_3(void) = Call[~String] : func:r1026_2 # 1026| mu1026_4(unknown) = ^CallSideEffect : ~m? +# 1026| v1026_5(void) = ^IndirectReadSideEffect[-1] : &:r1026_1, ~m? +# 1026| mu1026_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1026_1 +# 1026| r1026_7(glval) = FunctionAddress[operator delete[]] : +# 1026| r1026_8(String *) = CopyValue : r1026_1 +# 1026| v1026_9(void) = Call[operator delete[]] : func:r1026_7, 0:r1026_8 +# 1026| mu1026_10(unknown) = ^CallSideEffect : ~m? # 1027| r1027_1(glval) = FunctionAddress[operator delete[]] : # 1027| r1027_2(SizedDealloc *) = Constant[0] : # 1027| v1027_3(void) = Call[operator delete[]] : func:r1027_1, 0:r1027_2 @@ -6275,10 +6293,16 @@ ir.cpp: # 1028| r1028_2(Overaligned *) = Constant[0] : # 1028| v1028_3(void) = Call[operator delete[]] : func:r1028_1, 0:r1028_2 # 1028| mu1028_4(unknown) = ^CallSideEffect : ~m? -# 1029| r1029_1(glval) = FunctionAddress[operator delete[]] : -# 1029| r1029_2(PolymorphicBase *) = Constant[0] : -# 1029| v1029_3(void) = Call[operator delete[]] : func:r1029_1, 0:r1029_2 +# 1029| r1029_1(PolymorphicBase *) = Constant[0] : +# 1029| r1029_2(glval) = FunctionAddress[~PolymorphicBase] : +# 1029| v1029_3(void) = Call[~PolymorphicBase] : func:r1029_2 # 1029| mu1029_4(unknown) = ^CallSideEffect : ~m? +# 1029| v1029_5(void) = ^IndirectReadSideEffect[-1] : &:r1029_1, ~m? +# 1029| mu1029_6(PolymorphicBase) = ^IndirectMayWriteSideEffect[-1] : &:r1029_1 +# 1029| r1029_7(glval) = FunctionAddress[operator delete[]] : +# 1029| r1029_8(PolymorphicBase *) = CopyValue : r1029_1 +# 1029| v1029_9(void) = Call[operator delete[]] : func:r1029_7, 0:r1029_8 +# 1029| mu1029_10(unknown) = ^CallSideEffect : ~m? # 1030| v1030_1(void) = NoOp : # 1024| v1024_4(void) = ReturnVoid : # 1024| v1024_5(void) = AliasedUse : ~m? @@ -11938,11 +11962,17 @@ ir.cpp: # 2107| mu2107_10(unknown) = ^CallSideEffect : ~m? # 2107| mu2107_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_7 # 2107| mu2107_12(Base2 *) = Store[b1] : &:r2107_1, r2107_7 -# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_2(glval) = VariableAddress[b1] : -# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, ~m? -# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 +# 2108| r2108_1(glval) = VariableAddress[b1] : +# 2108| r2108_2(Base2 *) = Load[b1] : &:r2108_1, ~m? +# 2108| r2108_3(glval) = FunctionAddress[~Base2] : +# 2108| v2108_4(void) = Call[~Base2] : func:r2108_3 # 2108| mu2108_5(unknown) = ^CallSideEffect : ~m? +# 2108| v2108_6(void) = ^IndirectReadSideEffect[-1] : &:r2108_2, ~m? +# 2108| mu2108_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2108_2 +# 2108| r2108_8(glval) = VirtualDeleteFunctionAddress : +# 2108| r2108_9(Base2 *) = CopyValue : r2108_1 +# 2108| v2108_10(void) = Call[?] : func:r2108_8, 0:r2108_9 +# 2108| mu2108_11(unknown) = ^CallSideEffect : ~m? # 2110| r2110_1(glval) = VariableAddress[b2] : # 2110| r2110_2(glval) = FunctionAddress[operator new] : # 2110| r2110_3(unsigned long) = Constant[16] : @@ -11956,11 +11986,17 @@ ir.cpp: # 2110| mu2110_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_7 # 2110| r2110_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_7 # 2110| mu2110_13(Base2 *) = Store[b2] : &:r2110_1, r2110_12 -# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_2(glval) = VariableAddress[b2] : -# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, ~m? -# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 +# 2111| r2111_1(glval) = VariableAddress[b2] : +# 2111| r2111_2(Base2 *) = Load[b2] : &:r2111_1, ~m? +# 2111| r2111_3(glval) = FunctionAddress[~Base2] : +# 2111| v2111_4(void) = Call[~Base2] : func:r2111_3 # 2111| mu2111_5(unknown) = ^CallSideEffect : ~m? +# 2111| v2111_6(void) = ^IndirectReadSideEffect[-1] : &:r2111_2, ~m? +# 2111| mu2111_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_2 +# 2111| r2111_8(glval) = VirtualDeleteFunctionAddress : +# 2111| r2111_9(Base2 *) = CopyValue : r2111_1 +# 2111| v2111_10(void) = Call[?] : func:r2111_8, 0:r2111_9 +# 2111| mu2111_11(unknown) = ^CallSideEffect : ~m? # 2113| r2113_1(glval) = VariableAddress[d] : # 2113| r2113_2(glval) = FunctionAddress[operator new] : # 2113| r2113_3(unsigned long) = Constant[16] : @@ -11973,11 +12009,17 @@ ir.cpp: # 2113| mu2113_10(unknown) = ^CallSideEffect : ~m? # 2113| mu2113_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_7 # 2113| mu2113_12(Derived2 *) = Store[d] : &:r2113_1, r2113_7 -# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_2(glval) = VariableAddress[d] : -# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, ~m? -# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 +# 2114| r2114_1(glval) = VariableAddress[d] : +# 2114| r2114_2(Derived2 *) = Load[d] : &:r2114_1, ~m? +# 2114| r2114_3(glval) = FunctionAddress[~Derived2] : +# 2114| v2114_4(void) = Call[~Derived2] : func:r2114_3 # 2114| mu2114_5(unknown) = ^CallSideEffect : ~m? +# 2114| v2114_6(void) = ^IndirectReadSideEffect[-1] : &:r2114_2, ~m? +# 2114| mu2114_7(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2114_2 +# 2114| r2114_8(glval) = VirtualDeleteFunctionAddress : +# 2114| r2114_9(Derived2 *) = CopyValue : r2114_1 +# 2114| v2114_10(void) = Call[?] : func:r2114_8, 0:r2114_9 +# 2114| mu2114_11(unknown) = ^CallSideEffect : ~m? # 2115| r2115_1(glval) = VariableAddress[#return] : # 2115| mu2115_2(int) = Uninitialized[#return] : &:r2115_1 # 2105| r2105_4(glval) = VariableAddress[#return] : From bd0ddec63044499327e0f0d9219bafb02e3e40f3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 2 Apr 2024 09:59:53 +0100 Subject: [PATCH 403/497] C++: Fix join order in 'cpp/double-free'. --- cpp/ql/src/Critical/DoubleFree.ql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/Critical/DoubleFree.ql b/cpp/ql/src/Critical/DoubleFree.ql index 802c81fd050..a454b63d5a5 100644 --- a/cpp/ql/src/Critical/DoubleFree.ql +++ b/cpp/ql/src/Critical/DoubleFree.ql @@ -37,6 +37,5 @@ where DoubleFree::flowPath(source, sink) and isFree(source.getNode(), _, _, dealloc) and isFree(sink.getNode(), e2) -select sink.getNode(), source, sink, - "Memory pointed to by '" + e2.toString() + "' may already have been freed by $@.", dealloc, - dealloc.toString() +select sink.getNode(), source, sink, "Memory pointed to by $@ may already have been freed by $@.", + e2, e2.toString(), dealloc, dealloc.toString() From 9190bf25ce87ca7c67cee6bfa59b043730a727ea Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 2 Apr 2024 11:35:43 +0200 Subject: [PATCH 404/497] C++: Add example to QLDoc --- cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 50ccf2c3fc5..c818c61eb1e 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1023,9 +1023,23 @@ class DeleteOrDeleteArrayExpr extends Expr, TDeleteOrDeleteArrayExpr { } /** - * Gets the object or array being deleted, and gets a re-use expression when - * there is a destructor call and the object is also the qualifier of the - * call. + * Gets the object or array being deleted, and gets a `ReuseExpr` when there + * is a destructor call and the object is also the qualifier of the call. + * + * For example, given: + * ``` + * struct HasDestructor { ~HasDestructor(); }; + * struct PlainOldData { int x, char y; }; + * + * void f(HasDestructor* hasDestructor, PlainOldData* pod) { + * delete hasDestructor; + * delete pod; + * } + * ``` + * This predicate yields a `ReuseExpr` for `delete hasDestructor`, as the + * the deleted expression has a destructor, and that expression is also + * the qualifier of the destructor call. In the case of `delete pod` the + * predicate does not yield a `ReuseExpr`, as there is no destructor call. */ Expr getExprWithReuse() { result = this.getChild(3) } } From 01183800a6f2b5c40a746665bd356ad0a91bbdd3 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 2 Apr 2024 11:38:19 +0200 Subject: [PATCH 405/497] C++: Fix formatting --- cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index c818c61eb1e..9e12f853ba5 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1025,7 +1025,7 @@ class DeleteOrDeleteArrayExpr extends Expr, TDeleteOrDeleteArrayExpr { /** * Gets the object or array being deleted, and gets a `ReuseExpr` when there * is a destructor call and the object is also the qualifier of the call. - * + * * For example, given: * ``` * struct HasDestructor { ~HasDestructor(); }; From 352e7de07df3057b6feddc01e06042d05b9f20f2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 2 Apr 2024 10:43:10 +0100 Subject: [PATCH 406/497] C++: Accept test changes. --- .../Critical/MemoryFreed/DoubleFree.expected | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index bd886810284..893f1c7e79a 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -41,16 +41,16 @@ nodes | test_free.cpp:302:12:302:14 | buf | semmle.label | buf | subpaths #select -| test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:11:5:11:8 | call to free | call to free | -| test_free.cpp:31:27:31:27 | a | test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:30:5:30:8 | call to free | call to free | -| test_free.cpp:37:27:37:27 | a | test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:35:5:35:8 | call to free | call to free | -| test_free.cpp:46:10:46:10 | a | test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:42:22:42:25 | call to free | call to free | -| test_free.cpp:46:10:46:10 | a | test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:44:22:44:25 | call to free | call to free | -| test_free.cpp:51:10:51:10 | a | test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:50:22:50:25 | call to free | call to free | -| test_free.cpp:72:14:72:14 | a | test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:69:5:69:8 | call to free | call to free | -| test_free.cpp:85:12:85:12 | a | test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:83:5:83:13 | delete | delete | -| test_free.cpp:103:10:103:10 | a | test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:101:5:101:8 | call to free | call to free | -| test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by '* ...' may already have been freed by $@. | test_free.cpp:128:5:128:8 | call to free | call to free | -| test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:152:22:152:25 | call to free | call to free | -| test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:207:5:207:8 | call to free | call to free | -| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by 'buf' may already have been freed by $@. | test_free.cpp:301:5:301:10 | call to g_free | call to g_free | +| test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:14:10:14:10 | a | a | test_free.cpp:11:5:11:8 | call to free | call to free | +| test_free.cpp:31:27:31:27 | a | test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:31:27:31:27 | a | a | test_free.cpp:30:5:30:8 | call to free | call to free | +| test_free.cpp:37:27:37:27 | a | test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:37:27:37:27 | a | a | test_free.cpp:35:5:35:8 | call to free | call to free | +| test_free.cpp:46:10:46:10 | a | test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:46:10:46:10 | a | a | test_free.cpp:42:22:42:25 | call to free | call to free | +| test_free.cpp:46:10:46:10 | a | test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:46:10:46:10 | a | a | test_free.cpp:44:22:44:25 | call to free | call to free | +| test_free.cpp:51:10:51:10 | a | test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:51:10:51:10 | a | a | test_free.cpp:50:22:50:25 | call to free | call to free | +| test_free.cpp:72:14:72:14 | a | test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:72:14:72:14 | a | a | test_free.cpp:69:5:69:8 | call to free | call to free | +| test_free.cpp:85:12:85:12 | a | test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:85:12:85:12 | a | a | test_free.cpp:83:5:83:13 | delete | delete | +| test_free.cpp:103:10:103:10 | a | test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:103:10:103:10 | a | a | test_free.cpp:101:5:101:8 | call to free | call to free | +| test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:129:10:129:11 | * ... | * ... | test_free.cpp:128:5:128:8 | call to free | call to free | +| test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:154:10:154:10 | a | a | test_free.cpp:152:22:152:25 | call to free | call to free | +| test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:209:10:209:10 | a | a | test_free.cpp:207:5:207:8 | call to free | call to free | +| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:302:12:302:14 | buf | buf | test_free.cpp:301:5:301:10 | call to g_free | call to g_free | From 20202aba908a7d0a3e6fc3aa64d2991e838e8768 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 2 Apr 2024 13:21:46 +0200 Subject: [PATCH 407/497] Python: Deprecate `AttributeName` --- python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll index 9d0bcb3c487..8d1c691915b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll @@ -7,8 +7,12 @@ private import internal.TypeTrackingImpl as Impl import Impl::Shared::TypeTracking private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic -/** A string that may appear as the name of an attribute or access path. */ -class AttributeName = Impl::TypeTrackingInput::Content; +/** + * DEPRECATED. + * + * A string that may appear as the name of an attribute or access path. + */ +deprecated class AttributeName = Impl::TypeTrackingInput::Content; /** * A summary of the steps needed to track a value to a given dataflow node. From 8707a63edb9440890234bc4ab0019c099087f56f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 2 Apr 2024 13:26:26 +0200 Subject: [PATCH 408/497] Python: Add comments around `storeStepCommon` --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index f2a52377544..1ad6d0f7e6e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -643,6 +643,13 @@ predicate jumpStepNotSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { //-------- /** * Subset of `storeStep` that should be shared with type-tracking. + * + * NOTE: This does not include attributeStoreStep right now, since it has its' own + * modeling in the type-tracking library (which is slightly different due to + * PostUpdateNodes). + * + * As of 2024-04-02 the type-tracking library only supports precise content, so there is + * no reason to include steps for list content right now. */ predicate storeStepCommon(Node nodeFrom, ContentSet c, Node nodeTo) { tupleStoreStep(nodeFrom, c, nodeTo) From 368a500d93750a368d5d73dc34bf9da73add067e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 2 Apr 2024 12:56:00 +0200 Subject: [PATCH 409/497] C#: Neutralize some `System.Diagnostics` generated models --- csharp/ql/lib/ext/System.Diagnostics.model.yml | 9 +++++++++ .../dataflow/library/FlowSummaries.expected | 10 +++++----- .../library/FlowSummariesFiltered.expected | 5 ----- .../CWE-078/CommandInjection.expected | 17 ----------------- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/csharp/ql/lib/ext/System.Diagnostics.model.yml b/csharp/ql/lib/ext/System.Diagnostics.model.yml index 5a9eb7ced62..a05de14671f 100644 --- a/csharp/ql/lib/ext/System.Diagnostics.model.yml +++ b/csharp/ql/lib/ext/System.Diagnostics.model.yml @@ -19,3 +19,12 @@ extensions: - ["System.Diagnostics", "TraceListenerCollection", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Diagnostics", "TraceListenerCollection", False, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Diagnostics", "TraceListenerCollection", False, "set_Item", "(System.Int32,System.Diagnostics.TraceListener)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: neutralModel + data: + - ["System.Diagnostics", "ProcessStartInfo", "set_Arguments", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_FileName", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_UserName", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_Verb", "(System.String)", "summary", "manual"] + - ["System.Diagnostics", "ProcessStartInfo", "set_WorkingDirectory", "(System.String)", "summary", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 56dc0a22961..caa3e2497b9 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -9080,11 +9080,6 @@ summary | System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[this].Element;value;manual | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Diagnostics;SampleActivity;false;BeginInvoke;(System.Diagnostics.ActivityCreationOptions,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -28362,10 +28357,12 @@ neutral | System.Diagnostics;ProcessStartInfo;get_UseShellExecute;();summary;df-generated | | System.Diagnostics;ProcessStartInfo;get_Verbs;();summary;df-generated | | System.Diagnostics;ProcessStartInfo;get_WindowStyle;();summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_Arguments;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_CreateNoWindow;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_Domain;(System.String);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_ErrorDialog;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_ErrorDialogParentHandle;(System.IntPtr);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_FileName;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_LoadUserProfile;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_Password;(System.Security.SecureString);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_PasswordInClearText;(System.String);summary;df-generated | @@ -28377,7 +28374,10 @@ neutral | System.Diagnostics;ProcessStartInfo;set_StandardOutputEncoding;(System.Text.Encoding);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_UseCredentialsForNetworkingOnly;(System.Boolean);summary;df-generated | | System.Diagnostics;ProcessStartInfo;set_UseShellExecute;(System.Boolean);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_UserName;(System.String);summary;manual | +| System.Diagnostics;ProcessStartInfo;set_Verb;(System.String);summary;manual | | System.Diagnostics;ProcessStartInfo;set_WindowStyle;(System.Diagnostics.ProcessWindowStyle);summary;df-generated | +| System.Diagnostics;ProcessStartInfo;set_WorkingDirectory;(System.String);summary;manual | | System.Diagnostics;ProcessThread;ResetIdealProcessor;();summary;df-generated | | System.Diagnostics;ProcessThread;get_BasePriority;();summary;df-generated | | System.Diagnostics;ProcessThread;get_CurrentPriority;();summary;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 080bdd1e045..cd541b278d5 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -7031,11 +7031,6 @@ | System.Diagnostics;ProcessStartInfo;false;get_UserName;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_Verb;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ProcessStartInfo;false;get_WorkingDirectory;();;Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Arguments;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_UserName;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_Verb;(System.String);;Argument[0];Argument[this];taint;df-generated | -| System.Diagnostics;ProcessStartInfo;false;set_WorkingDirectory;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;ProcessThreadCollection;false;Add;(System.Diagnostics.ProcessThread);;Argument[0];Argument[this].Element;value;manual | | System.Diagnostics;ProcessThreadCollection;false;CopyTo;(System.Diagnostics.ProcessThread[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Diagnostics;SampleActivity;false;BeginInvoke;(System.Diagnostics.ActivityCreationOptions,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index fe27701d59d..b5f8eca16eb 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -6,23 +6,14 @@ edges | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | provenance | | | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:27:32:27:51 | access to property Text : String | provenance | | | CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | provenance | | | CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | provenance | | | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | provenance | | | CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | | CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | provenance | | nodes | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | @@ -37,16 +28,9 @@ nodes | CommandInjection.cs:30:74:30:82 | access to local variable userInput | semmle.label | access to local variable userInput | | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | semmle.label | access to local variable startInfo | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:34:39:34:47 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:35:40:35:48 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | | CommandInjection.cs:36:47:36:55 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | semmle.label | access to local variable startInfoProps | | CommandInjection.cs:51:46:51:80 | ... + ... | semmle.label | ... + ... | | CommandInjection.cs:51:54:51:80 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths @@ -59,5 +43,4 @@ subpaths | CommandInjection.cs:34:39:34:47 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:34:39:34:47 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:35:40:35:48 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:35:40:35:48 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:36:47:36:55 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:36:47:36:55 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | | CommandInjection.cs:51:46:51:80 | ... + ... | CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | This command line depends on a $@. | CommandInjection.cs:51:54:51:80 | call to method GetString | user-provided value | From 55fa245194bbc9a78bc36a39ec5922c72562a831 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 2 Apr 2024 15:20:56 +0100 Subject: [PATCH 410/497] Go: Revert `go version` call in `LoadGoModules` --- go/extractor/project/project.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index 92134733856..4f6f6542f75 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -212,16 +212,6 @@ func LoadGoModules(emitDiagnostics bool, goModFilePaths []string) []*GoModule { if modFile.Toolchain == nil && modFile.Go != nil && !toolchainVersionRe.Match([]byte(modFile.Go.Version)) && semver.Compare("v"+modFile.Go.Version, "v1.21.0") >= 0 { diagnostics.EmitInvalidToolchainVersion(goModFilePath, modFile.Go.Version) - - modPath := filepath.Dir(goModFilePath) - - log.Printf( - "`%s` is not a valid toolchain version, trying to install it explicitly using the canonical representation in `%s`.", - modFile.Go.Version, - modPath, - ) - - toolchain.InstallVersion(modPath, modFile.Go.Version) } } From a22b9947c02eee14b05205ab7c520a2add13de5b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 2 Apr 2024 14:52:36 +0200 Subject: [PATCH 411/497] Python: Revert `IterableSequenceNode` as LocalSourceNode When looking things over a bit more, we could actually exclude the steps that would never be used instead. A much more involved solution, but more performance oriented and clear in terms of what is supported (at least until we start supporting type-tracking with more than depth 1 access-path, if that ever happens) --- .../TypeTrackingConsistency.ql | 4 -- .../dataflow/new/internal/LocalSources.qll | 2 - .../new/internal/TypeTrackingImpl.qll | 45 +++++++++++++++++-- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 551573a7aef..645bdef5219 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -27,10 +27,6 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { TypeTrackingInput::simpleLocalSmallStep*(m, n) ) or - // TODO: when adding support for proper content, handle iterable unpacking better - // such as `for k,v in items:`, or `a, (b,c) = ...` - n instanceof DataFlow::IterableSequenceNode - or // We have missing use-use flow in // https://github.com/python/cpython/blob/0fb18b02c8ad56299d6a2910be0bab8ad601ef24/Lib/socketserver.py#L276-L303 // which I couldn't just fix. We ignore the problems here, and instead rely on the diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index 92d9e5887ad..34b137b3511 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -74,8 +74,6 @@ class LocalSourceNode extends Node { this instanceof ScopeEntryDefinitionNode or this instanceof ParameterNode - or - this instanceof IterableSequenceNode } /** Holds if this `LocalSourceNode` can flow to `nodeTo` in one or more local flow steps. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index ce95a6cca4e..42ce5cdd237 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -8,6 +8,7 @@ private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPr private import codeql.typetracking.internal.SummaryTypeTracker as SummaryTypeTracker private import semmle.python.dataflow.new.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch +private import semmle.python.dataflow.new.internal.IterableUnpacking as IterableUnpacking private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { // Dataflow nodes @@ -135,7 +136,27 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { } /** Holds if there is a simple local flow step from `nodeFrom` to `nodeTo` */ - predicate simpleLocalSmallStep = DataFlowPrivate::simpleLocalFlowStepForTypetracking/2; + predicate simpleLocalSmallStep(Node nodeFrom, Node nodeTo) { + DataFlowPrivate::simpleLocalFlowStepForTypetracking(nodeFrom, nodeTo) and + // for `for k,v in foo` no need to do local flow step from the synthetic sequence + // node for `k,v` to the tuple `k,v` -- since type-tracking only supports one level + // of content tracking, and there is one read-step from `foo` the synthetic sequence + // node required, we can skip the flow step from the synthetic sequence node to the + // tuple itself, since the read-step from the tuple to the tuple elements will not + // matter. + not ( + IterableUnpacking::iterableUnpackingForReadStep(_, _, nodeFrom) and + IterableUnpacking::iterableUnpackingTupleFlowStep(nodeFrom, nodeTo) + ) and + // for nested iterable unpacking, such as `[[a]] = foo` or `((a,b),) = bar`, we can + // ignore the flow steps from the synthetic sequence node to the real sequence node, + // since we only support one level of content in type-trackers, and the nested + // structure requires two levels at least to be useful. + not exists(SequenceNode outer | + outer.getAnElement() = nodeTo.asCfgNode() and + IterableUnpacking::iterableUnpackingTupleFlowStep(nodeFrom, nodeTo) + ) + } /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which may depend on the call graph. */ predicate levelStepCall(Node nodeFrom, LocalSourceNode nodeTo) { none() } @@ -200,7 +221,10 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { nodeTo = storeTarget or nodeTo = storeTarget.(DataFlowPrivate::SyntheticPostUpdateNode).getPreUpdateNode() - ) + ) and + // when only supporting precise content, no need for IterableElementNode (since it + // is only fed set/list content) + not nodeFrom instanceof DataFlowPublic::IterableElementNode or TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, content) } @@ -216,7 +240,22 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { nodeTo = a ) or - DataFlowPrivate::readStepCommon(nodeFrom, content, nodeTo) + DataFlowPrivate::readStepCommon(nodeFrom, content, nodeTo) and + // Since we only support one level of content in type-trackers we don't actually + // support `(aa, ab), (ba, bb) = ...`. Therefore we exclude the read-step from `(aa, + // ab)` to `aa` (since it is not needed). + not exists(SequenceNode outer | + outer.getAnElement() = nodeFrom.asCfgNode() and + IterableUnpacking::iterableUnpackingTupleFlowStep(_, nodeFrom) + ) and + // Again, due to only supporting one level deep, for `for (k,v) in ...` we exclude read-step from + // the tuple to `k` and `v`. + not exists(DataFlowPublic::IterableSequenceNode seq, DataFlowPublic::IterableElementNode elem | + IterableUnpacking::iterableUnpackingForReadStep(_, _, seq) and + IterableUnpacking::iterableUnpackingConvertingReadStep(seq, _, elem) and + IterableUnpacking::iterableUnpackingConvertingStoreStep(elem, _, nodeFrom) and + nodeFrom.asCfgNode() instanceof SequenceNode + ) or TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, content) } From 6c649c898ef167b34133b23fdce9ca276a8c41d9 Mon Sep 17 00:00:00 2001 From: Chuan-kai Lin Date: Tue, 2 Apr 2024 10:06:20 -0700 Subject: [PATCH 412/497] Revert "Release preparation for version 2.17.0" --- cpp/ql/lib/CHANGELOG.md | 15 --------------- .../2024-03-15-switches-in-guard-conditions.md | 4 ++++ .../2024-03-19-ir-temp-extended-destructors.md | 4 ++++ ...3-19-predicates-for-switches-as-guards-2.md | 5 +++++ ...-03-19-predicates-for-switches-as-guards.md | 5 +++++ .../2024-03-26-taint-inheriting-content.md | 4 ++++ cpp/ql/lib/change-notes/released/0.12.10.md | 14 -------------- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 16 ---------------- .../2024-03-05-type-confusion-query.md | 4 ++++ .../2024-03-13-glib-alloc-and-dealloc.md | 4 ++++ ...4-03-18-uninitialized-local-path-problem.md | 4 ++++ ...4-03-20-missing-check-scanf-path-problem.md | 4 ++++ .../src/change-notes/2024-03-22-boost-ssl.md | 4 ++++ cpp/ql/src/change-notes/released/0.9.9.md | 15 --------------- 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.13.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.13.md | 3 --- .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 18 ------------------ .../2024-03-04-deprecate-dotnet-and-cil.md | 4 ++++ ...-03-04-fixed-system.io.textreader-models.md | 4 ++++ ...5-new-commandargs-and-environment-models.md | 5 +++++ .../2024-03-07-remove-cil-extractor.md | 4 ++++ ...ystem.net.http.httprequestmessage-models.md | 4 ++++ .../2024-03-11-csharp12-dotnet8.md | 4 ++++ .../2024-03-11-registry-sources.md | 4 ++++ .../2024-03-13-system.io-models.md | 4 ++++ .../2024-03-14-dapper-source-models.md | 4 ++++ csharp/ql/lib/change-notes/released/0.9.0.md | 17 ----------------- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 11 ----------- .../2024-03-06-remove-default-local-sources.md | 5 +++++ .../2024-03-11-remove-stored-query-variants.md | 5 +++++ .../2024-03-21-change-compareto-signature.md | 5 +++++ csharp/ql/src/change-notes/released/0.8.13.md | 10 ---------- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.12.md | 3 --- .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 7 ------- .../change-notes/2024-03-04-macaron-sources.md | 4 ++++ ...4-03-20-dependecy-retrieval-improvement.md} | 8 +++----- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 11 ----------- .../2024-03-05-squirrel-sqli-sinks.md | 4 ++++ ...2024-03-07-uncontrolled-allocation-size.md} | 12 +++--------- ...03-14-hardcoded-credentials-more-sources.md | 4 ++++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ---- .../src/change-notes/released/0.0.20.md | 3 --- java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 13 ------------- ...3-11-add-parcelfiledescriptor-open-model.md | 4 ++++ .../ql/lib/change-notes/2024-03-21-env-vars.md | 4 ++++ .../2024-03-22-anonymous-variables.md | 5 +++++ .../2024-03-26-url-models-precision.md | 4 ++++ java/ql/lib/change-notes/released/0.9.0.md | 12 ------------ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 --------------- .../2024-03-06-url-forward-query.md | 4 ++++ .../2024-03-12-request-sanitizers.md | 4 ++++ ...03-24-sensitive-log-whitelist-tokenimage.md | 4 ++++ .../2024-03-27-MissingEnumInSwitch.md | 4 ++++ java/ql/src/change-notes/released/0.8.13.md | 14 -------------- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 6 ------ .../change-notes/2024-02-02-typescript-5-4.md | 4 ++++ .../ql/lib/change-notes/released/0.8.13.md | 5 ----- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 10 ---------- .../2024-03-07-lift-cg-restriction.md | 4 ++++ .../2024-03-21-target-blank-precision.md | 4 ++++ .../ql/src/change-notes/released/0.8.13.md | 9 --------- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ---- .../change-notes/released/0.7.13.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/0.11.13.md | 3 --- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ---- python/ql/src/change-notes/released/0.9.13.md | 3 --- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 10 ---------- .../change-notes/2024-02-27-process-spawn.md | 4 ++++ .../2024-03-01-typhoeus-request.md | 4 ++++ .../2024-03-08-activerecord-from.md | 4 ++++ .../2024-03-14-actiondispatch-uploadedfile.md | 4 ++++ .../2024-03-19-activerecord-scopes.md | 4 ++++ ruby/ql/lib/change-notes/released/0.8.13.md | 9 --------- 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/0.8.13.md | 3 --- ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ---- .../change-notes/released/0.1.13.md | 3 --- shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ------ .../0.2.4.md => 2024-02-28-hidden-subpaths.md} | 7 +++---- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ---- shared/mad/change-notes/released/0.2.13.md | 3 --- shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.12.md | 3 --- shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ---- shared/regex/change-notes/released/0.2.13.md | 3 --- shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ---- shared/ssa/change-notes/released/0.2.13.md | 3 --- shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ---- .../change-notes/released/0.0.12.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/0.2.13.md | 3 --- shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ---- .../change-notes/released/0.2.13.md | 3 --- shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ---- shared/typos/change-notes/released/0.2.13.md | 3 --- shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ---- shared/util/change-notes/released/0.2.13.md | 3 --- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ---- shared/yaml/change-notes/released/0.2.13.md | 3 --- shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 7 ------- .../0.3.13.md => 2024-03-28-swift-5.10.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/0.3.13.md | 3 --- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 173 files changed, 249 insertions(+), 478 deletions(-) create mode 100644 cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md create mode 100644 cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md create mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md create mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md create mode 100644 cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md delete mode 100644 cpp/ql/lib/change-notes/released/0.12.10.md create mode 100644 cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md create mode 100644 cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md create mode 100644 cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md create mode 100644 cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md create mode 100644 cpp/ql/src/change-notes/2024-03-22-boost-ssl.md delete mode 100644 cpp/ql/src/change-notes/released/0.9.9.md delete mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md delete mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md create mode 100644 csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md create mode 100644 csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md create mode 100644 csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md create mode 100644 csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md create mode 100644 csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md create mode 100644 csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md create mode 100644 csharp/ql/lib/change-notes/2024-03-11-registry-sources.md create mode 100644 csharp/ql/lib/change-notes/2024-03-13-system.io-models.md create mode 100644 csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md delete mode 100644 csharp/ql/lib/change-notes/released/0.9.0.md create mode 100644 csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md create mode 100644 csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md create mode 100644 csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md delete mode 100644 csharp/ql/src/change-notes/released/0.8.13.md delete mode 100644 go/ql/consistency-queries/change-notes/released/0.0.12.md create mode 100644 go/ql/lib/change-notes/2024-03-04-macaron-sources.md rename go/ql/lib/change-notes/{released/0.7.13.md => 2024-03-20-dependecy-retrieval-improvement.md} (63%) create mode 100644 go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md rename go/ql/src/change-notes/{released/0.7.13.md => 2024-03-07-uncontrolled-allocation-size.md} (53%) create mode 100644 go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md delete mode 100644 java/ql/automodel/src/change-notes/released/0.0.20.md create mode 100644 java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md create mode 100644 java/ql/lib/change-notes/2024-03-21-env-vars.md create mode 100644 java/ql/lib/change-notes/2024-03-22-anonymous-variables.md create mode 100644 java/ql/lib/change-notes/2024-03-26-url-models-precision.md delete mode 100644 java/ql/lib/change-notes/released/0.9.0.md create mode 100644 java/ql/src/change-notes/2024-03-06-url-forward-query.md create mode 100644 java/ql/src/change-notes/2024-03-12-request-sanitizers.md create mode 100644 java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md create mode 100644 java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md delete mode 100644 java/ql/src/change-notes/released/0.8.13.md create mode 100644 javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md delete mode 100644 javascript/ql/lib/change-notes/released/0.8.13.md create mode 100644 javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md create mode 100644 javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md delete mode 100644 javascript/ql/src/change-notes/released/0.8.13.md delete mode 100644 misc/suite-helpers/change-notes/released/0.7.13.md delete mode 100644 python/ql/lib/change-notes/released/0.11.13.md delete mode 100644 python/ql/src/change-notes/released/0.9.13.md create mode 100644 ruby/ql/lib/change-notes/2024-02-27-process-spawn.md create mode 100644 ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md create mode 100644 ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md create mode 100644 ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md create mode 100644 ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md delete mode 100644 ruby/ql/lib/change-notes/released/0.8.13.md delete mode 100644 ruby/ql/src/change-notes/released/0.8.13.md delete mode 100644 shared/controlflow/change-notes/released/0.1.13.md rename shared/dataflow/change-notes/{released/0.2.4.md => 2024-02-28-hidden-subpaths.md} (90%) delete mode 100644 shared/mad/change-notes/released/0.2.13.md delete mode 100644 shared/rangeanalysis/change-notes/released/0.0.12.md delete mode 100644 shared/regex/change-notes/released/0.2.13.md delete mode 100644 shared/ssa/change-notes/released/0.2.13.md delete mode 100644 shared/threat-models/change-notes/released/0.0.12.md delete mode 100644 shared/tutorial/change-notes/released/0.2.13.md delete mode 100644 shared/typetracking/change-notes/released/0.2.13.md delete mode 100644 shared/typos/change-notes/released/0.2.13.md delete mode 100644 shared/util/change-notes/released/0.2.13.md delete mode 100644 shared/yaml/change-notes/released/0.2.13.md rename swift/ql/lib/change-notes/{released/0.3.13.md => 2024-03-28-swift-5.10.md} (59%) delete mode 100644 swift/ql/src/change-notes/released/0.3.13.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 0ca4b539325..4b69a1d5b36 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,18 +1,3 @@ -## 0.12.10 - -### New Features - -* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. -* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. - -### Minor Analysis Improvements - -* Added destructors for temporary objects with extended lifetimes to the intermediate representation. - ## 0.12.9 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md new file mode 100644 index 00000000000..cf0b920e29d --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md new file mode 100644 index 00000000000..6def8303336 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md new file mode 100644 index 00000000000..88b4048f8cd --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md new file mode 100644 index 00000000000..3dde8805599 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md new file mode 100644 index 00000000000..759386e461f --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.12.10.md b/cpp/ql/lib/change-notes/released/0.12.10.md deleted file mode 100644 index 64d91af2118..00000000000 --- a/cpp/ql/lib/change-notes/released/0.12.10.md +++ /dev/null @@ -1,14 +0,0 @@ -## 0.12.10 - -### New Features - -* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. -* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. - -### Minor Analysis Improvements - -* Added destructors for temporary objects with extended lifetimes to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index bd659eb114f..dce1e02b646 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.10 +lastReleaseVersion: 0.12.9 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f8358ae72df..eebc47c089b 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.10 +version: 0.12.10-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 01ec26e694f..52c46f65267 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,19 +1,3 @@ -## 0.9.9 - -### New Queries - -* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. - -### Query Metadata Changes - -* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. - -### Minor Analysis Improvements - -* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. -* Added models for `GLib` allocation and deallocation functions. - ## 0.9.8 No user-facing changes. diff --git a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md new file mode 100644 index 00000000000..f96a4684b76 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md new file mode 100644 index 00000000000..bc9082285d4 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md new file mode 100644 index 00000000000..14a8c2e7ce7 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md new file mode 100644 index 00000000000..12a185add1e --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md new file mode 100644 index 00000000000..d4a4e0a7307 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. diff --git a/cpp/ql/src/change-notes/released/0.9.9.md b/cpp/ql/src/change-notes/released/0.9.9.md deleted file mode 100644 index 46f120c28d7..00000000000 --- a/cpp/ql/src/change-notes/released/0.9.9.md +++ /dev/null @@ -1,15 +0,0 @@ -## 0.9.9 - -### New Queries - -* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. - -### Query Metadata Changes - -* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. - -### Minor Analysis Improvements - -* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. -* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index aabed7c396b..9ca6c6f2678 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.9 +lastReleaseVersion: 0.9.8 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 5d9a5252c00..ce202c1b85d 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.9 +version: 0.9.9-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 50143af24fb..bea6df22685 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.13 - -No user-facing changes. - ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md deleted file mode 100644 index e2656ce672c..00000000000 --- a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.13 - -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 e5f93542dfc..6d169efe920 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.13 +lastReleaseVersion: 1.7.12 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index f12c8e2c95e..f3bf8992f7d 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.13 +version: 1.7.13-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 50143af24fb..bea6df22685 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 1.7.13 - -No user-facing changes. - ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md deleted file mode 100644 index e2656ce672c..00000000000 --- a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 1.7.13 - -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 e5f93542dfc..6d169efe920 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.13 +lastReleaseVersion: 1.7.12 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 74444203f84..a732080cfb4 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.13 +version: 1.7.13-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 27133addc5c..37d2c804be8 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,21 +1,3 @@ -## 0.9.0 - -### Breaking Changes - -* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. -* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. - -### Minor Analysis Improvements - -* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. -* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. -* Support for C# 12 / .NET8. -* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. -* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. -* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. -* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. -* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. - ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md new file mode 100644 index 00000000000..fea31bb8bbb --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md new file mode 100644 index 00000000000..a32f8a7c22c --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md new file mode 100644 index 00000000000..0bee733157c --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. diff --git a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md new file mode 100644 index 00000000000..36be2372b4e --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md new file mode 100644 index 00000000000..2ac3a1059c6 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md new file mode 100644 index 00000000000..7111e8966d6 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Support for C# 12 / .NET8. diff --git a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md new file mode 100644 index 00000000000..1d105049185 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. diff --git a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md new file mode 100644 index 00000000000..84db6a663ae --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. diff --git a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md new file mode 100644 index 00000000000..204ae7db3ae --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. diff --git a/csharp/ql/lib/change-notes/released/0.9.0.md b/csharp/ql/lib/change-notes/released/0.9.0.md deleted file mode 100644 index 32e8e35d76d..00000000000 --- a/csharp/ql/lib/change-notes/released/0.9.0.md +++ /dev/null @@ -1,17 +0,0 @@ -## 0.9.0 - -### Breaking Changes - -* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. -* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. - -### Minor Analysis Improvements - -* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. -* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. -* Support for C# 12 / .NET8. -* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. -* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. -* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. -* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. -* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 8b9fc185202..af4e83c549e 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.0 +lastReleaseVersion: 0.8.12 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index bd9558fa249..7d389b9e560 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.9.0 +version: 0.8.13-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index bbd7f8bc147..df97b469252 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.8.13 - -### Major Analysis Improvements - -* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. - -### Minor Analysis Improvements - -* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. -* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. - ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md new file mode 100644 index 00000000000..19494571ad1 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. + diff --git a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md new file mode 100644 index 00000000000..3ca0b14f7b2 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + diff --git a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md new file mode 100644 index 00000000000..026321ea9af --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. + diff --git a/csharp/ql/src/change-notes/released/0.8.13.md b/csharp/ql/src/change-notes/released/0.8.13.md deleted file mode 100644 index e534c66fc8e..00000000000 --- a/csharp/ql/src/change-notes/released/0.8.13.md +++ /dev/null @@ -1,10 +0,0 @@ -## 0.8.13 - -### Major Analysis Improvements - -* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. - -### Minor Analysis Improvements - -* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. -* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 609c625fe5a..e9d1d526a81 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.13 +version: 0.8.13-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 83a42fb0551..d9dd6b6f2e2 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.12 - -No user-facing changes. - ## 0.0.11 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.12.md b/go/ql/consistency-queries/change-notes/released/0.0.12.md deleted file mode 100644 index 0e206033bc4..00000000000 --- a/go/ql/consistency-queries/change-notes/released/0.0.12.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.12 - -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 997fb8da83c..e679dc42092 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.12 +lastReleaseVersion: 0.0.11 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index fbd2978d438..3c398a7cf84 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: 0.0.12 +version: 0.0.12-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 0fa4dfe0ec8..bc6537af817 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.7.13 - -### Minor Analysis Improvements - -* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. -* Added dataflow sources for the package `gopkg.in/macaron.v1`. - ## 0.7.12 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md new file mode 100644 index 00000000000..72ea242510d --- /dev/null +++ b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/change-notes/released/0.7.13.md b/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md similarity index 63% rename from go/ql/lib/change-notes/released/0.7.13.md rename to go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md index c6fab4935a1..42fc258f973 100644 --- a/go/ql/lib/change-notes/released/0.7.13.md +++ b/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md @@ -1,6 +1,4 @@ -## 0.7.13 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. -* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 8a077216acc..8afa417865a 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.13 +lastReleaseVersion: 0.7.12 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 2c1fbe254fa..8cc40e77dec 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.13 +version: 0.7.13-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 2bee579db9c..497f82e8679 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,14 +1,3 @@ -## 0.7.13 - -### New Queries - -* The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). - -### Minor Analysis Improvements - -* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. -* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. - ## 0.7.12 No user-facing changes. diff --git a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md new file mode 100644 index 00000000000..0b6a78df9f9 --- /dev/null +++ b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/released/0.7.13.md b/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md similarity index 53% rename from go/ql/src/change-notes/released/0.7.13.md rename to go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md index e11b3986979..663932005eb 100644 --- a/go/ql/src/change-notes/released/0.7.13.md +++ b/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md @@ -1,10 +1,4 @@ -## 0.7.13 - -### New Queries - +--- +category: newQuery +--- * The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). - -### Minor Analysis Improvements - -* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. -* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md new file mode 100644 index 00000000000..ad6f712958e --- /dev/null +++ b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 8a077216acc..8afa417865a 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.13 +lastReleaseVersion: 0.7.12 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 2ab9616891b..080d257b8d0 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.13 +version: 0.7.13-dev groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index af83bbb0700..0205da54adf 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.20 - -No user-facing changes. - ## 0.0.19 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.20.md b/java/ql/automodel/src/change-notes/released/0.0.20.md deleted file mode 100644 index 98daf20a59a..00000000000 --- a/java/ql/automodel/src/change-notes/released/0.0.20.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.20 - -No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index d2e86745bca..f406319f372 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.20 +lastReleaseVersion: 0.0.19 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index c4b5940f928..1c22e00eb0e 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.20 +version: 0.0.20-dev groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 36c5ca2a6a6..5f8d993294a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,16 +1,3 @@ -## 0.9.0 - -### Breaking Changes - -* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. - -### Minor Analysis Improvements - -* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. -* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. -* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. -* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. - ## 0.8.12 No user-facing changes. diff --git a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md new file mode 100644 index 00000000000..31f76712828 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/change-notes/2024-03-21-env-vars.md b/java/ql/lib/change-notes/2024-03-21-env-vars.md new file mode 100644 index 00000000000..9306a814a7c --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-21-env-vars.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. diff --git a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md new file mode 100644 index 00000000000..029d3dfbff4 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. diff --git a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md new file mode 100644 index 00000000000..d6fb561e725 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. diff --git a/java/ql/lib/change-notes/released/0.9.0.md b/java/ql/lib/change-notes/released/0.9.0.md deleted file mode 100644 index ad20fb98cbf..00000000000 --- a/java/ql/lib/change-notes/released/0.9.0.md +++ /dev/null @@ -1,12 +0,0 @@ -## 0.9.0 - -### Breaking Changes - -* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. - -### Minor Analysis Improvements - -* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. -* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. -* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. -* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 8b9fc185202..af4e83c549e 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.0 +lastReleaseVersion: 0.8.12 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 768e57ad9c6..c3a0a9476bb 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.9.0 +version: 0.8.13-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 4b758396b91..73ab2688c98 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,18 +1,3 @@ -## 0.8.13 - -### New Queries - -* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). - -### Major Analysis Improvements - -* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. - -### Minor Analysis Improvements - -* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. -* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. - ## 0.8.12 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-03-06-url-forward-query.md b/java/ql/src/change-notes/2024-03-06-url-forward-query.md new file mode 100644 index 00000000000..46028bda4f2 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-06-url-forward-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). diff --git a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md new file mode 100644 index 00000000000..08229d6d7d0 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md new file mode 100644 index 00000000000..017e5abd7ee --- /dev/null +++ b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. diff --git a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md new file mode 100644 index 00000000000..b1531dab655 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. diff --git a/java/ql/src/change-notes/released/0.8.13.md b/java/ql/src/change-notes/released/0.8.13.md deleted file mode 100644 index 22dba4fa4fa..00000000000 --- a/java/ql/src/change-notes/released/0.8.13.md +++ /dev/null @@ -1,14 +0,0 @@ -## 0.8.13 - -### New Queries - -* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). - -### Major Analysis Improvements - -* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. - -### Minor Analysis Improvements - -* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. -* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index d67193843be..ab853297ba9 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.13 +version: 0.8.13-dev groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 4d66cfc9f6c..2bdc2e4152a 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.8.13 - -### Major Analysis Improvements - -* Added support for TypeScript 5.4. - ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md new file mode 100644 index 00000000000..836719b5d6b --- /dev/null +++ b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Added support for TypeScript 5.4. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/released/0.8.13.md b/javascript/ql/lib/change-notes/released/0.8.13.md deleted file mode 100644 index bfa4a62d5ae..00000000000 --- a/javascript/ql/lib/change-notes/released/0.8.13.md +++ /dev/null @@ -1,5 +0,0 @@ -## 0.8.13 - -### Major Analysis Improvements - -* Added support for TypeScript 5.4. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 1ed74009ef0..fd7d5476402 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.13 +version: 0.8.13-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 2ae12bca484..43cbc8facf8 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.8.13 - -### Query Metadata Changes - -* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. - -### Minor Analysis Improvements - -* The call graph has been improved, leading to more alerts for data flow based queries. - ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md new file mode 100644 index 00000000000..4d591aaf9a2 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md new file mode 100644 index 00000000000..5bcb0ba7463 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/0.8.13.md b/javascript/ql/src/change-notes/released/0.8.13.md deleted file mode 100644 index 282e759a49e..00000000000 --- a/javascript/ql/src/change-notes/released/0.8.13.md +++ /dev/null @@ -1,9 +0,0 @@ -## 0.8.13 - -### Query Metadata Changes - -* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. - -### Minor Analysis Improvements - -* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 49576a207cd..6967bcbff04 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.13 +version: 0.8.13-dev groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 3b1863cfbf1..c61f0b26d00 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.7.13 - -No user-facing changes. - ## 0.7.12 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.13.md b/misc/suite-helpers/change-notes/released/0.7.13.md deleted file mode 100644 index fac5f02103f..00000000000 --- a/misc/suite-helpers/change-notes/released/0.7.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.7.13 - -No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 8a077216acc..8afa417865a 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.13 +lastReleaseVersion: 0.7.12 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 94ac367a755..c366cba2c91 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.13 +version: 0.7.13-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 645b686ac8c..966356feed2 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.11.13 - -No user-facing changes. - ## 0.11.12 No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.13.md b/python/ql/lib/change-notes/released/0.11.13.md deleted file mode 100644 index e8bde4caf9f..00000000000 --- a/python/ql/lib/change-notes/released/0.11.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.11.13 - -No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 387883efdfb..28f7725cf85 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.13 +lastReleaseVersion: 0.11.12 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index c150a37790c..f2357da6c2c 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.13 +version: 0.11.13-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 53ed161fecb..d8737a310b3 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.9.13 - -No user-facing changes. - ## 0.9.12 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.13.md b/python/ql/src/change-notes/released/0.9.13.md deleted file mode 100644 index e188021618c..00000000000 --- a/python/ql/src/change-notes/released/0.9.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.9.13 - -No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 74bee36d150..12f1a311eca 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.13 +lastReleaseVersion: 0.9.12 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index b24b25bd821..c6d2ef63f29 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.13 +version: 0.9.13-dev groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a3305576053..9b2503120f9 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,13 +1,3 @@ -## 0.8.13 - -### Minor Analysis Improvements - -* Data flow is now tracked through `ActiveRecord` scopes. -* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. -* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. -* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. -* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. - ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md new file mode 100644 index 00000000000..9c20f05d865 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md new file mode 100644 index 00000000000..f008869fbcd --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md new file mode 100644 index 00000000000..704a4f27a61 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md new file mode 100644 index 00000000000..a02ca0d00a2 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md new file mode 100644 index 00000000000..963479568a0 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow is now tracked through `ActiveRecord` scopes. diff --git a/ruby/ql/lib/change-notes/released/0.8.13.md b/ruby/ql/lib/change-notes/released/0.8.13.md deleted file mode 100644 index cc844ffc764..00000000000 --- a/ruby/ql/lib/change-notes/released/0.8.13.md +++ /dev/null @@ -1,9 +0,0 @@ -## 0.8.13 - -### Minor Analysis Improvements - -* Data flow is now tracked through `ActiveRecord` scopes. -* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. -* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. -* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. -* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 1d8218b6fa0..bc8a4aa2813 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.13 +version: 0.8.13-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 508fa71de4a..3810951acb5 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.8.13 - -No user-facing changes. - ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.13.md b/ruby/ql/src/change-notes/released/0.8.13.md deleted file mode 100644 index 4f7ef70cec5..00000000000 --- a/ruby/ql/src/change-notes/released/0.8.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.8.13 - -No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 0fb6f3d786c..af4e83c549e 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.13 +lastReleaseVersion: 0.8.12 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 029e052108f..b1821390958 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.13 +version: 0.8.13-dev groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index aaebbbb4318..fc8378ff3b9 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.1.13 - -No user-facing changes. - ## 0.1.12 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.13.md b/shared/controlflow/change-notes/released/0.1.13.md deleted file mode 100644 index 827f5e3ec44..00000000000 --- a/shared/controlflow/change-notes/released/0.1.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.1.13 - -No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index f43379f8196..bfd6e903641 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.13 +lastReleaseVersion: 0.1.12 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index cb04f661c85..3a6d1131f86 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.13 +version: 0.1.13-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index b5267b6d9b0..458cde63603 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,9 +1,3 @@ -## 0.2.4 - -### Minor Analysis Improvements - -* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. - ## 0.2.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.2.4.md b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md similarity index 90% rename from shared/dataflow/change-notes/released/0.2.4.md rename to shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md index 075802f2b5d..05a48eb8050 100644 --- a/shared/dataflow/change-notes/released/0.2.4.md +++ b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md @@ -1,5 +1,4 @@ -## 0.2.4 - -### Minor Analysis Improvements - +--- +category: minorAnalysis +--- * Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 7f1e3841dcd..0b605901b42 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.3 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9c0976ca109..386290bde29 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.4 +version: 0.2.4-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index afeee789487..df97cb97717 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.13.md b/shared/mad/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/mad/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 77a69168fe9..a5ea1168b92 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 465ab789d4a..7f284f0bfb8 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.12 - -No user-facing changes. - ## 0.0.11 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.12.md b/shared/rangeanalysis/change-notes/released/0.0.12.md deleted file mode 100644 index 0e206033bc4..00000000000 --- a/shared/rangeanalysis/change-notes/released/0.0.12.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.12 - -No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 997fb8da83c..e679dc42092 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.12 +lastReleaseVersion: 0.0.11 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index df8fbd5e837..4d8f0196bec 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.12 +version: 0.0.12-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 6b0950887f9..2b955eaf376 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.13.md b/shared/regex/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/regex/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index e47715dd322..607c548a2a3 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 7b073dbfe7b..7e74b25e47e 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.13.md b/shared/ssa/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/ssa/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 3877a1a98f9..5c773a56a66 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 83a42fb0551..d9dd6b6f2e2 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.0.12 - -No user-facing changes. - ## 0.0.11 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.12.md b/shared/threat-models/change-notes/released/0.0.12.md deleted file mode 100644 index 0e206033bc4..00000000000 --- a/shared/threat-models/change-notes/released/0.0.12.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.12 - -No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 997fb8da83c..e679dc42092 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.12 +lastReleaseVersion: 0.0.11 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 1d8b017f798..08e2ae0c330 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.12 +version: 0.0.12-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 32d42cbeb39..01fdf65587a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.13.md b/shared/tutorial/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/tutorial/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index ee00cd14490..cf4f16583a3 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: 0.2.13 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 18024e28981..242657d19d8 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.13.md b/shared/typetracking/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/typetracking/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 7f1ce51b4df..166a7c170cd 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index dbf4204fcad..26e1c3ae546 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.13.md b/shared/typos/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/typos/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 36250357dae..47bc18e8902 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 1c0c715c928..b8ae5cf523d 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.13.md b/shared/util/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/util/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index e4c8f9b2166..7862cb35d81 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 67d1e732a0f..9a5910ec374 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.2.13 - -No user-facing changes. - ## 0.2.12 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.13.md b/shared/yaml/change-notes/released/0.2.13.md deleted file mode 100644 index 42f11678bd3..00000000000 --- a/shared/yaml/change-notes/released/0.2.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.2.13 - -No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 979eb20092e..da1cea93393 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.13 +lastReleaseVersion: 0.2.12 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index f12c77ef671..9813c6fb57c 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.13 +version: 0.2.13-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 4bc92a92c82..5a35f47aa89 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,10 +1,3 @@ -## 0.3.13 - -### Major Analysis Improvements - -* Upgraded to Swift 5.10 -* New AST node is extracted: `ThenStmt` - ## 0.3.12 No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/0.3.13.md b/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md similarity index 59% rename from swift/ql/lib/change-notes/released/0.3.13.md rename to swift/ql/lib/change-notes/2024-03-28-swift-5.10.md index c1639172fd4..bfc371a89e9 100644 --- a/swift/ql/lib/change-notes/released/0.3.13.md +++ b/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md @@ -1,6 +1,5 @@ -## 0.3.13 - -### Major Analysis Improvements - +--- +category: majorAnalysis +--- * Upgraded to Swift 5.10 * New AST node is extracted: `ThenStmt` diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 8791b4867d1..3e6664ee4b6 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.13 +lastReleaseVersion: 0.3.12 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index f4143f29340..d06a216db89 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.13 +version: 0.3.13-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 2b745bd7bb1..4ae49cfbfea 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,7 +1,3 @@ -## 0.3.13 - -No user-facing changes. - ## 0.3.12 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.13.md b/swift/ql/src/change-notes/released/0.3.13.md deleted file mode 100644 index 890ab1e3e3f..00000000000 --- a/swift/ql/src/change-notes/released/0.3.13.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.3.13 - -No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 8791b4867d1..3e6664ee4b6 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.13 +lastReleaseVersion: 0.3.12 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 21fae0156ea..1dace3146de 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.13 +version: 0.3.13-dev groups: - swift - queries From c511de2eaee4007f6c31067708c4dd964241d7e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 2 Apr 2024 17:15:41 +0000 Subject: [PATCH 413/497] Release preparation for version 2.17.0 --- cpp/ql/lib/CHANGELOG.md | 15 +++++++++++++++ .../2024-03-15-switches-in-guard-conditions.md | 4 ---- .../2024-03-19-ir-temp-extended-destructors.md | 4 ---- ...3-19-predicates-for-switches-as-guards-2.md | 5 ----- ...-03-19-predicates-for-switches-as-guards.md | 5 ----- .../2024-03-26-taint-inheriting-content.md | 4 ---- cpp/ql/lib/change-notes/released/0.12.10.md | 14 ++++++++++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 16 ++++++++++++++++ .../2024-03-05-type-confusion-query.md | 4 ---- .../2024-03-13-glib-alloc-and-dealloc.md | 4 ---- ...4-03-18-uninitialized-local-path-problem.md | 4 ---- ...4-03-20-missing-check-scanf-path-problem.md | 4 ---- .../src/change-notes/2024-03-22-boost-ssl.md | 4 ---- cpp/ql/src/change-notes/released/0.9.9.md | 15 +++++++++++++++ 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.13.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.13.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 18 ++++++++++++++++++ .../2024-03-04-deprecate-dotnet-and-cil.md | 4 ---- ...-03-04-fixed-system.io.textreader-models.md | 4 ---- ...5-new-commandargs-and-environment-models.md | 5 ----- .../2024-03-07-remove-cil-extractor.md | 4 ---- ...ystem.net.http.httprequestmessage-models.md | 4 ---- .../2024-03-11-csharp12-dotnet8.md | 4 ---- .../2024-03-11-registry-sources.md | 4 ---- .../2024-03-13-system.io-models.md | 4 ---- .../2024-03-14-dapper-source-models.md | 4 ---- csharp/ql/lib/change-notes/released/0.9.0.md | 17 +++++++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 11 +++++++++++ .../2024-03-06-remove-default-local-sources.md | 5 ----- .../2024-03-11-remove-stored-query-variants.md | 5 ----- .../2024-03-21-change-compareto-signature.md | 5 ----- csharp/ql/src/change-notes/released/0.8.13.md | 10 ++++++++++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 7 +++++++ .../change-notes/2024-03-04-macaron-sources.md | 4 ---- .../0.7.13.md} | 8 +++++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 11 +++++++++++ .../2024-03-05-squirrel-sqli-sinks.md | 4 ---- ...03-14-hardcoded-credentials-more-sources.md | 4 ---- .../0.7.13.md} | 12 +++++++++--- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ .../src/change-notes/released/0.0.20.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 13 +++++++++++++ ...3-11-add-parcelfiledescriptor-open-model.md | 4 ---- .../ql/lib/change-notes/2024-03-21-env-vars.md | 4 ---- .../2024-03-22-anonymous-variables.md | 5 ----- .../2024-03-26-url-models-precision.md | 4 ---- java/ql/lib/change-notes/released/0.9.0.md | 12 ++++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 15 +++++++++++++++ .../2024-03-06-url-forward-query.md | 4 ---- .../2024-03-12-request-sanitizers.md | 4 ---- ...03-24-sensitive-log-whitelist-tokenimage.md | 4 ---- .../2024-03-27-MissingEnumInSwitch.md | 4 ---- java/ql/src/change-notes/released/0.8.13.md | 14 ++++++++++++++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 6 ++++++ .../change-notes/2024-02-02-typescript-5-4.md | 4 ---- .../ql/lib/change-notes/released/0.8.13.md | 5 +++++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 10 ++++++++++ .../2024-03-07-lift-cg-restriction.md | 4 ---- .../2024-03-21-target-blank-precision.md | 4 ---- .../ql/src/change-notes/released/0.8.13.md | 9 +++++++++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/0.7.13.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/0.11.13.md | 3 +++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/0.9.13.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 10 ++++++++++ .../change-notes/2024-02-27-process-spawn.md | 4 ---- .../2024-03-01-typhoeus-request.md | 4 ---- .../2024-03-08-activerecord-from.md | 4 ---- .../2024-03-14-actiondispatch-uploadedfile.md | 4 ---- .../2024-03-19-activerecord-scopes.md | 4 ---- ruby/ql/lib/change-notes/released/0.8.13.md | 9 +++++++++ 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/0.8.13.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/0.1.13.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 ++++++ .../0.2.4.md} | 7 ++++--- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/0.2.13.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/0.2.13.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/0.2.13.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.12.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/0.2.13.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/0.2.13.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/0.2.13.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/0.2.13.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/0.2.13.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 7 +++++++ .../0.3.13.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/0.3.13.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 173 files changed, 478 insertions(+), 249 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md delete mode 100644 cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md create mode 100644 cpp/ql/lib/change-notes/released/0.12.10.md delete mode 100644 cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md delete mode 100644 cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md delete mode 100644 cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md delete mode 100644 cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md delete mode 100644 cpp/ql/src/change-notes/2024-03-22-boost-ssl.md create mode 100644 cpp/ql/src/change-notes/released/0.9.9.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-11-registry-sources.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-13-system.io-models.md delete mode 100644 csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md create mode 100644 csharp/ql/lib/change-notes/released/0.9.0.md delete mode 100644 csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md delete mode 100644 csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md delete mode 100644 csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md create mode 100644 csharp/ql/src/change-notes/released/0.8.13.md create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.12.md delete mode 100644 go/ql/lib/change-notes/2024-03-04-macaron-sources.md rename go/ql/lib/change-notes/{2024-03-20-dependecy-retrieval-improvement.md => released/0.7.13.md} (63%) delete mode 100644 go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md delete mode 100644 go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md rename go/ql/src/change-notes/{2024-03-07-uncontrolled-allocation-size.md => released/0.7.13.md} (53%) create mode 100644 java/ql/automodel/src/change-notes/released/0.0.20.md delete mode 100644 java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md delete mode 100644 java/ql/lib/change-notes/2024-03-21-env-vars.md delete mode 100644 java/ql/lib/change-notes/2024-03-22-anonymous-variables.md delete mode 100644 java/ql/lib/change-notes/2024-03-26-url-models-precision.md create mode 100644 java/ql/lib/change-notes/released/0.9.0.md delete mode 100644 java/ql/src/change-notes/2024-03-06-url-forward-query.md delete mode 100644 java/ql/src/change-notes/2024-03-12-request-sanitizers.md delete mode 100644 java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md delete mode 100644 java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md create mode 100644 java/ql/src/change-notes/released/0.8.13.md delete mode 100644 javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.13.md delete mode 100644 javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md delete mode 100644 javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md create mode 100644 javascript/ql/src/change-notes/released/0.8.13.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.13.md create mode 100644 python/ql/lib/change-notes/released/0.11.13.md create mode 100644 python/ql/src/change-notes/released/0.9.13.md delete mode 100644 ruby/ql/lib/change-notes/2024-02-27-process-spawn.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md delete mode 100644 ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.13.md create mode 100644 ruby/ql/src/change-notes/released/0.8.13.md create mode 100644 shared/controlflow/change-notes/released/0.1.13.md rename shared/dataflow/change-notes/{2024-02-28-hidden-subpaths.md => released/0.2.4.md} (90%) create mode 100644 shared/mad/change-notes/released/0.2.13.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.12.md create mode 100644 shared/regex/change-notes/released/0.2.13.md create mode 100644 shared/ssa/change-notes/released/0.2.13.md create mode 100644 shared/threat-models/change-notes/released/0.0.12.md create mode 100644 shared/tutorial/change-notes/released/0.2.13.md create mode 100644 shared/typetracking/change-notes/released/0.2.13.md create mode 100644 shared/typos/change-notes/released/0.2.13.md create mode 100644 shared/util/change-notes/released/0.2.13.md create mode 100644 shared/yaml/change-notes/released/0.2.13.md rename swift/ql/lib/change-notes/{2024-03-28-swift-5.10.md => released/0.3.13.md} (59%) create mode 100644 swift/ql/src/change-notes/released/0.3.13.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 4b69a1d5b36..0ca4b539325 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. + ## 0.12.9 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md deleted file mode 100644 index cf0b920e29d..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md b/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md deleted file mode 100644 index 6def8303336..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-ir-temp-extended-destructors.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added destructors for temporary objects with extended lifetimes to the intermediate representation. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md deleted file mode 100644 index 88b4048f8cd..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards-2.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md deleted file mode 100644 index 3dde8805599..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. -* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md b/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md deleted file mode 100644 index 759386e461f..00000000000 --- a/cpp/ql/lib/change-notes/2024-03-26-taint-inheriting-content.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.12.10.md b/cpp/ql/lib/change-notes/released/0.12.10.md new file mode 100644 index 00000000000..64d91af2118 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.10.md @@ -0,0 +1,14 @@ +## 0.12.10 + +### New Features + +* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. + +### Minor Analysis Improvements + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index dce1e02b646..bd659eb114f 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.9 +lastReleaseVersion: 0.12.10 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index eebc47c089b..f8358ae72df 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.10-dev +version: 0.12.10 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 52c46f65267..01ec26e694f 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. + ## 0.9.8 No user-facing changes. diff --git a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md deleted file mode 100644 index f96a4684b76..00000000000 --- a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md deleted file mode 100644 index bc9082285d4..00000000000 --- a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md deleted file mode 100644 index 14a8c2e7ce7..00000000000 --- a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md b/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md deleted file mode 100644 index 12a185add1e..00000000000 --- a/cpp/ql/src/change-notes/2024-03-20-missing-check-scanf-path-problem.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md b/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md deleted file mode 100644 index d4a4e0a7307..00000000000 --- a/cpp/ql/src/change-notes/2024-03-22-boost-ssl.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. diff --git a/cpp/ql/src/change-notes/released/0.9.9.md b/cpp/ql/src/change-notes/released/0.9.9.md new file mode 100644 index 00000000000..46f120c28d7 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.9.md @@ -0,0 +1,15 @@ +## 0.9.9 + +### New Queries + +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. + +### Query Metadata Changes + +* `@precision medium` metadata was added to the `cpp/boost/tls-settings-misconfiguration` and `cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The `@name` metadata of these queries were also updated. + +### Minor Analysis Improvements + +* The "Missing return-value check for a 'scanf'-like function" query (`cpp/missing-check-scanf`) has been converted to a `path-problem` query. +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. +* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 9ca6c6f2678..aabed7c396b 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.8 +lastReleaseVersion: 0.9.9 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ce202c1b85d..5d9a5252c00 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.9-dev +version: 0.9.9 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index bea6df22685..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.13 + +No user-facing changes. + ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +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 6d169efe920..e5f93542dfc 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.12 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index f3bf8992f7d..f12c8e2c95e 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.13-dev +version: 1.7.13 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index bea6df22685..50143af24fb 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.13 + +No user-facing changes. + ## 1.7.12 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md new file mode 100644 index 00000000000..e2656ce672c --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.13.md @@ -0,0 +1,3 @@ +## 1.7.13 + +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 6d169efe920..e5f93542dfc 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.12 +lastReleaseVersion: 1.7.13 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index a732080cfb4..74444203f84 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.13-dev +version: 1.7.13 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 37d2c804be8..27133addc5c 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. + ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md deleted file mode 100644 index fea31bb8bbb..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md deleted file mode 100644 index a32f8a7c22c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md deleted file mode 100644 index 0bee733157c..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. -* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. diff --git a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md deleted file mode 100644 index 36be2372b4e..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md deleted file mode 100644 index 2ac3a1059c6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md deleted file mode 100644 index 7111e8966d6..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Support for C# 12 / .NET8. diff --git a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md deleted file mode 100644 index 1d105049185..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. diff --git a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md b/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md deleted file mode 100644 index 84db6a663ae..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-13-system.io-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. diff --git a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md b/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md deleted file mode 100644 index 204ae7db3ae..00000000000 --- a/csharp/ql/lib/change-notes/2024-03-14-dapper-source-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. diff --git a/csharp/ql/lib/change-notes/released/0.9.0.md b/csharp/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..32e8e35d76d --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,17 @@ +## 0.9.0 + +### Breaking Changes + +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +### Minor Analysis Improvements + +* Added new source models for the `Dapper` package. These models can be enabled by enabling the `database` threat model. +* Additional models have been added for `System.IO`. These are primarily source models with the `file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index af4e83c549e..8b9fc185202 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.9.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 7d389b9e560..bd9558fa249 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.13-dev +version: 0.9.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index df97b469252..bbd7f8bc147 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. + ## 0.8.12 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md deleted file mode 100644 index 19494571ad1..00000000000 --- a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. - diff --git a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md deleted file mode 100644 index 3ca0b14f7b2..00000000000 --- a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: majorAnalysis ---- -* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. - diff --git a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md b/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md deleted file mode 100644 index 026321ea9af..00000000000 --- a/csharp/ql/src/change-notes/2024-03-21-change-compareto-signature.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. - diff --git a/csharp/ql/src/change-notes/released/0.8.13.md b/csharp/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..e534c66fc8e --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,10 @@ +## 0.8.13 + +### Major Analysis Improvements + +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + +### Minor Analysis Improvements + +* The alert message of `cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index e9d1d526a81..609c625fe5a 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.13-dev +version: 0.8.13 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index d9dd6b6f2e2..83a42fb0551 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.12.md b/go/ql/consistency-queries/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +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 e679dc42092..997fb8da83c 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 3c398a7cf84..fbd2978d438 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: 0.0.12-dev +version: 0.0.12 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index bc6537af817..0fa4dfe0ec8 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.7.13 + +### Minor Analysis Improvements + +* The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. + ## 0.7.12 No user-facing changes. diff --git a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md deleted file mode 100644 index 72ea242510d..00000000000 --- a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md b/go/ql/lib/change-notes/released/0.7.13.md similarity index 63% rename from go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md rename to go/ql/lib/change-notes/released/0.7.13.md index 42fc258f973..c6fab4935a1 100644 --- a/go/ql/lib/change-notes/2024-03-20-dependecy-retrieval-improvement.md +++ b/go/ql/lib/change-notes/released/0.7.13.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.7.13 + +### Minor Analysis Improvements + * The `CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 8cc40e77dec..2c1fbe254fa 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.13-dev +version: 0.7.13 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 497f82e8679..2bee579db9c 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.13 + +### New Queries + +* The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. + ## 0.7.12 No user-facing changes. diff --git a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md deleted file mode 100644 index 0b6a78df9f9..00000000000 --- a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md deleted file mode 100644 index ad6f712958e..00000000000 --- a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. diff --git a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md b/go/ql/src/change-notes/released/0.7.13.md similarity index 53% rename from go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md rename to go/ql/src/change-notes/released/0.7.13.md index 663932005eb..e11b3986979 100644 --- a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md +++ b/go/ql/src/change-notes/released/0.7.13.md @@ -1,4 +1,10 @@ ---- -category: newQuery ---- +## 0.7.13 + +### New Queries + * The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). + +### Minor Analysis Improvements + +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 080d257b8d0..2ab9616891b 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.13-dev +version: 0.7.13 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 0205da54adf..af83bbb0700 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.20 + +No user-facing changes. + ## 0.0.19 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.20.md b/java/ql/automodel/src/change-notes/released/0.0.20.md new file mode 100644 index 00000000000..98daf20a59a --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.20.md @@ -0,0 +1,3 @@ +## 0.0.20 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index f406319f372..d2e86745bca 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.19 +lastReleaseVersion: 0.0.20 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 1c22e00eb0e..c4b5940f928 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.20-dev +version: 0.0.20 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 5f8d993294a..36c5ca2a6a6 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. + ## 0.8.12 No user-facing changes. diff --git a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md deleted file mode 100644 index 31f76712828..00000000000 --- a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/change-notes/2024-03-21-env-vars.md b/java/ql/lib/change-notes/2024-03-21-env-vars.md deleted file mode 100644 index 9306a814a7c..00000000000 --- a/java/ql/lib/change-notes/2024-03-21-env-vars.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. diff --git a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md b/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md deleted file mode 100644 index 029d3dfbff4..00000000000 --- a/java/ql/lib/change-notes/2024-03-22-anonymous-variables.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. -* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. diff --git a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md b/java/ql/lib/change-notes/2024-03-26-url-models-precision.md deleted file mode 100644 index d6fb561e725..00000000000 --- a/java/ql/lib/change-notes/2024-03-26-url-models-precision.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. diff --git a/java/ql/lib/change-notes/released/0.9.0.md b/java/ql/lib/change-notes/released/0.9.0.md new file mode 100644 index 00000000000..ad20fb98cbf --- /dev/null +++ b/java/ql/lib/change-notes/released/0.9.0.md @@ -0,0 +1,12 @@ +## 0.9.0 + +### Breaking Changes + +* The Java extractor no longer supports the `ODASA_SNAPSHOT` legacy environment variable. + +### Minor Analysis Improvements + +* Increased the precision of some dataflow models of the class `java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The `PatternCase` class gains the new `getPatternAtIndex` and `getAPattern` predicates, and deprecates `getPattern`. +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index af4e83c549e..8b9fc185202 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.9.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index c3a0a9476bb..768e57ad9c6 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.13-dev +version: 0.9.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 73ab2688c98..4b758396b91 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,18 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. + ## 0.8.12 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-03-06-url-forward-query.md b/java/ql/src/change-notes/2024-03-06-url-forward-query.md deleted file mode 100644 index 46028bda4f2..00000000000 --- a/java/ql/src/change-notes/2024-03-06-url-forward-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). diff --git a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md deleted file mode 100644 index 08229d6d7d0..00000000000 --- a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. \ No newline at end of file diff --git a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md b/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md deleted file mode 100644 index 017e5abd7ee..00000000000 --- a/java/ql/src/change-notes/2024-03-24-sensitive-log-whitelist-tokenimage.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. diff --git a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md b/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md deleted file mode 100644 index b1531dab655..00000000000 --- a/java/ql/src/change-notes/2024-03-27-MissingEnumInSwitch.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. diff --git a/java/ql/src/change-notes/released/0.8.13.md b/java/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..22dba4fa4fa --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,14 @@ +## 0.8.13 + +### New Queries + +* The query `java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as `java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query [by @haby0](https://github.com/github/codeql/pull/6240) and [by @luchua-bc](https://github.com/github/codeql/pull/7286). + +### Major Analysis Improvements + +* The `java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +### Minor Analysis Improvements + +* Variables named `tokenImage` are no longer sources for the `java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ab853297ba9..d67193843be 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.13-dev +version: 0.8.13 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 2bdc2e4152a..4d66cfc9f6c 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. + ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md deleted file mode 100644 index 836719b5d6b..00000000000 --- a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for TypeScript 5.4. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/released/0.8.13.md b/javascript/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..bfa4a62d5ae --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,5 @@ +## 0.8.13 + +### Major Analysis Improvements + +* Added support for TypeScript 5.4. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index fd7d5476402..1ed74009ef0 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.13-dev +version: 0.8.13 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 43cbc8facf8..2ae12bca484 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. + ## 0.8.12 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md deleted file mode 100644 index 4d591aaf9a2..00000000000 --- a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md b/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md deleted file mode 100644 index 5bcb0ba7463..00000000000 --- a/javascript/ql/src/change-notes/2024-03-21-target-blank-precision.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/0.8.13.md b/javascript/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..282e759a49e --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Query Metadata Changes + +* The `@precision` of the `js/unsafe-external-link` has been reduced to `low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with `target="_blank"`. + +### Minor Analysis Improvements + +* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 6967bcbff04..49576a207cd 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.13-dev +version: 0.8.13 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index c61f0b26d00..3b1863cfbf1 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.13 + +No user-facing changes. + ## 0.7.12 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.13.md b/misc/suite-helpers/change-notes/released/0.7.13.md new file mode 100644 index 00000000000..fac5f02103f --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.13.md @@ -0,0 +1,3 @@ +## 0.7.13 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 8afa417865a..8a077216acc 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.12 +lastReleaseVersion: 0.7.13 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index c366cba2c91..94ac367a755 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.13-dev +version: 0.7.13 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 966356feed2..645b686ac8c 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.13 + +No user-facing changes. + ## 0.11.12 No user-facing changes. diff --git a/python/ql/lib/change-notes/released/0.11.13.md b/python/ql/lib/change-notes/released/0.11.13.md new file mode 100644 index 00000000000..e8bde4caf9f --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.13.md @@ -0,0 +1,3 @@ +## 0.11.13 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 28f7725cf85..387883efdfb 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.12 +lastReleaseVersion: 0.11.13 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index f2357da6c2c..c150a37790c 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.13-dev +version: 0.11.13 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index d8737a310b3..53ed161fecb 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.13 + +No user-facing changes. + ## 0.9.12 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.13.md b/python/ql/src/change-notes/released/0.9.13.md new file mode 100644 index 00000000000..e188021618c --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.13.md @@ -0,0 +1,3 @@ +## 0.9.13 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 12f1a311eca..74bee36d150 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.12 +lastReleaseVersion: 0.9.13 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index c6d2ef63f29..b24b25bd821 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.13-dev +version: 0.9.13 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 9b2503120f9..a3305576053 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. + ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md deleted file mode 100644 index 9c20f05d865..00000000000 --- a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md deleted file mode 100644 index f008869fbcd..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md deleted file mode 100644 index 704a4f27a61..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md deleted file mode 100644 index a02ca0d00a2..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md deleted file mode 100644 index 963479568a0..00000000000 --- a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Data flow is now tracked through `ActiveRecord` scopes. diff --git a/ruby/ql/lib/change-notes/released/0.8.13.md b/ruby/ql/lib/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..cc844ffc764 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.13.md @@ -0,0 +1,9 @@ +## 0.8.13 + +### Minor Analysis Improvements + +* Data flow is now tracked through `ActiveRecord` scopes. +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index bc8a4aa2813..1d8218b6fa0 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.13-dev +version: 0.8.13 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 3810951acb5..508fa71de4a 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.13 + +No user-facing changes. + ## 0.8.12 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.13.md b/ruby/ql/src/change-notes/released/0.8.13.md new file mode 100644 index 00000000000..4f7ef70cec5 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.13.md @@ -0,0 +1,3 @@ +## 0.8.13 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index af4e83c549e..0fb6f3d786c 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.12 +lastReleaseVersion: 0.8.13 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b1821390958..029e052108f 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.13-dev +version: 0.8.13 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index fc8378ff3b9..aaebbbb4318 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.13 + +No user-facing changes. + ## 0.1.12 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.13.md b/shared/controlflow/change-notes/released/0.1.13.md new file mode 100644 index 00000000000..827f5e3ec44 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.13.md @@ -0,0 +1,3 @@ +## 0.1.13 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index bfd6e903641..f43379f8196 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.12 +lastReleaseVersion: 0.1.13 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 3a6d1131f86..cb04f661c85 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.13-dev +version: 0.1.13 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 458cde63603..b5267b6d9b0 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.4 + +### Minor Analysis Improvements + +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. + ## 0.2.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/released/0.2.4.md similarity index 90% rename from shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md rename to shared/dataflow/change-notes/released/0.2.4.md index 05a48eb8050..075802f2b5d 100644 --- a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md +++ b/shared/dataflow/change-notes/released/0.2.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.2.4 + +### Minor Analysis Improvements + * Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 0b605901b42..7f1e3841dcd 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.3 +lastReleaseVersion: 0.2.4 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 386290bde29..9c0976ca109 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.4-dev +version: 0.2.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index df97cb97717..afeee789487 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.13.md b/shared/mad/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/mad/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index a5ea1168b92..77a69168fe9 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 7f284f0bfb8..465ab789d4a 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.12.md b/shared/rangeanalysis/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index e679dc42092..997fb8da83c 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 4d8f0196bec..df8fbd5e837 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.12-dev +version: 0.0.12 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 2b955eaf376..6b0950887f9 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.13.md b/shared/regex/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/regex/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 607c548a2a3..e47715dd322 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 7e74b25e47e..7b073dbfe7b 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.13.md b/shared/ssa/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 5c773a56a66..3877a1a98f9 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index d9dd6b6f2e2..83a42fb0551 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.12 + +No user-facing changes. + ## 0.0.11 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.12.md b/shared/threat-models/change-notes/released/0.0.12.md new file mode 100644 index 00000000000..0e206033bc4 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.12.md @@ -0,0 +1,3 @@ +## 0.0.12 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index e679dc42092..997fb8da83c 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.11 +lastReleaseVersion: 0.0.12 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 08e2ae0c330..1d8b017f798 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.12-dev +version: 0.0.12 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 01fdf65587a..32d42cbeb39 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.13.md b/shared/tutorial/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index cf4f16583a3..ee00cd14490 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: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 242657d19d8..18024e28981 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.13.md b/shared/typetracking/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 166a7c170cd..7f1ce51b4df 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 26e1c3ae546..dbf4204fcad 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.13.md b/shared/typos/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/typos/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 47bc18e8902..36250357dae 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index b8ae5cf523d..1c0c715c928 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.13.md b/shared/util/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/util/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 7862cb35d81..e4c8f9b2166 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 9a5910ec374..67d1e732a0f 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.13 + +No user-facing changes. + ## 0.2.12 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.13.md b/shared/yaml/change-notes/released/0.2.13.md new file mode 100644 index 00000000000..42f11678bd3 --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.13.md @@ -0,0 +1,3 @@ +## 0.2.13 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index da1cea93393..979eb20092e 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.12 +lastReleaseVersion: 0.2.13 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 9813c6fb57c..f12c77ef671 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.13-dev +version: 0.2.13 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 5a35f47aa89..4bc92a92c82 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.3.13 + +### Major Analysis Improvements + +* Upgraded to Swift 5.10 +* New AST node is extracted: `ThenStmt` + ## 0.3.12 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md b/swift/ql/lib/change-notes/released/0.3.13.md similarity index 59% rename from swift/ql/lib/change-notes/2024-03-28-swift-5.10.md rename to swift/ql/lib/change-notes/released/0.3.13.md index bfc371a89e9..c1639172fd4 100644 --- a/swift/ql/lib/change-notes/2024-03-28-swift-5.10.md +++ b/swift/ql/lib/change-notes/released/0.3.13.md @@ -1,5 +1,6 @@ ---- -category: majorAnalysis ---- +## 0.3.13 + +### Major Analysis Improvements + * Upgraded to Swift 5.10 * New AST node is extracted: `ThenStmt` diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 3e6664ee4b6..8791b4867d1 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.12 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index d06a216db89..f4143f29340 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.13-dev +version: 0.3.13 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 4ae49cfbfea..2b745bd7bb1 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.13 + +No user-facing changes. + ## 0.3.12 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/0.3.13.md b/swift/ql/src/change-notes/released/0.3.13.md new file mode 100644 index 00000000000..890ab1e3e3f --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.13.md @@ -0,0 +1,3 @@ +## 0.3.13 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 3e6664ee4b6..8791b4867d1 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.12 +lastReleaseVersion: 0.3.13 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 1dace3146de..21fae0156ea 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.13-dev +version: 0.3.13 groups: - swift - queries From 572d3ba542c952c84d15961c254ac87fb97564f5 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 2 Apr 2024 19:40:46 +0200 Subject: [PATCH 414/497] fix language specifier typo in qhelp for rb/multi-char-san --- .../security/cwe-116/IncompleteMultiCharacterSanitization.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp b/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp index 5afb23e1ec2..8d203058644 100644 --- a/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp +++ b/ruby/ql/src/queries/security/cwe-116/IncompleteMultiCharacterSanitization.qhelp @@ -90,7 +90,7 @@ end Another potential fix is to use the popular sanitize gem. It keeps most of the safe HTML tags while removing all unsafe tags and attributes.

    - + require 'sanitize' def sanitize_html(input) From 19797fdd279ecb056b34edb174f3d221ca17cab2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 2 Apr 2024 18:20:44 +0000 Subject: [PATCH 415/497] Post-release preparation for codeql-cli-2.17.0 --- 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/automodel/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 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/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/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f8358ae72df..b30dbe69bdf 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.10 +version: 0.12.11-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 5d9a5252c00..f50b33af9b7 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.9 +version: 0.9.10-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index f12c8e2c95e..aca41e884d3 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.13 +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 74444203f84..66d7baf4780 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.13 +version: 1.7.14-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index bd9558fa249..a9f7479eb79 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.9.0 +version: 0.9.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 609c625fe5a..98079d4221d 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.13 +version: 0.8.14-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index fbd2978d438..394af7249ef 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: 0.0.12 +version: 0.0.13-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 2c1fbe254fa..223333b72f8 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.13 +version: 0.7.14-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 2ab9616891b..d4c2ffb9813 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.13 +version: 0.7.14-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index c4b5940f928..f8e68acb110 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.20 +version: 0.0.21-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 768e57ad9c6..7b2749aac2b 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.9.0 +version: 0.9.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 d67193843be..a65abf369a2 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.13 +version: 0.8.14-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 1ed74009ef0..38c25fa5a2a 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.13 +version: 0.8.14-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 49576a207cd..ffae5cff5fc 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.13 +version: 0.8.14-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 94ac367a755..b97bfa5c48e 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.13 +version: 0.7.14-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index c150a37790c..e1da2c2e6d2 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.13 +version: 0.11.14-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index b24b25bd821..d51237e1530 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.13 +version: 0.9.14-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 1d8218b6fa0..ad8045b2c74 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.13 +version: 0.8.14-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 029e052108f..4eac4d7e8c3 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.13 +version: 0.8.14-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index cb04f661c85..de39d621324 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.13 +version: 0.1.14-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9c0976ca109..162b5dd0490 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.2.4 +version: 0.2.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 77a69168fe9..97c5f74aead 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index df8fbd5e837..bdf15a5964d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.12 +version: 0.0.13-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index e47715dd322..166f8c54d5d 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 3877a1a98f9..ddfa057d1ca 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 1d8b017f798..2a03df5358e 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.12 +version: 0.0.13-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index ee00cd14490..a5430d0a98b 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: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 7f1ce51b4df..39ee0cfe8e7 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 36250357dae..6f20df0d94b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index e4c8f9b2166..c81bb89d78c 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index f12c77ef671..ca9995d0e56 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.13 +version: 0.2.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index f4143f29340..ff871c756bf 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.13 +version: 0.3.14-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 21fae0156ea..2ab77eb339d 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.13 +version: 0.3.14-dev groups: - swift - queries From ec32bdce63836e1c50c454adc307aafb4963113e Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Wed, 3 Apr 2024 09:19:18 +0200 Subject: [PATCH 416/497] fix unsanitized -> sanitized typo, and don't add a new variable just to remove newlines --- .../queries/security/cwe-117/examples/log_injection_good.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb b/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb index 71b0b8b4604..9ee33804b9f 100644 --- a/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb +++ b/ruby/ql/src/queries/security/cwe-117/examples/log_injection_good.rb @@ -5,9 +5,8 @@ class UsersController < ApplicationController logger = Logger.new STDOUT username = params[:username] - # GOOD: log message constructed with unsanitized user input - sanitized_username = username.gsub("\n", "") - logger.info "attempting to login user: " + sanitized_username + # GOOD: log message constructed with sanitized user input + logger.info "attempting to login user: " + sanitized_username.gsub("\n", "") # ... login logic ... end From 0f980e2b975196aba695b0bba13e969f3a5b4e0e Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 25 Mar 2024 13:49:46 +0100 Subject: [PATCH 417/497] C#: Properly dispose diagnostic writer objects --- cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs | 2 +- .../Semmle.Autobuild.CSharp/Program.cs | 2 +- .../Semmle.Autobuild.Shared/Autobuilder.cs | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs index 5fca6f556fb..48a6528a65b 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs @@ -17,7 +17,7 @@ namespace Semmle.Autobuild.Cpp try { Console.WriteLine("CodeQL C++ autobuilder"); - var builder = new CppAutobuilder(actions, options); + using var builder = new CppAutobuilder(actions, options); return builder.AttemptBuild(); } catch (InvalidEnvironmentException ex) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs index 71289148916..bec0376eac3 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs @@ -17,7 +17,7 @@ namespace Semmle.Autobuild.CSharp try { Console.WriteLine("CodeQL C# autobuilder"); - var builder = new CSharpAutobuilder(actions, options); + using var builder = new CSharpAutobuilder(actions, options); return builder.AttemptBuild(); } catch (InvalidEnvironmentException ex) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index 904c6543feb..6fe258abc0e 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -92,7 +92,7 @@ namespace Semmle.Autobuild.Shared /// The overall design is intended to be extensible so that in theory, /// it should be possible to add new build rules without touching this code. ///
    - public abstract class Autobuilder : IAutobuilder where TAutobuildOptions : AutobuildOptionsShared + public abstract class Autobuilder : IDisposable, IAutobuilder where TAutobuildOptions : AutobuildOptionsShared { /// /// Full file paths of files found in the project directory, as well as @@ -351,6 +351,20 @@ namespace Semmle.Autobuild.Shared } }); + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + (diagnostics as IDisposable)?.Dispose(); + } + } + /// /// Value of CODEQL_EXTRACTOR__ROOT environment variable. /// From 305fa841862b609c87d374d3b194c2ce6695e9ca Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 3 Apr 2024 10:08:28 +0200 Subject: [PATCH 418/497] Change `IDiagnosticsWriter` to implement `IDisposable` --- cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs | 2 ++ .../autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs | 2 ++ csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs | 2 +- csharp/extractor/Semmle.Util/ToolStatusPage.cs | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs index 3855428a5ae..f243bdb5401 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs @@ -203,6 +203,8 @@ namespace Semmle.Autobuild.Cpp.Tests public IList Diagnostics { get; } = new List(); public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message); + + public void Dispose() { } } /// diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index 2b00d9db742..3288eb5e852 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -218,6 +218,8 @@ namespace Semmle.Autobuild.CSharp.Tests public IList Diagnostics { get; } = new List(); public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message); + + public void Dispose() { } } /// diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index 6fe258abc0e..2414791ad4c 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -361,7 +361,7 @@ namespace Semmle.Autobuild.Shared { if (disposing) { - (diagnostics as IDisposable)?.Dispose(); + diagnostics.Dispose(); } } diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage.cs b/csharp/extractor/Semmle.Util/ToolStatusPage.cs index 1be700654af..a93cdec5fdf 100644 --- a/csharp/extractor/Semmle.Util/ToolStatusPage.cs +++ b/csharp/extractor/Semmle.Util/ToolStatusPage.cs @@ -183,7 +183,7 @@ namespace Semmle.Util /// /// Provides the ability to write diagnostic messages to some output. /// - public interface IDiagnosticsWriter + public interface IDiagnosticsWriter : IDisposable { /// /// Adds as a new diagnostics entry. From fbec197d4a3e1411803c827e0ed5bf0251d8dca2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 3 Apr 2024 10:13:44 +0200 Subject: [PATCH 419/497] Move TSP diagnostics related classes to separate files --- .../DiagnosticMessage.cs} | 61 ------------------- .../ToolStatusPage/DiagnosticsStream.cs | 55 +++++++++++++++++ .../ToolStatusPage/IDiagnosticsWriter.cs | 16 +++++ 3 files changed, 71 insertions(+), 61 deletions(-) rename csharp/extractor/Semmle.Util/{ToolStatusPage.cs => ToolStatusPage/DiagnosticMessage.cs} (77%) create mode 100644 csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs create mode 100644 csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs similarity index 77% rename from csharp/extractor/Semmle.Util/ToolStatusPage.cs rename to csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs index a93cdec5fdf..e8b061b29f2 100644 --- a/csharp/extractor/Semmle.Util/ToolStatusPage.cs +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticMessage.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; @@ -179,64 +178,4 @@ namespace Semmle.Util this.PlaintextMessage = plaintextMessage; } } - - /// - /// Provides the ability to write diagnostic messages to some output. - /// - public interface IDiagnosticsWriter : IDisposable - { - /// - /// Adds as a new diagnostics entry. - /// - /// The diagnostics entry to add. - void AddEntry(DiagnosticMessage message); - } - - /// - /// A wrapper around an underlying which allows - /// objects to be serialized to it. - /// - public sealed class DiagnosticsStream : IDiagnosticsWriter, IDisposable - { - private readonly JsonSerializer serializer; - private readonly StreamWriter writer; - - /// - /// Initialises a new for a file at . - /// - /// The path to the file that should be created. - public DiagnosticsStream(string path) - { - this.writer = File.CreateText(path); - - var contractResolver = new DefaultContractResolver - { - NamingStrategy = new CamelCaseNamingStrategy() - }; - - serializer = new JsonSerializer - { - ContractResolver = contractResolver, - NullValueHandling = NullValueHandling.Ignore - }; - } - - /// - /// Adds as a new diagnostics entry. - /// - /// The diagnostics entry to add. - public void AddEntry(DiagnosticMessage message) - { - serializer.Serialize(writer, message); - writer.Flush(); - } - - /// - /// Releases all resources used by the object. - /// - public void Dispose() - { - writer.Dispose(); - } - } } diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs new file mode 100644 index 00000000000..1ac2edc5602 --- /dev/null +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Semmle.Util +{ + /// + /// A wrapper around an underlying which allows + /// objects to be serialized to it. + /// + public sealed class DiagnosticsStream : IDiagnosticsWriter, IDisposable + { + private readonly JsonSerializer serializer; + private readonly StreamWriter writer; + + /// + /// Initialises a new for a file at . + /// + /// The path to the file that should be created. + public DiagnosticsStream(string path) + { + this.writer = File.CreateText(path); + + var contractResolver = new DefaultContractResolver + { + NamingStrategy = new CamelCaseNamingStrategy() + }; + + serializer = new JsonSerializer + { + ContractResolver = contractResolver, + NullValueHandling = NullValueHandling.Ignore + }; + } + + /// + /// Adds as a new diagnostics entry. + /// + /// The diagnostics entry to add. + public void AddEntry(DiagnosticMessage message) + { + serializer.Serialize(writer, message); + writer.Flush(); + } + + /// + /// Releases all resources used by the object. + /// + public void Dispose() + { + writer.Dispose(); + } + } +} diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs new file mode 100644 index 00000000000..eda3dbb41d8 --- /dev/null +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/IDiagnosticsWriter.cs @@ -0,0 +1,16 @@ +using System; + +namespace Semmle.Util +{ + /// + /// Provides the ability to write diagnostic messages to some output. + /// + public interface IDiagnosticsWriter : IDisposable + { + /// + /// Adds as a new diagnostics entry. + /// + /// The diagnostics entry to add. + void AddEntry(DiagnosticMessage message); + } +} From 64e82bb00e2f863ff51be84e3ef0284765c3effd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 2 Apr 2024 10:46:27 +0200 Subject: [PATCH 420/497] C#: Include all non-source-code properties in data flow --- .../semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index f4aba4fdfd0..bd63689c8ee 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1997,6 +1997,8 @@ class FieldOrProperty extends Assignable, Modifiable { or p.getDeclaringType() instanceof AnonymousClass ) + or + p.fromLibrary() ) } From 75894d581c392bc77b423b051f960dcbd4727797 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 3 Apr 2024 12:15:33 +0200 Subject: [PATCH 421/497] C#: Remove unused classes from `Util` project --- .../Semmle.Autobuild.CSharp/DotNetRule.cs | 2 +- .../Entities/Expressions/Lambda.cs | 2 +- .../extractor/Semmle.Util.Tests/ActionMap.cs | 54 ------ .../extractor/Semmle.Util.Tests/TextTest.cs | 78 --------- csharp/extractor/Semmle.Util/ActionMap.cs | 45 ----- csharp/extractor/Semmle.Util/Enumerators.cs | 19 -- csharp/extractor/Semmle.Util/FileRenamer.cs | 34 ---- .../extractor/Semmle.Util/FuzzyDictionary.cs | 165 ------------------ .../extractor/Semmle.Util/SharedReference.cs | 18 -- ...gBuilder.cs => StringBuilderExtensions.cs} | 0 .../extractor/Semmle.Util/StringExtensions.cs | 41 ----- csharp/extractor/Semmle.Util/Text.cs | 105 ----------- csharp/extractor/Semmle.Util/Worklist.cs | 57 ------ 13 files changed, 2 insertions(+), 618 deletions(-) delete mode 100644 csharp/extractor/Semmle.Util.Tests/ActionMap.cs delete mode 100644 csharp/extractor/Semmle.Util.Tests/TextTest.cs delete mode 100644 csharp/extractor/Semmle.Util/ActionMap.cs delete mode 100644 csharp/extractor/Semmle.Util/Enumerators.cs delete mode 100644 csharp/extractor/Semmle.Util/FileRenamer.cs delete mode 100644 csharp/extractor/Semmle.Util/FuzzyDictionary.cs delete mode 100644 csharp/extractor/Semmle.Util/SharedReference.cs rename csharp/extractor/Semmle.Util/{StringBuilder.cs => StringBuilderExtensions.cs} (100%) delete mode 100644 csharp/extractor/Semmle.Util/StringExtensions.cs delete mode 100644 csharp/extractor/Semmle.Util/Text.cs delete mode 100644 csharp/extractor/Semmle.Util/Worklist.cs diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index c1383731361..1db24880be2 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -32,7 +32,7 @@ namespace Semmle.Autobuild.CSharp if (auto) { NotDotNetProjects = builder.ProjectsOrSolutionsToBuild - .SelectMany(p => Enumerators.Singleton(p).Concat(p.IncludedProjects)) + .SelectMany(p => new[] { p }.Concat(p.IncludedProjects)) .OfType>() .Where(p => !p.DotNetProject); var notDotNetProject = NotDotNetProjects.FirstOrDefault(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs index 37ea7465255..cf9c682eb67 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs @@ -63,7 +63,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Lambda Create(ExpressionNodeInfo info, ParenthesizedLambdaExpressionSyntax node) => new Lambda(info, node); private Lambda(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) - : this(info.SetKind(ExprKind.LAMBDA), node.Body, Enumerators.Singleton(node.Parameter), null) { } + : this(info.SetKind(ExprKind.LAMBDA), node.Body, [node.Parameter], null) { } public static Lambda Create(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) => new Lambda(info, node); diff --git a/csharp/extractor/Semmle.Util.Tests/ActionMap.cs b/csharp/extractor/Semmle.Util.Tests/ActionMap.cs deleted file mode 100644 index 8bed44b97a2..00000000000 --- a/csharp/extractor/Semmle.Util.Tests/ActionMap.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Xunit; -using Semmle.Util; - -using Assert = Xunit.Assert; - -namespace SemmleTests.Semmle.Util -{ - - public class ActionMapTests - { - [Fact] - public void TestAddthenOnAdd() - { - var am = new ActionMap(); - am.Add(1, 2); - int value = 0; - am.OnAdd(1, x => value = x); - Assert.Equal(2, value); - } - - [Fact] - public void TestOnAddthenAdd() - { - var am = new ActionMap(); - int value = 0; - am.OnAdd(1, x => value = x); - am.Add(1, 2); - Assert.Equal(2, value); - } - - [Fact] - public void TestNotAdded() - { - var am = new ActionMap(); - int value = 0; - am.OnAdd(1, x => value = x); - am.Add(2, 2); - Assert.Equal(0, value); - } - - [Fact] - public void TestMultipleActions() - { - var am = new ActionMap(); - int value1 = 0, value2 = 0; - am.OnAdd(1, x => value1 = x); - am.OnAdd(1, x => value2 = x); - am.Add(1, 2); - Assert.Equal(2, value1); - Assert.Equal(2, value2); - } - - } -} diff --git a/csharp/extractor/Semmle.Util.Tests/TextTest.cs b/csharp/extractor/Semmle.Util.Tests/TextTest.cs deleted file mode 100644 index 3a21f0b73ed..00000000000 --- a/csharp/extractor/Semmle.Util.Tests/TextTest.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Xunit; -using System; -using Semmle.Util; - -using Assert = Xunit.Assert; - -namespace SemmleTests -{ - public class TextTest - { - //#################### PRIVATE VARIABLES #################### - #region - - /// - /// A shorter way of writing Environment.NewLine (it gets used repeatedly). - /// - private static readonly string NL = Environment.NewLine; - - #endregion - - //#################### TEST METHODS #################### - #region - - [Fact] - public void GetAllTest() - { - var input = new string[] - { - "Said once a young coder from Crewe,", - "'I like to write tests, so I do!", - "They help me confirm", - "That I don't need to squirm -", - "My code might look nice, but works too!'" - }; - - var text = new Text(input); - - Assert.Equal(string.Join(NL, input) + NL, text.GetAll()); - } - - [Fact] - public void GetPortionTest() - { - var input = new string[] - { - "There once was a jolly young tester", - "Who couldn't leave software to fester -", - "He'd prod and he'd poke", - "Until something bad broke,", - "And then he'd find someone to pester." - }; - - var text = new Text(input); - - // A single-line range (to test the special case). - Assert.Equal("jolly" + NL, text.GetPortion(0, 17, 0, 22)); - - // A two-line range. - Assert.Equal("prod and he'd poke" + NL + "Until" + NL, text.GetPortion(2, 5, 3, 5)); - - // A three-line range (to test that the middle line is included in full). - Assert.Equal("poke" + NL + "Until something bad broke," + NL + "And then" + NL, text.GetPortion(2, 19, 4, 8)); - - // An invalid but recoverable range (to test that a best effort is made rather than crashing). - Assert.Equal(NL + "Who couldn't leave software to fester -" + NL, text.GetPortion(0, int.MaxValue, 1, int.MaxValue)); - - // Some quite definitely dodgy ranges (to test that exceptions are thrown). - Assert.Throws(() => text.GetPortion(-1, 0, 0, 0)); - Assert.Throws(() => text.GetPortion(0, -1, 0, 0)); - Assert.Throws(() => text.GetPortion(0, 0, -1, 0)); - Assert.Throws(() => text.GetPortion(0, 0, 0, -1)); - Assert.Throws(() => text.GetPortion(3, 5, 2, 5)); - Assert.Throws(() => text.GetPortion(2, 5, int.MaxValue, 5)); - } - - #endregion - } -} diff --git a/csharp/extractor/Semmle.Util/ActionMap.cs b/csharp/extractor/Semmle.Util/ActionMap.cs deleted file mode 100644 index afcda9bb494..00000000000 --- a/csharp/extractor/Semmle.Util/ActionMap.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Util -{ - /// - /// A dictionary which performs an action when items are added to the dictionary. - /// The order in which keys and actions are added does not matter. - /// - /// - /// - public class ActionMap where TKey : notnull - { - public void Add(TKey key, TValue value) - { - - if (actions.TryGetValue(key, out var a)) - a(value); - values[key] = value; - } - - public void OnAdd(TKey key, Action action) - { - if (actions.TryGetValue(key, out var a)) - { - actions[key] = a + action; - } - else - { - actions.Add(key, action); - } - - if (values.TryGetValue(key, out var val)) - { - action(val); - } - } - - // Action associated with each key. - private readonly Dictionary> actions = new Dictionary>(); - - // Values associated with each key. - private readonly Dictionary values = new Dictionary(); - } -} diff --git a/csharp/extractor/Semmle.Util/Enumerators.cs b/csharp/extractor/Semmle.Util/Enumerators.cs deleted file mode 100644 index 16fad6cfa54..00000000000 --- a/csharp/extractor/Semmle.Util/Enumerators.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Util -{ - public static class Enumerators - { - /// - /// Create an enumerable with a single element. - /// - /// - /// The type of the enumerable/element. - /// The element. - /// An enumerable containing a single element. - public static IEnumerable Singleton(T t) - { - yield return t; - } - } -} diff --git a/csharp/extractor/Semmle.Util/FileRenamer.cs b/csharp/extractor/Semmle.Util/FileRenamer.cs deleted file mode 100644 index 494e46856f8..00000000000 --- a/csharp/extractor/Semmle.Util/FileRenamer.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace Semmle.Util -{ - /// - /// Utility to temporarily rename a set of files. - /// - public sealed class FileRenamer : IDisposable - { - private readonly string[] files; - private const string suffix = ".codeqlhidden"; - - public FileRenamer(IEnumerable oldFiles) - { - files = oldFiles.Select(f => f.FullName).ToArray(); - - foreach (var file in files) - { - File.Move(file, file + suffix); - } - } - - public void Dispose() - { - foreach (var file in files) - { - File.Move(file + suffix, file); - } - } - } -} diff --git a/csharp/extractor/Semmle.Util/FuzzyDictionary.cs b/csharp/extractor/Semmle.Util/FuzzyDictionary.cs deleted file mode 100644 index 53a84d98a08..00000000000 --- a/csharp/extractor/Semmle.Util/FuzzyDictionary.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Semmle.Util -{ - /// - /// A dictionary from strings to elements of type T. - /// - /// - /// - /// This data structure is able to locate items based on an "approximate match" - /// of the key. This is used for example when attempting to identify two terms - /// in different trap files which are similar but not identical. - /// - /// The algorithm locates the closest match to a string based on a "distance function". - /// - /// Whilst many distance functions are possible, a bespoke algorithm is used here, - /// for efficiency and suitability for the domain. - /// - /// The distance is defined as the Hamming Distance of the numbers in the string. - /// Each string is split into the base "form" (stripped of numbers) and a vector of - /// numbers. (Numbers are non-negative integers in this context). - /// - /// Strings with a different "form" are considered different and have a distance - /// of infinity. - /// - /// This distance function is reflexive, symmetric and obeys the triangle inequality. - /// - /// E.g. foo(bar,1,2) has form "foo(bar,,)" and integers {1,2} - /// - /// distance(foo(bar,1,2), foo(bar,1,2)) = 0 - /// distance(foo(bar,1,2), foo(bar,1,3)) = 1 - /// distance(foo(bar,2,1), foo(bar,1,2)) = 2 - /// distance(foo(bar,1,2), foo(baz,1,2)) = infinity - /// - /// - /// The value type. - public class FuzzyDictionary where T : class - { - // All data items indexed by the "base string" (stripped of numbers) - private readonly Dictionary>> index = new Dictionary>>(); - - /// - /// Stores a new KeyValuePair in the data structure. - /// - /// The key. - /// The value. - public void Add(string k, T v) - { - var kv = new KeyValuePair(k, v); - - var root = StripDigits(k); - index.AddAnother(root, kv); - } - - /// - /// Computes the Hamming Distance between two sequences of the same length. - /// - /// Vector 1 - /// Vector 2 - /// The Hamming Distance. - private static int HammingDistance(IEnumerable v1, IEnumerable v2) where TElement : notnull - { - return v1.Zip(v2, (x, y) => x.Equals(y) ? 0 : 1).Sum(); - } - - /// - /// Locates the value with the smallest Hamming Distance from the query. - /// - /// The query string. - /// The distance between the query string and the stored string. - /// The best match, or null (default). - public T? FindMatch(string query, out int distance) - { - var root = StripDigits(query); - if (!index.TryGetValue(root, out var list)) - { - distance = 0; - return default(T); - } - - return BestMatch(query, list, (a, b) => HammingDistance(ExtractIntegers(a), ExtractIntegers(b)), out distance); - } - - /// - /// Returns the best match (with the smallest distance) for a query. - /// - /// The query string. - /// The list of candidate matches. - /// The distance function. - /// The distance between the query and the stored string. - /// The stored value. - private static T? BestMatch(string query, IEnumerable> candidates, Func distance, out int bestDistance) - { - var bestMatch = default(T); - bestDistance = 0; - var first = true; - - foreach (var candidate in candidates) - { - var d = distance(query, candidate.Key); - if (d == 0) - return candidate.Value; - - if (first || d < bestDistance) - { - bestDistance = d; - bestMatch = candidate.Value; - first = false; - } - } - - return bestMatch; - } - - /// - /// Removes all digits from a string. - /// - /// The input string. - /// String with digits removed. - private static string StripDigits(string input) - { - var result = new StringBuilder(); - foreach (var c in input.Where(c => !char.IsDigit(c))) - result.Append(c); - return result.ToString(); - } - - /// - /// Extracts and enumerates all non-negative integers in a string. - /// - /// The string to enumerate. - /// The sequence of integers. - private static IEnumerable ExtractIntegers(string input) - { - var inNumber = false; - var value = 0; - foreach (var c in input) - { - if (char.IsDigit(c)) - { - if (inNumber) - { - value = value * 10 + (c - '0'); - } - else - { - inNumber = true; - value = c - '0'; - } - } - else - { - if (inNumber) - { - yield return value; - inNumber = false; - } - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Util/SharedReference.cs b/csharp/extractor/Semmle.Util/SharedReference.cs deleted file mode 100644 index ba87caeefaa..00000000000 --- a/csharp/extractor/Semmle.Util/SharedReference.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Semmle.Util -{ - /// - /// An instance of this class maintains a shared reference to an object. - /// This makes it possible for several different parts of the code to - /// share access to an object that can change (that is, they all want - /// to refer to the same object, but the object to which they jointly - /// refer may vary over time). - /// - /// The type of the shared object. - public sealed class SharedReference where T : class - { - /// - /// The shared object to which different parts of the code want to refer. - /// - public T? Obj { get; set; } - } -} diff --git a/csharp/extractor/Semmle.Util/StringBuilder.cs b/csharp/extractor/Semmle.Util/StringBuilderExtensions.cs similarity index 100% rename from csharp/extractor/Semmle.Util/StringBuilder.cs rename to csharp/extractor/Semmle.Util/StringBuilderExtensions.cs diff --git a/csharp/extractor/Semmle.Util/StringExtensions.cs b/csharp/extractor/Semmle.Util/StringExtensions.cs deleted file mode 100644 index e56f106fe1f..00000000000 --- a/csharp/extractor/Semmle.Util/StringExtensions.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Semmle.Util -{ - public static class StringExtensions - { - public static (string, string) Split(this string self, int index0) - { - var split = self.Split(new[] { index0 }); - return (split[0], split[1]); - } - - public static (string, string, string) Split(this string self, int index0, int index1) - { - var split = self.Split(new[] { index0, index1 }); - return (split[0], split[1], split[2]); - } - - public static (string, string, string, string) Split(this string self, int index0, int index1, int index2) - { - var split = self.Split(new[] { index0, index1, index2 }); - return (split[0], split[1], split[2], split[3]); - } - - private static List Split(this string self, params int[] indices) - { - var ret = new List(); - var previousIndex = 0; - foreach (var index in indices.OrderBy(i => i)) - { - ret.Add(self.Substring(previousIndex, index - previousIndex)); - previousIndex = index; - } - - ret.Add(self.Substring(previousIndex)); - - return ret; - } - } -} diff --git a/csharp/extractor/Semmle.Util/Text.cs b/csharp/extractor/Semmle.Util/Text.cs deleted file mode 100644 index 38619fc0164..00000000000 --- a/csharp/extractor/Semmle.Util/Text.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.IO; - -namespace Semmle.Util -{ - /// - /// An instance of this class represents a piece of text, e.g. the text of a C# source file. - /// - public sealed class Text - { - //#################### PRIVATE VARIABLES #################### - #region - - /// - /// The text, stored line-by-line. - /// - private readonly string[] lines; - - #endregion - - //#################### CONSTRUCTORS #################### - #region - - /// - /// Constructs a text object from an array of lines. - /// - /// The lines of text. - public Text(string[] lines) - { - this.lines = lines; - } - - #endregion - - //#################### PUBLIC METHODS #################### - #region - - /// - /// Gets the whole text. - /// - /// The whole text. - public string GetAll() - { - using var sw = new StringWriter(); - foreach (var s in lines) - { - sw.WriteLine(s); - } - return sw.ToString(); - } - - /// - /// Gets the portion of text that lies in the specified location range. - /// - /// The row at which the portion starts. - /// The column in the start row at which the portion starts. - /// The row at which the portion ends. - /// The column in the end row at which the portion ends. - /// The portion of text that lies in the specified location range. - public string GetPortion(int startRow, int startColumn, int endRow, int endColumn) - { - // Perform some basic validation on the range bounds. - if (startRow < 0 || endRow < 0 || startColumn < 0 || endColumn < 0 || endRow >= lines.Length || startRow > endRow) - { - throw new Exception - ( - string.Format("Bad range ({0},{1}):({2},{3}) in a piece of text with {4} lines", startRow, startColumn, endRow, endColumn, lines.Length) - ); - } - - using var sw = new StringWriter(); - string line; - - for (var i = startRow; i <= endRow; ++i) - { - if (i == startRow && i == endRow) - { - // This is a single-line range, so take the bit between "startColumn" and "endColumn". - line = startColumn <= lines[i].Length ? lines[i].Substring(startColumn, endColumn - startColumn) : ""; - } - else if (i == startRow) - { - // This is the first line of a multi-line range, so take the bit from "startColumn" onwards. - line = startColumn <= lines[i].Length ? lines[i].Substring(startColumn) : ""; - } - else if (i == endRow) - { - // This is the last line of a multi-line range, so take the bit up to "endColumn". - line = endColumn <= lines[i].Length ? lines[i].Substring(0, endColumn) : lines[i]; - } - else - { - // This is a line in the middle of a multi-line range, so take the whole line. - line = lines[i]; - } - - sw.WriteLine(line); - } - - return sw.ToString(); - } - - #endregion - } -} diff --git a/csharp/extractor/Semmle.Util/Worklist.cs b/csharp/extractor/Semmle.Util/Worklist.cs deleted file mode 100644 index 0a71dbd4381..00000000000 --- a/csharp/extractor/Semmle.Util/Worklist.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Util -{ - /// - /// A worklist of items, providing the operations of adding an item, checking - /// whether there are new items and iterating a chunk of unprocessed items. - /// Any one item will only be accepted into the worklist once. - /// - public class Worklist - { - private readonly HashSet internalSet = new HashSet(); - private LinkedList internalList = new LinkedList(); - private bool hasNewElements = false; - - /// - /// Gets a value indicating whether this instance has had any new elements added - /// since the last time GetUnprocessedElements() was called. - /// - /// - /// true if this instance has new elements; otherwise, false. - /// - public bool HasNewElements => hasNewElements; - - /// - /// Add the specified element to the worklist. - /// - /// - /// If set to true element. - /// - public bool Add(T element) - { - if (internalSet.Contains(element)) - return false; - internalSet.Add(element); - internalList.AddLast(element); - hasNewElements = true; - return true; - } - - /// - /// Gets the unprocessed elements that have been accumulated since the last time - /// this method was called. If HasNewElements == true, the resulting list - /// will be non-empty. - /// - /// - /// The unprocessed elements. - /// - public LinkedList GetUnprocessedElements() - { - var result = internalList; - internalList = new LinkedList(); - hasNewElements = false; - return result; - } - } -} From 550e251d68dabcbfaf2f3ceb5c8cc1124ec9e5cf Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 2 Apr 2024 10:41:56 +0200 Subject: [PATCH 422/497] Data flow: Do not require stores to have matching reads in flow exploration --- .../codeql/dataflow/internal/DataFlowImpl.qll | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index b5f99972bec..64222dbc8e3 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -452,16 +452,20 @@ module MakeImpl Lang> { private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } pragma[nomagic] - private predicate hasReadStep(Content c) { read(_, c, _) } + private predicate storeExUnrestricted( + NodeEx node1, Content c, NodeEx node2, DataFlowType contentType, DataFlowType containerType + ) { + store(pragma[only_bind_into](node1.asNode()), c, pragma[only_bind_into](node2.asNode()), + contentType, containerType) and + stepFilter(node1, node2) + } pragma[nomagic] private predicate storeEx( NodeEx node1, Content c, NodeEx node2, DataFlowType contentType, DataFlowType containerType ) { - store(pragma[only_bind_into](node1.asNode()), c, pragma[only_bind_into](node2.asNode()), - contentType, containerType) and - hasReadStep(c) and - stepFilter(node1, node2) + storeExUnrestricted(node1, c, node2, contentType, containerType) and + read(_, c, _) } pragma[nomagic] @@ -5141,7 +5145,7 @@ module MakeImpl Lang> { midNode = mid.getNodeEx() and t1 = mid.getType() and ap1 = mid.getAp() and - storeEx(midNode, c, node, contentType, t2) and + storeExUnrestricted(midNode, c, node, contentType, t2) and ap2.getHead() = c and ap2.len() = unbindInt(ap1.len() + 1) and compatibleTypes(t1, contentType) @@ -5318,7 +5322,7 @@ module MakeImpl Lang> { not outBarrier(node, state) and // if a node is not the target of a store, we can check `clearsContent` immediately ( - storeEx(_, _, node, _, _) + storeExUnrestricted(_, _, node, _, _) or not clearsContentEx(node, ap.getHead()) ) @@ -5459,7 +5463,7 @@ module MakeImpl Lang> { exists(NodeEx midNode | midNode = mid.getNodeEx() and ap = mid.getAp() and - storeEx(node, c, midNode, _, _) and + storeExUnrestricted(node, c, midNode, _, _) and ap.getHead() = c ) } From 362a109e04b30f64d4b1b5ea78f8cb9dfbd2528f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Vajk?= Date: Wed, 3 Apr 2024 14:23:36 +0200 Subject: [PATCH 423/497] Remove redundant implemented interface Co-authored-by: Michael Nebel --- .../extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs index 1ac2edc5602..1dc320f5f41 100644 --- a/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs +++ b/csharp/extractor/Semmle.Util/ToolStatusPage/DiagnosticsStream.cs @@ -9,7 +9,7 @@ namespace Semmle.Util /// A wrapper around an underlying which allows /// objects to be serialized to it. /// - public sealed class DiagnosticsStream : IDiagnosticsWriter, IDisposable + public sealed class DiagnosticsStream : IDiagnosticsWriter { private readonly JsonSerializer serializer; private readonly StreamWriter writer; From 698debfa20911680bf3fba590871ff1e7bd56818 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 28 Mar 2024 16:05:16 +0000 Subject: [PATCH 424/497] Extractor: explicitly deal with extracting `x.(type)` in type switches --- go/extractor/extractor.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f2ba68a20f0..d9e649401e3 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -1010,7 +1010,10 @@ func extractExpr(tw *trap.Writer, expr ast.Expr, parent trap.Label, idx int) { } kind = dbscheme.TypeAssertExpr.Index() extractExpr(tw, expr.X, lbl, 0) - extractExpr(tw, expr.Type, lbl, 1) + // expr.Type can be `nil` if this is the `x.(type)` in a type switch. + if expr.Type != nil { + extractExpr(tw, expr.Type, lbl, 1) + } case *ast.CallExpr: if expr == nil { return From c7f2e991ed360ddd6aab9661f77199975f90d20a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 28 Mar 2024 16:41:47 +0000 Subject: [PATCH 425/497] Improve QLDoc for TypeAssertExpr Include information about the type assert `x.(type)` used in type switches. --- go/ql/lib/semmle/go/Expr.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 66d79f1d8f4..b1e1a169784 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -754,13 +754,19 @@ class SliceExpr extends @sliceexpr, Expr { * * ```go * x.(T) + * x.(type) * ``` */ class TypeAssertExpr extends @typeassertexpr, Expr { /** Gets the base expression whose type is being asserted. */ Expr getExpr() { result = this.getChildExpr(0) } - /** Gets the expression representing the asserted type. */ + /** + * Gets the expression representing the asserted type. + * + * Note that this is not defined when the type assertion is of the form + * `x.(type)`, as found in type switches. + */ Expr getTypeExpr() { result = this.getChildExpr(1) } override predicate mayHaveOwnSideEffects() { any() } From fe24710c9671e7a16f27dc10eab24f5047365576 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 3 Apr 2024 14:09:37 +0100 Subject: [PATCH 426/497] Improve QLDoc of `Entity.getDeclaration` --- go/ql/lib/semmle/go/Scopes.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 153ca8d6307..740bb39cfec 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -119,7 +119,13 @@ class Entity extends @object { */ Scope getScope() { objectscopes(this, result) } - /** Gets the declaring identifier for this entity. */ + /** + * Gets the declaring identifier for this entity, if any. + * + * Note that type switch statements which define a new variable in the guard + * actually have a new variable (of the right type) implicitly declared at + * the beginning of each case clause, and these do not have a declaration. + */ Ident getDeclaration() { result.declares(this) } /** Gets a reference to this entity. */ From 137594cf36f6c3c33ecc4f458d9968c59fdd2e51 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 3 Apr 2024 14:51:13 +0200 Subject: [PATCH 427/497] Ruby: Add regression test --- .../dataflow/regressions/Regressions.expected | 1 + .../dataflow/regressions/Regressions.ql | 39 +++++++++++++++++++ .../dataflow/regressions/regressions.rb | 3 ++ 3 files changed, 43 insertions(+) create mode 100644 ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected create mode 100644 ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql create mode 100644 ruby/ql/test/library-tests/dataflow/regressions/regressions.rb diff --git a/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected new file mode 100644 index 00000000000..ef846359c3b --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected @@ -0,0 +1 @@ +| regressions.rb:2:1:2:9 | [post] call to reverse | regressions.rb:3:6:3:6 | x | diff --git a/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql new file mode 100644 index 00000000000..2d6c879aa39 --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.ql @@ -0,0 +1,39 @@ +private import codeql.ruby.dataflow.FlowSummary + +private class ReverseSummary extends SimpleSummarizedCallable { + ReverseSummary() { this = "reverse" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self].WithElement[any]" and + output = "ReturnValue" and + preservesValue = true + } +} + +private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source + .(DataFlow::PostUpdateNode) + .getPreUpdateNode() + .asExpr() + .getExpr() + .(MethodCall) + .getMethodName() = "reverse" + } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | + mc.getMethodName() = "sink" and + sink.asExpr().getExpr() = mc.getAnArgument() + ) + } +} + +/** + * This predicate should not have a result. We check that the flow summary for + * `reverse` does not get picked up by the `reverseStepThroughInputOutputAlias` + * logic in `DataFlowImplCommon.qll`. + */ +query predicate noReverseStepThroughInputOutputAlias(DataFlow::Node source, DataFlow::Node sink) { + DataFlow::Global::flow(source, sink) +} diff --git a/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb b/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb new file mode 100644 index 00000000000..f3e22585a8d --- /dev/null +++ b/ruby/ql/test/library-tests/dataflow/regressions/regressions.rb @@ -0,0 +1,3 @@ +x = foo +x.reverse.bar +sink(x) \ No newline at end of file From 7871fb8ce66474da9b5e85eb26bf87e7134e8c07 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 3 Apr 2024 14:54:36 +0200 Subject: [PATCH 428/497] Data flow: Block flow at `expectsContents` nodes in `parameterValueFlow` --- .../dataflow/regressions/Regressions.expected | 1 - .../dataflow/internal/DataFlowImplCommon.qll | 59 ++++++++++--------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected index ef846359c3b..e69de29bb2d 100644 --- a/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected +++ b/ruby/ql/test/library-tests/dataflow/regressions/Regressions.expected @@ -1 +0,0 @@ -| regressions.rb:2:1:2:9 | [post] call to reverse | regressions.rb:3:6:3:6 | x | diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index e83752fcced..81091303ff4 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -863,34 +863,37 @@ module MakeImplCommon Lang> { */ pragma[nomagic] private predicate parameterValueFlowCand(ParamNode p, Node node, boolean read) { - p = node and - read = false - or - // local flow - exists(Node mid | - parameterValueFlowCand(p, mid, read) and - simpleLocalFlowStep(mid, node) and - validParameterAliasStep(mid, node) - ) - or - // read - exists(Node mid | - parameterValueFlowCand(p, mid, false) and - readSet(mid, _, node) and - read = true - ) - or - // flow through: no prior read - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, false) and - argumentValueFlowsThroughCand(arg, node, read) - ) - or - // flow through: no read inside method - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, read) and - argumentValueFlowsThroughCand(arg, node, false) - ) + ( + p = node and + read = false + or + // local flow + exists(Node mid | + parameterValueFlowCand(p, mid, read) and + simpleLocalFlowStep(mid, node) and + validParameterAliasStep(mid, node) + ) + or + // read + exists(Node mid | + parameterValueFlowCand(p, mid, false) and + readSet(mid, _, node) and + read = true + ) + or + // flow through: no prior read + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, false) and + argumentValueFlowsThroughCand(arg, node, read) + ) + or + // flow through: no read inside method + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, read) and + argumentValueFlowsThroughCand(arg, node, false) + ) + ) and + not expectsContentCached(node, _) } pragma[nomagic] From d93d6585d9adc7390c9306a8856c9db51936bc81 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 2 Apr 2024 22:12:13 +0200 Subject: [PATCH 429/497] C#: Mark more expressions as compiler generated --- .../Semmle.Extraction.CSharp/Entities/Expression.cs | 10 ++++++++-- .../Entities/Expressions/ArrayCreation.cs | 2 +- .../Entities/Expressions/Assignment.cs | 6 +++--- .../Entities/Expressions/Cast.cs | 2 +- .../Entities/Expressions/Collections/Spread.cs | 2 +- .../Entities/Expressions/Default.cs | 2 +- .../Entities/Expressions/Discard.cs | 2 +- .../Entities/Expressions/ElementAccess.cs | 2 +- .../Entities/Expressions/ImplicitCast.cs | 8 ++++---- .../Entities/Expressions/Initializer.cs | 4 ++-- .../Entities/Expressions/InterpolatedString.cs | 2 +- .../Entities/Expressions/Literal.cs | 4 ++-- .../ObjectCreation/AnonymousObjectCreation.cs | 6 +++--- .../ObjectCreation/DateTimeObjectCreation.cs | 2 +- .../Entities/Expressions/Patterns/BinaryPattern.cs | 2 +- .../Entities/Expressions/Patterns/ListPattern.cs | 2 +- .../Entities/Expressions/Patterns/PositionalPattern.cs | 2 +- .../Entities/Expressions/Patterns/PropertyPattern.cs | 4 ++-- .../Entities/Expressions/Patterns/RecursivePattern.cs | 2 +- .../Entities/Expressions/Patterns/RelationalPattern.cs | 2 +- .../Entities/Expressions/Patterns/SlicePattern.cs | 2 +- .../Entities/Expressions/Patterns/UnaryPattern.cs | 2 +- .../Entities/Expressions/Query.cs | 4 ++-- .../Entities/Expressions/Switch.cs | 2 +- .../Entities/Expressions/This.cs | 2 +- .../Entities/Expressions/TypeAccess.cs | 2 +- .../Entities/Expressions/TypeOf.cs | 2 +- .../Entities/Expressions/VariableDeclaration.cs | 10 +++++----- .../Semmle.Extraction.CSharp/Entities/Field.cs | 4 ++-- .../Semmle.Extraction.CSharp/Entities/Property.cs | 4 ++-- 30 files changed, 54 insertions(+), 48 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs index 58b01891add..321cdf3ff83 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs @@ -100,8 +100,14 @@ namespace Semmle.Extraction.CSharp.Entities /// The child index. /// A type hint. /// The new expression. - public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child) => - CreateFromNode(new ExpressionNodeInfo(cx, node, parent, child)); + public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child, Boolean isCompilerGenerated = false) + { + var info = new ExpressionNodeInfo(cx, node, parent, child) + { + IsCompilerGenerated = isCompilerGenerated + }; + return CreateFromNode(info); + } public static Expression CreateFromNode(ExpressionNodeInfo info) => Expressions.ImplicitCast.Create(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs index 5c8aa8a35d3..302bcaded39 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ArrayCreation.cs @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.ARRAY_CREATION, parent, childIndex, - true, + isCompilerGenerated: true, null); var arrayCreation = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs index 2494003471b..4de5e460e6d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs @@ -26,10 +26,10 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions if (operatorKind.HasValue) { // Convert assignment such as `a += b` into `a = a + b`. - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, false, null)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, isCompilerGenerated: true, null)); Create(Context, Syntax.Left, simpleAssignExpr, 1); - var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, false, null)); - Create(Context, Syntax.Left, opexpr, 0); + var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, isCompilerGenerated: true, null)); + Create(Context, Syntax.Left, opexpr, 0, isCompilerGenerated: true); Create(Context, Syntax.Right, opexpr, 1); opexpr.OperatorCall(trapFile, Syntax); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs index fee739af532..62e23e3b66d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs @@ -41,7 +41,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.CAST, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); var ret = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs index c9fa8d3512a..a27982f7aad 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Collections/Spread.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class Spread : Expression { public Spread(Context cx, SpreadElementSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SPREAD_ELEMENT, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SPREAD_ELEMENT, parent, child, isCompilerGenerated: false, null)) { Create(cx, syntax.Expression, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs index fc3b03aaf98..968f2e8f43b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Default.cs @@ -24,7 +24,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.DEFAULT, parent, childIndex, - true, + isCompilerGenerated: true, value); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs index fc53cda191b..33d9eb64b04 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Discard.cs @@ -11,7 +11,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions } private Discard(Context cx, CSharpSyntaxNode syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, cx.GetType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.DISCARD, parent, child, false, null)) + base(new ExpressionInfo(cx, cx.GetType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.DISCARD, parent, child, isCompilerGenerated: false, null)) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs index 8129743e04a..34ad6bf2533 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ElementAccess.cs @@ -22,7 +22,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions if (Kind == ExprKind.POINTER_INDIRECTION) { var qualifierInfo = new ExpressionNodeInfo(Context, qualifier, this, 0); - var add = new Expression(new ExpressionInfo(Context, qualifierInfo.Type, Location, ExprKind.ADD, this, 0, false, null)); + var add = new Expression(new ExpressionInfo(Context, qualifierInfo.Type, Location, ExprKind.ADD, this, 0, isCompilerGenerated: false, null)); qualifierInfo.SetParent(add, 0); CreateFromNode(qualifierInfo); PopulateArguments(trapFile, argumentList, 1); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs index 57a37d86360..3e886a9c3ac 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitCast.cs @@ -14,13 +14,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions } private ImplicitCast(ExpressionNodeInfo info) - : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.CAST, info.Parent, info.Child, true, info.ExprValue)) + : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.CAST, info.Parent, info.Child, isCompilerGenerated: true, info.ExprValue)) { Expr = Factory.Create(new ExpressionNodeInfo(Context, info.Node, this, 0)); } private ImplicitCast(ExpressionNodeInfo info, IMethodSymbol method) - : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.OPERATOR_INVOCATION, info.Parent, info.Child, true, info.ExprValue)) + : base(new ExpressionInfo(info.Context, info.ConvertedType, info.Location, ExprKind.OPERATOR_INVOCATION, info.Parent, info.Child, isCompilerGenerated: true, info.ExprValue)) { Expr = Factory.Create(info.SetParent(this, 0)); @@ -65,7 +65,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions kind, parent, childIndex, - true, + isCompilerGenerated: true, v); var method = GetImplicitConversionMethod(type, value); @@ -93,7 +93,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.CAST, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs index d8289e59a28..cdc2e87798e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs @@ -45,7 +45,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.ARRAY_INIT, parent, index, - true, + isCompilerGenerated: true, null); return new Expression(info); @@ -132,7 +132,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions var addMethod = Method.Create(Context, collectionInfo.Symbol as IMethodSymbol); var voidType = AnnotatedTypeSymbol.CreateNotAnnotated(Context.Compilation.GetSpecialType(SpecialType.System_Void)); - var invocation = new Expression(new ExpressionInfo(Context, voidType, Context.CreateLocation(i.GetLocation()), ExprKind.METHOD_INVOCATION, this, child++, false, null)); + var invocation = new Expression(new ExpressionInfo(Context, voidType, Context.CreateLocation(i.GetLocation()), ExprKind.METHOD_INVOCATION, this, child++, isCompilerGenerated: true, null)); if (addMethod is not null) trapFile.expr_call(invocation, addMethod); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs index 1a98f967312..2dfe4976391 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs @@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions case SyntaxKind.InterpolatedStringText: // Create a string literal var interpolatedText = (InterpolatedStringTextSyntax)c; - new Expression(new ExpressionInfo(Context, Type, Context.CreateLocation(c.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, child++, false, interpolatedText.TextToken.ValueText)); + new Expression(new ExpressionInfo(Context, Type, Context.CreateLocation(c.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, child++, isCompilerGenerated: false, interpolatedText.TextToken.ValueText)); break; default: throw new InternalError(c, $"Unhandled interpolation kind {c.Kind()}"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs index 3a0158ba1ae..72d54abf6c1 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Literal.cs @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions kind, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(value)); return new Expression(info); @@ -112,7 +112,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.NULL_LITERAL, parent, childIndex, - true, + isCompilerGenerated: true, ValueAsString(null)); return new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs index f1974f1a50b..a6f94f53338 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs @@ -30,7 +30,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions return; } - var objectInitializer = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.OBJECT_INIT, this, -1, false, null)); + var objectInitializer = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.OBJECT_INIT, this, -1, isCompilerGenerated: false, null)); foreach (var init in Syntax.Initializers) { @@ -40,11 +40,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions var type = property.GetAnnotatedType(); var loc = Context.CreateLocation(init.GetLocation()); - var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, false, null)); + var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, isCompilerGenerated: false, null)); Create(Context, init.Expression, assignment, 0); Property.Create(Context, property); - var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, false, null)); + var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, isCompilerGenerated: false, null)); trapFile.expr_access(access, propEntity); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs index e9f40b1bc67..012a30d81cc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/DateTimeObjectCreation.cs @@ -59,7 +59,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.OBJECT_CREATION, parent, childIndex, - true, + isCompilerGenerated: true, null)); var longTypeSymbol = constructorSymbol.Parameters[0].Type; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs index ec5177c8ce6..3eaf9cc55c3 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class BinaryPattern : Expression { public BinaryPattern(Context cx, BinaryPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, isCompilerGenerated: false, null)) { Pattern.Create(cx, syntax.Left, this, 0); Pattern.Create(cx, syntax.Right, this, 1); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs index 87aeb84bcb4..492e2bcb1ce 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class ListPattern : Expression { internal ListPattern(Context cx, ListPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, isCompilerGenerated: false, null)) { syntax.Patterns.ForEach((p, i) => Pattern.Create(cx, p, this, i)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs index aaf2737c114..e6a34fd7030 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PositionalPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class PositionalPattern : Expression { internal PositionalPattern(Context cx, PositionalPatternClauseSyntax posPc, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(posPc.GetLocation()), ExprKind.POSITIONAL_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(posPc.GetLocation()), ExprKind.POSITIONAL_PATTERN, parent, child, isCompilerGenerated: false, null)) { posPc.Subpatterns.ForEach((p, i) => Pattern.Create(cx, p.Pattern, this, i)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs index 30a020702e5..a195d9ffb83 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs @@ -7,7 +7,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class PropertyPattern : Expression { internal PropertyPattern(Context cx, PropertyPatternClauseSyntax pp, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(pp.GetLocation()), ExprKind.PROPERTY_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(pp.GetLocation()), ExprKind.PROPERTY_PATTERN, parent, child, isCompilerGenerated: false, null)) { child = 0; foreach (var sub in pp.Subpatterns) @@ -56,7 +56,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions }; private static Expression CreateSyntheticExp(Context cx, Microsoft.CodeAnalysis.Location location, IExpressionParentEntity parent, int child) => - new Expression(new ExpressionInfo(cx, null, cx.CreateLocation(location), ExprKind.PROPERTY_PATTERN, parent, child, false, null)); + new Expression(new ExpressionInfo(cx, null, cx.CreateLocation(location), ExprKind.PROPERTY_PATTERN, parent, child, isCompilerGenerated: false, null)); private static void MakeExpressions(Context cx, IExpressionParentEntity parent, SubpatternSyntax syntax, int child) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs index 010e48070ad..514867770b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs @@ -15,7 +15,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions /// The parent pattern/expression. /// The child index of this pattern. public RecursivePattern(Context cx, RecursivePatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, isCompilerGenerated: false, null)) { // Extract the type access if (syntax.Type is TypeSyntax t) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs index 2af3ceef60a..4f6c2eac11f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class RelationalPattern : Expression { public RelationalPattern(Context cx, RelationalPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, isCompilerGenerated: false, null)) { Expression.Create(cx, syntax.Expression, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs index d52af4f54f4..69d7cc878be 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class SlicePattern : Expression { public SlicePattern(Context cx, SlicePatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, isCompilerGenerated: false, null)) { if (syntax.Pattern is not null) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs index 1703211fb3d..64663c7a6e1 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs @@ -6,7 +6,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal class UnaryPattern : Expression { public UnaryPattern(Context cx, UnaryPatternSyntax syntax, IExpressionParentEntity parent, int child) : - base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, false, null)) + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, isCompilerGenerated: false, null)) { Pattern.Create(cx, syntax.Pattern, this, 0); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs index 02936916bf4..85a1ceda47c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs @@ -23,7 +23,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public QueryCall(Context cx, IMethodSymbol? method, SyntaxNode clause, IExpressionParentEntity parent, int child) : base(new ExpressionInfo(cx, method?.GetAnnotatedReturnType(), cx.CreateLocation(clause.GetLocation()), - ExprKind.METHOD_INVOCATION, parent, child, false, null)) + ExprKind.METHOD_INVOCATION, parent, child, isCompilerGenerated: false, null)) { if (method is not null) cx.TrapWriter.Writer.expr_call(this, Method.Create(cx, method)); @@ -97,7 +97,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Expression.Create(cx, Expr, decl, 0); var nameLoc = cx.CreateLocation(name.GetLocation()); - var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, false, null)); + var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, LocalVariable.Create(cx, variableSymbol)); return decl; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs index 2e161f508aa..26b71a6deb4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Switch.cs @@ -27,7 +27,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions internal SwitchCase(Context cx, SwitchExpressionArmSyntax arm, Switch parent, int child) : base(new ExpressionInfo( cx, cx.GetType(arm.Expression), cx.CreateLocation(arm.GetLocation()), - ExprKind.SWITCH_CASE, parent, child, false, null)) + ExprKind.SWITCH_CASE, parent, child, isCompilerGenerated: false, null)) { Expressions.Pattern.Create(cx, arm.Pattern, this, 0); if (arm.WhenClause is WhenClauseSyntax when) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs index a13c2cb95bc..33f2ad9fbc7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/This.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions private This(IExpressionInfo info) : base(info) { } public static This CreateImplicit(Context cx, ITypeSymbol @class, Extraction.Entities.Location loc, IExpressionParentEntity parent, int child) => - new This(new ExpressionInfo(cx, AnnotatedTypeSymbol.CreateNotAnnotated(@class), loc, Kinds.ExprKind.THIS_ACCESS, parent, child, true, null)); + new This(new ExpressionInfo(cx, AnnotatedTypeSymbol.CreateNotAnnotated(@class), loc, Kinds.ExprKind.THIS_ACCESS, parent, child, isCompilerGenerated: true, null)); public static This CreateExplicit(ExpressionNodeInfo info) => new This(info.SetKind(ExprKind.THIS_ACCESS)); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs index b6eaca72844..b4e678d8ab6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeAccess.cs @@ -44,7 +44,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.TYPE_ACCESS, parent, childIndex, - true, + isCompilerGenerated: true, null); return new Expression(typeAccessInfo); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs index c499e405ccb..b36c1e425a0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/TypeOf.cs @@ -26,7 +26,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions ExprKind.TYPEOF, parent, childIndex, - true, + isCompilerGenerated: true, null); var ret = new Expression(info); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs index e77040fd16c..5931feb070c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs @@ -15,7 +15,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static VariableDeclaration Create(Context cx, ISymbol symbol, AnnotatedTypeSymbol? type, TypeSyntax? optionalSyntax, Extraction.Entities.Location exprLocation, bool isVar, IExpressionParentEntity parent, int child) { - var ret = new VariableDeclaration(new ExpressionInfo(cx, type, exprLocation, ExprKind.LOCAL_VAR_DECL, parent, child, false, null)); + var ret = new VariableDeclaration(new ExpressionInfo(cx, type, exprLocation, ExprKind.LOCAL_VAR_DECL, parent, child, isCompilerGenerated: false, null)); cx.Try(null, null, () => { var l = LocalVariable.Create(cx, symbol); @@ -52,7 +52,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Expression CreateParenthesized(Context cx, DeclarationExpressionSyntax node, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child, INamedTypeSymbol? t) { var type = t is null ? (AnnotatedTypeSymbol?)null : new AnnotatedTypeSymbol(t, t.NullableAnnotation); - var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(node.GetLocation()), ExprKind.TUPLE, parent, child, false, null)); + var tuple = new Expression(new ExpressionInfo(cx, type, cx.CreateLocation(node.GetLocation()), ExprKind.TUPLE, parent, child, isCompilerGenerated: false, null)); cx.Try(null, null, () => { @@ -68,7 +68,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions public static Expression CreateParenthesized(Context cx, VarPatternSyntax varPattern, ParenthesizedVariableDesignationSyntax designation, IExpressionParentEntity parent, int child) { var tuple = new Expression( - new ExpressionInfo(cx, null, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, false, null), + new ExpressionInfo(cx, null, cx.CreateLocation(varPattern.GetLocation()), ExprKind.TUPLE, parent, child, isCompilerGenerated: false, null), shouldPopulate: false); var elementTypes = new List(); @@ -148,7 +148,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Create(cx, node, node.Designation, parent, child, cx.GetTypeInfo(node).Type.DisambiguateType() as INamedTypeSymbol); public static VariableDeclaration Create(Context cx, CSharpSyntaxNode c, AnnotatedTypeSymbol? type, IExpressionParentEntity parent, int child) => - new VariableDeclaration(new ExpressionInfo(cx, type, cx.CreateLocation(c.FixedLocation()), ExprKind.LOCAL_VAR_DECL, parent, child, false, null)); + new VariableDeclaration(new ExpressionInfo(cx, type, cx.CreateLocation(c.FixedLocation()), ExprKind.LOCAL_VAR_DECL, parent, child, isCompilerGenerated: false, null)); public static VariableDeclaration Create(Context cx, CatchDeclarationSyntax d, bool isVar, IExpressionParentEntity parent, int child) { @@ -179,7 +179,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Create(cx, d.Initializer.Value, ret, 0); // Create an access - var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, false, null)); + var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, localVar); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index a65b30af5aa..f423f42dd5c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -110,9 +110,9 @@ namespace Semmle.Extraction.CSharp.Entities string? constValue, ref int child) { var type = Symbol.GetAnnotatedType(); - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, false, constValue)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, constValue)); Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, false, constValue)); + var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, constValue)); trapFile.expr_access(access, this); return access; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs index 08fa4335452..07e74e82164 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs @@ -86,9 +86,9 @@ namespace Semmle.Extraction.CSharp.Entities { var loc = Context.CreateLocation(initializer!.GetLocation()); var annotatedType = AnnotatedTypeSymbol.CreateNotAnnotated(Symbol.Type); - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, false, null)); + var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, null)); Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, false, null)); + var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, null)); trapFile.expr_access(access, this); if (!Symbol.IsStatic) { From 813f5b99e76864db65036e11073fd363c6f3c05e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 3 Apr 2024 10:13:24 +0200 Subject: [PATCH 430/497] C#: Update PrintAST query --- csharp/ql/lib/semmle/code/csharp/PrintAst.qll | 26 +--- csharp/ql/lib/semmle/code/csharp/Variable.qll | 4 +- .../ql/lib/semmle/code/csharp/exprs/Expr.qll | 6 +- .../attributes/PrintAst.expected | 4 +- .../library-tests/comments/PrintAst.expected | 8 +- .../library-tests/csharp11/PrintAst.expected | 8 +- .../library-tests/csharp6/PrintAst.expected | 4 +- .../library-tests/csharp7.2/PrintAst.expected | 8 +- .../library-tests/csharp7/PrintAst.expected | 16 +-- .../library-tests/csharp8/PrintAst.expected | 16 +-- .../library-tests/csharp9/PrintAst.expected | 12 +- .../definitions/PrintAst.expected | 22 ++-- .../library-tests/enums/PrintAst.expected | 34 ++--- .../library-tests/events/PrintAst.expected | 12 +- .../expressions/PrintAst.expected | 50 +++---- .../library-tests/fields/PrintAst.expected | 122 +++++++----------- .../library-tests/generics/PrintAst.expected | 20 +-- .../library-tests/indexers/PrintAst.expected | 20 +-- 18 files changed, 135 insertions(+), 257 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index eb5ca6b4727..281e157975a 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -32,7 +32,10 @@ private predicate shouldPrint(Element e, Location l) { } private predicate isImplicitExpression(ControlFlowElement element) { - element.(Expr).isImplicit() and not exists(element.getAChild()) + element.(Expr).isImplicit() and + not element instanceof CastExpr and + not element.(OperatorCall).getTarget() instanceof ImplicitConversionOperator and + not element instanceof ElementInitializer } private predicate isFilteredCompilerGenerated(Declaration d) { @@ -291,18 +294,6 @@ class ControlFlowElementNode extends ElementNode { controlFlowElement = element and // Removing implicit expressions not isImplicitExpression(element) and - // Removing extra nodes that are generated for an `AssignOperation` - not exists(AssignOperation ao | - ao.hasExpandedAssignment() and - ( - ao.getExpandedAssignment() = controlFlowElement or - ao.getExpandedAssignment().getRValue() = controlFlowElement or - ao.getExpandedAssignment().getRValue().(BinaryOperation).getLeftOperand() = - controlFlowElement.getParent*() or - ao.getExpandedAssignment().getRValue().(OperatorCall).getChild(0) = - controlFlowElement.getParent*() - ) - ) and not isNotNeeded(element.getParent+()) and // LambdaExpr is both a Callable and a ControlFlowElement, // print it with the more specific CallableNode @@ -429,7 +420,7 @@ final class DeclarationWithAccessorsNode extends ElementNode { result.(ParametersNode).getParameterizable() = declaration or childIndex = 2 and - result.(ElementNode).getElement() = declaration.(Property).getInitializer().getParent() + result.(ElementNode).getElement() = declaration.(Property).getInitializer() or result.(ElementNode).getElement() = rank[childIndex - 2](Element a, string file, int line, int column, string name | @@ -462,12 +453,7 @@ final class FieldNode extends ElementNode { result.(AttributesNode).getAttributable() = field or childIndex = 1 and - field.hasInitializer() and - ( - if field.getDeclaringType() instanceof Enum - then result.(ElementNode).getElement() = field.getInitializer() - else result.(ElementNode).getElement() = field.getInitializer().getParent() - ) + result.(ElementNode).getElement() = field.getInitializer() } } diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 4bef47056ef..982b4e4743b 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -408,7 +408,7 @@ class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent * } * ``` */ - override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) } + final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) } /** * Holds if this field has an initial value. For example, the initial @@ -515,6 +515,4 @@ class EnumConstant extends MemberConstant { * ``` */ predicate hasExplicitValue() { exists(this.getInitializer()) } - - override Expr getInitializer() { result = this.getChildExpr(0) } } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 0cd3f36467c..935162523a1 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -67,7 +67,11 @@ class Expr extends ControlFlowElement, @expr { * Holds if this expression is generated by the compiler and does not appear * explicitly in the source code. */ - predicate isImplicit() { compiler_generated(this) } + final predicate isImplicit() { + compiler_generated(this) or + this = + any(AssignOperation op).getExpandedAssignment().getRValue().getChildExpr(0).getAChildExpr+() + } /** * Gets an expression that is the result of stripping (recursively) all diff --git a/csharp/ql/test/library-tests/attributes/PrintAst.expected b/csharp/ql/test/library-tests/attributes/PrintAst.expected index 62106d43664..209aba20ff1 100644 --- a/csharp/ql/test/library-tests/attributes/PrintAst.expected +++ b/csharp/ql/test/library-tests/attributes/PrintAst.expected @@ -163,9 +163,7 @@ attributes.cs: # 67| 4: [BlockStmt] {...} # 70| [Enum] E # 70| 5: [Field] A -# 70| 1: [AssignExpr] ... = ... -# 70| 0: [MemberConstantAccess] access to constant A -# 70| 1: [IntLiteral] 42 +# 70| 1: [IntLiteral] 42 # 72| [Class] ArgsAttribute #-----| 3: (Base types) # 72| 0: [TypeMention] Attribute diff --git a/csharp/ql/test/library-tests/comments/PrintAst.expected b/csharp/ql/test/library-tests/comments/PrintAst.expected index cbbfbc58c8d..68c2c582e37 100644 --- a/csharp/ql/test/library-tests/comments/PrintAst.expected +++ b/csharp/ql/test/library-tests/comments/PrintAst.expected @@ -186,14 +186,10 @@ trivia.cs: # 89| 4: [BlockStmt] {...} # 92| 7: [Field] F1 # 92| -1: [TypeMention] int -# 92| 1: [AssignExpr] ... = ... -# 92| 0: [FieldAccess] access to field F1 -# 94| 1: [IntLiteral] 10 +# 94| 1: [IntLiteral] 10 # 98| 8: [Field] F2 # 98| -1: [TypeMention] int -# 98| 1: [AssignExpr] ... = ... -# 98| 0: [FieldAccess] access to field F2 -# 98| 1: [IntLiteral] 0 +# 98| 1: [IntLiteral] 0 # 100| 9: [Property] P1 # 100| -1: [TypeMention] int # 102| 3: [Getter] get_P1 diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 4716334aca0..dc1927360e1 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1111,18 +1111,14 @@ StaticInterfaceMembers.cs: #-----| 3: (Base types) # 28| 4: [Property] Real # 28| -1: [TypeMention] double -# 28| 2: [AssignExpr] ... = ... -# 28| 0: [PropertyCall] access to property Real -# 28| 1: [DoubleLiteral] 0 +# 28| 2: [DoubleLiteral] 0 # 28| 3: [Getter] get_Real # 28| 4: [Setter] set_Real #-----| 2: (Parameters) # 28| 0: [Parameter] value # 29| 5: [Property] Imaginary # 29| -1: [TypeMention] double -# 29| 2: [AssignExpr] ... = ... -# 29| 0: [PropertyCall] access to property Imaginary -# 29| 1: [DoubleLiteral] 0 +# 29| 2: [DoubleLiteral] 0 # 29| 3: [Getter] get_Imaginary # 29| 4: [Setter] set_Imaginary #-----| 2: (Parameters) diff --git a/csharp/ql/test/library-tests/csharp6/PrintAst.expected b/csharp/ql/test/library-tests/csharp6/PrintAst.expected index 5fe46bf5afa..892ad6dd4b1 100644 --- a/csharp/ql/test/library-tests/csharp6/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp6/PrintAst.expected @@ -2,9 +2,7 @@ csharp6.cs: # 10| [Class] TestCSharp6 # 12| 6: [Property] Value # 12| -1: [TypeMention] int -# 15| 2: [AssignExpr] ... = ... -# 12| 0: [PropertyCall] access to property Value -# 15| 1: [IntLiteral] 20 +# 15| 2: [IntLiteral] 20 # 14| 3: [Getter] get_Value # 17| 7: [Method] Fn # 17| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected index 39b7c407b74..31036ced693 100644 --- a/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.2/PrintAst.expected @@ -35,15 +35,11 @@ csharp72.cs: # 44| [Class] NumericLiterals # 46| 5: [Field] binaryValue # 46| -1: [TypeMention] int -# 46| 1: [AssignExpr] ... = ... -# 46| 0: [FieldAccess] access to field binaryValue -# 46| 1: [IntLiteral] 85 +# 46| 1: [IntLiteral] 85 # 49| [Class] PrivateProtected # 51| 5: [Field] X # 51| -1: [TypeMention] int -# 51| 1: [AssignExpr] ... = ... -# 51| 0: [FieldAccess] access to field X -# 51| 1: [IntLiteral] 1 +# 51| 1: [IntLiteral] 1 # 53| 6: [Method] F # 53| -1: [TypeMention] Void # 53| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp7/PrintAst.expected b/csharp/ql/test/library-tests/csharp7/PrintAst.expected index 7f8e1d1659a..e5d009e0df6 100644 --- a/csharp/ql/test/library-tests/csharp7/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7/PrintAst.expected @@ -2,25 +2,17 @@ CSharp7.cs: # 5| [Class] Literals # 7| 5: [Field] x # 7| -1: [TypeMention] int -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field x -# 7| 1: [IntLiteral] 11 +# 7| 1: [IntLiteral] 11 # 8| 6: [Field] y # 8| -1: [TypeMention] int -# 8| 1: [AssignExpr] ... = ... -# 8| 0: [FieldAccess] access to field y -# 8| 1: [IntLiteral] 123456 +# 8| 1: [IntLiteral] 123456 # 9| 7: [Field] z # 9| -1: [TypeMention] int -# 9| 1: [AssignExpr] ... = ... -# 9| 0: [FieldAccess] access to field z -# 9| 1: [IntLiteral] 128 +# 9| 1: [IntLiteral] 128 # 12| [Class] ExpressionBodiedMembers # 14| 4: [Field] field # 14| -1: [TypeMention] int -# 14| 1: [AssignExpr] ... = ... -# 14| 0: [FieldAccess] access to field field -# 14| 1: [IntLiteral] 0 +# 14| 1: [IntLiteral] 0 # 15| 5: [Method] Foo # 15| -1: [TypeMention] int # 15| 4: [FieldAccess] access to field field diff --git a/csharp/ql/test/library-tests/csharp8/PrintAst.expected b/csharp/ql/test/library-tests/csharp8/PrintAst.expected index 10dceb400ed..c33374e4761 100644 --- a/csharp/ql/test/library-tests/csharp8/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp8/PrintAst.expected @@ -2,18 +2,14 @@ AlternateInterpolatedStrings.cs: # 3| [Class] AlternateInterpolatedStrings # 5| 5: [Field] s1 # 5| -1: [TypeMention] string -# 5| 1: [AssignExpr] ... = ... -# 5| 0: [FieldAccess] access to field s1 -# 5| 1: [InterpolatedStringExpr] $"..." -# 5| 0: [StringLiteralUtf16] "C:" -# 5| 1: [IntLiteral] 12 +# 5| 1: [InterpolatedStringExpr] $"..." +# 5| 0: [StringLiteralUtf16] "C:" +# 5| 1: [IntLiteral] 12 # 6| 6: [Field] s2 # 6| -1: [TypeMention] string -# 6| 1: [AssignExpr] ... = ... -# 6| 0: [FieldAccess] access to field s2 -# 6| 1: [InterpolatedStringExpr] $"..." -# 6| 0: [StringLiteralUtf16] "C:" -# 6| 1: [IntLiteral] 12 +# 6| 1: [InterpolatedStringExpr] $"..." +# 6| 0: [StringLiteralUtf16] "C:" +# 6| 1: [IntLiteral] 12 AsyncStreams.cs: # 6| [Class] AsyncStreams # 8| 5: [Method] Items diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index eacbfd8fd45..a1ecbd0a212 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -3,10 +3,8 @@ AnonymousObjectCreation.cs: # 7| 5: [Field] l # 7| -1: [TypeMention] List # 7| 1: [TypeMention] AnonObj -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field l -# 7| 1: [CastExpr] (...) ... -# 7| 1: [ObjectCreation] object creation of type List +# 7| 1: [CastExpr] (...) ... +# 7| 1: [ObjectCreation] object creation of type List # 9| 6: [Property] Prop1 # 9| -1: [TypeMention] int # 9| 3: [Getter] get_Prop1 @@ -294,10 +292,8 @@ FunctionPointer.cs: # 5| 5: [Class] Program # 7| 5: [Field] pointer # 7| -1: [TypeMention] delegate* default -# 7| 1: [AssignExpr] ... = ... -# 7| 0: [FieldAccess] access to field pointer -# 7| 1: [AddressOfExpr] &... -# 7| 0: [MethodAccess] access to method M0 +# 7| 1: [AddressOfExpr] &... +# 7| 0: [MethodAccess] access to method M0 # 9| 6: [Method] M0 # 9| -1: [TypeMention] int # 10| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/definitions/PrintAst.expected b/csharp/ql/test/library-tests/definitions/PrintAst.expected index 2f15f70f447..1ad3ad1a61d 100644 --- a/csharp/ql/test/library-tests/definitions/PrintAst.expected +++ b/csharp/ql/test/library-tests/definitions/PrintAst.expected @@ -12,13 +12,9 @@ definitions.cs: # 9| 4: [BlockStmt] {...} # 13| 2: [Enum] Enumeration # 15| 5: [Field] e1 -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [MemberConstantAccess] access to constant e1 -# 15| 1: [IntLiteral] 1 +# 15| 1: [IntLiteral] 1 # 15| 6: [Field] e2 -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [MemberConstantAccess] access to constant e2 -# 15| 1: [IntLiteral] 2 +# 15| 1: [IntLiteral] 2 # 15| 7: [Field] e3 # 18| 3: [Class] C1 # 20| 4: [InstanceConstructor] C1 @@ -405,14 +401,12 @@ definitions.cs: # 166| -1: [TypeMention] Nested # 166| 1: [TypeMention] C4 # 166| 2: [TypeMention] I4 -# 166| 1: [AssignExpr] ... = ... -# 166| 0: [FieldAccess] access to field f -# 166| 1: [MethodCall] call to method Create -# 166| -1: [TypeAccess] access to type Nested -# 166| -2: [TypeMention] Nested -# 166| 1: [TypeMention] I4 -# 166| -1: [TypeAccess] access to type C4 -# 166| 0: [TypeMention] C4 +# 166| 1: [MethodCall] call to method Create +# 166| -1: [TypeAccess] access to type Nested +# 166| -2: [TypeMention] Nested +# 166| 1: [TypeMention] I4 +# 166| -1: [TypeAccess] access to type C4 +# 166| 0: [TypeMention] C4 # 167| 6: [Field] c1 # 167| -1: [TypeMention] C1 # 169| 7: [Method] M diff --git a/csharp/ql/test/library-tests/enums/PrintAst.expected b/csharp/ql/test/library-tests/enums/PrintAst.expected index 6c357704ad1..bb9e5a3a9c9 100644 --- a/csharp/ql/test/library-tests/enums/PrintAst.expected +++ b/csharp/ql/test/library-tests/enums/PrintAst.expected @@ -11,35 +11,25 @@ enums.cs: # 23| 3: [Enum] E # 25| 4: [Enum] ValueColor # 28| 5: [Field] OneRed -# 28| 1: [AssignExpr] ... = ... -# 28| 0: [MemberConstantAccess] access to constant OneRed -# 28| 1: [CastExpr] (...) ... -# 28| 1: [IntLiteral] 1 +# 28| 1: [CastExpr] (...) ... +# 28| 1: [IntLiteral] 1 # 29| 6: [Field] TwoGreen -# 29| 1: [AssignExpr] ... = ... -# 29| 0: [MemberConstantAccess] access to constant TwoGreen -# 29| 1: [CastExpr] (...) ... -# 29| 1: [IntLiteral] 2 +# 29| 1: [CastExpr] (...) ... +# 29| 1: [IntLiteral] 2 # 30| 7: [Field] FourBlue -# 30| 1: [AssignExpr] ... = ... -# 30| 0: [MemberConstantAccess] access to constant FourBlue -# 30| 1: [CastExpr] (...) ... -# 30| 1: [IntLiteral] 4 +# 30| 1: [CastExpr] (...) ... +# 30| 1: [IntLiteral] 4 # 34| 5: [Enum] SparseColor # 37| 5: [Field] Red # 38| 6: [Field] Green -# 38| 1: [AssignExpr] ... = ... -# 38| 0: [MemberConstantAccess] access to constant Green -# 38| 1: [IntLiteral] 10 +# 38| 1: [IntLiteral] 10 # 39| 7: [Field] Blue # 40| 8: [Field] AnotherBlue -# 40| 1: [AssignExpr] ... = ... -# 40| 0: [MemberConstantAccess] access to constant AnotherBlue -# 40| 1: [AddExpr] ... + ... -# 40| 0: [CastExpr] (...) ... -# 40| 1: [MemberConstantAccess] access to constant Blue -# 40| 1: [CastExpr] (...) ... -# 40| 1: [MemberConstantAccess] access to constant Red +# 40| 1: [AddExpr] ... + ... +# 40| 0: [CastExpr] (...) ... +# 40| 1: [MemberConstantAccess] access to constant Blue +# 40| 1: [CastExpr] (...) ... +# 40| 1: [MemberConstantAccess] access to constant Red # 44| 6: [Class] Test # 47| 5: [Method] Main # 47| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/events/PrintAst.expected b/csharp/ql/test/library-tests/events/PrintAst.expected index 7f75cd7b1cb..84825067e42 100644 --- a/csharp/ql/test/library-tests/events/PrintAst.expected +++ b/csharp/ql/test/library-tests/events/PrintAst.expected @@ -87,16 +87,12 @@ events.cs: # 50| 4: [Class] Control # 53| 6: [Field] mouseDownEventKey # 53| -1: [TypeMention] object -# 53| 1: [AssignExpr] ... = ... -# 53| 0: [FieldAccess] access to field mouseDownEventKey -# 53| 1: [ObjectCreation] object creation of type Object -# 53| 0: [TypeMention] object +# 53| 1: [ObjectCreation] object creation of type Object +# 53| 0: [TypeMention] object # 54| 7: [Field] mouseUpEventKey # 54| -1: [TypeMention] object -# 54| 1: [AssignExpr] ... = ... -# 54| 0: [FieldAccess] access to field mouseUpEventKey -# 54| 1: [ObjectCreation] object creation of type Object -# 54| 0: [TypeMention] object +# 54| 1: [ObjectCreation] object creation of type Object +# 54| 0: [TypeMention] object # 57| 8: [Method] GetEventHandler # 57| -1: [TypeMention] Delegate #-----| 2: (Parameters) diff --git a/csharp/ql/test/library-tests/expressions/PrintAst.expected b/csharp/ql/test/library-tests/expressions/PrintAst.expected index e865a36d549..ce25c57b0d9 100644 --- a/csharp/ql/test/library-tests/expressions/PrintAst.expected +++ b/csharp/ql/test/library-tests/expressions/PrintAst.expected @@ -417,12 +417,10 @@ ReducedExpression.cs: # 2| [Class] ReducedClass # 5| 5: [Field] ReducedExpression # 5| -1: [TypeMention] int -# 5| 1: [AssignExpr] ... = ... -# 5| 0: [MemberConstantAccess] access to constant ReducedExpression -# 5| 1: [ConditionalExpr] ... ? ... : ... -# 5| 0: [BoolLiteral] true -# 5| 1: [IntLiteral] 10 -# 5| 2: [IntLiteral] 12 +# 5| 1: [ConditionalExpr] ... ? ... : ... +# 5| 0: [BoolLiteral] true +# 5| 1: [IntLiteral] 10 +# 5| 2: [IntLiteral] 12 expressions.cs: # 5| [NamespaceDeclaration] namespace ... { ... } # 7| 1: [Class] Class @@ -550,14 +548,10 @@ expressions.cs: # 41| 0: [LocalVariableAccess] access to local variable c # 44| 6: [Field] constant # 44| -1: [TypeMention] string -# 44| 1: [AssignExpr] ... = ... -# 44| 0: [MemberConstantAccess] access to constant constant -# 44| 1: [StringLiteralUtf16] "constant" +# 44| 1: [StringLiteralUtf16] "constant" # 45| 7: [Field] f # 45| -1: [TypeMention] int -# 45| 1: [AssignExpr] ... = ... -# 45| 0: [FieldAccess] access to field f -# 45| 1: [IntLiteral] 0 +# 45| 1: [IntLiteral] 0 # 46| 8: [Field] name # 46| -1: [TypeMention] string # 48| 9: [StaticConstructor] Class @@ -1492,16 +1486,12 @@ expressions.cs: # 361| 15: [Class] Rectangle2 # 364| 5: [Field] p1 # 364| -1: [TypeMention] Point -# 364| 1: [AssignExpr] ... = ... -# 364| 0: [FieldAccess] access to field p1 -# 364| 1: [ObjectCreation] object creation of type Point -# 364| 0: [TypeMention] Point +# 364| 1: [ObjectCreation] object creation of type Point +# 364| 0: [TypeMention] Point # 365| 6: [Field] p2 # 365| -1: [TypeMention] Point -# 365| 1: [AssignExpr] ... = ... -# 365| 0: [FieldAccess] access to field p2 -# 365| 1: [ObjectCreation] object creation of type Point -# 365| 0: [TypeMention] Point +# 365| 1: [ObjectCreation] object creation of type Point +# 365| 0: [TypeMention] Point # 367| 7: [Property] P1 # 367| -1: [TypeMention] Point # 367| 3: [Getter] get_P1 @@ -1520,11 +1510,9 @@ expressions.cs: # 376| 6: [Field] phoneNumbers # 376| -1: [TypeMention] List # 376| 1: [TypeMention] string -# 376| 1: [AssignExpr] ... = ... -# 376| 0: [FieldAccess] access to field phoneNumbers -# 376| 1: [ObjectCreation] object creation of type List -# 376| 0: [TypeMention] List -# 376| 1: [TypeMention] string +# 376| 1: [ObjectCreation] object creation of type List +# 376| 0: [TypeMention] List +# 376| 1: [TypeMention] string # 378| 7: [Property] Name # 378| -1: [TypeMention] string # 378| 3: [Getter] get_Name @@ -2194,9 +2182,8 @@ expressions.cs: # 495| 19: [Class] ExpressionDepth # 497| 5: [Field] d # 497| -1: [TypeMention] int -# 497| 1: [AssignExpr] ... = ... -# 497| 0: [MemberConstantAccess] access to constant d -# 497| 1: [AddExpr] ... + ... +# 497| 1: [AddExpr] ... + ... +# 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... @@ -2274,9 +2261,7 @@ expressions.cs: # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... # 497| 0: [AddExpr] ... + ... -# 497| 0: [AddExpr] ... + ... -# 497| 0: [IntLiteral] 1 -# 497| 1: [IntLiteral] 1 +# 497| 0: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 @@ -2315,7 +2300,7 @@ expressions.cs: # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 # 497| 1: [IntLiteral] 1 -# 498| 1: [IntLiteral] 1 +# 497| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 @@ -2355,6 +2340,7 @@ expressions.cs: # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 # 498| 1: [IntLiteral] 1 +# 498| 1: [IntLiteral] 1 # 501| 20: [Class] TupleExprs # 503| 5: [Method] Test # 503| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/fields/PrintAst.expected b/csharp/ql/test/library-tests/fields/PrintAst.expected index f6857832791..4f33d662a06 100644 --- a/csharp/ql/test/library-tests/fields/PrintAst.expected +++ b/csharp/ql/test/library-tests/fields/PrintAst.expected @@ -3,37 +3,27 @@ fields.cs: # 7| 1: [Class] A # 10| 6: [Field] X # 10| -1: [TypeMention] int -# 10| 1: [AssignExpr] ... = ... -# 10| 0: [FieldAccess] access to field X -# 10| 1: [IntLiteral] 1 +# 10| 1: [IntLiteral] 1 # 10| 7: [Field] Y # 10| -1: [TypeMention] int # 10| 8: [Field] Z # 10| -1: [TypeMention] int -# 10| 1: [AssignExpr] ... = ... -# 10| 0: [FieldAccess] access to field Z -# 10| 1: [IntLiteral] 100 +# 10| 1: [IntLiteral] 100 # 13| 2: [Class] B # 15| 6: [Field] X # 15| -1: [TypeMention] int -# 15| 1: [AssignExpr] ... = ... -# 15| 0: [FieldAccess] access to field X -# 15| 1: [IntLiteral] 1 +# 15| 1: [IntLiteral] 1 # 16| 7: [Field] Y # 16| -1: [TypeMention] int # 17| 8: [Field] Z # 17| -1: [TypeMention] int -# 17| 1: [AssignExpr] ... = ... -# 17| 0: [FieldAccess] access to field Z -# 17| 1: [IntLiteral] 100 +# 17| 1: [IntLiteral] 100 # 20| 3: [Class] C`1 #-----| 1: (Type parameters) # 20| 0: [TypeParameter] V # 23| 5: [Field] count # 23| -1: [TypeMention] int -# 23| 1: [AssignExpr] ... = ... -# 23| 0: [FieldAccess] access to field count -# 23| 1: [IntLiteral] 0 +# 23| 1: [IntLiteral] 0 # 25| 6: [InstanceConstructor] C # 25| 4: [BlockStmt] {...} # 25| 0: [ExprStmt] ...; @@ -50,22 +40,16 @@ fields.cs: # 34| -1: [TypeMention] bool # 35| 7: [Field] x # 35| -1: [TypeMention] double -# 35| 1: [AssignExpr] ... = ... -# 35| 0: [FieldAccess] access to field x -# 35| 1: [MethodCall] call to method Sqrt -# 35| -1: [TypeAccess] access to type Math -# 35| 0: [TypeMention] Math -# 35| 0: [DoubleLiteral] 2 +# 35| 1: [MethodCall] call to method Sqrt +# 35| -1: [TypeAccess] access to type Math +# 35| 0: [TypeMention] Math +# 35| 0: [DoubleLiteral] 2 # 36| 8: [Field] i # 36| -1: [TypeMention] int -# 36| 1: [AssignExpr] ... = ... -# 36| 0: [FieldAccess] access to field i -# 36| 1: [IntLiteral] 100 +# 36| 1: [IntLiteral] 100 # 37| 9: [Field] s # 37| -1: [TypeMention] string -# 37| 1: [AssignExpr] ... = ... -# 37| 0: [FieldAccess] access to field s -# 37| 1: [StringLiteralUtf16] "Hello" +# 37| 1: [StringLiteralUtf16] "Hello" # 39| 10: [Method] Main # 39| -1: [TypeMention] Void # 40| 4: [BlockStmt] {...} @@ -111,28 +95,24 @@ fields.cs: # 50| 5: [Class] Color # 53| 5: [Field] Black # 53| -1: [TypeMention] Color -# 53| 1: [AssignExpr] ... = ... -# 53| 0: [FieldAccess] access to field Black -# 53| 1: [ObjectCreation] object creation of type Color -# 53| -1: [TypeMention] Color -# 53| 0: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 -# 53| 1: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 -# 53| 2: [CastExpr] (...) ... -# 53| 1: [IntLiteral] 0 +# 53| 1: [ObjectCreation] object creation of type Color +# 53| -1: [TypeMention] Color +# 53| 0: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 +# 53| 1: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 +# 53| 2: [CastExpr] (...) ... +# 53| 1: [IntLiteral] 0 # 54| 6: [Field] White # 54| -1: [TypeMention] Color -# 54| 1: [AssignExpr] ... = ... -# 54| 0: [FieldAccess] access to field White -# 54| 1: [ObjectCreation] object creation of type Color -# 54| -1: [TypeMention] Color -# 54| 0: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 -# 54| 1: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 -# 54| 2: [CastExpr] (...) ... -# 54| 1: [IntLiteral] 255 +# 54| 1: [ObjectCreation] object creation of type Color +# 54| -1: [TypeMention] Color +# 54| 0: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 +# 54| 1: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 +# 54| 2: [CastExpr] (...) ... +# 54| 1: [IntLiteral] 255 # 56| 7: [InstanceConstructor] Color #-----| 2: (Parameters) # 56| 0: [Parameter] r @@ -145,50 +125,38 @@ fields.cs: # 60| 6: [Class] TestBindings # 63| 6: [Field] a # 63| -1: [TypeMention] int -# 63| 1: [AssignExpr] ... = ... -# 63| 0: [FieldAccess] access to field a -# 63| 1: [AddExpr] ... + ... -# 63| 0: [FieldAccess] access to field b -# 63| 1: [IntLiteral] 1 +# 63| 1: [AddExpr] ... + ... +# 63| 0: [FieldAccess] access to field b +# 63| 1: [IntLiteral] 1 # 64| 7: [Field] b # 64| -1: [TypeMention] int -# 64| 1: [AssignExpr] ... = ... -# 64| 0: [FieldAccess] access to field b -# 64| 1: [AddExpr] ... + ... -# 64| 0: [FieldAccess] access to field a -# 64| 1: [IntLiteral] 1 +# 64| 1: [AddExpr] ... + ... +# 64| 0: [FieldAccess] access to field a +# 64| 1: [IntLiteral] 1 # 70| [NamespaceDeclaration] namespace ... { ... } # 72| 1: [Class] A # 74| 5: [Field] X # 74| -1: [TypeMention] int -# 74| 1: [AssignExpr] ... = ... -# 74| 0: [MemberConstantAccess] access to constant X -# 74| 1: [AddExpr] ... + ... -# 74| 0: [MemberConstantAccess] access to constant Z -# 74| -1: [TypeAccess] access to type B -# 74| 0: [TypeMention] B -# 74| 1: [IntLiteral] 1 +# 74| 1: [AddExpr] ... + ... +# 74| 0: [MemberConstantAccess] access to constant Z +# 74| -1: [TypeAccess] access to type B +# 74| 0: [TypeMention] B +# 74| 1: [IntLiteral] 1 # 75| 6: [Field] Y # 75| -1: [TypeMention] int -# 75| 1: [AssignExpr] ... = ... -# 75| 0: [MemberConstantAccess] access to constant Y -# 75| 1: [IntLiteral] 10 +# 75| 1: [IntLiteral] 10 # 78| 2: [Class] B # 80| 5: [Field] Z # 80| -1: [TypeMention] int -# 80| 1: [AssignExpr] ... = ... -# 80| 0: [MemberConstantAccess] access to constant Z -# 80| 1: [AddExpr] ... + ... -# 80| 0: [MemberConstantAccess] access to constant Y -# 80| -1: [TypeAccess] access to type A -# 80| 0: [TypeMention] A -# 80| 1: [IntLiteral] 1 +# 80| 1: [AddExpr] ... + ... +# 80| 0: [MemberConstantAccess] access to constant Y +# 80| -1: [TypeAccess] access to type A +# 80| 0: [TypeMention] A +# 80| 1: [IntLiteral] 1 # 83| 3: [Class] C # 85| 4: [Field] Foo # 85| -1: [TypeMention] int -# 85| 1: [AssignExpr] ... = ... -# 85| 0: [MemberConstantAccess] access to constant Foo -# 85| 1: [IntLiteral] 1 +# 85| 1: [IntLiteral] 1 # 86| 5: [Field] x # 86| -1: [TypeMention] long? # 86| 1: [TypeMention] long diff --git a/csharp/ql/test/library-tests/generics/PrintAst.expected b/csharp/ql/test/library-tests/generics/PrintAst.expected index 86a199c2ee0..3653b3b7a2d 100644 --- a/csharp/ql/test/library-tests/generics/PrintAst.expected +++ b/csharp/ql/test/library-tests/generics/PrintAst.expected @@ -370,24 +370,18 @@ generics.cs: # 60| 0: [TypeParameter] T # 63| 5: [Field] NumRows # 63| -1: [TypeMention] int -# 63| 1: [AssignExpr] ... = ... -# 63| 0: [MemberConstantAccess] access to constant NumRows -# 63| 1: [IntLiteral] 26 +# 63| 1: [IntLiteral] 26 # 64| 6: [Field] NumCols # 64| -1: [TypeMention] int -# 64| 1: [AssignExpr] ... = ... -# 64| 0: [MemberConstantAccess] access to constant NumCols -# 64| 1: [IntLiteral] 10 +# 64| 1: [IntLiteral] 10 # 66| 7: [Field] cells # 66| -1: [TypeMention] T[,] # 66| 1: [TypeMention] T -# 66| 1: [AssignExpr] ... = ... -# 66| 0: [FieldAccess] access to field cells -# 66| 1: [ArrayCreation] array creation of type T[,] -# 66| -1: [TypeMention] T[,] -# 66| 1: [TypeMention] T -# 66| 0: [MemberConstantAccess] access to constant NumRows -# 66| 1: [MemberConstantAccess] access to constant NumCols +# 66| 1: [ArrayCreation] array creation of type T[,] +# 66| -1: [TypeMention] T[,] +# 66| 1: [TypeMention] T +# 66| 0: [MemberConstantAccess] access to constant NumRows +# 66| 1: [MemberConstantAccess] access to constant NumCols # 68| 8: [Indexer] Item # 68| -1: [TypeMention] int #-----| 1: (Parameters) diff --git a/csharp/ql/test/library-tests/indexers/PrintAst.expected b/csharp/ql/test/library-tests/indexers/PrintAst.expected index 540c1d8255d..6f9fde00e24 100644 --- a/csharp/ql/test/library-tests/indexers/PrintAst.expected +++ b/csharp/ql/test/library-tests/indexers/PrintAst.expected @@ -214,24 +214,18 @@ indexers.cs: # 81| 3: [Class] Grid # 84| 5: [Field] NumRows # 84| -1: [TypeMention] int -# 84| 1: [AssignExpr] ... = ... -# 84| 0: [MemberConstantAccess] access to constant NumRows -# 84| 1: [IntLiteral] 26 +# 84| 1: [IntLiteral] 26 # 85| 6: [Field] NumCols # 85| -1: [TypeMention] int -# 85| 1: [AssignExpr] ... = ... -# 85| 0: [MemberConstantAccess] access to constant NumCols -# 85| 1: [IntLiteral] 10 +# 85| 1: [IntLiteral] 10 # 87| 7: [Field] cells # 87| -1: [TypeMention] Int32[,] # 87| 1: [TypeMention] int -# 87| 1: [AssignExpr] ... = ... -# 87| 0: [FieldAccess] access to field cells -# 87| 1: [ArrayCreation] array creation of type Int32[,] -# 87| -1: [TypeMention] Int32[,] -# 87| 1: [TypeMention] int -# 87| 0: [MemberConstantAccess] access to constant NumRows -# 87| 1: [MemberConstantAccess] access to constant NumCols +# 87| 1: [ArrayCreation] array creation of type Int32[,] +# 87| -1: [TypeMention] Int32[,] +# 87| 1: [TypeMention] int +# 87| 0: [MemberConstantAccess] access to constant NumRows +# 87| 1: [MemberConstantAccess] access to constant NumCols # 89| 8: [Indexer] Item # 89| -1: [TypeMention] int #-----| 1: (Parameters) From 79440f6734ac9ab6f66f7556dc0fc4b240c33960 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 4 Apr 2024 10:02:02 +0200 Subject: [PATCH 431/497] Data flow: Fix bad join ``` Evaluated relational algebra for predicate DataFlowImpl::Impl::storeEx/5#34133ef9@0425e0m7 with tuple counts: 2209132 ~1% {6} r1 = SCAN `DataFlowImpl::Impl::storeExUnrestricted/5#3a86a98e` OUTPUT In.1, In.0, In.1, In.2, In.3, In.4 4338565685 ~1% {6} | JOIN WITH `DataFlowPublic::ContentSet.getAReadContent/0#dispred#e4acf74e_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 34811200 ~1428% {5} | JOIN WITH `project#DataFlowImpl::Impl::readSetEx/3#35ac556a` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5 return r1 ``` --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 64222dbc8e3..e6ce9008935 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -460,12 +460,15 @@ module MakeImpl Lang> { stepFilter(node1, node2) } + pragma[nomagic] + private predicate hasReadStep(Content c) { read(_, c, _) } + pragma[nomagic] private predicate storeEx( NodeEx node1, Content c, NodeEx node2, DataFlowType contentType, DataFlowType containerType ) { storeExUnrestricted(node1, c, node2, contentType, containerType) and - read(_, c, _) + hasReadStep(c) } pragma[nomagic] From 55d1f43239cd0676bdf410e9e169dc9db37eaec8 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 4 Apr 2024 10:18:56 +0200 Subject: [PATCH 432/497] C++: Update supported compiler versions based on frontend documentation --- docs/codeql/reusables/supported-versions-compilers.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 15e1cfa6444..b41673d0845 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -4,11 +4,11 @@ :stub-columns: 1 Language,Variants,Compilers,Extensions - C/C++,"C89, C99, C11, C17, C++98, C++03, C++11, C++14, C++17, C++20 [1]_ [2]_","Clang (including clang-cl [3]_ and armclang) extensions (up to Clang 12.0), + C/C++,"C89, C99, C11, C17, C++98, C++03, C++11, C++14, C++17, C++20 [1]_ [2]_","Clang (including clang-cl [3]_ and armclang) extensions (up to Clang 17.0), - GNU extensions (up to GCC 11.1), + GNU extensions (up to GCC 13.2), - Microsoft extensions (up to VS 2019), + Microsoft extensions (up to VS 2022), Arm Compiler 5 [4]_","``.cpp``, ``.c++``, ``.cxx``, ``.hpp``, ``.hh``, ``.h++``, ``.hxx``, ``.c``, ``.cc``, ``.h``" C#,C# up to 12,"Microsoft Visual Studio up to 2019 with .NET up to 4.8, @@ -29,7 +29,7 @@ .. container:: footnote-group - .. [1] C++20 support is currently in beta. Supported for GCC on Linux only. Modules are *not* supported. + .. [1] C++20 support is currently in beta. Modules are *not* supported. .. [2] Objective-C, Objective-C++, C++/CLI, and C++/CX are not supported. .. [3] Support for the clang-cl compiler is preliminary. .. [4] Support for the Arm Compiler (armcc) is preliminary. From 70491c4a8dc6061d29d418b49e2b47a17b2f18ec Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 4 Apr 2024 10:54:09 +0200 Subject: [PATCH 433/497] C++: Add more missing variable declaration tests --- .../library-tests/ir/ir/PrintAST.expected | 8384 +++++++++-------- .../library-tests/ir/ir/aliased_ir.expected | 7131 +++++++------- cpp/ql/test/library-tests/ir/ir/ir.cpp | 14 + .../ir/ir/operand_locations.expected | 6191 ++++++------ .../test/library-tests/ir/ir/raw_ir.expected | 6239 ++++++------ 5 files changed, 14064 insertions(+), 13895 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index ea9f82fbf40..5f2aebd390f 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -15617,773 +15617,821 @@ ir.cpp: # 1934| Type = [ClassTemplateInstantiation,Struct] Bar2 # 1934| ValueCategory = lvalue # 1935| getStmt(2): [ReturnStmt] return ... -# 1938| [GlobalVariable,VariableTemplateInstantiation] char global_template -# 1938| getInitializer(): [Initializer] initializer for global_template -# 1938| getExpr(): [Literal] 42 -# 1938| Type = [IntType] int -# 1938| Value = [Literal] 42 -# 1938| ValueCategory = prvalue -# 1938| getExpr().getFullyConverted(): [CStyleCast] (char)... -# 1938| Conversion = [IntegralConversion] integral conversion -# 1938| Type = [PlainCharType] char -# 1938| Value = [CStyleCast] 42 -# 1938| ValueCategory = prvalue -# 1938| [GlobalVariable,VariableTemplateInstantiation] int global_template -# 1938| getInitializer(): [Initializer] initializer for global_template -# 1938| getExpr(): [Literal] 42 -# 1938| Type = [IntType] int -# 1938| Value = [Literal] 42 -# 1938| ValueCategory = prvalue -# 1940| [TopLevelFunction] int test_global_template_int() -# 1940| : -# 1940| getEntryPoint(): [BlockStmt] { ... } -# 1941| getStmt(0): [DeclStmt] declaration -# 1941| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int +# 1937| [CopyAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3 const&) +# 1937| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bar3 & +# 1937| [MoveAssignmentOperator] missing_declaration_entries::Bar3& missing_declaration_entries::Bar3::operator=(missing_declaration_entries::Bar3&&) +# 1937| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] Bar3 && +# 1939| [MemberFunction] int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| : +# 1939| getEntryPoint(): [BlockStmt] { ... } +# 1940| getStmt(0): [DeclStmt] declaration +# 1940| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1940| Type = [IntType] int +# 1941| getStmt(1): [DeclStmt] declaration +# 1941| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z # 1941| Type = [IntType] int -# 1941| getVariable().getInitializer(): [Initializer] initializer for local_int -# 1941| getExpr(): [VariableAccess] global_template -# 1941| Type = [IntType] int -# 1941| ValueCategory = prvalue(load) -# 1942| getStmt(1): [DeclStmt] declaration -# 1942| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char -# 1942| Type = [PlainCharType] char -# 1942| getVariable().getInitializer(): [Initializer] initializer for local_char -# 1942| getExpr(): [VariableAccess] global_template -# 1942| Type = [PlainCharType] char -# 1942| ValueCategory = prvalue(load) -# 1943| getStmt(2): [ReturnStmt] return ... -# 1943| getExpr(): [AddExpr] ... + ... -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue -# 1943| getLeftOperand(): [VariableAccess] local_int -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue(load) -# 1943| getRightOperand(): [VariableAccess] local_char -# 1943| Type = [PlainCharType] char -# 1943| ValueCategory = prvalue(load) -# 1943| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 1943| Conversion = [IntegralConversion] integral conversion -# 1943| Type = [IntType] int -# 1943| ValueCategory = prvalue -# 1946| [TopLevelFunction] void noreturnFunc() +# 1942| getStmt(2): [ReturnStmt] return ... +# 1942| getExpr(): [VariableAccess] g +# 1942| Type = [IntType] int +# 1942| ValueCategory = prvalue(load) +# 1939| [MemberFunction] int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| : +# 1939| getEntryPoint(): [BlockStmt] { ... } +# 1940| getStmt(0): [DeclStmt] declaration +# 1941| getStmt(1): [DeclStmt] declaration +# 1942| getStmt(2): [ReturnStmt] return ... +# 1942| getExpr(): [VariableAccess] g +# 1942| Type = [IntType] int +# 1942| ValueCategory = prvalue(load) +# 1941| [TopLevelFunction] int missing_declaration_entries::z(float) +# 1941| : +# 1941| getParameter(0): [Parameter] (unnamed parameter 0) +# 1941| Type = [FloatType] float +# 1946| [TopLevelFunction] void missing_declaration_entries::test3() # 1946| : -# 1948| [TopLevelFunction] int noreturnTest(int) -# 1948| : -# 1948| getParameter(0): [Parameter] x -# 1948| Type = [IntType] int -# 1948| getEntryPoint(): [BlockStmt] { ... } -# 1949| getStmt(0): [IfStmt] if (...) ... -# 1949| getCondition(): [LTExpr] ... < ... -# 1949| Type = [BoolType] bool -# 1949| ValueCategory = prvalue -# 1949| getLesserOperand(): [VariableAccess] x -# 1949| Type = [IntType] int -# 1949| ValueCategory = prvalue(load) -# 1949| getGreaterOperand(): [Literal] 10 -# 1949| Type = [IntType] int -# 1949| Value = [Literal] 10 -# 1949| ValueCategory = prvalue -# 1949| getThen(): [BlockStmt] { ... } -# 1950| getStmt(0): [ReturnStmt] return ... -# 1950| getExpr(): [VariableAccess] x -# 1950| Type = [IntType] int -# 1950| ValueCategory = prvalue(load) -# 1951| getElse(): [BlockStmt] { ... } -# 1952| getStmt(0): [ExprStmt] ExprStmt -# 1952| getExpr(): [FunctionCall] call to noreturnFunc -# 1952| Type = [VoidType] void -# 1952| ValueCategory = prvalue -# 1954| getStmt(1): [ReturnStmt] return ... -# 1956| [TopLevelFunction] int noreturnTest2(int) -# 1956| : -# 1956| getParameter(0): [Parameter] x -# 1956| Type = [IntType] int -# 1956| getEntryPoint(): [BlockStmt] { ... } -# 1957| getStmt(0): [IfStmt] if (...) ... -# 1957| getCondition(): [LTExpr] ... < ... -# 1957| Type = [BoolType] bool +# 1946| getEntryPoint(): [BlockStmt] { ... } +# 1947| getStmt(0): [DeclStmt] declaration +# 1947| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1947| Type = [ClassTemplateInstantiation,Struct] Bar3 +# 1948| getStmt(1): [ExprStmt] ExprStmt +# 1948| getExpr(): [FunctionCall] call to two_more_missing_variable_declaration_entries +# 1948| Type = [IntType] int +# 1948| ValueCategory = prvalue +# 1948| getQualifier(): [VariableAccess] b +# 1948| Type = [ClassTemplateInstantiation,Struct] Bar3 +# 1948| ValueCategory = lvalue +# 1949| getStmt(2): [ReturnStmt] return ... +# 1952| [GlobalVariable,VariableTemplateInstantiation] char global_template +# 1952| getInitializer(): [Initializer] initializer for global_template +# 1952| getExpr(): [Literal] 42 +# 1952| Type = [IntType] int +# 1952| Value = [Literal] 42 +# 1952| ValueCategory = prvalue +# 1952| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 1952| Conversion = [IntegralConversion] integral conversion +# 1952| Type = [PlainCharType] char +# 1952| Value = [CStyleCast] 42 +# 1952| ValueCategory = prvalue +# 1952| [GlobalVariable,VariableTemplateInstantiation] int global_template +# 1952| getInitializer(): [Initializer] initializer for global_template +# 1952| getExpr(): [Literal] 42 +# 1952| Type = [IntType] int +# 1952| Value = [Literal] 42 +# 1952| ValueCategory = prvalue +# 1954| [TopLevelFunction] int test_global_template_int() +# 1954| : +# 1954| getEntryPoint(): [BlockStmt] { ... } +# 1955| getStmt(0): [DeclStmt] declaration +# 1955| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int +# 1955| Type = [IntType] int +# 1955| getVariable().getInitializer(): [Initializer] initializer for local_int +# 1955| getExpr(): [VariableAccess] global_template +# 1955| Type = [IntType] int +# 1955| ValueCategory = prvalue(load) +# 1956| getStmt(1): [DeclStmt] declaration +# 1956| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char +# 1956| Type = [PlainCharType] char +# 1956| getVariable().getInitializer(): [Initializer] initializer for local_char +# 1956| getExpr(): [VariableAccess] global_template +# 1956| Type = [PlainCharType] char +# 1956| ValueCategory = prvalue(load) +# 1957| getStmt(2): [ReturnStmt] return ... +# 1957| getExpr(): [AddExpr] ... + ... +# 1957| Type = [IntType] int # 1957| ValueCategory = prvalue -# 1957| getLesserOperand(): [VariableAccess] x +# 1957| getLeftOperand(): [VariableAccess] local_int # 1957| Type = [IntType] int # 1957| ValueCategory = prvalue(load) -# 1957| getGreaterOperand(): [Literal] 10 +# 1957| getRightOperand(): [VariableAccess] local_char +# 1957| Type = [PlainCharType] char +# 1957| ValueCategory = prvalue(load) +# 1957| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 1957| Conversion = [IntegralConversion] integral conversion # 1957| Type = [IntType] int -# 1957| Value = [Literal] 10 # 1957| ValueCategory = prvalue -# 1957| getThen(): [BlockStmt] { ... } -# 1958| getStmt(0): [ExprStmt] ExprStmt -# 1958| getExpr(): [FunctionCall] call to noreturnFunc -# 1958| Type = [VoidType] void -# 1958| ValueCategory = prvalue -# 1960| getStmt(1): [ReturnStmt] return ... -# 1960| getExpr(): [VariableAccess] x -# 1960| Type = [IntType] int -# 1960| ValueCategory = prvalue(load) -# 1963| [TopLevelFunction] int static_function(int) -# 1963| : -# 1963| getParameter(0): [Parameter] x -# 1963| Type = [IntType] int -# 1963| getEntryPoint(): [BlockStmt] { ... } -# 1964| getStmt(0): [ReturnStmt] return ... -# 1964| getExpr(): [VariableAccess] x -# 1964| Type = [IntType] int -# 1964| ValueCategory = prvalue(load) -# 1967| [TopLevelFunction] void test_static_functions_with_assignments() -# 1967| : -# 1967| getEntryPoint(): [BlockStmt] { ... } -# 1968| getStmt(0): [DeclStmt] declaration -# 1968| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1968| Type = [Class] C -# 1968| getVariable().getInitializer(): [Initializer] initializer for c -# 1968| getExpr(): [ConstructorCall] call to C -# 1968| Type = [VoidType] void -# 1968| ValueCategory = prvalue -# 1969| getStmt(1): [DeclStmt] declaration -# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1969| Type = [IntType] int -# 1970| getStmt(2): [ExprStmt] ExprStmt -# 1970| getExpr(): [AssignExpr] ... = ... -# 1970| Type = [IntType] int -# 1970| ValueCategory = lvalue -# 1970| getLValue(): [VariableAccess] x -# 1970| Type = [IntType] int -# 1970| ValueCategory = lvalue -# 1970| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1970| Type = [IntType] int -# 1970| ValueCategory = prvalue -# 1970| getQualifier(): [VariableAccess] c -# 1970| Type = [Class] C -# 1970| ValueCategory = lvalue -# 1970| getArgument(0): [Literal] 10 -# 1970| Type = [IntType] int -# 1970| Value = [Literal] 10 -# 1970| ValueCategory = prvalue -# 1971| getStmt(3): [DeclStmt] declaration -# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1971| Type = [IntType] int -# 1972| getStmt(4): [ExprStmt] ExprStmt -# 1972| getExpr(): [AssignExpr] ... = ... -# 1972| Type = [IntType] int -# 1972| ValueCategory = lvalue -# 1972| getLValue(): [VariableAccess] y -# 1972| Type = [IntType] int -# 1972| ValueCategory = lvalue -# 1972| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1972| Type = [IntType] int -# 1972| ValueCategory = prvalue -# 1972| getArgument(0): [Literal] 10 -# 1972| Type = [IntType] int -# 1972| Value = [Literal] 10 +# 1960| [TopLevelFunction] void noreturnFunc() +# 1960| : +# 1962| [TopLevelFunction] int noreturnTest(int) +# 1962| : +# 1962| getParameter(0): [Parameter] x +# 1962| Type = [IntType] int +# 1962| getEntryPoint(): [BlockStmt] { ... } +# 1963| getStmt(0): [IfStmt] if (...) ... +# 1963| getCondition(): [LTExpr] ... < ... +# 1963| Type = [BoolType] bool +# 1963| ValueCategory = prvalue +# 1963| getLesserOperand(): [VariableAccess] x +# 1963| Type = [IntType] int +# 1963| ValueCategory = prvalue(load) +# 1963| getGreaterOperand(): [Literal] 10 +# 1963| Type = [IntType] int +# 1963| Value = [Literal] 10 +# 1963| ValueCategory = prvalue +# 1963| getThen(): [BlockStmt] { ... } +# 1964| getStmt(0): [ReturnStmt] return ... +# 1964| getExpr(): [VariableAccess] x +# 1964| Type = [IntType] int +# 1964| ValueCategory = prvalue(load) +# 1965| getElse(): [BlockStmt] { ... } +# 1966| getStmt(0): [ExprStmt] ExprStmt +# 1966| getExpr(): [FunctionCall] call to noreturnFunc +# 1966| Type = [VoidType] void +# 1966| ValueCategory = prvalue +# 1968| getStmt(1): [ReturnStmt] return ... +# 1970| [TopLevelFunction] int noreturnTest2(int) +# 1970| : +# 1970| getParameter(0): [Parameter] x +# 1970| Type = [IntType] int +# 1970| getEntryPoint(): [BlockStmt] { ... } +# 1971| getStmt(0): [IfStmt] if (...) ... +# 1971| getCondition(): [LTExpr] ... < ... +# 1971| Type = [BoolType] bool +# 1971| ValueCategory = prvalue +# 1971| getLesserOperand(): [VariableAccess] x +# 1971| Type = [IntType] int +# 1971| ValueCategory = prvalue(load) +# 1971| getGreaterOperand(): [Literal] 10 +# 1971| Type = [IntType] int +# 1971| Value = [Literal] 10 +# 1971| ValueCategory = prvalue +# 1971| getThen(): [BlockStmt] { ... } +# 1972| getStmt(0): [ExprStmt] ExprStmt +# 1972| getExpr(): [FunctionCall] call to noreturnFunc +# 1972| Type = [VoidType] void # 1972| ValueCategory = prvalue -# 1973| getStmt(5): [DeclStmt] declaration -# 1973| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1973| Type = [IntType] int -# 1974| getStmt(6): [ExprStmt] ExprStmt -# 1974| getExpr(): [AssignExpr] ... = ... +# 1974| getStmt(1): [ReturnStmt] return ... +# 1974| getExpr(): [VariableAccess] x # 1974| Type = [IntType] int -# 1974| ValueCategory = lvalue -# 1974| getLValue(): [VariableAccess] z -# 1974| Type = [IntType] int -# 1974| ValueCategory = lvalue -# 1974| getRValue(): [FunctionCall] call to static_function -# 1974| Type = [IntType] int -# 1974| ValueCategory = prvalue -# 1974| getArgument(0): [Literal] 10 -# 1974| Type = [IntType] int -# 1974| Value = [Literal] 10 -# 1974| ValueCategory = prvalue -# 1975| getStmt(7): [ReturnStmt] return ... -# 1975| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1975| Type = [VoidType] void -# 1975| ValueCategory = prvalue -# 1975| getQualifier(): [VariableAccess] c -# 1975| Type = [Class] C -# 1975| ValueCategory = lvalue -# 1977| [TopLevelFunction] void test_double_assign() +# 1974| ValueCategory = prvalue(load) +# 1977| [TopLevelFunction] int static_function(int) # 1977| : +# 1977| getParameter(0): [Parameter] x +# 1977| Type = [IntType] int # 1977| getEntryPoint(): [BlockStmt] { ... } -# 1978| getStmt(0): [DeclStmt] declaration -# 1978| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1978| getStmt(0): [ReturnStmt] return ... +# 1978| getExpr(): [VariableAccess] x # 1978| Type = [IntType] int -# 1978| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1978| Type = [IntType] int -# 1979| getStmt(1): [ExprStmt] ExprStmt -# 1979| getExpr(): [AssignExpr] ... = ... -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getLValue(): [VariableAccess] i -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getRValue(): [AssignExpr] ... = ... -# 1979| Type = [IntType] int -# 1979| ValueCategory = prvalue(load) -# 1979| getLValue(): [VariableAccess] j -# 1979| Type = [IntType] int -# 1979| ValueCategory = lvalue -# 1979| getRValue(): [Literal] 40 -# 1979| Type = [IntType] int -# 1979| Value = [Literal] 40 -# 1979| ValueCategory = prvalue -# 1980| getStmt(2): [ReturnStmt] return ... -# 1982| [TopLevelFunction] void test_assign_with_assign_operation() -# 1982| : -# 1982| getEntryPoint(): [BlockStmt] { ... } -# 1983| getStmt(0): [DeclStmt] declaration -# 1983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1978| ValueCategory = prvalue(load) +# 1981| [TopLevelFunction] void test_static_functions_with_assignments() +# 1981| : +# 1981| getEntryPoint(): [BlockStmt] { ... } +# 1982| getStmt(0): [DeclStmt] declaration +# 1982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1982| Type = [Class] C +# 1982| getVariable().getInitializer(): [Initializer] initializer for c +# 1982| getExpr(): [ConstructorCall] call to C +# 1982| Type = [VoidType] void +# 1982| ValueCategory = prvalue +# 1983| getStmt(1): [DeclStmt] declaration +# 1983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1983| Type = [IntType] int -# 1983| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1983| Type = [IntType] int -# 1983| getVariable().getInitializer(): [Initializer] initializer for j -# 1983| getExpr(): [Literal] 0 -# 1983| Type = [IntType] int -# 1983| Value = [Literal] 0 -# 1983| ValueCategory = prvalue -# 1984| getStmt(1): [ExprStmt] ExprStmt +# 1984| getStmt(2): [ExprStmt] ExprStmt # 1984| getExpr(): [AssignExpr] ... = ... # 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -# 1984| getLValue(): [VariableAccess] i +# 1984| getLValue(): [VariableAccess] x # 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -# 1984| getRValue(): [AssignAddExpr] ... += ... +# 1984| getRValue(): [FunctionCall] call to StaticMemberFunction # 1984| Type = [IntType] int -# 1984| ValueCategory = prvalue(load) -# 1984| getLValue(): [VariableAccess] j -# 1984| Type = [IntType] int +# 1984| ValueCategory = prvalue +# 1984| getQualifier(): [VariableAccess] c +# 1984| Type = [Class] C # 1984| ValueCategory = lvalue -# 1984| getRValue(): [Literal] 40 +# 1984| getArgument(0): [Literal] 10 # 1984| Type = [IntType] int -# 1984| Value = [Literal] 40 +# 1984| Value = [Literal] 10 # 1984| ValueCategory = prvalue -# 1984| getRValue().getFullyConverted(): [ParenthesisExpr] (...) -# 1984| Type = [IntType] int -# 1984| ValueCategory = prvalue(load) -# 1985| getStmt(2): [ReturnStmt] return ... -# 1987| [CopyAssignmentOperator] D& D::operator=(D const&) -# 1987| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const D & -# 1987| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1987| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] D && -# 1991| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1985| getStmt(3): [DeclStmt] declaration +# 1985| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1985| Type = [IntType] int +# 1986| getStmt(4): [ExprStmt] ExprStmt +# 1986| getExpr(): [AssignExpr] ... = ... +# 1986| Type = [IntType] int +# 1986| ValueCategory = lvalue +# 1986| getLValue(): [VariableAccess] y +# 1986| Type = [IntType] int +# 1986| ValueCategory = lvalue +# 1986| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1986| Type = [IntType] int +# 1986| ValueCategory = prvalue +# 1986| getArgument(0): [Literal] 10 +# 1986| Type = [IntType] int +# 1986| Value = [Literal] 10 +# 1986| ValueCategory = prvalue +# 1987| getStmt(5): [DeclStmt] declaration +# 1987| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1987| Type = [IntType] int +# 1988| getStmt(6): [ExprStmt] ExprStmt +# 1988| getExpr(): [AssignExpr] ... = ... +# 1988| Type = [IntType] int +# 1988| ValueCategory = lvalue +# 1988| getLValue(): [VariableAccess] z +# 1988| Type = [IntType] int +# 1988| ValueCategory = lvalue +# 1988| getRValue(): [FunctionCall] call to static_function +# 1988| Type = [IntType] int +# 1988| ValueCategory = prvalue +# 1988| getArgument(0): [Literal] 10 +# 1988| Type = [IntType] int +# 1988| Value = [Literal] 10 +# 1988| ValueCategory = prvalue +# 1989| getStmt(7): [ReturnStmt] return ... +# 1989| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1989| Type = [VoidType] void +# 1989| ValueCategory = prvalue +# 1989| getQualifier(): [VariableAccess] c +# 1989| Type = [Class] C +# 1989| ValueCategory = lvalue +# 1991| [TopLevelFunction] void test_double_assign() # 1991| : # 1991| getEntryPoint(): [BlockStmt] { ... } -# 1992| getStmt(0): [ReturnStmt] return ... -# 1992| getExpr(): [VariableAccess] x -# 1992| Type = [Class] D -# 1992| ValueCategory = lvalue -# 1992| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1992| Type = [LValueReferenceType] D & -# 1992| ValueCategory = prvalue -# 1994| [MemberFunction] D D::ObjectStaticMemberFunction() -# 1994| : -# 1994| getEntryPoint(): [BlockStmt] { ... } -# 1995| getStmt(0): [ReturnStmt] return ... -# 1995| getExpr(): [VariableAccess] x -# 1995| Type = [Class] D -# 1995| ValueCategory = prvalue(load) -# 1999| [TopLevelFunction] void test_static_member_functions_with_reference_return() -# 1999| : -# 1999| getEntryPoint(): [BlockStmt] { ... } -# 2000| getStmt(0): [DeclStmt] declaration -# 2000| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2000| Type = [Class] D -# 2002| getStmt(1): [ExprStmt] ExprStmt -# 2002| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2002| Type = [LValueReferenceType] D & -# 2002| ValueCategory = prvalue -# 2002| getQualifier(): [VariableAccess] d -# 2002| Type = [Class] D -# 2002| ValueCategory = lvalue -# 2002| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2002| Type = [Class] D -# 2002| ValueCategory = lvalue -# 2003| getStmt(2): [ExprStmt] ExprStmt -# 2003| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2003| Type = [LValueReferenceType] D & -# 2003| ValueCategory = prvalue -# 2003| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2003| Type = [Class] D -# 2003| ValueCategory = lvalue -# 2004| getStmt(3): [ExprStmt] ExprStmt -# 2004| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 2004| Type = [Class] D -# 2004| ValueCategory = prvalue -# 2004| getQualifier(): [VariableAccess] d -# 2004| Type = [Class] D -# 2004| ValueCategory = lvalue -# 2005| getStmt(4): [ExprStmt] ExprStmt -# 2005| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 2005| Type = [Class] D -# 2005| ValueCategory = prvalue -# 2007| getStmt(5): [DeclStmt] declaration -# 2007| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2007| Type = [Class] D -# 2008| getStmt(6): [ExprStmt] ExprStmt -# 2008| getExpr(): [AssignExpr] ... = ... -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getLValue(): [VariableAccess] x -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2008| Type = [LValueReferenceType] D & -# 2008| ValueCategory = prvalue -# 2008| getQualifier(): [VariableAccess] d -# 2008| Type = [Class] D -# 2008| ValueCategory = lvalue -# 2008| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2008| Type = [Class] D -# 2008| ValueCategory = prvalue(load) -# 2009| getStmt(7): [DeclStmt] declaration -# 2009| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1992| getStmt(0): [DeclStmt] declaration +# 1992| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1992| Type = [IntType] int +# 1992| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1992| Type = [IntType] int +# 1993| getStmt(1): [ExprStmt] ExprStmt +# 1993| getExpr(): [AssignExpr] ... = ... +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getLValue(): [VariableAccess] i +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getRValue(): [AssignExpr] ... = ... +# 1993| Type = [IntType] int +# 1993| ValueCategory = prvalue(load) +# 1993| getLValue(): [VariableAccess] j +# 1993| Type = [IntType] int +# 1993| ValueCategory = lvalue +# 1993| getRValue(): [Literal] 40 +# 1993| Type = [IntType] int +# 1993| Value = [Literal] 40 +# 1993| ValueCategory = prvalue +# 1994| getStmt(2): [ReturnStmt] return ... +# 1996| [TopLevelFunction] void test_assign_with_assign_operation() +# 1996| : +# 1996| getEntryPoint(): [BlockStmt] { ... } +# 1997| getStmt(0): [DeclStmt] declaration +# 1997| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1997| Type = [IntType] int +# 1997| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1997| Type = [IntType] int +# 1997| getVariable().getInitializer(): [Initializer] initializer for j +# 1997| getExpr(): [Literal] 0 +# 1997| Type = [IntType] int +# 1997| Value = [Literal] 0 +# 1997| ValueCategory = prvalue +# 1998| getStmt(1): [ExprStmt] ExprStmt +# 1998| getExpr(): [AssignExpr] ... = ... +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getLValue(): [VariableAccess] i +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getRValue(): [AssignAddExpr] ... += ... +# 1998| Type = [IntType] int +# 1998| ValueCategory = prvalue(load) +# 1998| getLValue(): [VariableAccess] j +# 1998| Type = [IntType] int +# 1998| ValueCategory = lvalue +# 1998| getRValue(): [Literal] 40 +# 1998| Type = [IntType] int +# 1998| Value = [Literal] 40 +# 1998| ValueCategory = prvalue +# 1998| getRValue().getFullyConverted(): [ParenthesisExpr] (...) +# 1998| Type = [IntType] int +# 1998| ValueCategory = prvalue(load) +# 1999| getStmt(2): [ReturnStmt] return ... +# 2001| [CopyAssignmentOperator] D& D::operator=(D const&) +# 2001| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const D & +# 2001| [MoveAssignmentOperator] D& D::operator=(D&&) +# 2001| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] D && +# 2005| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 2005| : +# 2005| getEntryPoint(): [BlockStmt] { ... } +# 2006| getStmt(0): [ReturnStmt] return ... +# 2006| getExpr(): [VariableAccess] x +# 2006| Type = [Class] D +# 2006| ValueCategory = lvalue +# 2006| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2006| Type = [LValueReferenceType] D & +# 2006| ValueCategory = prvalue +# 2008| [MemberFunction] D D::ObjectStaticMemberFunction() +# 2008| : +# 2008| getEntryPoint(): [BlockStmt] { ... } +# 2009| getStmt(0): [ReturnStmt] return ... +# 2009| getExpr(): [VariableAccess] x # 2009| Type = [Class] D -# 2010| getStmt(8): [ExprStmt] ExprStmt -# 2010| getExpr(): [AssignExpr] ... = ... -# 2010| Type = [Class] D -# 2010| ValueCategory = lvalue -# 2010| getLValue(): [VariableAccess] y -# 2010| Type = [Class] D -# 2010| ValueCategory = lvalue -# 2010| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 2010| Type = [LValueReferenceType] D & -# 2010| ValueCategory = prvalue -# 2010| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2010| Type = [Class] D -# 2010| ValueCategory = prvalue(load) -# 2011| getStmt(9): [DeclStmt] declaration -# 2011| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j -# 2011| Type = [Class] D -# 2012| getStmt(10): [ExprStmt] ExprStmt -# 2012| getExpr(): [AssignExpr] ... = ... -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2012| getLValue(): [VariableAccess] j -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2012| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 2012| Type = [Class] D -# 2012| ValueCategory = prvalue -# 2012| getQualifier(): [VariableAccess] d -# 2012| Type = [Class] D -# 2012| ValueCategory = lvalue -# 2013| getStmt(11): [DeclStmt] declaration -# 2013| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k -# 2013| Type = [Class] D -# 2014| getStmt(12): [ExprStmt] ExprStmt -# 2014| getExpr(): [AssignExpr] ... = ... +# 2009| ValueCategory = prvalue(load) +# 2013| [TopLevelFunction] void test_static_member_functions_with_reference_return() +# 2013| : +# 2013| getEntryPoint(): [BlockStmt] { ... } +# 2014| getStmt(0): [DeclStmt] declaration +# 2014| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 2014| Type = [Class] D -# 2014| ValueCategory = lvalue -# 2014| getLValue(): [VariableAccess] k -# 2014| Type = [Class] D -# 2014| ValueCategory = lvalue -# 2014| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 2014| Type = [Class] D -# 2014| ValueCategory = prvalue -# 2015| getStmt(13): [ReturnStmt] return ... -# 2017| [TopLevelFunction] void test_volatile() -# 2017| : -# 2017| getEntryPoint(): [BlockStmt] { ... } -# 2018| getStmt(0): [DeclStmt] declaration -# 2018| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2018| Type = [SpecifiedType] volatile int -# 2019| getStmt(1): [ExprStmt] ExprStmt -# 2019| getExpr(): [VariableAccess] x -# 2019| Type = [IntType] int -# 2019| ValueCategory = prvalue(load) -# 2020| getStmt(2): [ReturnStmt] return ... -# 2022| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) -# 2022| : +# 2016| getStmt(1): [ExprStmt] ExprStmt +# 2016| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2016| Type = [LValueReferenceType] D & +# 2016| ValueCategory = prvalue +# 2016| getQualifier(): [VariableAccess] d +# 2016| Type = [Class] D +# 2016| ValueCategory = lvalue +# 2016| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2016| Type = [Class] D +# 2016| ValueCategory = lvalue +# 2017| getStmt(2): [ExprStmt] ExprStmt +# 2017| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2017| Type = [LValueReferenceType] D & +# 2017| ValueCategory = prvalue +# 2017| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2017| Type = [Class] D +# 2017| ValueCategory = lvalue +# 2018| getStmt(3): [ExprStmt] ExprStmt +# 2018| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2018| Type = [Class] D +# 2018| ValueCategory = prvalue +# 2018| getQualifier(): [VariableAccess] d +# 2018| Type = [Class] D +# 2018| ValueCategory = lvalue +# 2019| getStmt(4): [ExprStmt] ExprStmt +# 2019| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2019| Type = [Class] D +# 2019| ValueCategory = prvalue +# 2021| getStmt(5): [DeclStmt] declaration +# 2021| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2021| Type = [Class] D +# 2022| getStmt(6): [ExprStmt] ExprStmt +# 2022| getExpr(): [AssignExpr] ... = ... +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getLValue(): [VariableAccess] x +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2022| Type = [LValueReferenceType] D & +# 2022| ValueCategory = prvalue +# 2022| getQualifier(): [VariableAccess] d +# 2022| Type = [Class] D +# 2022| ValueCategory = lvalue +# 2022| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2022| Type = [Class] D +# 2022| ValueCategory = prvalue(load) +# 2023| getStmt(7): [DeclStmt] declaration +# 2023| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2023| Type = [Class] D +# 2024| getStmt(8): [ExprStmt] ExprStmt +# 2024| getExpr(): [AssignExpr] ... = ... +# 2024| Type = [Class] D +# 2024| ValueCategory = lvalue +# 2024| getLValue(): [VariableAccess] y +# 2024| Type = [Class] D +# 2024| ValueCategory = lvalue +# 2024| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2024| Type = [LValueReferenceType] D & +# 2024| ValueCategory = prvalue +# 2024| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2024| Type = [Class] D +# 2024| ValueCategory = prvalue(load) +# 2025| getStmt(9): [DeclStmt] declaration +# 2025| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j +# 2025| Type = [Class] D +# 2026| getStmt(10): [ExprStmt] ExprStmt +# 2026| getExpr(): [AssignExpr] ... = ... +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2026| getLValue(): [VariableAccess] j +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2026| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2026| Type = [Class] D +# 2026| ValueCategory = prvalue +# 2026| getQualifier(): [VariableAccess] d +# 2026| Type = [Class] D +# 2026| ValueCategory = lvalue +# 2027| getStmt(11): [DeclStmt] declaration +# 2027| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 2027| Type = [Class] D +# 2028| getStmt(12): [ExprStmt] ExprStmt +# 2028| getExpr(): [AssignExpr] ... = ... +# 2028| Type = [Class] D +# 2028| ValueCategory = lvalue +# 2028| getLValue(): [VariableAccess] k +# 2028| Type = [Class] D +# 2028| ValueCategory = lvalue +# 2028| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2028| Type = [Class] D +# 2028| ValueCategory = prvalue +# 2029| getStmt(13): [ReturnStmt] return ... +# 2031| [TopLevelFunction] void test_volatile() +# 2031| : +# 2031| getEntryPoint(): [BlockStmt] { ... } +# 2032| getStmt(0): [DeclStmt] declaration +# 2032| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2032| Type = [SpecifiedType] volatile int +# 2033| getStmt(1): [ExprStmt] ExprStmt +# 2033| getExpr(): [VariableAccess] x +# 2033| Type = [IntType] int +# 2033| ValueCategory = prvalue(load) +# 2034| getStmt(2): [ReturnStmt] return ... +# 2036| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) +# 2036| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const ValCat & -# 2022| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 2022| : +# 2036| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 2036| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] ValCat && -# 2023| [MemberFunction] ValCat& ValCat::lvalue() -# 2023| : -# 2024| [MemberFunction] ValCat&& ValCat::xvalue() -# 2024| : -# 2025| [MemberFunction] ValCat ValCat::prvalue() -# 2025| : -# 2028| [TopLevelFunction] void value_category_test() -# 2028| : -# 2028| getEntryPoint(): [BlockStmt] { ... } -# 2029| getStmt(0): [DeclStmt] declaration -# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2029| Type = [Struct] ValCat -# 2031| getStmt(1): [ExprStmt] ExprStmt -# 2031| getExpr(): [AssignExpr] ... = ... -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -# 2031| getLValue(): [FunctionCall] call to lvalue -# 2031| Type = [LValueReferenceType] ValCat & -# 2031| ValueCategory = prvalue -# 2031| getQualifier(): [VariableAccess] c -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -# 2031| getRValue(): [ClassAggregateLiteral] {...} -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = prvalue -# 2031| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2031| Type = [Struct] ValCat -# 2031| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2032| getStmt(2): [ExprStmt] ExprStmt -# 2032| getExpr(): [AssignExpr] ... = ... -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -# 2032| getLValue(): [FunctionCall] call to xvalue -# 2032| Type = [RValueReferenceType] ValCat && -# 2032| ValueCategory = prvalue -# 2032| getQualifier(): [VariableAccess] c -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -# 2032| getRValue(): [ClassAggregateLiteral] {...} -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = prvalue -# 2032| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2032| Type = [Struct] ValCat -# 2032| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2033| getStmt(3): [ExprStmt] ExprStmt -# 2033| getExpr(): [AssignExpr] ... = ... -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -# 2033| getLValue(): [FunctionCall] call to prvalue -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = prvalue -# 2033| getQualifier(): [VariableAccess] c -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -# 2033| getRValue(): [ClassAggregateLiteral] {...} -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = prvalue -# 2033| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2033| Type = [Struct] ValCat -# 2033| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2034| getStmt(4): [ExprStmt] ExprStmt -# 2034| getExpr(): [AssignExpr] ... = ... -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = lvalue -# 2034| getLValue(): [FunctionCall] call to lvalue -# 2034| Type = [LValueReferenceType] ValCat & -# 2034| ValueCategory = prvalue -# 2034| getRValue(): [ClassAggregateLiteral] {...} -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = prvalue -# 2034| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2034| Type = [Struct] ValCat -# 2034| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2035| getStmt(5): [ExprStmt] ExprStmt -# 2035| getExpr(): [AssignExpr] ... = ... -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = lvalue -# 2035| getLValue(): [FunctionCall] call to xvalue -# 2035| Type = [RValueReferenceType] ValCat && -# 2035| ValueCategory = prvalue -# 2035| getRValue(): [ClassAggregateLiteral] {...} -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = prvalue -# 2035| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2035| Type = [Struct] ValCat -# 2035| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2036| getStmt(6): [ExprStmt] ExprStmt -# 2036| getExpr(): [AssignExpr] ... = ... -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = lvalue -# 2036| getLValue(): [FunctionCall] call to prvalue -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = prvalue -# 2036| getRValue(): [ClassAggregateLiteral] {...} -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = prvalue -# 2036| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2036| Type = [Struct] ValCat -# 2036| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 2037| getStmt(7): [ReturnStmt] return ... -# 2039| [TopLevelFunction] void SetStaticFuncPtr() +# 2037| [MemberFunction] ValCat& ValCat::lvalue() +# 2037| : +# 2038| [MemberFunction] ValCat&& ValCat::xvalue() +# 2038| : +# 2039| [MemberFunction] ValCat ValCat::prvalue() # 2039| : -# 2039| getEntryPoint(): [BlockStmt] { ... } -# 2040| getStmt(0): [DeclStmt] declaration -# 2040| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2040| Type = [Class] C -# 2040| getVariable().getInitializer(): [Initializer] initializer for c -# 2040| getExpr(): [ConstructorCall] call to C -# 2040| Type = [VoidType] void -# 2040| ValueCategory = prvalue -# 2041| getStmt(1): [DeclStmt] declaration -# 2041| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn -# 2041| Type = [FunctionPointerType] ..(*)(..) -# 2041| getVariable().getInitializer(): [Initializer] initializer for pfn -# 2041| getExpr(): [FunctionAccess] StaticMemberFunction -# 2041| Type = [FunctionPointerType] ..(*)(..) -# 2041| ValueCategory = prvalue(load) -# 2042| getStmt(2): [ExprStmt] ExprStmt -# 2042| getExpr(): [AssignExpr] ... = ... -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = lvalue -# 2042| getLValue(): [VariableAccess] pfn -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = lvalue -# 2042| getRValue(): [FunctionAccess] StaticMemberFunction -# 2042| Type = [FunctionPointerType] ..(*)(..) -# 2042| ValueCategory = prvalue(load) -# 2042| getQualifier(): [VariableAccess] c -# 2042| Type = [Class] C -# 2042| ValueCategory = lvalue -# 2043| getStmt(3): [ReturnStmt] return ... -# 2043| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 2043| Type = [VoidType] void -# 2043| ValueCategory = prvalue -# 2043| getQualifier(): [VariableAccess] c -# 2043| Type = [Class] C -# 2043| ValueCategory = lvalue -# 2045| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) -# 2045| : -# 2045| getParameter(0): [Parameter] a -# 2045| Type = [BoolType] bool -# 2045| getParameter(1): [Parameter] x -# 2045| Type = [IntType] int -# 2045| getParameter(2): [Parameter] y -# 2045| Type = [IntType] int -# 2045| getParameter(3): [Parameter] z -# 2045| Type = [IntType] int -# 2045| getEntryPoint(): [BlockStmt] { ... } -# 2046| getStmt(0): [ExprStmt] ExprStmt +# 2042| [TopLevelFunction] void value_category_test() +# 2042| : +# 2042| getEntryPoint(): [BlockStmt] { ... } +# 2043| getStmt(0): [DeclStmt] declaration +# 2043| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2043| Type = [Struct] ValCat +# 2045| getStmt(1): [ExprStmt] ExprStmt +# 2045| getExpr(): [AssignExpr] ... = ... +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +# 2045| getLValue(): [FunctionCall] call to lvalue +# 2045| Type = [LValueReferenceType] ValCat & +# 2045| ValueCategory = prvalue +# 2045| getQualifier(): [VariableAccess] c +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +# 2045| getRValue(): [ClassAggregateLiteral] {...} +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = prvalue +# 2045| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2045| Type = [Struct] ValCat +# 2045| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2046| getStmt(2): [ExprStmt] ExprStmt # 2046| getExpr(): [AssignExpr] ... = ... -# 2046| Type = [IntType] int +# 2046| Type = [Struct] ValCat # 2046| ValueCategory = lvalue -# 2046| getLValue(): [VariableAccess] z -# 2046| Type = [IntType] int +# 2046| getLValue(): [FunctionCall] call to xvalue +# 2046| Type = [RValueReferenceType] ValCat && +# 2046| ValueCategory = prvalue +# 2046| getQualifier(): [VariableAccess] c +# 2046| Type = [Struct] ValCat +# 2046| ValueCategory = lvalue +# 2046| getRValue(): [ClassAggregateLiteral] {...} +# 2046| Type = [Struct] ValCat +# 2046| ValueCategory = prvalue +# 2046| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2046| Type = [Struct] ValCat # 2046| ValueCategory = lvalue -# 2046| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2046| getCondition(): [VariableAccess] a -# 2046| Type = [BoolType] bool -# 2046| ValueCategory = prvalue(load) -# 2046| getThen(): [VariableAccess] x -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2046| getElse(): [VariableAccess] y -# 2046| Type = [IntType] int -# 2046| ValueCategory = prvalue(load) -# 2047| getStmt(1): [ExprStmt] ExprStmt +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2047| getStmt(3): [ExprStmt] ExprStmt # 2047| getExpr(): [AssignExpr] ... = ... -# 2047| Type = [IntType] int +# 2047| Type = [Struct] ValCat # 2047| ValueCategory = lvalue -# 2047| getLValue(): [VariableAccess] z -# 2047| Type = [IntType] int +# 2047| getLValue(): [FunctionCall] call to prvalue +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = prvalue +# 2047| getQualifier(): [VariableAccess] c +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = lvalue +# 2047| getRValue(): [ClassAggregateLiteral] {...} +# 2047| Type = [Struct] ValCat +# 2047| ValueCategory = prvalue +# 2047| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2047| Type = [Struct] ValCat # 2047| ValueCategory = lvalue -# 2047| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2047| Type = [IntType] int -# 2047| ValueCategory = prvalue(load) -# 2047| getCondition(): [VariableAccess] a -# 2047| Type = [BoolType] bool -# 2047| ValueCategory = prvalue(load) -# 2047| getThen(): [VariableAccess] x -# 2047| Type = [IntType] int -# 2047| ValueCategory = prvalue(load) -# 2047| getElse(): [Literal] 5 -# 2047| Type = [IntType] int -# 2047| Value = [Literal] 5 -# 2047| ValueCategory = prvalue -# 2048| getStmt(2): [ExprStmt] ExprStmt +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2048| getStmt(4): [ExprStmt] ExprStmt # 2048| getExpr(): [AssignExpr] ... = ... -# 2048| Type = [IntType] int +# 2048| Type = [Struct] ValCat # 2048| ValueCategory = lvalue -# 2048| getLValue(): [VariableAccess] z -# 2048| Type = [IntType] int -# 2048| ValueCategory = lvalue -# 2048| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2048| Type = [IntType] int +# 2048| getLValue(): [FunctionCall] call to lvalue +# 2048| Type = [LValueReferenceType] ValCat & # 2048| ValueCategory = prvalue -# 2048| getCondition(): [VariableAccess] a -# 2048| Type = [BoolType] bool -# 2048| ValueCategory = prvalue(load) -# 2048| getThen(): [Literal] 3 -# 2048| Type = [IntType] int -# 2048| Value = [Literal] 3 -# 2048| ValueCategory = prvalue -# 2048| getElse(): [Literal] 5 -# 2048| Type = [IntType] int -# 2048| Value = [Literal] 5 -# 2048| ValueCategory = prvalue -# 2049| getStmt(3): [ExprStmt] ExprStmt +# 2048| getRValue(): [ClassAggregateLiteral] {...} +# 2048| Type = [Struct] ValCat +# 2048| ValueCategory = prvalue +# 2048| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2048| Type = [Struct] ValCat +# 2048| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2049| getStmt(5): [ExprStmt] ExprStmt # 2049| getExpr(): [AssignExpr] ... = ... -# 2049| Type = [IntType] int +# 2049| Type = [Struct] ValCat # 2049| ValueCategory = lvalue -# 2049| getLValue(): [ConditionalExpr] ... ? ... : ... -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getCondition(): [VariableAccess] a -# 2049| Type = [BoolType] bool -# 2049| ValueCategory = prvalue(load) -# 2049| getThen(): [VariableAccess] x -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getElse(): [VariableAccess] y -# 2049| Type = [IntType] int -# 2049| ValueCategory = lvalue -# 2049| getRValue(): [Literal] 7 -# 2049| Type = [IntType] int -# 2049| Value = [Literal] 7 +# 2049| getLValue(): [FunctionCall] call to xvalue +# 2049| Type = [RValueReferenceType] ValCat && # 2049| ValueCategory = prvalue -# 2049| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2049| Type = [IntType] int +# 2049| getRValue(): [ClassAggregateLiteral] {...} +# 2049| Type = [Struct] ValCat +# 2049| ValueCategory = prvalue +# 2049| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2049| Type = [Struct] ValCat # 2049| ValueCategory = lvalue -# 2050| getStmt(4): [ReturnStmt] return ... -# 2052| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) -# 2052| : +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2050| getStmt(6): [ExprStmt] ExprStmt +# 2050| getExpr(): [AssignExpr] ... = ... +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = lvalue +# 2050| getLValue(): [FunctionCall] call to prvalue +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = prvalue +# 2050| getRValue(): [ClassAggregateLiteral] {...} +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = prvalue +# 2050| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2050| Type = [Struct] ValCat +# 2050| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2051| getStmt(7): [ReturnStmt] return ... +# 2053| [TopLevelFunction] void SetStaticFuncPtr() +# 2053| : +# 2053| getEntryPoint(): [BlockStmt] { ... } +# 2054| getStmt(0): [DeclStmt] declaration +# 2054| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2054| Type = [Class] C +# 2054| getVariable().getInitializer(): [Initializer] initializer for c +# 2054| getExpr(): [ConstructorCall] call to C +# 2054| Type = [VoidType] void +# 2054| ValueCategory = prvalue +# 2055| getStmt(1): [DeclStmt] declaration +# 2055| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn +# 2055| Type = [FunctionPointerType] ..(*)(..) +# 2055| getVariable().getInitializer(): [Initializer] initializer for pfn +# 2055| getExpr(): [FunctionAccess] StaticMemberFunction +# 2055| Type = [FunctionPointerType] ..(*)(..) +# 2055| ValueCategory = prvalue(load) +# 2056| getStmt(2): [ExprStmt] ExprStmt +# 2056| getExpr(): [AssignExpr] ... = ... +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = lvalue +# 2056| getLValue(): [VariableAccess] pfn +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = lvalue +# 2056| getRValue(): [FunctionAccess] StaticMemberFunction +# 2056| Type = [FunctionPointerType] ..(*)(..) +# 2056| ValueCategory = prvalue(load) +# 2056| getQualifier(): [VariableAccess] c +# 2056| Type = [Class] C +# 2056| ValueCategory = lvalue +# 2057| getStmt(3): [ReturnStmt] return ... +# 2057| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 2057| Type = [VoidType] void +# 2057| ValueCategory = prvalue +# 2057| getQualifier(): [VariableAccess] c +# 2057| Type = [Class] C +# 2057| ValueCategory = lvalue +# 2059| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) +# 2059| : +# 2059| getParameter(0): [Parameter] a +# 2059| Type = [BoolType] bool +# 2059| getParameter(1): [Parameter] x +# 2059| Type = [IntType] int +# 2059| getParameter(2): [Parameter] y +# 2059| Type = [IntType] int +# 2059| getParameter(3): [Parameter] z +# 2059| Type = [IntType] int +# 2059| getEntryPoint(): [BlockStmt] { ... } +# 2060| getStmt(0): [ExprStmt] ExprStmt +# 2060| getExpr(): [AssignExpr] ... = ... +# 2060| Type = [IntType] int +# 2060| ValueCategory = lvalue +# 2060| getLValue(): [VariableAccess] z +# 2060| Type = [IntType] int +# 2060| ValueCategory = lvalue +# 2060| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2060| getCondition(): [VariableAccess] a +# 2060| Type = [BoolType] bool +# 2060| ValueCategory = prvalue(load) +# 2060| getThen(): [VariableAccess] x +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2060| getElse(): [VariableAccess] y +# 2060| Type = [IntType] int +# 2060| ValueCategory = prvalue(load) +# 2061| getStmt(1): [ExprStmt] ExprStmt +# 2061| getExpr(): [AssignExpr] ... = ... +# 2061| Type = [IntType] int +# 2061| ValueCategory = lvalue +# 2061| getLValue(): [VariableAccess] z +# 2061| Type = [IntType] int +# 2061| ValueCategory = lvalue +# 2061| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2061| Type = [IntType] int +# 2061| ValueCategory = prvalue(load) +# 2061| getCondition(): [VariableAccess] a +# 2061| Type = [BoolType] bool +# 2061| ValueCategory = prvalue(load) +# 2061| getThen(): [VariableAccess] x +# 2061| Type = [IntType] int +# 2061| ValueCategory = prvalue(load) +# 2061| getElse(): [Literal] 5 +# 2061| Type = [IntType] int +# 2061| Value = [Literal] 5 +# 2061| ValueCategory = prvalue +# 2062| getStmt(2): [ExprStmt] ExprStmt +# 2062| getExpr(): [AssignExpr] ... = ... +# 2062| Type = [IntType] int +# 2062| ValueCategory = lvalue +# 2062| getLValue(): [VariableAccess] z +# 2062| Type = [IntType] int +# 2062| ValueCategory = lvalue +# 2062| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2062| Type = [IntType] int +# 2062| ValueCategory = prvalue +# 2062| getCondition(): [VariableAccess] a +# 2062| Type = [BoolType] bool +# 2062| ValueCategory = prvalue(load) +# 2062| getThen(): [Literal] 3 +# 2062| Type = [IntType] int +# 2062| Value = [Literal] 3 +# 2062| ValueCategory = prvalue +# 2062| getElse(): [Literal] 5 +# 2062| Type = [IntType] int +# 2062| Value = [Literal] 5 +# 2062| ValueCategory = prvalue +# 2063| getStmt(3): [ExprStmt] ExprStmt +# 2063| getExpr(): [AssignExpr] ... = ... +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getCondition(): [VariableAccess] a +# 2063| Type = [BoolType] bool +# 2063| ValueCategory = prvalue(load) +# 2063| getThen(): [VariableAccess] x +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getElse(): [VariableAccess] y +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2063| getRValue(): [Literal] 7 +# 2063| Type = [IntType] int +# 2063| Value = [Literal] 7 +# 2063| ValueCategory = prvalue +# 2063| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2063| Type = [IntType] int +# 2063| ValueCategory = lvalue +# 2064| getStmt(4): [ReturnStmt] return ... +# 2066| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) +# 2066| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2052| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2052| : +# 2066| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2066| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2055| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| : -# 2055| getParameter(0): [Parameter] a -# 2055| Type = [BoolType] bool -# 2055| getParameter(1): [Parameter] x -# 2055| Type = [Struct] TernaryPodObj -# 2055| getParameter(2): [Parameter] y -# 2055| Type = [Struct] TernaryPodObj -# 2055| getParameter(3): [Parameter] z -# 2055| Type = [Struct] TernaryPodObj -# 2055| getEntryPoint(): [BlockStmt] { ... } -# 2056| getStmt(0): [ExprStmt] ExprStmt -# 2056| getExpr(): [AssignExpr] ... = ... -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = lvalue -# 2056| getLValue(): [VariableAccess] z -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = lvalue -# 2056| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2056| getCondition(): [VariableAccess] a -# 2056| Type = [BoolType] bool -# 2056| ValueCategory = prvalue(load) -# 2056| getThen(): [VariableAccess] x -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2056| getElse(): [VariableAccess] y -# 2056| Type = [Struct] TernaryPodObj -# 2056| ValueCategory = prvalue(load) -# 2057| getStmt(1): [ExprStmt] ExprStmt -# 2057| getExpr(): [AssignExpr] ... = ... -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = lvalue -# 2057| getLValue(): [VariableAccess] z -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = lvalue -# 2057| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue -# 2057| getCondition(): [VariableAccess] a -# 2057| Type = [BoolType] bool -# 2057| ValueCategory = prvalue(load) -# 2057| getThen(): [VariableAccess] x -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getElse(): [Literal] 0 -# 2057| Type = [Struct] TernaryPodObj -# 2057| Value = [Literal] 0 -# 2057| ValueCategory = prvalue -# 2057| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2057| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2057| Type = [Struct] TernaryPodObj -# 2057| ValueCategory = prvalue(load) -# 2058| getStmt(2): [ExprStmt] ExprStmt -# 2058| getExpr(): [AssignExpr] ... = ... -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = lvalue -# 2058| getLValue(): [VariableAccess] z -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = lvalue -# 2058| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue -# 2058| getCondition(): [VariableAccess] a -# 2058| Type = [BoolType] bool -# 2058| ValueCategory = prvalue(load) -# 2058| getThen(): [Literal] 0 -# 2058| Type = [Struct] TernaryPodObj -# 2058| Value = [Literal] 0 -# 2058| ValueCategory = prvalue -# 2058| getElse(): [Literal] 0 -# 2058| Type = [Struct] TernaryPodObj -# 2058| Value = [Literal] 0 -# 2058| ValueCategory = prvalue -# 2058| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2058| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2058| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2058| Type = [Struct] TernaryPodObj -# 2058| ValueCategory = prvalue(load) -# 2059| getStmt(3): [ExprStmt] ExprStmt -# 2059| getExpr(): [AssignExpr] ... = ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getLValue(): [AssignExpr] ... = ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getLValue(): [VariableAccess] z -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getCondition(): [VariableAccess] a -# 2059| Type = [BoolType] bool -# 2059| ValueCategory = prvalue(load) -# 2059| getThen(): [VariableAccess] x -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getElse(): [VariableAccess] y -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2059| getRValue(): [Literal] 0 -# 2059| Type = [Struct] TernaryPodObj -# 2059| Value = [Literal] 0 -# 2059| ValueCategory = prvalue -# 2059| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = lvalue -# 2059| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2059| Type = [Struct] TernaryPodObj -# 2059| ValueCategory = prvalue(load) -# 2060| getStmt(4): [ReturnStmt] return ... -# 2062| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| : +# 2069| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| : +# 2069| getParameter(0): [Parameter] a +# 2069| Type = [BoolType] bool +# 2069| getParameter(1): [Parameter] x +# 2069| Type = [Struct] TernaryPodObj +# 2069| getParameter(2): [Parameter] y +# 2069| Type = [Struct] TernaryPodObj +# 2069| getParameter(3): [Parameter] z +# 2069| Type = [Struct] TernaryPodObj +# 2069| getEntryPoint(): [BlockStmt] { ... } +# 2070| getStmt(0): [ExprStmt] ExprStmt +# 2070| getExpr(): [AssignExpr] ... = ... +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = lvalue +# 2070| getLValue(): [VariableAccess] z +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = lvalue +# 2070| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2070| getCondition(): [VariableAccess] a +# 2070| Type = [BoolType] bool +# 2070| ValueCategory = prvalue(load) +# 2070| getThen(): [VariableAccess] x +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2070| getElse(): [VariableAccess] y +# 2070| Type = [Struct] TernaryPodObj +# 2070| ValueCategory = prvalue(load) +# 2071| getStmt(1): [ExprStmt] ExprStmt +# 2071| getExpr(): [AssignExpr] ... = ... +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = lvalue +# 2071| getLValue(): [VariableAccess] z +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = lvalue +# 2071| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue +# 2071| getCondition(): [VariableAccess] a +# 2071| Type = [BoolType] bool +# 2071| ValueCategory = prvalue(load) +# 2071| getThen(): [VariableAccess] x +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getElse(): [Literal] 0 +# 2071| Type = [Struct] TernaryPodObj +# 2071| Value = [Literal] 0 +# 2071| ValueCategory = prvalue +# 2071| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2071| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2071| Type = [Struct] TernaryPodObj +# 2071| ValueCategory = prvalue(load) +# 2072| getStmt(2): [ExprStmt] ExprStmt +# 2072| getExpr(): [AssignExpr] ... = ... +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = lvalue +# 2072| getLValue(): [VariableAccess] z +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = lvalue +# 2072| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue +# 2072| getCondition(): [VariableAccess] a +# 2072| Type = [BoolType] bool +# 2072| ValueCategory = prvalue(load) +# 2072| getThen(): [Literal] 0 +# 2072| Type = [Struct] TernaryPodObj +# 2072| Value = [Literal] 0 +# 2072| ValueCategory = prvalue +# 2072| getElse(): [Literal] 0 +# 2072| Type = [Struct] TernaryPodObj +# 2072| Value = [Literal] 0 +# 2072| ValueCategory = prvalue +# 2072| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2072| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2072| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2072| Type = [Struct] TernaryPodObj +# 2072| ValueCategory = prvalue(load) +# 2073| getStmt(3): [ExprStmt] ExprStmt +# 2073| getExpr(): [AssignExpr] ... = ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getLValue(): [AssignExpr] ... = ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getLValue(): [VariableAccess] z +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getCondition(): [VariableAccess] a +# 2073| Type = [BoolType] bool +# 2073| ValueCategory = prvalue(load) +# 2073| getThen(): [VariableAccess] x +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getElse(): [VariableAccess] y +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2073| getRValue(): [Literal] 0 +# 2073| Type = [Struct] TernaryPodObj +# 2073| Value = [Literal] 0 +# 2073| ValueCategory = prvalue +# 2073| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = lvalue +# 2073| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2073| Type = [Struct] TernaryPodObj +# 2073| ValueCategory = prvalue(load) +# 2074| getStmt(4): [ReturnStmt] return ... +# 2076| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -16397,1434 +16445,977 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2062| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2062| : -# 2062| : -# 2062| getEntryPoint(): [BlockStmt] { ... } -# 2062| getStmt(0): [ReturnStmt] return ... -# 2062| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| : +# 2076| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2076| : +# 2076| : +# 2076| getEntryPoint(): [BlockStmt] { ... } +# 2076| getStmt(0): [ReturnStmt] return ... +# 2076| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2062| : -# 2062| getEntryPoint(): [BlockStmt] { ... } -# 2062| getStmt(0): [ReturnStmt] return ... -# 2063| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| : -# 2063| getEntryPoint(): [BlockStmt] { ... } -# 2063| getStmt(0): [ReturnStmt] return ... -# 2063| : -# 2066| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| : -# 2066| getParameter(0): [Parameter] a -# 2066| Type = [BoolType] bool -# 2066| getParameter(1): [Parameter] x -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getParameter(2): [Parameter] y -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getParameter(3): [Parameter] z -# 2066| Type = [Struct] TernaryNonPodObj -# 2066| getEntryPoint(): [BlockStmt] { ... } -# 2067| getStmt(0): [ExprStmt] ExprStmt -# 2067| getExpr(): [FunctionCall] call to operator= -# 2067| Type = [LValueReferenceType] TernaryNonPodObj & -# 2067| ValueCategory = prvalue -# 2067| getQualifier(): [VariableAccess] z -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getCondition(): [VariableAccess] a -# 2067| Type = [BoolType] bool -# 2067| ValueCategory = prvalue(load) -# 2067| getThen(): [VariableAccess] x -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getElse(): [VariableAccess] y -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2067| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2067| ValueCategory = prvalue -# 2067| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2067| Conversion = [GlvalueConversion] glvalue conversion -# 2067| Type = [SpecifiedType] const TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2067| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2067| Type = [Struct] TernaryNonPodObj -# 2067| ValueCategory = lvalue -# 2068| getStmt(1): [ExprStmt] ExprStmt -# 2068| getExpr(): [FunctionCall] call to operator= -# 2068| Type = [LValueReferenceType] TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getQualifier(): [VariableAccess] z -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue -# 2068| getCondition(): [VariableAccess] a -# 2068| Type = [BoolType] bool -# 2068| ValueCategory = prvalue(load) -# 2068| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2068| getArgument(0): [VariableAccess] x -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2068| Conversion = [GlvalueConversion] glvalue conversion -# 2068| Type = [SpecifiedType] const TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2068| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue(load) -# 2068| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = prvalue(load) -# 2068| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj -# 2068| Type = [VoidType] void -# 2068| ValueCategory = prvalue -# 2068| getQualifier(): [ReuseExpr] reuse of temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = xvalue -# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2068| ValueCategory = prvalue -# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2068| Conversion = [GlvalueConversion] glvalue conversion -# 2068| Type = [SpecifiedType] const TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getExpr(): [TemporaryObjectExpr] temporary object -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2068| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2068| Type = [Struct] TernaryNonPodObj -# 2068| ValueCategory = lvalue -# 2069| getStmt(2): [ExprStmt] ExprStmt -# 2069| getExpr(): [FunctionCall] call to operator= -# 2069| Type = [LValueReferenceType] TernaryNonPodObj & -# 2069| ValueCategory = prvalue -# 2069| getQualifier(): [VariableAccess] z -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue -# 2069| getCondition(): [VariableAccess] a -# 2069| Type = [BoolType] bool -# 2069| ValueCategory = prvalue(load) -# 2069| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue(load) -# 2069| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = prvalue(load) -# 2069| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj -# 2069| Type = [VoidType] void -# 2069| ValueCategory = prvalue -# 2069| getQualifier(): [ReuseExpr] reuse of temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = xvalue -# 2069| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2069| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2069| ValueCategory = prvalue -# 2069| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2069| Conversion = [GlvalueConversion] glvalue conversion -# 2069| Type = [SpecifiedType] const TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getExpr(): [TemporaryObjectExpr] temporary object -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2069| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2069| Type = [Struct] TernaryNonPodObj -# 2069| ValueCategory = lvalue -# 2070| getStmt(3): [ExprStmt] ExprStmt -# 2070| getExpr(): [FunctionCall] call to operator= -# 2070| Type = [LValueReferenceType] TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getQualifier(): [FunctionCall] call to operator= -# 2070| Type = [LValueReferenceType] TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getQualifier(): [VariableAccess] z -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getCondition(): [VariableAccess] a -# 2070| Type = [BoolType] bool -# 2070| ValueCategory = prvalue(load) -# 2070| getThen(): [VariableAccess] x -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getElse(): [VariableAccess] y -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2070| Conversion = [GlvalueConversion] glvalue conversion -# 2070| Type = [SpecifiedType] const TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0): [ConstructorCall] call to TernaryNonPodObj -# 2070| Type = [VoidType] void -# 2070| ValueCategory = prvalue -# 2070| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj -# 2070| Type = [VoidType] void -# 2070| ValueCategory = prvalue -# 2070| getQualifier(): [ReuseExpr] reuse of temporary object -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = xvalue -# 2070| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2070| ValueCategory = prvalue -# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2070| Conversion = [GlvalueConversion] glvalue conversion -# 2070| Type = [SpecifiedType] const TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr(): [TemporaryObjectExpr] temporary object -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2070| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2070| Type = [Struct] TernaryNonPodObj -# 2070| ValueCategory = lvalue -# 2071| getStmt(4): [ReturnStmt] return ... -# 2073| [TopLevelFunction] void CommaTestHelper(unsigned int) -# 2073| : -# 2073| getParameter(0): [Parameter] (unnamed parameter 0) -# 2073| Type = [IntType] unsigned int -# 2075| [TopLevelFunction] unsigned int CommaTest(unsigned int) -# 2075| : -# 2075| getParameter(0): [Parameter] x -# 2075| Type = [IntType] unsigned int -# 2075| getEntryPoint(): [BlockStmt] { ... } -# 2076| getStmt(0): [DeclStmt] declaration -# 2076| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2076| Type = [IntType] unsigned int -# 2077| getStmt(1): [ExprStmt] ExprStmt -# 2077| getExpr(): [AssignExpr] ... = ... -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = lvalue -# 2077| getLValue(): [VariableAccess] y -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = lvalue -# 2077| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = prvalue(load) -# 2077| getCondition(): [LTExpr] ... < ... -# 2077| Type = [BoolType] bool -# 2077| ValueCategory = prvalue -# 2077| getLesserOperand(): [VariableAccess] x -# 2077| Type = [IntType] unsigned int -# 2077| ValueCategory = prvalue(load) -# 2077| getGreaterOperand(): [Literal] 100 -# 2077| Type = [IntType] int -# 2077| Value = [Literal] 100 -# 2077| ValueCategory = prvalue -# 2077| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2077| Conversion = [IntegralConversion] integral conversion -# 2077| Type = [IntType] unsigned int -# 2077| Value = [CStyleCast] 100 -# 2077| ValueCategory = prvalue -# 2078| getThen(): [CommaExpr] ... , ... -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2078| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2078| Type = [VoidType] void -# 2078| ValueCategory = prvalue -# 2078| getArgument(0): [VariableAccess] x -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2078| getRightOperand(): [VariableAccess] x -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2079| getElse(): [CommaExpr] ... , ... -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue -# 2079| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2079| Type = [VoidType] void -# 2079| ValueCategory = prvalue -# 2079| getArgument(0): [VariableAccess] x -# 2079| Type = [IntType] unsigned int -# 2079| ValueCategory = prvalue(load) -# 2079| getRightOperand(): [Literal] 10 -# 2079| Type = [IntType] int -# 2079| Value = [Literal] 10 -# 2079| ValueCategory = prvalue -# 2078| getThen().getFullyConverted(): [ParenthesisExpr] (...) -# 2078| Type = [IntType] unsigned int -# 2078| ValueCategory = prvalue(load) -# 2079| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2079| Conversion = [IntegralConversion] integral conversion -# 2079| Type = [IntType] unsigned int -# 2079| ValueCategory = prvalue -# 2079| getExpr(): [ParenthesisExpr] (...) -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue -# 2080| getStmt(2): [ReturnStmt] return ... -# 2082| [TopLevelFunction] void NewDeleteMem() -# 2082| : -# 2082| getEntryPoint(): [BlockStmt] { ... } -# 2083| getStmt(0): [DeclStmt] declaration -# 2083| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2083| Type = [IntPointerType] int * -# 2083| getVariable().getInitializer(): [Initializer] initializer for x -# 2083| getExpr(): [NewExpr] new -# 2083| Type = [IntPointerType] int * +# 2076| : +# 2076| getEntryPoint(): [BlockStmt] { ... } +# 2076| getStmt(0): [ReturnStmt] return ... +# 2077| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| : +# 2077| getEntryPoint(): [BlockStmt] { ... } +# 2077| getStmt(0): [ReturnStmt] return ... +# 2077| : +# 2080| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| : +# 2080| getParameter(0): [Parameter] a +# 2080| Type = [BoolType] bool +# 2080| getParameter(1): [Parameter] x +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getParameter(2): [Parameter] y +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getParameter(3): [Parameter] z +# 2080| Type = [Struct] TernaryNonPodObj +# 2080| getEntryPoint(): [BlockStmt] { ... } +# 2081| getStmt(0): [ExprStmt] ExprStmt +# 2081| getExpr(): [FunctionCall] call to operator= +# 2081| Type = [LValueReferenceType] TernaryNonPodObj & +# 2081| ValueCategory = prvalue +# 2081| getQualifier(): [VariableAccess] z +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getCondition(): [VariableAccess] a +# 2081| Type = [BoolType] bool +# 2081| ValueCategory = prvalue(load) +# 2081| getThen(): [VariableAccess] x +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getElse(): [VariableAccess] y +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2081| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2081| ValueCategory = prvalue +# 2081| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2081| Conversion = [GlvalueConversion] glvalue conversion +# 2081| Type = [SpecifiedType] const TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2081| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2081| Type = [Struct] TernaryNonPodObj +# 2081| ValueCategory = lvalue +# 2082| getStmt(1): [ExprStmt] ExprStmt +# 2082| getExpr(): [FunctionCall] call to operator= +# 2082| Type = [LValueReferenceType] TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getQualifier(): [VariableAccess] z +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue +# 2082| getCondition(): [VariableAccess] a +# 2082| Type = [BoolType] bool +# 2082| ValueCategory = prvalue(load) +# 2082| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getArgument(0): [VariableAccess] x +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2082| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2082| Conversion = [GlvalueConversion] glvalue conversion +# 2082| Type = [SpecifiedType] const TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue(load) +# 2082| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = prvalue(load) +# 2082| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getQualifier(): [ReuseExpr] reuse of temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = xvalue +# 2082| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2082| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2082| ValueCategory = prvalue +# 2082| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2082| Conversion = [GlvalueConversion] glvalue conversion +# 2082| Type = [SpecifiedType] const TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getExpr(): [TemporaryObjectExpr] temporary object +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2082| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2082| Type = [Struct] TernaryNonPodObj +# 2082| ValueCategory = lvalue +# 2083| getStmt(2): [ExprStmt] ExprStmt +# 2083| getExpr(): [FunctionCall] call to operator= +# 2083| Type = [LValueReferenceType] TernaryNonPodObj & +# 2083| ValueCategory = prvalue +# 2083| getQualifier(): [VariableAccess] z +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue +# 2083| getCondition(): [VariableAccess] a +# 2083| Type = [BoolType] bool +# 2083| ValueCategory = prvalue(load) +# 2083| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2083| Type = [VoidType] void # 2083| ValueCategory = prvalue -# 2084| getStmt(1): [ExprStmt] ExprStmt -# 2084| getExpr(): [AssignExpr] ... = ... -# 2084| Type = [IntType] int -# 2084| ValueCategory = lvalue -# 2084| getLValue(): [PointerDereferenceExpr] * ... -# 2084| Type = [IntType] int -# 2084| ValueCategory = lvalue -# 2084| getOperand(): [VariableAccess] x -# 2084| Type = [IntPointerType] int * -# 2084| ValueCategory = prvalue(load) -# 2084| getRValue(): [Literal] 6 -# 2084| Type = [IntType] int -# 2084| Value = [Literal] 6 +# 2083| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2083| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue(load) +# 2083| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = prvalue(load) +# 2083| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2083| getQualifier(): [ReuseExpr] reuse of temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = xvalue +# 2083| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2083| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2083| ValueCategory = prvalue +# 2083| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2083| Conversion = [GlvalueConversion] glvalue conversion +# 2083| Type = [SpecifiedType] const TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getExpr(): [TemporaryObjectExpr] temporary object +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2083| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2083| Type = [Struct] TernaryNonPodObj +# 2083| ValueCategory = lvalue +# 2084| getStmt(3): [ExprStmt] ExprStmt +# 2084| getExpr(): [FunctionCall] call to operator= +# 2084| Type = [LValueReferenceType] TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getQualifier(): [FunctionCall] call to operator= +# 2084| Type = [LValueReferenceType] TernaryNonPodObj & # 2084| ValueCategory = prvalue -# 2085| getStmt(2): [ExprStmt] ExprStmt -# 2085| getExpr(): [DeleteExpr] delete -# 2085| Type = [VoidType] void -# 2085| ValueCategory = prvalue -# 2085| getExprWithReuse(): [VariableAccess] x -# 2085| Type = [IntPointerType] int * -# 2085| ValueCategory = prvalue(load) -# 2086| getStmt(3): [ReturnStmt] return ... -# 2088| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) -# 2088| : +# 2084| getQualifier(): [VariableAccess] z +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getCondition(): [VariableAccess] a +# 2084| Type = [BoolType] bool +# 2084| ValueCategory = prvalue(load) +# 2084| getThen(): [VariableAccess] x +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getElse(): [VariableAccess] y +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2084| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2084| Conversion = [GlvalueConversion] glvalue conversion +# 2084| Type = [SpecifiedType] const TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0): [ConstructorCall] call to TernaryNonPodObj +# 2084| Type = [VoidType] void +# 2084| ValueCategory = prvalue +# 2084| getImplicitDestructorCall(0): [DestructorCall] call to ~TernaryNonPodObj +# 2084| Type = [VoidType] void +# 2084| ValueCategory = prvalue +# 2084| getQualifier(): [ReuseExpr] reuse of temporary object +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = xvalue +# 2084| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2084| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2084| ValueCategory = prvalue +# 2084| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2084| Conversion = [GlvalueConversion] glvalue conversion +# 2084| Type = [SpecifiedType] const TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr(): [TemporaryObjectExpr] temporary object +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2084| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2084| Type = [Struct] TernaryNonPodObj +# 2084| ValueCategory = lvalue +# 2085| getStmt(4): [ReturnStmt] return ... +# 2087| [TopLevelFunction] void CommaTestHelper(unsigned int) +# 2087| : +# 2087| getParameter(0): [Parameter] (unnamed parameter 0) +# 2087| Type = [IntType] unsigned int +# 2089| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2089| : +# 2089| getParameter(0): [Parameter] x +# 2089| Type = [IntType] unsigned int +# 2089| getEntryPoint(): [BlockStmt] { ... } +# 2090| getStmt(0): [DeclStmt] declaration +# 2090| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2090| Type = [IntType] unsigned int +# 2091| getStmt(1): [ExprStmt] ExprStmt +# 2091| getExpr(): [AssignExpr] ... = ... +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = lvalue +# 2091| getLValue(): [VariableAccess] y +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = lvalue +# 2091| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = prvalue(load) +# 2091| getCondition(): [LTExpr] ... < ... +# 2091| Type = [BoolType] bool +# 2091| ValueCategory = prvalue +# 2091| getLesserOperand(): [VariableAccess] x +# 2091| Type = [IntType] unsigned int +# 2091| ValueCategory = prvalue(load) +# 2091| getGreaterOperand(): [Literal] 100 +# 2091| Type = [IntType] int +# 2091| Value = [Literal] 100 +# 2091| ValueCategory = prvalue +# 2091| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2091| Conversion = [IntegralConversion] integral conversion +# 2091| Type = [IntType] unsigned int +# 2091| Value = [CStyleCast] 100 +# 2091| ValueCategory = prvalue +# 2092| getThen(): [CommaExpr] ... , ... +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2092| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2092| Type = [VoidType] void +# 2092| ValueCategory = prvalue +# 2092| getArgument(0): [VariableAccess] x +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2092| getRightOperand(): [VariableAccess] x +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2093| getElse(): [CommaExpr] ... , ... +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2093| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2093| Type = [VoidType] void +# 2093| ValueCategory = prvalue +# 2093| getArgument(0): [VariableAccess] x +# 2093| Type = [IntType] unsigned int +# 2093| ValueCategory = prvalue(load) +# 2093| getRightOperand(): [Literal] 10 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 10 +# 2093| ValueCategory = prvalue +# 2092| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2092| Type = [IntType] unsigned int +# 2092| ValueCategory = prvalue(load) +# 2093| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2093| Conversion = [IntegralConversion] integral conversion +# 2093| Type = [IntType] unsigned int +# 2093| ValueCategory = prvalue +# 2093| getExpr(): [ParenthesisExpr] (...) +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2094| getStmt(2): [ReturnStmt] return ... +# 2096| [TopLevelFunction] void NewDeleteMem() +# 2096| : +# 2096| getEntryPoint(): [BlockStmt] { ... } +# 2097| getStmt(0): [DeclStmt] declaration +# 2097| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2097| Type = [IntPointerType] int * +# 2097| getVariable().getInitializer(): [Initializer] initializer for x +# 2097| getExpr(): [NewExpr] new +# 2097| Type = [IntPointerType] int * +# 2097| ValueCategory = prvalue +# 2098| getStmt(1): [ExprStmt] ExprStmt +# 2098| getExpr(): [AssignExpr] ... = ... +# 2098| Type = [IntType] int +# 2098| ValueCategory = lvalue +# 2098| getLValue(): [PointerDereferenceExpr] * ... +# 2098| Type = [IntType] int +# 2098| ValueCategory = lvalue +# 2098| getOperand(): [VariableAccess] x +# 2098| Type = [IntPointerType] int * +# 2098| ValueCategory = prvalue(load) +# 2098| getRValue(): [Literal] 6 +# 2098| Type = [IntType] int +# 2098| Value = [Literal] 6 +# 2098| ValueCategory = prvalue +# 2099| getStmt(2): [ExprStmt] ExprStmt +# 2099| getExpr(): [DeleteExpr] delete +# 2099| Type = [VoidType] void +# 2099| ValueCategory = prvalue +# 2099| getExprWithReuse(): [VariableAccess] x +# 2099| Type = [IntPointerType] int * +# 2099| ValueCategory = prvalue(load) +# 2100| getStmt(3): [ReturnStmt] return ... +# 2102| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) +# 2102| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Base2 & -# 2088| [Constructor] void Base2::Base2() -# 2088| : -# 2088| : -# 2088| getEntryPoint(): [BlockStmt] { ... } -# 2088| getStmt(0): [ReturnStmt] return ... -# 2088| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2088| : +# 2102| [Constructor] void Base2::Base2() +# 2102| : +# 2102| : +# 2102| getEntryPoint(): [BlockStmt] { ... } +# 2102| getStmt(0): [ReturnStmt] return ... +# 2102| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2102| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Base2 & -# 2090| [MemberFunction] void Base2::operator delete(void*) -# 2090| : -# 2090| getParameter(0): [Parameter] p -# 2090| Type = [VoidPointerType] void * -# 2090| getEntryPoint(): [BlockStmt] { ... } -# 2091| getStmt(0): [ReturnStmt] return ... -# 2092| [Destructor,VirtualFunction] void Base2::~Base2() -# 2092| : -# 2092| getEntryPoint(): [BlockStmt] { ... } -# 2092| getStmt(0): [ReturnStmt] return ... -# 2092| : -# 2095| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2095| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2095| [Constructor] void Derived2::Derived2() -# 2095| : -# 2095| : -# 2095| getInitializer(0): [ConstructorDirectInit] call to Base2 -# 2095| Type = [VoidType] void -# 2095| ValueCategory = prvalue -# 2095| getEntryPoint(): [BlockStmt] { ... } -# 2095| getStmt(0): [ReturnStmt] return ... -# 2095| [CopyConstructor] void Derived2::Derived2(Derived2 const&) -# 2095| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2098| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2098| : -# 2098| getEntryPoint(): [BlockStmt] { ... } -# 2098| getStmt(0): [ReturnStmt] return ... -# 2098| : -# 2098| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2098| Type = [VoidType] void -# 2098| ValueCategory = prvalue -# 2100| [MemberFunction] void Derived2::operator delete(void*) -# 2100| : -# 2100| getParameter(0): [Parameter] p -# 2100| Type = [VoidPointerType] void * -# 2100| getEntryPoint(): [BlockStmt] { ... } -# 2101| getStmt(0): [ReturnStmt] return ... -# 2105| [TopLevelFunction] int virtual_delete() -# 2105| : +# 2104| [MemberFunction] void Base2::operator delete(void*) +# 2104| : +# 2104| getParameter(0): [Parameter] p +# 2104| Type = [VoidPointerType] void * +# 2104| getEntryPoint(): [BlockStmt] { ... } +# 2105| getStmt(0): [ReturnStmt] return ... +# 2106| [Destructor,VirtualFunction] void Base2::~Base2() +# 2106| : # 2106| getEntryPoint(): [BlockStmt] { ... } -# 2107| getStmt(0): [DeclStmt] declaration -# 2107| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 -# 2107| Type = [PointerType] Base2 * -# 2107| getVariable().getInitializer(): [Initializer] initializer for b1 -# 2107| getExpr(): [NewExpr] new -# 2107| Type = [PointerType] Base2 * -# 2107| ValueCategory = prvalue -# 2107| getInitializer(): [ConstructorCall] call to Base2 -# 2107| Type = [VoidType] void -# 2107| ValueCategory = prvalue -# 2108| getStmt(1): [ExprStmt] ExprStmt -# 2108| getExpr(): [DeleteExpr] delete -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2108| Type = [VoidType] void -# 2108| ValueCategory = prvalue -# 2108| getQualifier(): [VariableAccess] b1 -# 2108| Type = [PointerType] Base2 * -# 2108| ValueCategory = prvalue(load) -# 2108| getExprWithReuse(): [ReuseExpr] reuse of b1 -# 2108| Type = [PointerType] Base2 * -# 2108| ValueCategory = prvalue -# 2110| getStmt(2): [DeclStmt] declaration -# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 -# 2110| Type = [PointerType] Base2 * -# 2110| getVariable().getInitializer(): [Initializer] initializer for b2 -# 2110| getExpr(): [NewExpr] new -# 2110| Type = [PointerType] Derived2 * -# 2110| ValueCategory = prvalue -# 2110| getInitializer(): [ConstructorCall] call to Derived2 -# 2110| Type = [VoidType] void -# 2110| ValueCategory = prvalue -# 2110| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... -# 2110| Conversion = [BaseClassConversion] base class conversion -# 2110| Type = [PointerType] Base2 * -# 2110| ValueCategory = prvalue -# 2111| getStmt(3): [ExprStmt] ExprStmt -# 2111| getExpr(): [DeleteExpr] delete -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2111| Type = [VoidType] void -# 2111| ValueCategory = prvalue -# 2111| getQualifier(): [VariableAccess] b2 -# 2111| Type = [PointerType] Base2 * -# 2111| ValueCategory = prvalue(load) -# 2111| getExprWithReuse(): [ReuseExpr] reuse of b2 -# 2111| Type = [PointerType] Base2 * -# 2111| ValueCategory = prvalue -# 2113| getStmt(4): [DeclStmt] declaration -# 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2113| Type = [PointerType] Derived2 * -# 2113| getVariable().getInitializer(): [Initializer] initializer for d -# 2113| getExpr(): [NewExpr] new -# 2113| Type = [PointerType] Derived2 * -# 2113| ValueCategory = prvalue -# 2113| getInitializer(): [ConstructorCall] call to Derived2 -# 2113| Type = [VoidType] void -# 2113| ValueCategory = prvalue -# 2114| getStmt(5): [ExprStmt] ExprStmt -# 2114| getExpr(): [DeleteExpr] delete -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getDestructorCall(): [DestructorCall] call to ~Derived2 -# 2114| Type = [VoidType] void -# 2114| ValueCategory = prvalue -# 2114| getQualifier(): [VariableAccess] d -# 2114| Type = [PointerType] Derived2 * -# 2114| ValueCategory = prvalue(load) -# 2114| getExprWithReuse(): [ReuseExpr] reuse of d -# 2114| Type = [PointerType] Derived2 * -# 2114| ValueCategory = prvalue -# 2115| getStmt(6): [ReturnStmt] return ... -# 2117| [TopLevelFunction] void test_constant_folding_use(int) -# 2117| : -# 2117| getParameter(0): [Parameter] (unnamed parameter 0) -# 2117| Type = [IntType] int -# 2119| [TopLevelFunction] void test_constant_folding() +# 2106| getStmt(0): [ReturnStmt] return ... +# 2106| : +# 2109| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2109| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2109| [Constructor] void Derived2::Derived2() +# 2109| : +# 2109| : +# 2109| getInitializer(0): [ConstructorDirectInit] call to Base2 +# 2109| Type = [VoidType] void +# 2109| ValueCategory = prvalue +# 2109| getEntryPoint(): [BlockStmt] { ... } +# 2109| getStmt(0): [ReturnStmt] return ... +# 2109| [CopyConstructor] void Derived2::Derived2(Derived2 const&) +# 2109| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2112| [Destructor,VirtualFunction] void Derived2::~Derived2() +# 2112| : +# 2112| getEntryPoint(): [BlockStmt] { ... } +# 2112| getStmt(0): [ReturnStmt] return ... +# 2112| : +# 2112| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2112| Type = [VoidType] void +# 2112| ValueCategory = prvalue +# 2114| [MemberFunction] void Derived2::operator delete(void*) +# 2114| : +# 2114| getParameter(0): [Parameter] p +# 2114| Type = [VoidPointerType] void * +# 2114| getEntryPoint(): [BlockStmt] { ... } +# 2115| getStmt(0): [ReturnStmt] return ... +# 2119| [TopLevelFunction] int virtual_delete() # 2119| : -# 2119| getEntryPoint(): [BlockStmt] { ... } -# 2120| getStmt(0): [DeclStmt] declaration -# 2120| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2120| Type = [SpecifiedType] const int -# 2120| getVariable().getInitializer(): [Initializer] initializer for x -# 2120| getExpr(): [Literal] 116 -# 2120| Type = [IntType] int -# 2120| Value = [Literal] 116 -# 2120| ValueCategory = prvalue -# 2121| getStmt(1): [ExprStmt] ExprStmt -# 2121| getExpr(): [FunctionCall] call to test_constant_folding_use -# 2121| Type = [VoidType] void -# 2121| ValueCategory = prvalue -# 2121| getArgument(0): [VariableAccess] x -# 2121| Type = [IntType] int -# 2121| Value = [VariableAccess] 116 -# 2121| ValueCategory = prvalue(load) -# 2122| getStmt(2): [ReturnStmt] return ... -# 2124| [TopLevelFunction] void exit(int) -# 2124| : -# 2124| getParameter(0): [Parameter] code -# 2124| Type = [IntType] int -# 2126| [TopLevelFunction] int NonExit() -# 2126| : -# 2126| getEntryPoint(): [BlockStmt] { ... } -# 2127| getStmt(0): [DeclStmt] declaration -# 2127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2127| Type = [IntType] int -# 2127| getVariable().getInitializer(): [Initializer] initializer for x -# 2127| getExpr(): [FunctionCall] call to Add -# 2127| Type = [IntType] int +# 2120| getEntryPoint(): [BlockStmt] { ... } +# 2121| getStmt(0): [DeclStmt] declaration +# 2121| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 +# 2121| Type = [PointerType] Base2 * +# 2121| getVariable().getInitializer(): [Initializer] initializer for b1 +# 2121| getExpr(): [NewExpr] new +# 2121| Type = [PointerType] Base2 * +# 2121| ValueCategory = prvalue +# 2121| getInitializer(): [ConstructorCall] call to Base2 +# 2121| Type = [VoidType] void +# 2121| ValueCategory = prvalue +# 2122| getStmt(1): [ExprStmt] ExprStmt +# 2122| getExpr(): [DeleteExpr] delete +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2122| Type = [VoidType] void +# 2122| ValueCategory = prvalue +# 2122| getQualifier(): [VariableAccess] b1 +# 2122| Type = [PointerType] Base2 * +# 2122| ValueCategory = prvalue(load) +# 2122| getExprWithReuse(): [ReuseExpr] reuse of b1 +# 2122| Type = [PointerType] Base2 * +# 2122| ValueCategory = prvalue +# 2124| getStmt(2): [DeclStmt] declaration +# 2124| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 +# 2124| Type = [PointerType] Base2 * +# 2124| getVariable().getInitializer(): [Initializer] initializer for b2 +# 2124| getExpr(): [NewExpr] new +# 2124| Type = [PointerType] Derived2 * +# 2124| ValueCategory = prvalue +# 2124| getInitializer(): [ConstructorCall] call to Derived2 +# 2124| Type = [VoidType] void +# 2124| ValueCategory = prvalue +# 2124| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... +# 2124| Conversion = [BaseClassConversion] base class conversion +# 2124| Type = [PointerType] Base2 * +# 2124| ValueCategory = prvalue +# 2125| getStmt(3): [ExprStmt] ExprStmt +# 2125| getExpr(): [DeleteExpr] delete +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2125| Type = [VoidType] void +# 2125| ValueCategory = prvalue +# 2125| getQualifier(): [VariableAccess] b2 +# 2125| Type = [PointerType] Base2 * +# 2125| ValueCategory = prvalue(load) +# 2125| getExprWithReuse(): [ReuseExpr] reuse of b2 +# 2125| Type = [PointerType] Base2 * +# 2125| ValueCategory = prvalue +# 2127| getStmt(4): [DeclStmt] declaration +# 2127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2127| Type = [PointerType] Derived2 * +# 2127| getVariable().getInitializer(): [Initializer] initializer for d +# 2127| getExpr(): [NewExpr] new +# 2127| Type = [PointerType] Derived2 * # 2127| ValueCategory = prvalue -# 2127| getArgument(0): [Literal] 3 -# 2127| Type = [IntType] int -# 2127| Value = [Literal] 3 +# 2127| getInitializer(): [ConstructorCall] call to Derived2 +# 2127| Type = [VoidType] void # 2127| ValueCategory = prvalue -# 2127| getArgument(1): [Literal] 4 -# 2127| Type = [IntType] int -# 2127| Value = [Literal] 4 -# 2127| ValueCategory = prvalue -# 2128| getStmt(1): [IfStmt] if (...) ... -# 2128| getCondition(): [EQExpr] ... == ... -# 2128| Type = [BoolType] bool +# 2128| getStmt(5): [ExprStmt] ExprStmt +# 2128| getExpr(): [DeleteExpr] delete +# 2128| Type = [VoidType] void # 2128| ValueCategory = prvalue -# 2128| getLeftOperand(): [VariableAccess] x -# 2128| Type = [IntType] int -# 2128| ValueCategory = prvalue(load) -# 2128| getRightOperand(): [Literal] 7 -# 2128| Type = [IntType] int -# 2128| Value = [Literal] 7 +# 2128| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2128| Type = [VoidType] void # 2128| ValueCategory = prvalue -# 2129| getThen(): [ExprStmt] ExprStmt -# 2129| getExpr(): [FunctionCall] call to exit -# 2129| Type = [VoidType] void -# 2129| ValueCategory = prvalue -# 2129| getArgument(0): [Literal] 3 -# 2129| Type = [IntType] int -# 2129| Value = [Literal] 3 -# 2129| ValueCategory = prvalue -# 2130| getStmt(2): [ExprStmt] ExprStmt -# 2130| getExpr(): [FunctionCall] call to VoidFunc -# 2130| Type = [VoidType] void -# 2130| ValueCategory = prvalue -# 2131| getStmt(3): [ReturnStmt] return ... -# 2131| getExpr(): [VariableAccess] x -# 2131| Type = [IntType] int -# 2131| ValueCategory = prvalue(load) -# 2134| [TopLevelFunction] void CallsNonExit() -# 2134| : -# 2134| getEntryPoint(): [BlockStmt] { ... } -# 2135| getStmt(0): [ExprStmt] ExprStmt -# 2135| getExpr(): [FunctionCall] call to VoidFunc +# 2128| getDestructorCall(): [DestructorCall] call to ~Derived2 +# 2128| Type = [VoidType] void +# 2128| ValueCategory = prvalue +# 2128| getQualifier(): [VariableAccess] d +# 2128| Type = [PointerType] Derived2 * +# 2128| ValueCategory = prvalue(load) +# 2128| getExprWithReuse(): [ReuseExpr] reuse of d +# 2128| Type = [PointerType] Derived2 * +# 2128| ValueCategory = prvalue +# 2129| getStmt(6): [ReturnStmt] return ... +# 2131| [TopLevelFunction] void test_constant_folding_use(int) +# 2131| : +# 2131| getParameter(0): [Parameter] (unnamed parameter 0) +# 2131| Type = [IntType] int +# 2133| [TopLevelFunction] void test_constant_folding() +# 2133| : +# 2133| getEntryPoint(): [BlockStmt] { ... } +# 2134| getStmt(0): [DeclStmt] declaration +# 2134| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2134| Type = [SpecifiedType] const int +# 2134| getVariable().getInitializer(): [Initializer] initializer for x +# 2134| getExpr(): [Literal] 116 +# 2134| Type = [IntType] int +# 2134| Value = [Literal] 116 +# 2134| ValueCategory = prvalue +# 2135| getStmt(1): [ExprStmt] ExprStmt +# 2135| getExpr(): [FunctionCall] call to test_constant_folding_use # 2135| Type = [VoidType] void # 2135| ValueCategory = prvalue -# 2136| getStmt(1): [ExprStmt] ExprStmt -# 2136| getExpr(): [FunctionCall] call to exit -# 2136| Type = [VoidType] void -# 2136| ValueCategory = prvalue -# 2136| getArgument(0): [Literal] 3 -# 2136| Type = [IntType] int -# 2136| Value = [Literal] 3 -# 2136| ValueCategory = prvalue -# 2137| getStmt(2): [ReturnStmt] return ... -# 2139| [TopLevelFunction] int TransNonExit() -# 2139| : -# 2139| getEntryPoint(): [BlockStmt] { ... } -# 2140| getStmt(0): [DeclStmt] declaration -# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2140| Type = [IntType] int -# 2140| getVariable().getInitializer(): [Initializer] initializer for x -# 2140| getExpr(): [FunctionCall] call to Add -# 2140| Type = [IntType] int -# 2140| ValueCategory = prvalue -# 2140| getArgument(0): [Literal] 3 -# 2140| Type = [IntType] int -# 2140| Value = [Literal] 3 -# 2140| ValueCategory = prvalue -# 2140| getArgument(1): [Literal] 4 -# 2140| Type = [IntType] int -# 2140| Value = [Literal] 4 -# 2140| ValueCategory = prvalue -# 2141| getStmt(1): [IfStmt] if (...) ... -# 2141| getCondition(): [EQExpr] ... == ... -# 2141| Type = [BoolType] bool -# 2141| ValueCategory = prvalue -# 2141| getLeftOperand(): [VariableAccess] x -# 2141| Type = [IntType] int -# 2141| ValueCategory = prvalue(load) -# 2141| getRightOperand(): [Literal] 7 -# 2141| Type = [IntType] int -# 2141| Value = [Literal] 7 -# 2141| ValueCategory = prvalue -# 2142| getThen(): [ExprStmt] ExprStmt -# 2142| getExpr(): [FunctionCall] call to CallsNonExit -# 2142| Type = [VoidType] void +# 2135| getArgument(0): [VariableAccess] x +# 2135| Type = [IntType] int +# 2135| Value = [VariableAccess] 116 +# 2135| ValueCategory = prvalue(load) +# 2136| getStmt(2): [ReturnStmt] return ... +# 2138| [TopLevelFunction] void exit(int) +# 2138| : +# 2138| getParameter(0): [Parameter] code +# 2138| Type = [IntType] int +# 2140| [TopLevelFunction] int NonExit() +# 2140| : +# 2140| getEntryPoint(): [BlockStmt] { ... } +# 2141| getStmt(0): [DeclStmt] declaration +# 2141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2141| Type = [IntType] int +# 2141| getVariable().getInitializer(): [Initializer] initializer for x +# 2141| getExpr(): [FunctionCall] call to Add +# 2141| Type = [IntType] int +# 2141| ValueCategory = prvalue +# 2141| getArgument(0): [Literal] 3 +# 2141| Type = [IntType] int +# 2141| Value = [Literal] 3 +# 2141| ValueCategory = prvalue +# 2141| getArgument(1): [Literal] 4 +# 2141| Type = [IntType] int +# 2141| Value = [Literal] 4 +# 2141| ValueCategory = prvalue +# 2142| getStmt(1): [IfStmt] if (...) ... +# 2142| getCondition(): [EQExpr] ... == ... +# 2142| Type = [BoolType] bool +# 2142| ValueCategory = prvalue +# 2142| getLeftOperand(): [VariableAccess] x +# 2142| Type = [IntType] int +# 2142| ValueCategory = prvalue(load) +# 2142| getRightOperand(): [Literal] 7 +# 2142| Type = [IntType] int +# 2142| Value = [Literal] 7 # 2142| ValueCategory = prvalue -# 2143| getStmt(2): [ExprStmt] ExprStmt -# 2143| getExpr(): [FunctionCall] call to VoidFunc -# 2143| Type = [VoidType] void -# 2143| ValueCategory = prvalue -# 2144| getStmt(3): [ReturnStmt] return ... -# 2144| getExpr(): [VariableAccess] x -# 2144| Type = [IntType] int -# 2144| ValueCategory = prvalue(load) -# 2147| [TopLevelFunction] void newArrayCorrectType(size_t) -# 2147| : -# 2147| getParameter(0): [Parameter] n -# 2147| Type = [CTypedefType,Size_t] size_t -# 2147| getEntryPoint(): [BlockStmt] { ... } -# 2148| getStmt(0): [ExprStmt] ExprStmt -# 2148| getExpr(): [NewArrayExpr] new[] -# 2148| Type = [IntPointerType] int * -# 2148| ValueCategory = prvalue -# 2148| getExtent(): [VariableAccess] n -# 2148| Type = [CTypedefType,Size_t] size_t -# 2148| ValueCategory = prvalue(load) -# 2149| getStmt(1): [ExprStmt] ExprStmt -# 2149| getExpr(): [NewArrayExpr] new[] -# 2149| Type = [IntPointerType] int * +# 2143| getThen(): [ExprStmt] ExprStmt +# 2143| getExpr(): [FunctionCall] call to exit +# 2143| Type = [VoidType] void +# 2143| ValueCategory = prvalue +# 2143| getArgument(0): [Literal] 3 +# 2143| Type = [IntType] int +# 2143| Value = [Literal] 3 +# 2143| ValueCategory = prvalue +# 2144| getStmt(2): [ExprStmt] ExprStmt +# 2144| getExpr(): [FunctionCall] call to VoidFunc +# 2144| Type = [VoidType] void +# 2144| ValueCategory = prvalue +# 2145| getStmt(3): [ReturnStmt] return ... +# 2145| getExpr(): [VariableAccess] x +# 2145| Type = [IntType] int +# 2145| ValueCategory = prvalue(load) +# 2148| [TopLevelFunction] void CallsNonExit() +# 2148| : +# 2148| getEntryPoint(): [BlockStmt] { ... } +# 2149| getStmt(0): [ExprStmt] ExprStmt +# 2149| getExpr(): [FunctionCall] call to VoidFunc +# 2149| Type = [VoidType] void # 2149| ValueCategory = prvalue -# 2149| getAllocatorCall(): [FunctionCall] call to operator new[] -# 2149| Type = [VoidPointerType] void * -# 2149| ValueCategory = prvalue -# 2149| getArgument(0): [ErrorExpr] -# 2149| Type = [LongType] unsigned long -# 2149| ValueCategory = prvalue -# 2149| getArgument(1): [Literal] 1.0 -# 2149| Type = [FloatType] float -# 2149| Value = [Literal] 1.0 -# 2149| ValueCategory = prvalue -# 2149| getExtent(): [VariableAccess] n -# 2149| Type = [CTypedefType,Size_t] size_t -# 2149| ValueCategory = prvalue(load) -# 2150| getStmt(2): [ExprStmt] ExprStmt -# 2150| getExpr(): [NewArrayExpr] new[] -# 2150| Type = [PointerType] String * +# 2150| getStmt(1): [ExprStmt] ExprStmt +# 2150| getExpr(): [FunctionCall] call to exit +# 2150| Type = [VoidType] void # 2150| ValueCategory = prvalue -# 2150| getInitializer(): [ArrayAggregateLiteral] {...} -# 2150| Type = [ArrayType] String[] +# 2150| getArgument(0): [Literal] 3 +# 2150| Type = [IntType] int +# 2150| Value = [Literal] 3 # 2150| ValueCategory = prvalue -# 2150| getAnElementExpr(0): [ConstructorCall] call to String -# 2150| Type = [VoidType] void -# 2150| ValueCategory = prvalue -# 2150| getExtent(): [VariableAccess] n -# 2150| Type = [CTypedefType,Size_t] size_t -# 2150| ValueCategory = prvalue(load) -# 2151| getStmt(3): [ExprStmt] ExprStmt -# 2151| getExpr(): [NewArrayExpr] new[] -# 2151| Type = [PointerType] Overaligned * -# 2151| ValueCategory = prvalue -# 2151| getExtent(): [VariableAccess] n -# 2151| Type = [CTypedefType,Size_t] size_t -# 2151| ValueCategory = prvalue(load) -# 2151| getAlignmentArgument(): [Literal] 128 -# 2151| Type = [ScopedEnum] align_val_t -# 2151| Value = [Literal] 128 -# 2151| ValueCategory = prvalue -# 2152| getStmt(4): [ExprStmt] ExprStmt -# 2152| getExpr(): [NewArrayExpr] new[] -# 2152| Type = [PointerType] DefaultCtorWithDefaultParam * -# 2152| ValueCategory = prvalue -# 2152| getInitializer(): [ArrayAggregateLiteral] {...} -# 2152| Type = [ArrayType] DefaultCtorWithDefaultParam[] -# 2152| ValueCategory = prvalue -# 2152| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam -# 2152| Type = [VoidType] void -# 2152| ValueCategory = prvalue -# 2152| getExtent(): [VariableAccess] n -# 2152| Type = [CTypedefType,Size_t] size_t -# 2152| ValueCategory = prvalue(load) -# 2153| getStmt(5): [ExprStmt] ExprStmt -# 2153| getExpr(): [NewArrayExpr] new[] -# 2153| Type = [IntPointerType] int * -# 2153| ValueCategory = prvalue -# 2153| getInitializer(): [ArrayAggregateLiteral] {...} -# 2153| Type = [ArrayType] int[3] -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(0): [Literal] 0 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 0 -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(1): [Literal] 1 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 1 -# 2153| ValueCategory = prvalue -# 2153| getAnElementExpr(2): [Literal] 2 -# 2153| Type = [IntType] int -# 2153| Value = [Literal] 2 -# 2153| ValueCategory = prvalue -# 2153| getExtent(): [VariableAccess] n -# 2153| Type = [CTypedefType,Size_t] size_t -# 2153| ValueCategory = prvalue(load) -# 2154| getStmt(6): [ReturnStmt] return ... -# 2156| [TopLevelFunction] double strtod(char const*, char**) -# 2156| : -# 2156| getParameter(0): [Parameter] str -# 2156| Type = [PointerType] const char * -# 2156| getParameter(1): [Parameter] endptr -# 2156| Type = [PointerType] char ** -# 2158| [TopLevelFunction] char* test_strtod(char*) -# 2158| : -# 2158| getParameter(0): [Parameter] s -# 2158| Type = [CharPointerType] char * -# 2158| getEntryPoint(): [BlockStmt] { ... } -# 2159| getStmt(0): [DeclStmt] declaration -# 2159| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end -# 2159| Type = [CharPointerType] char * -# 2160| getStmt(1): [DeclStmt] declaration -# 2160| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2160| Type = [DoubleType] double -# 2160| getVariable().getInitializer(): [Initializer] initializer for d -# 2160| getExpr(): [FunctionCall] call to strtod -# 2160| Type = [DoubleType] double -# 2160| ValueCategory = prvalue -# 2160| getArgument(0): [VariableAccess] s -# 2160| Type = [CharPointerType] char * -# 2160| ValueCategory = prvalue(load) -# 2160| getArgument(1): [AddressOfExpr] & ... -# 2160| Type = [PointerType] char ** -# 2160| ValueCategory = prvalue -# 2160| getOperand(): [VariableAccess] end -# 2160| Type = [CharPointerType] char * -# 2160| ValueCategory = lvalue -# 2160| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... -# 2160| Conversion = [PointerConversion] pointer conversion -# 2160| Type = [PointerType] const char * -# 2160| ValueCategory = prvalue -# 2161| getStmt(2): [ReturnStmt] return ... -# 2161| getExpr(): [VariableAccess] end -# 2161| Type = [CharPointerType] char * -# 2161| ValueCategory = prvalue(load) -# 2164| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) -# 2164| : +# 2151| getStmt(2): [ReturnStmt] return ... +# 2153| [TopLevelFunction] int TransNonExit() +# 2153| : +# 2153| getEntryPoint(): [BlockStmt] { ... } +# 2154| getStmt(0): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2154| Type = [IntType] int +# 2154| getVariable().getInitializer(): [Initializer] initializer for x +# 2154| getExpr(): [FunctionCall] call to Add +# 2154| Type = [IntType] int +# 2154| ValueCategory = prvalue +# 2154| getArgument(0): [Literal] 3 +# 2154| Type = [IntType] int +# 2154| Value = [Literal] 3 +# 2154| ValueCategory = prvalue +# 2154| getArgument(1): [Literal] 4 +# 2154| Type = [IntType] int +# 2154| Value = [Literal] 4 +# 2154| ValueCategory = prvalue +# 2155| getStmt(1): [IfStmt] if (...) ... +# 2155| getCondition(): [EQExpr] ... == ... +# 2155| Type = [BoolType] bool +# 2155| ValueCategory = prvalue +# 2155| getLeftOperand(): [VariableAccess] x +# 2155| Type = [IntType] int +# 2155| ValueCategory = prvalue(load) +# 2155| getRightOperand(): [Literal] 7 +# 2155| Type = [IntType] int +# 2155| Value = [Literal] 7 +# 2155| ValueCategory = prvalue +# 2156| getThen(): [ExprStmt] ExprStmt +# 2156| getExpr(): [FunctionCall] call to CallsNonExit +# 2156| Type = [VoidType] void +# 2156| ValueCategory = prvalue +# 2157| getStmt(2): [ExprStmt] ExprStmt +# 2157| getExpr(): [FunctionCall] call to VoidFunc +# 2157| Type = [VoidType] void +# 2157| ValueCategory = prvalue +# 2158| getStmt(3): [ReturnStmt] return ... +# 2158| getExpr(): [VariableAccess] x +# 2158| Type = [IntType] int +# 2158| ValueCategory = prvalue(load) +# 2161| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2161| : +# 2161| getParameter(0): [Parameter] n +# 2161| Type = [CTypedefType,Size_t] size_t +# 2161| getEntryPoint(): [BlockStmt] { ... } +# 2162| getStmt(0): [ExprStmt] ExprStmt +# 2162| getExpr(): [NewArrayExpr] new[] +# 2162| Type = [IntPointerType] int * +# 2162| ValueCategory = prvalue +# 2162| getExtent(): [VariableAccess] n +# 2162| Type = [CTypedefType,Size_t] size_t +# 2162| ValueCategory = prvalue(load) +# 2163| getStmt(1): [ExprStmt] ExprStmt +# 2163| getExpr(): [NewArrayExpr] new[] +# 2163| Type = [IntPointerType] int * +# 2163| ValueCategory = prvalue +# 2163| getAllocatorCall(): [FunctionCall] call to operator new[] +# 2163| Type = [VoidPointerType] void * +# 2163| ValueCategory = prvalue +# 2163| getArgument(0): [ErrorExpr] +# 2163| Type = [LongType] unsigned long +# 2163| ValueCategory = prvalue +# 2163| getArgument(1): [Literal] 1.0 +# 2163| Type = [FloatType] float +# 2163| Value = [Literal] 1.0 +# 2163| ValueCategory = prvalue +# 2163| getExtent(): [VariableAccess] n +# 2163| Type = [CTypedefType,Size_t] size_t +# 2163| ValueCategory = prvalue(load) +# 2164| getStmt(2): [ExprStmt] ExprStmt +# 2164| getExpr(): [NewArrayExpr] new[] +# 2164| Type = [PointerType] String * +# 2164| ValueCategory = prvalue +# 2164| getInitializer(): [ArrayAggregateLiteral] {...} +# 2164| Type = [ArrayType] String[] +# 2164| ValueCategory = prvalue +# 2164| getAnElementExpr(0): [ConstructorCall] call to String +# 2164| Type = [VoidType] void +# 2164| ValueCategory = prvalue +# 2164| getExtent(): [VariableAccess] n +# 2164| Type = [CTypedefType,Size_t] size_t +# 2164| ValueCategory = prvalue(load) +# 2165| getStmt(3): [ExprStmt] ExprStmt +# 2165| getExpr(): [NewArrayExpr] new[] +# 2165| Type = [PointerType] Overaligned * +# 2165| ValueCategory = prvalue +# 2165| getExtent(): [VariableAccess] n +# 2165| Type = [CTypedefType,Size_t] size_t +# 2165| ValueCategory = prvalue(load) +# 2165| getAlignmentArgument(): [Literal] 128 +# 2165| Type = [ScopedEnum] align_val_t +# 2165| Value = [Literal] 128 +# 2165| ValueCategory = prvalue +# 2166| getStmt(4): [ExprStmt] ExprStmt +# 2166| getExpr(): [NewArrayExpr] new[] +# 2166| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2166| ValueCategory = prvalue +# 2166| getInitializer(): [ArrayAggregateLiteral] {...} +# 2166| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2166| ValueCategory = prvalue +# 2166| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2166| Type = [VoidType] void +# 2166| ValueCategory = prvalue +# 2166| getExtent(): [VariableAccess] n +# 2166| Type = [CTypedefType,Size_t] size_t +# 2166| ValueCategory = prvalue(load) +# 2167| getStmt(5): [ExprStmt] ExprStmt +# 2167| getExpr(): [NewArrayExpr] new[] +# 2167| Type = [IntPointerType] int * +# 2167| ValueCategory = prvalue +# 2167| getInitializer(): [ArrayAggregateLiteral] {...} +# 2167| Type = [ArrayType] int[3] +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(0): [Literal] 0 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 0 +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(1): [Literal] 1 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 1 +# 2167| ValueCategory = prvalue +# 2167| getAnElementExpr(2): [Literal] 2 +# 2167| Type = [IntType] int +# 2167| Value = [Literal] 2 +# 2167| ValueCategory = prvalue +# 2167| getExtent(): [VariableAccess] n +# 2167| Type = [CTypedefType,Size_t] size_t +# 2167| ValueCategory = prvalue(load) +# 2168| getStmt(6): [ReturnStmt] return ... +# 2170| [TopLevelFunction] double strtod(char const*, char**) +# 2170| : +# 2170| getParameter(0): [Parameter] str +# 2170| Type = [PointerType] const char * +# 2170| getParameter(1): [Parameter] endptr +# 2170| Type = [PointerType] char ** +# 2172| [TopLevelFunction] char* test_strtod(char*) +# 2172| : +# 2172| getParameter(0): [Parameter] s +# 2172| Type = [CharPointerType] char * +# 2172| getEntryPoint(): [BlockStmt] { ... } +# 2173| getStmt(0): [DeclStmt] declaration +# 2173| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end +# 2173| Type = [CharPointerType] char * +# 2174| getStmt(1): [DeclStmt] declaration +# 2174| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2174| Type = [DoubleType] double +# 2174| getVariable().getInitializer(): [Initializer] initializer for d +# 2174| getExpr(): [FunctionCall] call to strtod +# 2174| Type = [DoubleType] double +# 2174| ValueCategory = prvalue +# 2174| getArgument(0): [VariableAccess] s +# 2174| Type = [CharPointerType] char * +# 2174| ValueCategory = prvalue(load) +# 2174| getArgument(1): [AddressOfExpr] & ... +# 2174| Type = [PointerType] char ** +# 2174| ValueCategory = prvalue +# 2174| getOperand(): [VariableAccess] end +# 2174| Type = [CharPointerType] char * +# 2174| ValueCategory = lvalue +# 2174| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 2174| Conversion = [PointerConversion] pointer conversion +# 2174| Type = [PointerType] const char * +# 2174| ValueCategory = prvalue +# 2175| getStmt(2): [ReturnStmt] return ... +# 2175| getExpr(): [VariableAccess] end +# 2175| Type = [CharPointerType] char * +# 2175| ValueCategory = prvalue(load) +# 2178| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2178| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasOperatorBool & -# 2164| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) -# 2164| : +# 2178| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2178| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasOperatorBool && -# 2165| [ConversionOperator] bool HasOperatorBool::operator bool() -# 2165| : -# 2168| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() -# 2168| : -# 2168| getEntryPoint(): [BlockStmt] { ... } -# 2169| getStmt(0): [IfStmt] if (...) ... -# 2169| getCondition(): [ConditionDeclExpr] (condition decl) -# 2169| Type = [BoolType] bool -# 2169| ValueCategory = prvalue -# 2169| getChild(0): [FunctionCall] call to operator bool -# 2169| Type = [BoolType] bool -# 2169| ValueCategory = prvalue -# 2169| getQualifier(): [VariableAccess] b -# 2169| Type = [Struct] HasOperatorBool -# 2169| ValueCategory = prvalue(load) -# 2169| getInitializingExpr(): [Literal] 0 -# 2169| Type = [Struct] HasOperatorBool -# 2169| Value = [Literal] 0 -# 2169| ValueCategory = prvalue -# 2169| getThen(): [BlockStmt] { ... } -# 2170| getStmt(1): [ReturnStmt] return ... -# 2172| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) -# 2172| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2172| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| : -# 2172| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 2172| Type = [CharPointerType] char * -# 2172| ValueCategory = prvalue -# 2172| getExpr(): [ReferenceFieldAccess] x -# 2172| Type = [CharPointerType] char * -# 2172| ValueCategory = prvalue(load) -# 2172| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 2172| Type = [LValueReferenceType] const ClassWithDestructor & -# 2172| ValueCategory = prvalue(load) -# 2172| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2172| Type = [SpecifiedType] const ClassWithDestructor -# 2172| ValueCategory = lvalue -# 2172| getEntryPoint(): [BlockStmt] { ... } -# 2172| getStmt(0): [ReturnStmt] return ... -# 2175| [Constructor] void ClassWithDestructor::ClassWithDestructor() -# 2175| : -# 2175| : -# 2175| getEntryPoint(): [BlockStmt] { ... } -# 2175| getStmt(0): [ExprStmt] ExprStmt -# 2175| getExpr(): [AssignExpr] ... = ... -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = lvalue -# 2175| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = lvalue -# 2175| getQualifier(): [ThisExpr] this -# 2175| Type = [PointerType] ClassWithDestructor * -# 2175| ValueCategory = prvalue(load) -# 2175| getRValue(): [NewExpr] new -# 2175| Type = [CharPointerType] char * -# 2175| ValueCategory = prvalue -# 2175| getStmt(1): [ReturnStmt] return ... -# 2176| [Destructor] void ClassWithDestructor::~ClassWithDestructor() -# 2176| : -# 2176| getEntryPoint(): [BlockStmt] { ... } -# 2176| getStmt(0): [ExprStmt] ExprStmt -# 2176| getExpr(): [DeleteExpr] delete -# 2176| Type = [VoidType] void -# 2176| ValueCategory = prvalue -# 2176| getExprWithReuse(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2176| Type = [CharPointerType] char * -# 2176| ValueCategory = prvalue(load) -# 2176| getQualifier(): [ThisExpr] this -# 2176| Type = [PointerType] ClassWithDestructor * -# 2176| ValueCategory = prvalue(load) -# 2176| getStmt(1): [ReturnStmt] return ... -# 2176| : -# 2178| [MemberFunction] void ClassWithDestructor::set_x(char) -# 2178| : -# 2178| getParameter(0): [Parameter] y -# 2178| Type = [PlainCharType] char -# 2178| getEntryPoint(): [BlockStmt] { ... } -# 2178| getStmt(0): [ExprStmt] ExprStmt -# 2178| getExpr(): [AssignExpr] ... = ... -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = lvalue -# 2178| getLValue(): [PointerDereferenceExpr] * ... -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = lvalue -# 2178| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2178| Type = [CharPointerType] char * -# 2178| ValueCategory = prvalue(load) -# 2178| getQualifier(): [ThisExpr] this -# 2178| Type = [PointerType] ClassWithDestructor * -# 2178| ValueCategory = prvalue(load) -# 2178| getRValue(): [VariableAccess] y -# 2178| Type = [PlainCharType] char -# 2178| ValueCategory = prvalue(load) -# 2178| getStmt(1): [ReturnStmt] return ... -# 2179| [MemberFunction] char ClassWithDestructor::get_x() +# 2179| [ConversionOperator] bool HasOperatorBool::operator bool() # 2179| : -# 2179| getEntryPoint(): [BlockStmt] { ... } -# 2179| getStmt(0): [ReturnStmt] return ... -# 2179| getExpr(): [PointerDereferenceExpr] * ... -# 2179| Type = [PlainCharType] char -# 2179| ValueCategory = prvalue(load) -# 2179| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2179| Type = [CharPointerType] char * -# 2179| ValueCategory = prvalue(load) -# 2179| getQualifier(): [ThisExpr] this -# 2179| Type = [PointerType] ClassWithDestructor * -# 2179| ValueCategory = prvalue(load) -# 2182| [GlobalVariable] bool initialization_with_destructor_bool -# 2182| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool -# 2182| getExpr(): [Literal] 1 -# 2182| Type = [BoolType] bool -# 2182| Value = [Literal] 1 -# 2182| ValueCategory = prvalue -# 2184| [TopLevelFunction] void initialization_with_destructor(bool, char) -# 2184| : -# 2184| getParameter(0): [Parameter] b -# 2184| Type = [BoolType] bool -# 2184| getParameter(1): [Parameter] c -# 2184| Type = [PlainCharType] char -# 2184| getEntryPoint(): [BlockStmt] { ... } -# 2185| getStmt(0): [IfStmt] if (...) ... -# 2185| getInitialization(): [DeclStmt] declaration -# 2185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2185| Type = [Class] ClassWithDestructor -# 2185| getVariable().getInitializer(): [Initializer] initializer for x -# 2185| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2185| Type = [VoidType] void -# 2185| ValueCategory = prvalue -# 2185| getCondition(): [VariableAccess] b -# 2185| Type = [BoolType] bool -# 2185| ValueCategory = prvalue(load) -# 2186| getThen(): [ExprStmt] ExprStmt -# 2186| getExpr(): [FunctionCall] call to set_x -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2186| getQualifier(): [VariableAccess] x -# 2186| Type = [Class] ClassWithDestructor -# 2186| ValueCategory = lvalue -# 2186| getArgument(0): [CharLiteral] 97 -# 2186| Type = [PlainCharType] char -# 2186| Value = [CharLiteral] 97 -# 2186| ValueCategory = prvalue -# 2186| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2186| getQualifier(): [VariableAccess] x -# 2186| Type = [Class] ClassWithDestructor +# 2182| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2182| : +# 2182| getEntryPoint(): [BlockStmt] { ... } +# 2183| getStmt(0): [IfStmt] if (...) ... +# 2183| getCondition(): [ConditionDeclExpr] (condition decl) +# 2183| Type = [BoolType] bool +# 2183| ValueCategory = prvalue +# 2183| getChild(0): [FunctionCall] call to operator bool +# 2183| Type = [BoolType] bool +# 2183| ValueCategory = prvalue +# 2183| getQualifier(): [VariableAccess] b +# 2183| Type = [Struct] HasOperatorBool +# 2183| ValueCategory = prvalue(load) +# 2183| getInitializingExpr(): [Literal] 0 +# 2183| Type = [Struct] HasOperatorBool +# 2183| Value = [Literal] 0 +# 2183| ValueCategory = prvalue +# 2183| getThen(): [BlockStmt] { ... } +# 2184| getStmt(1): [ReturnStmt] return ... +# 2186| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) +# 2186| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| : +# 2186| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 2186| Type = [CharPointerType] char * +# 2186| ValueCategory = prvalue +# 2186| getExpr(): [ReferenceFieldAccess] x +# 2186| Type = [CharPointerType] char * +# 2186| ValueCategory = prvalue(load) +# 2186| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 2186| Type = [LValueReferenceType] const ClassWithDestructor & +# 2186| ValueCategory = prvalue(load) +# 2186| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2186| Type = [SpecifiedType] const ClassWithDestructor # 2186| ValueCategory = lvalue -# 2188| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... -# 2188| getInitialization(): [DeclStmt] declaration -# 2188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2188| Type = [Class] ClassWithDestructor -# 2188| getVariable().getInitializer(): [Initializer] initializer for x -# 2188| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2188| Type = [VoidType] void -# 2188| ValueCategory = prvalue -# 2188| getCondition(): [VariableAccess] initialization_with_destructor_bool -# 2188| Type = [BoolType] bool -# 2188| Value = [VariableAccess] 1 -# 2188| ValueCategory = prvalue(load) -# 2189| getThen(): [ExprStmt] ExprStmt -# 2189| getExpr(): [FunctionCall] call to set_x -# 2189| Type = [VoidType] void -# 2189| ValueCategory = prvalue -# 2189| getQualifier(): [VariableAccess] x -# 2189| Type = [Class] ClassWithDestructor -# 2189| ValueCategory = lvalue -# 2189| getArgument(0): [CharLiteral] 97 -# 2189| Type = [PlainCharType] char -# 2189| Value = [CharLiteral] 97 -# 2189| ValueCategory = prvalue -# 2189| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2189| Type = [VoidType] void -# 2189| ValueCategory = prvalue -# 2189| getQualifier(): [VariableAccess] x -# 2189| Type = [Class] ClassWithDestructor +# 2186| getEntryPoint(): [BlockStmt] { ... } +# 2186| getStmt(0): [ReturnStmt] return ... +# 2189| [Constructor] void ClassWithDestructor::ClassWithDestructor() +# 2189| : +# 2189| : +# 2189| getEntryPoint(): [BlockStmt] { ... } +# 2189| getStmt(0): [ExprStmt] ExprStmt +# 2189| getExpr(): [AssignExpr] ... = ... +# 2189| Type = [CharPointerType] char * +# 2189| ValueCategory = lvalue +# 2189| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2189| Type = [CharPointerType] char * # 2189| ValueCategory = lvalue -# 2191| getStmt(2): [SwitchStmt] switch (...) ... -# 2191| getInitialization(): [DeclStmt] declaration -# 2191| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2191| Type = [Class] ClassWithDestructor -# 2191| getVariable().getInitializer(): [Initializer] initializer for x -# 2191| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2191| Type = [VoidType] void -# 2191| ValueCategory = prvalue -# 2191| getExpr(): [VariableAccess] c -# 2191| Type = [PlainCharType] char -# 2191| ValueCategory = prvalue(load) -# 2191| getStmt(): [BlockStmt] { ... } -# 2192| getStmt(0): [SwitchCase] case ...: -# 2192| getExpr(): [CharLiteral] 97 -# 2192| Type = [PlainCharType] char -# 2192| Value = [CharLiteral] 97 -# 2192| ValueCategory = prvalue -# 2192| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2192| Conversion = [IntegralConversion] integral conversion -# 2192| Type = [IntType] int -# 2192| Value = [CStyleCast] 97 -# 2192| ValueCategory = prvalue -# 2193| getStmt(1): [ExprStmt] ExprStmt -# 2193| getExpr(): [FunctionCall] call to set_x -# 2193| Type = [VoidType] void -# 2193| ValueCategory = prvalue -# 2193| getQualifier(): [VariableAccess] x -# 2193| Type = [Class] ClassWithDestructor -# 2193| ValueCategory = lvalue -# 2193| getArgument(0): [CharLiteral] 97 -# 2193| Type = [PlainCharType] char -# 2193| Value = [CharLiteral] 97 -# 2193| ValueCategory = prvalue -# 2194| getStmt(2): [BreakStmt] break; -# 2195| getStmt(3): [SwitchCase] default: -# 2196| getStmt(4): [ExprStmt] ExprStmt -# 2196| getExpr(): [FunctionCall] call to set_x -# 2196| Type = [VoidType] void -# 2196| ValueCategory = prvalue -# 2196| getQualifier(): [VariableAccess] x -# 2196| Type = [Class] ClassWithDestructor -# 2196| ValueCategory = lvalue -# 2196| getArgument(0): [CharLiteral] 98 -# 2196| Type = [PlainCharType] char -# 2196| Value = [CharLiteral] 98 -# 2196| ValueCategory = prvalue -# 2197| getStmt(5): [BreakStmt] break; -# 2198| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2198| Type = [VoidType] void -# 2198| ValueCategory = prvalue -# 2198| getQualifier(): [VariableAccess] x -# 2198| Type = [Class] ClassWithDestructor -# 2198| ValueCategory = lvalue -# 2191| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2191| Conversion = [IntegralConversion] integral conversion -# 2191| Type = [IntType] int -# 2191| ValueCategory = prvalue -# 2198| getStmt(3): [LabelStmt] label ...: -# 2200| getStmt(4): [DeclStmt] declaration -# 2200| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2200| Type = [Class] ClassWithDestructor -# 2200| getVariable().getInitializer(): [Initializer] initializer for x -# 2200| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2200| Type = [VoidType] void +# 2189| getQualifier(): [ThisExpr] this +# 2189| Type = [PointerType] ClassWithDestructor * +# 2189| ValueCategory = prvalue(load) +# 2189| getRValue(): [NewExpr] new +# 2189| Type = [CharPointerType] char * +# 2189| ValueCategory = prvalue +# 2189| getStmt(1): [ReturnStmt] return ... +# 2190| [Destructor] void ClassWithDestructor::~ClassWithDestructor() +# 2190| : +# 2190| getEntryPoint(): [BlockStmt] { ... } +# 2190| getStmt(0): [ExprStmt] ExprStmt +# 2190| getExpr(): [DeleteExpr] delete +# 2190| Type = [VoidType] void +# 2190| ValueCategory = prvalue +# 2190| getExprWithReuse(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2190| Type = [CharPointerType] char * +# 2190| ValueCategory = prvalue(load) +# 2190| getQualifier(): [ThisExpr] this +# 2190| Type = [PointerType] ClassWithDestructor * +# 2190| ValueCategory = prvalue(load) +# 2190| getStmt(1): [ReturnStmt] return ... +# 2190| : +# 2192| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2192| : +# 2192| getParameter(0): [Parameter] y +# 2192| Type = [PlainCharType] char +# 2192| getEntryPoint(): [BlockStmt] { ... } +# 2192| getStmt(0): [ExprStmt] ExprStmt +# 2192| getExpr(): [AssignExpr] ... = ... +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = lvalue +# 2192| getLValue(): [PointerDereferenceExpr] * ... +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = lvalue +# 2192| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2192| Type = [CharPointerType] char * +# 2192| ValueCategory = prvalue(load) +# 2192| getQualifier(): [ThisExpr] this +# 2192| Type = [PointerType] ClassWithDestructor * +# 2192| ValueCategory = prvalue(load) +# 2192| getRValue(): [VariableAccess] y +# 2192| Type = [PlainCharType] char +# 2192| ValueCategory = prvalue(load) +# 2192| getStmt(1): [ReturnStmt] return ... +# 2193| [MemberFunction] char ClassWithDestructor::get_x() +# 2193| : +# 2193| getEntryPoint(): [BlockStmt] { ... } +# 2193| getStmt(0): [ReturnStmt] return ... +# 2193| getExpr(): [PointerDereferenceExpr] * ... +# 2193| Type = [PlainCharType] char +# 2193| ValueCategory = prvalue(load) +# 2193| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2193| Type = [CharPointerType] char * +# 2193| ValueCategory = prvalue(load) +# 2193| getQualifier(): [ThisExpr] this +# 2193| Type = [PointerType] ClassWithDestructor * +# 2193| ValueCategory = prvalue(load) +# 2196| [GlobalVariable] bool initialization_with_destructor_bool +# 2196| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2196| getExpr(): [Literal] 1 +# 2196| Type = [BoolType] bool +# 2196| Value = [Literal] 1 +# 2196| ValueCategory = prvalue +# 2198| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2198| : +# 2198| getParameter(0): [Parameter] b +# 2198| Type = [BoolType] bool +# 2198| getParameter(1): [Parameter] c +# 2198| Type = [PlainCharType] char +# 2198| getEntryPoint(): [BlockStmt] { ... } +# 2199| getStmt(0): [IfStmt] if (...) ... +# 2199| getInitialization(): [DeclStmt] declaration +# 2199| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2199| Type = [Class] ClassWithDestructor +# 2199| getVariable().getInitializer(): [Initializer] initializer for x +# 2199| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2199| Type = [VoidType] void +# 2199| ValueCategory = prvalue +# 2199| getCondition(): [VariableAccess] b +# 2199| Type = [BoolType] bool +# 2199| ValueCategory = prvalue(load) +# 2200| getThen(): [ExprStmt] ExprStmt +# 2200| getExpr(): [FunctionCall] call to set_x +# 2200| Type = [VoidType] void +# 2200| ValueCategory = prvalue +# 2200| getQualifier(): [VariableAccess] x +# 2200| Type = [Class] ClassWithDestructor +# 2200| ValueCategory = lvalue +# 2200| getArgument(0): [CharLiteral] 97 +# 2200| Type = [PlainCharType] char +# 2200| Value = [CharLiteral] 97 # 2200| ValueCategory = prvalue -# 2201| getStmt(5): [RangeBasedForStmt] for(...:...) ... -# 2201| getInitialization(): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| getVariable().getInitializer(): [Initializer] initializer for ys -# 2201| getExpr(): [ConstructorCall] call to vector -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getArgument(0): [VariableAccess] x -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = prvalue(load) -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [ReuseExpr] reuse of temporary object -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = xvalue -# 2201| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = lvalue -# 2201| getChild(1): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2201| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2201| getExpr(): [VariableAccess] ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| ValueCategory = lvalue -# 2201| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue -# 2201| getBeginEndDeclaration(): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2201| getExpr(): [FunctionCall] call to begin -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__range) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2201| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2201| getExpr(): [FunctionCall] call to end -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__range) -# 2201| Type = [LValueReferenceType] vector & -# 2201| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2201| getCondition(): [FunctionCall] call to operator!= -# 2201| Type = [BoolType] bool -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -# 2201| getArgument(0): [ConstructorCall] call to iterator -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getArgument(0): [VariableAccess] (__end) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2201| getUpdate(): [FunctionCall] call to operator++ -# 2201| Type = [LValueReferenceType] iterator & -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -# 2201| getChild(5): [DeclStmt] declaration -# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2201| Type = [Class] ClassWithDestructor -# 2201| getVariable().getInitializer(): [Initializer] initializer for y -# 2201| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2201| Type = [LValueReferenceType] ClassWithDestructor & -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] (__begin) -# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2201| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2201| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = prvalue(load) -# 2202| getStmt(): [ExprStmt] ExprStmt -# 2202| getExpr(): [FunctionCall] call to set_x -# 2202| Type = [VoidType] void -# 2202| ValueCategory = prvalue -# 2202| getQualifier(): [VariableAccess] y -# 2202| Type = [Class] ClassWithDestructor -# 2202| ValueCategory = lvalue -# 2202| getArgument(0): [CharLiteral] 97 -# 2202| Type = [PlainCharType] char -# 2202| Value = [CharLiteral] 97 -# 2202| ValueCategory = prvalue -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] y -# 2201| Type = [Class] ClassWithDestructor -# 2201| ValueCategory = lvalue -# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2201| Type = [VoidType] void -# 2201| ValueCategory = prvalue -# 2201| getQualifier(): [VariableAccess] ys -# 2201| Type = [ClassTemplateInstantiation,Struct] vector -# 2201| ValueCategory = lvalue -# 2201| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2201| Type = [ClassTemplateInstantiation,Struct] iterator -# 2201| ValueCategory = lvalue -# 2204| getStmt(6): [RangeBasedForStmt] for(...:...) ... -# 2204| getInitialization(): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| getVariable().getInitializer(): [Initializer] initializer for ys -# 2204| getExpr(): [ConstructorCall] call to vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getArgument(0): [VariableAccess] x -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = prvalue(load) -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [ReuseExpr] reuse of temporary object -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = xvalue -# 2204| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getChild(1): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2204| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2204| getExpr(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2204| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue -# 2204| getBeginEndDeclaration(): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2204| getExpr(): [FunctionCall] call to begin -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__range) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2204| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2204| getExpr(): [FunctionCall] call to end -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__range) -# 2204| Type = [LValueReferenceType] vector & -# 2204| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2204| getCondition(): [FunctionCall] call to operator!= -# 2204| Type = [BoolType] bool -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -# 2204| getArgument(0): [ConstructorCall] call to iterator -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getArgument(0): [VariableAccess] (__end) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2204| getUpdate(): [FunctionCall] call to operator++ -# 2204| Type = [LValueReferenceType] iterator & -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -# 2204| getChild(5): [DeclStmt] declaration -# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2204| Type = [Class] ClassWithDestructor -# 2204| getVariable().getInitializer(): [Initializer] initializer for y -# 2204| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2204| Type = [LValueReferenceType] ClassWithDestructor & -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] (__begin) -# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2204| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2204| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = prvalue(load) -# 2204| getStmt(): [BlockStmt] { ... } -# 2205| getStmt(0): [ExprStmt] ExprStmt -# 2205| getExpr(): [FunctionCall] call to set_x -# 2205| Type = [VoidType] void -# 2205| ValueCategory = prvalue -# 2205| getQualifier(): [VariableAccess] y -# 2205| Type = [Class] ClassWithDestructor -# 2205| ValueCategory = lvalue -# 2205| getArgument(0): [CharLiteral] 97 -# 2205| Type = [PlainCharType] char -# 2205| Value = [CharLiteral] 97 +# 2200| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2200| Type = [VoidType] void +# 2200| ValueCategory = prvalue +# 2200| getQualifier(): [VariableAccess] x +# 2200| Type = [Class] ClassWithDestructor +# 2200| ValueCategory = lvalue +# 2202| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2202| getInitialization(): [DeclStmt] declaration +# 2202| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2202| Type = [Class] ClassWithDestructor +# 2202| getVariable().getInitializer(): [Initializer] initializer for x +# 2202| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2202| Type = [VoidType] void +# 2202| ValueCategory = prvalue +# 2202| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2202| Type = [BoolType] bool +# 2202| Value = [VariableAccess] 1 +# 2202| ValueCategory = prvalue(load) +# 2203| getThen(): [ExprStmt] ExprStmt +# 2203| getExpr(): [FunctionCall] call to set_x +# 2203| Type = [VoidType] void +# 2203| ValueCategory = prvalue +# 2203| getQualifier(): [VariableAccess] x +# 2203| Type = [Class] ClassWithDestructor +# 2203| ValueCategory = lvalue +# 2203| getArgument(0): [CharLiteral] 97 +# 2203| Type = [PlainCharType] char +# 2203| Value = [CharLiteral] 97 +# 2203| ValueCategory = prvalue +# 2203| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2203| Type = [VoidType] void +# 2203| ValueCategory = prvalue +# 2203| getQualifier(): [VariableAccess] x +# 2203| Type = [Class] ClassWithDestructor +# 2203| ValueCategory = lvalue +# 2205| getStmt(2): [SwitchStmt] switch (...) ... +# 2205| getInitialization(): [DeclStmt] declaration +# 2205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2205| Type = [Class] ClassWithDestructor +# 2205| getVariable().getInitializer(): [Initializer] initializer for x +# 2205| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2205| Type = [VoidType] void # 2205| ValueCategory = prvalue -# 2206| getStmt(1): [IfStmt] if (...) ... -# 2206| getCondition(): [EQExpr] ... == ... -# 2206| Type = [BoolType] bool +# 2205| getExpr(): [VariableAccess] c +# 2205| Type = [PlainCharType] char +# 2205| ValueCategory = prvalue(load) +# 2205| getStmt(): [BlockStmt] { ... } +# 2206| getStmt(0): [SwitchCase] case ...: +# 2206| getExpr(): [CharLiteral] 97 +# 2206| Type = [PlainCharType] char +# 2206| Value = [CharLiteral] 97 # 2206| ValueCategory = prvalue -# 2206| getLeftOperand(): [FunctionCall] call to get_x -# 2206| Type = [PlainCharType] char -# 2206| ValueCategory = prvalue -# 2206| getQualifier(): [VariableAccess] y -# 2206| Type = [Class] ClassWithDestructor -# 2206| ValueCategory = lvalue -# 2206| getRightOperand(): [CharLiteral] 98 -# 2206| Type = [PlainCharType] char -# 2206| Value = [CharLiteral] 98 -# 2206| ValueCategory = prvalue -# 2206| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2206| Conversion = [IntegralConversion] integral conversion -# 2206| Type = [IntType] int -# 2206| ValueCategory = prvalue -# 2206| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 2206| Conversion = [IntegralConversion] integral conversion -# 2206| Type = [IntType] int -# 2206| Value = [CStyleCast] 98 -# 2206| ValueCategory = prvalue -# 2207| getThen(): [ReturnStmt] return ... -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] y -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(1): [DestructorCall] call to ~vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] y -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] ys -# 2204| Type = [ClassTemplateInstantiation,Struct] vector -# 2204| ValueCategory = lvalue -# 2204| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2204| Type = [ClassTemplateInstantiation,Struct] iterator -# 2204| ValueCategory = lvalue -# 2210| getStmt(7): [RangeBasedForStmt] for(...:...) ... -# 2210| getInitialization(): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| getVariable().getInitializer(): [Initializer] initializer for ys -# 2210| getExpr(): [ConstructorCall] call to vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getArgument(0): [Literal] 1 -# 2210| Type = [IntType] int -# 2210| Value = [Literal] 1 -# 2210| ValueCategory = prvalue -# 2210| getChild(1): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2210| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2210| getExpr(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2206| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2206| Conversion = [IntegralConversion] integral conversion +# 2206| Type = [IntType] int +# 2206| Value = [CStyleCast] 97 +# 2206| ValueCategory = prvalue +# 2207| getStmt(1): [ExprStmt] ExprStmt +# 2207| getExpr(): [FunctionCall] call to set_x +# 2207| Type = [VoidType] void +# 2207| ValueCategory = prvalue +# 2207| getQualifier(): [VariableAccess] x +# 2207| Type = [Class] ClassWithDestructor +# 2207| ValueCategory = lvalue +# 2207| getArgument(0): [CharLiteral] 97 +# 2207| Type = [PlainCharType] char +# 2207| Value = [CharLiteral] 97 +# 2207| ValueCategory = prvalue +# 2208| getStmt(2): [BreakStmt] break; +# 2209| getStmt(3): [SwitchCase] default: +# 2210| getStmt(4): [ExprStmt] ExprStmt +# 2210| getExpr(): [FunctionCall] call to set_x +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] x +# 2210| Type = [Class] ClassWithDestructor # 2210| ValueCategory = lvalue -# 2210| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2210| Type = [LValueReferenceType] vector & +# 2210| getArgument(0): [CharLiteral] 98 +# 2210| Type = [PlainCharType] char +# 2210| Value = [CharLiteral] 98 # 2210| ValueCategory = prvalue -# 2210| getBeginEndDeclaration(): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2210| getExpr(): [FunctionCall] call to begin -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__range) -# 2210| Type = [LValueReferenceType] vector & -# 2210| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2210| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2210| getExpr(): [FunctionCall] call to end -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__range) -# 2210| Type = [LValueReferenceType] vector & -# 2210| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2210| getCondition(): [FunctionCall] call to operator!= -# 2210| Type = [BoolType] bool -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -# 2210| getArgument(0): [ConstructorCall] call to iterator -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getArgument(0): [VariableAccess] (__end) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2210| getUpdate(): [FunctionCall] call to operator++ -# 2210| Type = [LValueReferenceType] iterator & -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -# 2210| getChild(5): [DeclStmt] declaration -# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2210| Type = [IntType] int -# 2210| getVariable().getInitializer(): [Initializer] initializer for y -# 2210| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2210| Type = [LValueReferenceType] int & -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] (__begin) -# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2210| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2210| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2210| Type = [IntType] int -# 2210| ValueCategory = prvalue(load) -# 2210| getStmt(): [BlockStmt] { ... } -# 2211| getStmt(0): [IfStmt] if (...) ... -# 2211| getCondition(): [EQExpr] ... == ... -# 2211| Type = [BoolType] bool -# 2211| ValueCategory = prvalue -# 2211| getLeftOperand(): [VariableAccess] y -# 2211| Type = [IntType] int -# 2211| ValueCategory = prvalue(load) -# 2211| getRightOperand(): [Literal] 1 -# 2211| Type = [IntType] int -# 2211| Value = [Literal] 1 -# 2211| ValueCategory = prvalue -# 2212| getThen(): [ReturnStmt] return ... -# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2210| Type = [VoidType] void -# 2210| ValueCategory = prvalue -# 2210| getQualifier(): [VariableAccess] ys -# 2210| Type = [ClassTemplateInstantiation,Struct] vector -# 2210| ValueCategory = lvalue -# 2210| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2210| Type = [ClassTemplateInstantiation,Struct] iterator -# 2210| ValueCategory = lvalue -# 2215| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2211| getStmt(5): [BreakStmt] break; +# 2212| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2212| Type = [VoidType] void +# 2212| ValueCategory = prvalue +# 2212| getQualifier(): [VariableAccess] x +# 2212| Type = [Class] ClassWithDestructor +# 2212| ValueCategory = lvalue +# 2205| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2205| Conversion = [IntegralConversion] integral conversion +# 2205| Type = [IntType] int +# 2205| ValueCategory = prvalue +# 2212| getStmt(3): [LabelStmt] label ...: +# 2214| getStmt(4): [DeclStmt] declaration +# 2214| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2214| Type = [Class] ClassWithDestructor +# 2214| getVariable().getInitializer(): [Initializer] initializer for x +# 2214| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2214| Type = [VoidType] void +# 2214| ValueCategory = prvalue +# 2215| getStmt(5): [RangeBasedForStmt] for(...:...) ... # 2215| getInitialization(): [DeclStmt] declaration # 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys # 2215| Type = [ClassTemplateInstantiation,Struct] vector @@ -17936,34 +17527,18 @@ ir.cpp: # 2215| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2215| Type = [Class] ClassWithDestructor # 2215| ValueCategory = prvalue(load) -# 2215| getStmt(): [BlockStmt] { ... } -# 2216| getStmt(0): [DeclStmt] declaration -# 2216| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 +# 2216| getStmt(): [ExprStmt] ExprStmt +# 2216| getExpr(): [FunctionCall] call to set_x +# 2216| Type = [VoidType] void +# 2216| ValueCategory = prvalue +# 2216| getQualifier(): [VariableAccess] y # 2216| Type = [Class] ClassWithDestructor -# 2216| getVariable().getInitializer(): [Initializer] initializer for z1 -# 2216| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2216| Type = [VoidType] void -# 2216| ValueCategory = prvalue -# 2217| getStmt(1): [DeclStmt] declaration -# 2217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 -# 2217| Type = [Class] ClassWithDestructor -# 2217| getVariable().getInitializer(): [Initializer] initializer for z2 -# 2217| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2217| Type = [VoidType] void -# 2217| ValueCategory = prvalue -# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2218| getQualifier(): [VariableAccess] z2 -# 2218| Type = [Class] ClassWithDestructor -# 2218| ValueCategory = lvalue -# 2218| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2218| getQualifier(): [VariableAccess] z1 -# 2218| Type = [Class] ClassWithDestructor -# 2218| ValueCategory = lvalue -# 2215| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2216| ValueCategory = lvalue +# 2216| getArgument(0): [CharLiteral] 97 +# 2216| Type = [PlainCharType] char +# 2216| Value = [CharLiteral] 97 +# 2216| ValueCategory = prvalue +# 2215| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor # 2215| Type = [VoidType] void # 2215| ValueCategory = prvalue # 2215| getQualifier(): [VariableAccess] y @@ -17978,602 +17553,830 @@ ir.cpp: # 2215| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2215| Type = [ClassTemplateInstantiation,Struct] iterator # 2215| ValueCategory = lvalue -# 2219| getStmt(9): [ReturnStmt] return ... -# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] x -# 2219| Type = [Class] ClassWithDestructor -# 2219| ValueCategory = lvalue -# 2221| [TopLevelFunction] void static_variable_with_destructor_1() -# 2221| : -# 2221| getEntryPoint(): [BlockStmt] { ... } -# 2222| getStmt(0): [DeclStmt] declaration -# 2222| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2222| Type = [Class] ClassWithDestructor -# 2222| getVariable().getInitializer(): [Initializer] initializer for a -# 2222| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2222| Type = [VoidType] void -# 2222| ValueCategory = prvalue -# 2223| getStmt(1): [DeclStmt] declaration -# 2223| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2223| Type = [Class] ClassWithDestructor +# 2218| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2218| getInitialization(): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| getVariable().getInitializer(): [Initializer] initializer for ys +# 2218| getExpr(): [ConstructorCall] call to vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getArgument(0): [VariableAccess] x +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = prvalue(load) +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [ReuseExpr] reuse of temporary object +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = xvalue +# 2218| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getChild(1): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2218| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2218| getExpr(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2218| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue +# 2218| getBeginEndDeclaration(): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2218| getExpr(): [FunctionCall] call to begin +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__range) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2218| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2218| getExpr(): [FunctionCall] call to end +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__range) +# 2218| Type = [LValueReferenceType] vector & +# 2218| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2218| getCondition(): [FunctionCall] call to operator!= +# 2218| Type = [BoolType] bool +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +# 2218| getArgument(0): [ConstructorCall] call to iterator +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getArgument(0): [VariableAccess] (__end) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2218| getUpdate(): [FunctionCall] call to operator++ +# 2218| Type = [LValueReferenceType] iterator & +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +# 2218| getChild(5): [DeclStmt] declaration +# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2218| Type = [Class] ClassWithDestructor +# 2218| getVariable().getInitializer(): [Initializer] initializer for y +# 2218| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2218| Type = [LValueReferenceType] ClassWithDestructor & +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] (__begin) +# 2218| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2218| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2218| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = prvalue(load) +# 2218| getStmt(): [BlockStmt] { ... } +# 2219| getStmt(0): [ExprStmt] ExprStmt +# 2219| getExpr(): [FunctionCall] call to set_x +# 2219| Type = [VoidType] void +# 2219| ValueCategory = prvalue +# 2219| getQualifier(): [VariableAccess] y +# 2219| Type = [Class] ClassWithDestructor +# 2219| ValueCategory = lvalue +# 2219| getArgument(0): [CharLiteral] 97 +# 2219| Type = [PlainCharType] char +# 2219| Value = [CharLiteral] 97 +# 2219| ValueCategory = prvalue +# 2220| getStmt(1): [IfStmt] if (...) ... +# 2220| getCondition(): [EQExpr] ... == ... +# 2220| Type = [BoolType] bool +# 2220| ValueCategory = prvalue +# 2220| getLeftOperand(): [FunctionCall] call to get_x +# 2220| Type = [PlainCharType] char +# 2220| ValueCategory = prvalue +# 2220| getQualifier(): [VariableAccess] y +# 2220| Type = [Class] ClassWithDestructor +# 2220| ValueCategory = lvalue +# 2220| getRightOperand(): [CharLiteral] 98 +# 2220| Type = [PlainCharType] char +# 2220| Value = [CharLiteral] 98 +# 2220| ValueCategory = prvalue +# 2220| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2220| Conversion = [IntegralConversion] integral conversion +# 2220| Type = [IntType] int +# 2220| ValueCategory = prvalue +# 2220| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 2220| Conversion = [IntegralConversion] integral conversion +# 2220| Type = [IntType] int +# 2220| Value = [CStyleCast] 98 +# 2220| ValueCategory = prvalue +# 2221| getThen(): [ReturnStmt] return ... +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] y +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(1): [DestructorCall] call to ~vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2233| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] y +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] ys +# 2218| Type = [ClassTemplateInstantiation,Struct] vector +# 2218| ValueCategory = lvalue +# 2218| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2218| Type = [ClassTemplateInstantiation,Struct] iterator +# 2218| ValueCategory = lvalue +# 2224| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2224| getInitialization(): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| getVariable().getInitializer(): [Initializer] initializer for ys +# 2224| getExpr(): [ConstructorCall] call to vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getArgument(0): [Literal] 1 +# 2224| Type = [IntType] int +# 2224| Value = [Literal] 1 +# 2224| ValueCategory = prvalue +# 2224| getChild(1): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2224| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2224| getExpr(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2224| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue +# 2224| getBeginEndDeclaration(): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2224| getExpr(): [FunctionCall] call to begin +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__range) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2224| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2224| getExpr(): [FunctionCall] call to end +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__range) +# 2224| Type = [LValueReferenceType] vector & +# 2224| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2224| getCondition(): [FunctionCall] call to operator!= +# 2224| Type = [BoolType] bool +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +# 2224| getArgument(0): [ConstructorCall] call to iterator +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getArgument(0): [VariableAccess] (__end) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2224| getUpdate(): [FunctionCall] call to operator++ +# 2224| Type = [LValueReferenceType] iterator & +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +# 2224| getChild(5): [DeclStmt] declaration +# 2224| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2224| Type = [IntType] int +# 2224| getVariable().getInitializer(): [Initializer] initializer for y +# 2224| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2224| Type = [LValueReferenceType] int & +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] (__begin) +# 2224| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2224| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2224| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2224| Type = [IntType] int +# 2224| ValueCategory = prvalue(load) +# 2224| getStmt(): [BlockStmt] { ... } +# 2225| getStmt(0): [IfStmt] if (...) ... +# 2225| getCondition(): [EQExpr] ... == ... +# 2225| Type = [BoolType] bool +# 2225| ValueCategory = prvalue +# 2225| getLeftOperand(): [VariableAccess] y +# 2225| Type = [IntType] int +# 2225| ValueCategory = prvalue(load) +# 2225| getRightOperand(): [Literal] 1 +# 2225| Type = [IntType] int +# 2225| Value = [Literal] 1 +# 2225| ValueCategory = prvalue +# 2226| getThen(): [ReturnStmt] return ... +# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2233| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] ys +# 2224| Type = [ClassTemplateInstantiation,Struct] vector +# 2224| ValueCategory = lvalue +# 2224| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2224| Type = [ClassTemplateInstantiation,Struct] iterator +# 2224| ValueCategory = lvalue +# 2229| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2229| getInitialization(): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| getVariable().getInitializer(): [Initializer] initializer for ys +# 2229| getExpr(): [ConstructorCall] call to vector +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getArgument(0): [VariableAccess] x +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = prvalue(load) +# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [ReuseExpr] reuse of temporary object +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = xvalue +# 2229| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = lvalue +# 2229| getChild(1): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2229| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2229| getExpr(): [VariableAccess] ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| ValueCategory = lvalue +# 2229| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue +# 2229| getBeginEndDeclaration(): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2229| getExpr(): [FunctionCall] call to begin +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__range) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2229| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2229| getExpr(): [FunctionCall] call to end +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__range) +# 2229| Type = [LValueReferenceType] vector & +# 2229| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2229| getCondition(): [FunctionCall] call to operator!= +# 2229| Type = [BoolType] bool +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +# 2229| getArgument(0): [ConstructorCall] call to iterator +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getArgument(0): [VariableAccess] (__end) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2229| getUpdate(): [FunctionCall] call to operator++ +# 2229| Type = [LValueReferenceType] iterator & +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +# 2229| getChild(5): [DeclStmt] declaration +# 2229| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2229| Type = [Class] ClassWithDestructor +# 2229| getVariable().getInitializer(): [Initializer] initializer for y +# 2229| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2229| Type = [LValueReferenceType] ClassWithDestructor & +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] (__begin) +# 2229| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2229| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2229| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = prvalue(load) +# 2229| getStmt(): [BlockStmt] { ... } +# 2230| getStmt(0): [DeclStmt] declaration +# 2230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 +# 2230| Type = [Class] ClassWithDestructor +# 2230| getVariable().getInitializer(): [Initializer] initializer for z1 +# 2230| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2230| Type = [VoidType] void +# 2230| ValueCategory = prvalue +# 2231| getStmt(1): [DeclStmt] declaration +# 2231| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 +# 2231| Type = [Class] ClassWithDestructor +# 2231| getVariable().getInitializer(): [Initializer] initializer for z2 +# 2231| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2231| Type = [VoidType] void +# 2231| ValueCategory = prvalue +# 2232| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2232| Type = [VoidType] void +# 2232| ValueCategory = prvalue +# 2232| getQualifier(): [VariableAccess] z2 +# 2232| Type = [Class] ClassWithDestructor +# 2232| ValueCategory = lvalue +# 2232| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2232| Type = [VoidType] void +# 2232| ValueCategory = prvalue +# 2232| getQualifier(): [VariableAccess] z1 +# 2232| Type = [Class] ClassWithDestructor +# 2232| ValueCategory = lvalue +# 2229| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] y +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = lvalue +# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] ys +# 2229| Type = [ClassTemplateInstantiation,Struct] vector +# 2229| ValueCategory = lvalue +# 2229| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2229| Type = [ClassTemplateInstantiation,Struct] iterator +# 2229| ValueCategory = lvalue +# 2233| getStmt(9): [ReturnStmt] return ... +# 2233| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2233| getQualifier(): [VariableAccess] x +# 2233| Type = [Class] ClassWithDestructor +# 2233| ValueCategory = lvalue +# 2235| [TopLevelFunction] void static_variable_with_destructor_1() +# 2235| : +# 2235| getEntryPoint(): [BlockStmt] { ... } +# 2236| getStmt(0): [DeclStmt] declaration +# 2236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2236| Type = [Class] ClassWithDestructor +# 2236| getVariable().getInitializer(): [Initializer] initializer for a +# 2236| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2236| Type = [VoidType] void +# 2236| ValueCategory = prvalue +# 2237| getStmt(1): [DeclStmt] declaration +# 2237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2237| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for b #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2224| getStmt(2): [ReturnStmt] return ... -# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2224| Type = [VoidType] void -# 2224| ValueCategory = prvalue -# 2224| getQualifier(): [VariableAccess] a -# 2224| Type = [Class] ClassWithDestructor -# 2224| ValueCategory = lvalue -# 2226| [TopLevelFunction] void static_variable_with_destructor_2() -# 2226| : -# 2226| getEntryPoint(): [BlockStmt] { ... } -# 2227| getStmt(0): [DeclStmt] declaration -# 2227| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2227| Type = [Class] ClassWithDestructor +# 2238| getStmt(2): [ReturnStmt] return ... +# 2238| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2238| Type = [VoidType] void +# 2238| ValueCategory = prvalue +# 2238| getQualifier(): [VariableAccess] a +# 2238| Type = [Class] ClassWithDestructor +# 2238| ValueCategory = lvalue +# 2240| [TopLevelFunction] void static_variable_with_destructor_2() +# 2240| : +# 2240| getEntryPoint(): [BlockStmt] { ... } +# 2241| getStmt(0): [DeclStmt] declaration +# 2241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2241| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2228| getStmt(1): [DeclStmt] declaration -# 2228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2228| Type = [Class] ClassWithDestructor -# 2228| getVariable().getInitializer(): [Initializer] initializer for b -# 2228| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2228| Type = [VoidType] void -# 2228| ValueCategory = prvalue -# 2229| getStmt(2): [ReturnStmt] return ... -# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2229| Type = [VoidType] void -# 2229| ValueCategory = prvalue -# 2229| getQualifier(): [VariableAccess] b -# 2229| Type = [Class] ClassWithDestructor -# 2229| ValueCategory = lvalue -# 2231| [TopLevelFunction] void static_variable_with_destructor_3() -# 2231| : -# 2231| getEntryPoint(): [BlockStmt] { ... } -# 2232| getStmt(0): [DeclStmt] declaration -# 2232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2232| Type = [Class] ClassWithDestructor -# 2232| getVariable().getInitializer(): [Initializer] initializer for a -# 2232| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2232| Type = [VoidType] void -# 2232| ValueCategory = prvalue -# 2233| getStmt(1): [DeclStmt] declaration -# 2233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2233| Type = [Class] ClassWithDestructor -# 2233| getVariable().getInitializer(): [Initializer] initializer for b -# 2233| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2233| Type = [VoidType] void -# 2233| ValueCategory = prvalue -# 2234| getStmt(2): [DeclStmt] declaration -# 2234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2234| Type = [Class] ClassWithDestructor +# 2242| getStmt(1): [DeclStmt] declaration +# 2242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2242| Type = [Class] ClassWithDestructor +# 2242| getVariable().getInitializer(): [Initializer] initializer for b +# 2242| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2242| Type = [VoidType] void +# 2242| ValueCategory = prvalue +# 2243| getStmt(2): [ReturnStmt] return ... +# 2243| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2243| Type = [VoidType] void +# 2243| ValueCategory = prvalue +# 2243| getQualifier(): [VariableAccess] b +# 2243| Type = [Class] ClassWithDestructor +# 2243| ValueCategory = lvalue +# 2245| [TopLevelFunction] void static_variable_with_destructor_3() +# 2245| : +# 2245| getEntryPoint(): [BlockStmt] { ... } +# 2246| getStmt(0): [DeclStmt] declaration +# 2246| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2246| Type = [Class] ClassWithDestructor +# 2246| getVariable().getInitializer(): [Initializer] initializer for a +# 2246| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2246| Type = [VoidType] void +# 2246| ValueCategory = prvalue +# 2247| getStmt(1): [DeclStmt] declaration +# 2247| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2247| Type = [Class] ClassWithDestructor +# 2247| getVariable().getInitializer(): [Initializer] initializer for b +# 2247| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2247| Type = [VoidType] void +# 2247| ValueCategory = prvalue +# 2248| getStmt(2): [DeclStmt] declaration +# 2248| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2248| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for c #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2235| getStmt(3): [ReturnStmt] return ... -# 2235| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2235| Type = [VoidType] void -# 2235| ValueCategory = prvalue -# 2235| getQualifier(): [VariableAccess] b -# 2235| Type = [Class] ClassWithDestructor -# 2235| ValueCategory = lvalue -# 2235| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2235| Type = [VoidType] void -# 2235| ValueCategory = prvalue -# 2235| getQualifier(): [VariableAccess] a -# 2235| Type = [Class] ClassWithDestructor -# 2235| ValueCategory = lvalue -# 2237| [GlobalVariable] ClassWithDestructor global_class_with_destructor -# 2237| getInitializer(): [Initializer] initializer for global_class_with_destructor -# 2237| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2237| Type = [VoidType] void -# 2237| ValueCategory = prvalue -# 2241| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2241| Type = [LValueReferenceType] ClassWithDestructor & -# 2241| ValueCategory = prvalue -# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [Class] ClassWithDestructor -# 2241| ValueCategory = lvalue -# 2241| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] T & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] T & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [TemplateParameter] T -# 2241| ValueCategory = lvalue -# 2241| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) -# 2241| : -# 2241| getParameter(0): [Parameter] t -# 2241| Type = [LValueReferenceType] int & -# 2241| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [ReturnStmt] return ... -# 2241| getExpr(): [VariableAccess] t -# 2241| Type = [LValueReferenceType] int & -# 2241| ValueCategory = prvalue(load) -# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2241| Type = [LValueReferenceType] int & -# 2241| ValueCategory = prvalue -# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2241| Type = [IntType] int -# 2241| ValueCategory = lvalue -# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] ClassWithDestructor & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [DestructorCall] call to ~ClassWithDestructor -# 2245| Type = [VoidType] void -# 2245| ValueCategory = prvalue -# 2245| getQualifier(): [FunctionCall] call to get -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2245| Type = [LValueReferenceType] ClassWithDestructor & -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [Class] ClassWithDestructor -# 2245| ValueCategory = lvalue -# 2245| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [Class] ClassWithDestructor -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2244| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] T & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [ExprCall] call to expression -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [Literal] Unknown literal -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getChild(-1): [ExprCall] call to expression -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [Literal] Unknown literal -# 2245| Type = [UnknownType] unknown -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] T & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [TemplateParameter] T -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) -# 2244| : -# 2244| getParameter(0): [Parameter] t -# 2244| Type = [LValueReferenceType] int & -# 2244| getEntryPoint(): [BlockStmt] { ... } -# 2245| getStmt(0): [ExprStmt] ExprStmt -# 2245| getExpr(): [VacuousDestructorCall] (vacuous destructor call) -# 2245| Type = [VoidType] void -# 2245| ValueCategory = prvalue -# 2245| getChild(0): [FunctionCall] call to get -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue -# 2245| getArgument(0): [VariableAccess] t -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue(load) -# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2245| Type = [LValueReferenceType] int & -# 2245| ValueCategory = prvalue -# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [IntType] int -# 2245| ValueCategory = lvalue -# 2245| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2245| Type = [IntType] int -# 2245| ValueCategory = lvalue -# 2246| getStmt(1): [ReturnStmt] return ... -# 2248| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| : -# 2248| getEntryPoint(): [BlockStmt] { ... } -# 2249| getStmt(0): [DeclStmt] declaration -# 2249| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2249| Type = [Class] ClassWithDestructor -# 2249| getVariable().getInitializer(): [Initializer] initializer for c -# 2249| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2249| Type = [VoidType] void -# 2249| ValueCategory = prvalue -# 2250| getStmt(1): [ExprStmt] ExprStmt -# 2250| getExpr(): [FunctionCall] call to call_destructor -# 2250| Type = [VoidType] void -# 2250| ValueCategory = prvalue -# 2250| getArgument(0): [VariableAccess] c -# 2250| Type = [Class] ClassWithDestructor -# 2250| ValueCategory = lvalue -# 2250| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2250| Type = [LValueReferenceType] ClassWithDestructor & -# 2250| ValueCategory = prvalue -# 2251| getStmt(2): [ReturnStmt] return ... -# 2251| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2251| Type = [VoidType] void -# 2251| ValueCategory = prvalue -# 2251| getQualifier(): [VariableAccess] c -# 2251| Type = [Class] ClassWithDestructor -# 2251| ValueCategory = lvalue -# 2253| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() -# 2253| : -# 2253| getEntryPoint(): [BlockStmt] { ... } -# 2254| getStmt(0): [DeclStmt] declaration -# 2254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 2254| Type = [IntType] int -# 2255| getStmt(1): [ExprStmt] ExprStmt -# 2255| getExpr(): [FunctionCall] call to call_destructor -# 2255| Type = [VoidType] void +# 2249| getStmt(3): [ReturnStmt] return ... +# 2249| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2249| Type = [VoidType] void +# 2249| ValueCategory = prvalue +# 2249| getQualifier(): [VariableAccess] b +# 2249| Type = [Class] ClassWithDestructor +# 2249| ValueCategory = lvalue +# 2249| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2249| Type = [VoidType] void +# 2249| ValueCategory = prvalue +# 2249| getQualifier(): [VariableAccess] a +# 2249| Type = [Class] ClassWithDestructor +# 2249| ValueCategory = lvalue +# 2251| [GlobalVariable] ClassWithDestructor global_class_with_destructor +# 2251| getInitializer(): [Initializer] initializer for global_class_with_destructor +# 2251| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2251| Type = [VoidType] void +# 2251| ValueCategory = prvalue +# 2255| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] ClassWithDestructor & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] ClassWithDestructor & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2255| Type = [LValueReferenceType] ClassWithDestructor & # 2255| ValueCategory = prvalue -# 2255| getArgument(0): [VariableAccess] i +# 2255| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2255| Type = [Class] ClassWithDestructor +# 2255| ValueCategory = lvalue +# 2255| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] T & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] T & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2255| Type = [TemplateParameter] T +# 2255| ValueCategory = lvalue +# 2255| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) +# 2255| : +# 2255| getParameter(0): [Parameter] t +# 2255| Type = [LValueReferenceType] int & +# 2255| getEntryPoint(): [BlockStmt] { ... } +# 2255| getStmt(0): [ReturnStmt] return ... +# 2255| getExpr(): [VariableAccess] t +# 2255| Type = [LValueReferenceType] int & +# 2255| ValueCategory = prvalue(load) +# 2255| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2255| Type = [LValueReferenceType] int & +# 2255| ValueCategory = prvalue +# 2255| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 2255| Type = [IntType] int # 2255| ValueCategory = lvalue -# 2255| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2255| Type = [LValueReferenceType] int & -# 2255| ValueCategory = prvalue -# 2256| getStmt(2): [ReturnStmt] return ... -# 2259| [TopLevelFunction] void TryCatchDestructors(bool) -# 2259| : -# 2259| getParameter(0): [Parameter] b -# 2259| Type = [BoolType] bool -# 2259| getEntryPoint(): [BlockStmt] { ... } -# 2260| getStmt(0): [TryStmt] try { ... } -# 2260| getStmt(): [BlockStmt] { ... } -# 2261| getStmt(0): [DeclStmt] declaration -# 2261| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2261| Type = [Struct] String -# 2261| getVariable().getInitializer(): [Initializer] initializer for s -# 2261| getExpr(): [ConstructorCall] call to String -# 2261| Type = [VoidType] void -# 2261| ValueCategory = prvalue -# 2262| getStmt(1): [IfStmt] if (...) ... -# 2262| getCondition(): [VariableAccess] b -# 2262| Type = [BoolType] bool -# 2262| ValueCategory = prvalue(load) -# 2262| getThen(): [BlockStmt] { ... } -# 2263| getStmt(0): [ExprStmt] ExprStmt -# 2263| getExpr(): [ThrowExpr] throw ... -# 2263| Type = [PointerType] const char * -# 2263| ValueCategory = prvalue -# 2263| getExpr(): string literal -# 2263| Type = [ArrayType] const char[15] -# 2263| Value = [StringLiteral] "string literal" -# 2263| ValueCategory = lvalue -# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2263| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2263| Type = [PointerType] const char * -# 2263| ValueCategory = prvalue -# 2265| getStmt(2): [DeclStmt] declaration -# 2265| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2265| Type = [Struct] String -# 2265| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2265| getExpr(): [ConstructorCall] call to String -# 2265| Type = [VoidType] void -# 2265| ValueCategory = prvalue -# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s2 -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2266| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2266| Type = [VoidType] void -# 2266| ValueCategory = prvalue -# 2266| getQualifier(): [VariableAccess] s -# 2266| Type = [Struct] String -# 2266| ValueCategory = lvalue -# 2267| getChild(1): [Handler] -# 2267| getBlock(): [CatchBlock] { ... } -# 2268| getStmt(0): [ExprStmt] ExprStmt -# 2268| getExpr(): [ThrowExpr] throw ... -# 2268| Type = [Struct] String -# 2268| ValueCategory = prvalue -# 2268| getExpr(): [ConstructorCall] call to String -# 2268| Type = [VoidType] void -# 2268| ValueCategory = prvalue -# 2268| getArgument(0): [VariableAccess] s -# 2268| Type = [PointerType] const char * -# 2268| ValueCategory = prvalue(load) -# 2270| getChild(2): [Handler] -# 2270| getBlock(): [CatchBlock] { ... } -# 2272| getChild(3): [Handler] -# 2272| getBlock(): [CatchAnyBlock] { ... } -# 2273| getStmt(0): [ExprStmt] ExprStmt -# 2273| getExpr(): [ReThrowExpr] re-throw exception -# 2273| Type = [VoidType] void -# 2273| ValueCategory = prvalue -# 2275| getStmt(1): [ReturnStmt] return ... -# 2277| [TopLevelFunction] void IfDestructors(bool) -# 2277| : -# 2277| getParameter(0): [Parameter] b -# 2277| Type = [BoolType] bool -# 2277| getEntryPoint(): [BlockStmt] { ... } -# 2278| getStmt(0): [DeclStmt] declaration -# 2278| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2278| Type = [Struct] String -# 2278| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2278| getExpr(): [ConstructorCall] call to String -# 2278| Type = [VoidType] void -# 2278| ValueCategory = prvalue -# 2279| getStmt(1): [IfStmt] if (...) ... -# 2279| getCondition(): [VariableAccess] b -# 2279| Type = [BoolType] bool -# 2279| ValueCategory = prvalue(load) -# 2279| getThen(): [BlockStmt] { ... } -# 2280| getStmt(0): [DeclStmt] declaration -# 2280| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2258| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] ClassWithDestructor & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [DestructorCall] call to ~ClassWithDestructor +# 2259| Type = [VoidType] void +# 2259| ValueCategory = prvalue +# 2259| getQualifier(): [FunctionCall] call to get +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2259| Type = [LValueReferenceType] ClassWithDestructor & +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [Class] ClassWithDestructor +# 2259| ValueCategory = lvalue +# 2259| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [Class] ClassWithDestructor +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2258| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] T & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [ExprCall] call to expression +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [Literal] Unknown literal +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getChild(-1): [ExprCall] call to expression +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [Literal] Unknown literal +# 2259| Type = [UnknownType] unknown +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] T & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [TemplateParameter] T +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2258| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) +# 2258| : +# 2258| getParameter(0): [Parameter] t +# 2258| Type = [LValueReferenceType] int & +# 2258| getEntryPoint(): [BlockStmt] { ... } +# 2259| getStmt(0): [ExprStmt] ExprStmt +# 2259| getExpr(): [VacuousDestructorCall] (vacuous destructor call) +# 2259| Type = [VoidType] void +# 2259| ValueCategory = prvalue +# 2259| getChild(0): [FunctionCall] call to get +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue +# 2259| getArgument(0): [VariableAccess] t +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue(load) +# 2259| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2259| Type = [LValueReferenceType] int & +# 2259| ValueCategory = prvalue +# 2259| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [IntType] int +# 2259| ValueCategory = lvalue +# 2259| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2259| Type = [IntType] int +# 2259| ValueCategory = lvalue +# 2260| getStmt(1): [ReturnStmt] return ... +# 2262| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| : +# 2262| getEntryPoint(): [BlockStmt] { ... } +# 2263| getStmt(0): [DeclStmt] declaration +# 2263| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2263| Type = [Class] ClassWithDestructor +# 2263| getVariable().getInitializer(): [Initializer] initializer for c +# 2263| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2263| Type = [VoidType] void +# 2263| ValueCategory = prvalue +# 2264| getStmt(1): [ExprStmt] ExprStmt +# 2264| getExpr(): [FunctionCall] call to call_destructor +# 2264| Type = [VoidType] void +# 2264| ValueCategory = prvalue +# 2264| getArgument(0): [VariableAccess] c +# 2264| Type = [Class] ClassWithDestructor +# 2264| ValueCategory = lvalue +# 2264| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2264| Type = [LValueReferenceType] ClassWithDestructor & +# 2264| ValueCategory = prvalue +# 2265| getStmt(2): [ReturnStmt] return ... +# 2265| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2265| Type = [VoidType] void +# 2265| ValueCategory = prvalue +# 2265| getQualifier(): [VariableAccess] c +# 2265| Type = [Class] ClassWithDestructor +# 2265| ValueCategory = lvalue +# 2267| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() +# 2267| : +# 2267| getEntryPoint(): [BlockStmt] { ... } +# 2268| getStmt(0): [DeclStmt] declaration +# 2268| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 2268| Type = [IntType] int +# 2269| getStmt(1): [ExprStmt] ExprStmt +# 2269| getExpr(): [FunctionCall] call to call_destructor +# 2269| Type = [VoidType] void +# 2269| ValueCategory = prvalue +# 2269| getArgument(0): [VariableAccess] i +# 2269| Type = [IntType] int +# 2269| ValueCategory = lvalue +# 2269| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2269| Type = [LValueReferenceType] int & +# 2269| ValueCategory = prvalue +# 2270| getStmt(2): [ReturnStmt] return ... +# 2273| [TopLevelFunction] void TryCatchDestructors(bool) +# 2273| : +# 2273| getParameter(0): [Parameter] b +# 2273| Type = [BoolType] bool +# 2273| getEntryPoint(): [BlockStmt] { ... } +# 2274| getStmt(0): [TryStmt] try { ... } +# 2274| getStmt(): [BlockStmt] { ... } +# 2275| getStmt(0): [DeclStmt] declaration +# 2275| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2275| Type = [Struct] String +# 2275| getVariable().getInitializer(): [Initializer] initializer for s +# 2275| getExpr(): [ConstructorCall] call to String +# 2275| Type = [VoidType] void +# 2275| ValueCategory = prvalue +# 2276| getStmt(1): [IfStmt] if (...) ... +# 2276| getCondition(): [VariableAccess] b +# 2276| Type = [BoolType] bool +# 2276| ValueCategory = prvalue(load) +# 2276| getThen(): [BlockStmt] { ... } +# 2277| getStmt(0): [ExprStmt] ExprStmt +# 2277| getExpr(): [ThrowExpr] throw ... +# 2277| Type = [PointerType] const char * +# 2277| ValueCategory = prvalue +# 2277| getExpr(): string literal +# 2277| Type = [ArrayType] const char[15] +# 2277| Value = [StringLiteral] "string literal" +# 2277| ValueCategory = lvalue +# 2280| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s +# 2280| Type = [Struct] String +# 2280| ValueCategory = lvalue +# 2277| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2277| Type = [PointerType] const char * +# 2277| ValueCategory = prvalue +# 2279| getStmt(2): [DeclStmt] declaration +# 2279| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2279| Type = [Struct] String +# 2279| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2279| getExpr(): [ConstructorCall] call to String +# 2279| Type = [VoidType] void +# 2279| ValueCategory = prvalue +# 2280| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s2 # 2280| Type = [Struct] String -# 2280| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2280| getExpr(): [ConstructorCall] call to String -# 2280| Type = [VoidType] void -# 2280| ValueCategory = prvalue -# 2281| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2281| Type = [VoidType] void -# 2281| ValueCategory = prvalue -# 2281| getQualifier(): [VariableAccess] s2 -# 2281| Type = [Struct] String -# 2281| ValueCategory = lvalue -# 2281| getElse(): [BlockStmt] { ... } -# 2282| getStmt(0): [DeclStmt] declaration -# 2282| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 -# 2282| Type = [Struct] String -# 2282| getVariable().getInitializer(): [Initializer] initializer for s3 +# 2280| ValueCategory = lvalue +# 2280| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2280| getQualifier(): [VariableAccess] s +# 2280| Type = [Struct] String +# 2280| ValueCategory = lvalue +# 2281| getChild(1): [Handler] +# 2281| getBlock(): [CatchBlock] { ... } +# 2282| getStmt(0): [ExprStmt] ExprStmt +# 2282| getExpr(): [ThrowExpr] throw ... +# 2282| Type = [Struct] String +# 2282| ValueCategory = prvalue # 2282| getExpr(): [ConstructorCall] call to String # 2282| Type = [VoidType] void # 2282| ValueCategory = prvalue -# 2283| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2283| Type = [VoidType] void -# 2283| ValueCategory = prvalue -# 2283| getQualifier(): [VariableAccess] s3 -# 2283| Type = [Struct] String -# 2283| ValueCategory = lvalue -# 2284| getStmt(2): [DeclStmt] declaration -# 2284| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 -# 2284| Type = [Struct] String -# 2284| getVariable().getInitializer(): [Initializer] initializer for s4 -# 2284| getExpr(): [ConstructorCall] call to String -# 2284| Type = [VoidType] void -# 2284| ValueCategory = prvalue -# 2285| getStmt(3): [ReturnStmt] return ... -# 2285| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2285| Type = [VoidType] void -# 2285| ValueCategory = prvalue -# 2285| getQualifier(): [VariableAccess] s4 -# 2285| Type = [Struct] String -# 2285| ValueCategory = lvalue -# 2285| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2285| Type = [VoidType] void -# 2285| ValueCategory = prvalue -# 2285| getQualifier(): [VariableAccess] s1 -# 2285| Type = [Struct] String -# 2285| ValueCategory = lvalue -# 2287| [TopLevelFunction] void ForDestructors() -# 2287| : -# 2287| getEntryPoint(): [BlockStmt] { ... } -# 2288| getStmt(0): [DeclStmt] declaration -# 2288| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2288| Type = [PlainCharType] char -# 2288| getVariable().getInitializer(): [Initializer] initializer for c -# 2288| getExpr(): [CharLiteral] 97 -# 2288| Type = [PlainCharType] char -# 2288| Value = [CharLiteral] 97 -# 2288| ValueCategory = prvalue -# 2289| getStmt(1): [ForStmt] for(...;...;...) ... -# 2289| getInitialization(): [DeclStmt] declaration -# 2289| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2289| Type = [Struct] String -# 2289| getVariable().getInitializer(): [Initializer] initializer for s -# 2289| getExpr(): [ConstructorCall] call to String -# 2289| Type = [VoidType] void -# 2289| ValueCategory = prvalue -# 2289| getArgument(0): hello -# 2289| Type = [ArrayType] const char[6] -# 2289| Value = [StringLiteral] "hello" -# 2289| ValueCategory = lvalue -# 2289| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2289| Type = [PointerType] const char * -# 2289| ValueCategory = prvalue -# 2289| getCondition(): [NEExpr] ... != ... -# 2289| Type = [BoolType] bool -# 2289| ValueCategory = prvalue -# 2289| getLeftOperand(): [VariableAccess] c -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = prvalue(load) -# 2289| getRightOperand(): [Literal] 0 -# 2289| Type = [IntType] int -# 2289| Value = [Literal] 0 -# 2289| ValueCategory = prvalue -# 2289| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2289| Conversion = [IntegralConversion] integral conversion -# 2289| Type = [IntType] int -# 2289| ValueCategory = prvalue -# 2289| getUpdate(): [AssignExpr] ... = ... -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = lvalue -# 2289| getLValue(): [VariableAccess] c -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = lvalue -# 2289| getRValue(): [FunctionCall] call to pop_back -# 2289| Type = [PlainCharType] char -# 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] s -# 2289| Type = [Struct] String -# 2289| ValueCategory = lvalue -# 2289| getStmt(): [BlockStmt] { ... } -# 2290| getStmt(0): [DeclStmt] declaration -# 2290| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2290| Type = [Struct] String -# 2290| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2290| getExpr(): [ConstructorCall] call to String -# 2290| Type = [VoidType] void -# 2290| ValueCategory = prvalue -# 2291| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2291| Type = [VoidType] void -# 2291| ValueCategory = prvalue -# 2291| getQualifier(): [VariableAccess] s2 -# 2291| Type = [Struct] String -# 2291| ValueCategory = lvalue -# 2289| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2289| Type = [VoidType] void -# 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] s -# 2289| Type = [Struct] String -# 2289| ValueCategory = lvalue -# 2293| getStmt(2): [RangeBasedForStmt] for(...:...) ... -# 2293| getChild(1): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2293| Type = [RValueReferenceType] vector && -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2293| getExpr(): [ConstructorCall] call to vector -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [ConstructorCall] call to String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): hello -# 2293| Type = [ArrayType] const char[6] -# 2293| Value = [StringLiteral] "hello" -# 2293| ValueCategory = lvalue -# 2293| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2293| Type = [PointerType] const char * -# 2293| ValueCategory = prvalue -# 2293| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [ReuseExpr] reuse of temporary object -# 2293| Type = [Struct] String -# 2293| ValueCategory = xvalue -# 2293| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2293| Type = [LValueReferenceType] vector & -# 2293| ValueCategory = prvalue -# 2293| getExpr(): [TemporaryObjectExpr] temporary object -# 2293| Type = [ClassTemplateInstantiation,Struct] vector -# 2293| ValueCategory = xvalue -# 2293| getBeginEndDeclaration(): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2293| getExpr(): [FunctionCall] call to begin -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__range) -# 2293| Type = [RValueReferenceType] vector && -# 2293| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2293| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2293| getExpr(): [FunctionCall] call to end -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__range) -# 2293| Type = [RValueReferenceType] vector && -# 2293| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2293| getCondition(): [FunctionCall] call to operator!= +# 2282| getArgument(0): [VariableAccess] s +# 2282| Type = [PointerType] const char * +# 2282| ValueCategory = prvalue(load) +# 2284| getChild(2): [Handler] +# 2284| getBlock(): [CatchBlock] { ... } +# 2286| getChild(3): [Handler] +# 2286| getBlock(): [CatchAnyBlock] { ... } +# 2287| getStmt(0): [ExprStmt] ExprStmt +# 2287| getExpr(): [ReThrowExpr] re-throw exception +# 2287| Type = [VoidType] void +# 2287| ValueCategory = prvalue +# 2289| getStmt(1): [ReturnStmt] return ... +# 2291| [TopLevelFunction] void IfDestructors(bool) +# 2291| : +# 2291| getParameter(0): [Parameter] b +# 2291| Type = [BoolType] bool +# 2291| getEntryPoint(): [BlockStmt] { ... } +# 2292| getStmt(0): [DeclStmt] declaration +# 2292| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2292| Type = [Struct] String +# 2292| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2292| getExpr(): [ConstructorCall] call to String +# 2292| Type = [VoidType] void +# 2292| ValueCategory = prvalue +# 2293| getStmt(1): [IfStmt] if (...) ... +# 2293| getCondition(): [VariableAccess] b # 2293| Type = [BoolType] bool -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -# 2293| getArgument(0): [ConstructorCall] call to iterator -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [VariableAccess] (__end) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -#-----| Type = [LValueReferenceType] const iterator & -#-----| ValueCategory = prvalue -#-----| getExpr(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [ClassTemplateInstantiation,Struct] iterator -#-----| ValueCategory = lvalue -# 2293| getUpdate(): [FunctionCall] call to operator++ -# 2293| Type = [LValueReferenceType] iterator & -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -# 2293| getChild(5): [DeclStmt] declaration -# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2293| Type = [Struct] String -# 2293| getVariable().getInitializer(): [Initializer] initializer for s -# 2293| getExpr(): [ConstructorCall] call to String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* -# 2293| Type = [LValueReferenceType] String & -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] (__begin) -# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2293| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2293| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2293| Type = [LValueReferenceType] const String & -# 2293| ValueCategory = prvalue -# 2293| getExpr(): [CStyleCast] (const String)... -# 2293| Conversion = [GlvalueConversion] glvalue conversion -# 2293| Type = [SpecifiedType] const String -# 2293| ValueCategory = lvalue -# 2293| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getStmt(): [BlockStmt] { ... } +# 2293| ValueCategory = prvalue(load) +# 2293| getThen(): [BlockStmt] { ... } # 2294| getStmt(0): [DeclStmt] declaration # 2294| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 # 2294| Type = [Struct] String @@ -18587,105 +18390,52 @@ ir.cpp: # 2295| getQualifier(): [VariableAccess] s2 # 2295| Type = [Struct] String # 2295| ValueCategory = lvalue -# 2293| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2293| Type = [VoidType] void -# 2293| ValueCategory = prvalue -# 2293| getQualifier(): [VariableAccess] s -# 2293| Type = [Struct] String -# 2293| ValueCategory = lvalue -# 2293| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2293| Type = [ClassTemplateInstantiation,Struct] iterator -# 2293| ValueCategory = lvalue -# 2297| getStmt(3): [ForStmt] for(...;...;...) ... -# 2297| getInitialization(): [DeclStmt] declaration -# 2297| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2297| Type = [Struct] String -# 2297| getVariable().getInitializer(): [Initializer] initializer for s -# 2297| getExpr(): [ConstructorCall] call to String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getArgument(0): hello -# 2297| Type = [ArrayType] const char[6] -# 2297| Value = [StringLiteral] "hello" -# 2297| ValueCategory = lvalue -# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2297| Type = [PointerType] const char * -# 2297| ValueCategory = prvalue -# 2297| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 -# 2297| Type = [Struct] String -# 2297| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2297| getExpr(): [ConstructorCall] call to String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getArgument(0): world -# 2297| Type = [ArrayType] const char[6] -# 2297| Value = [StringLiteral] "world" -# 2297| ValueCategory = lvalue -# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2297| Type = [PointerType] const char * -# 2297| ValueCategory = prvalue -# 2297| getCondition(): [NEExpr] ... != ... -# 2297| Type = [BoolType] bool -# 2297| ValueCategory = prvalue -# 2297| getLeftOperand(): [VariableAccess] c -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = prvalue(load) -# 2297| getRightOperand(): [Literal] 0 -# 2297| Type = [IntType] int -# 2297| Value = [Literal] 0 +# 2295| getElse(): [BlockStmt] { ... } +# 2296| getStmt(0): [DeclStmt] declaration +# 2296| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 +# 2296| Type = [Struct] String +# 2296| getVariable().getInitializer(): [Initializer] initializer for s3 +# 2296| getExpr(): [ConstructorCall] call to String +# 2296| Type = [VoidType] void +# 2296| ValueCategory = prvalue +# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2297| Type = [VoidType] void # 2297| ValueCategory = prvalue -# 2297| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2297| Conversion = [IntegralConversion] integral conversion -# 2297| Type = [IntType] int -# 2297| ValueCategory = prvalue -# 2297| getUpdate(): [AssignExpr] ... = ... -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = lvalue -# 2297| getLValue(): [VariableAccess] c -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = lvalue -# 2297| getRValue(): [FunctionCall] call to pop_back -# 2297| Type = [PlainCharType] char -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s +# 2297| getQualifier(): [VariableAccess] s3 # 2297| Type = [Struct] String # 2297| ValueCategory = lvalue -# 2297| getStmt(): [BlockStmt] { ... } -# 2298| getStmt(0): [ExprStmt] ExprStmt -# 2298| getExpr(): [AssignExpr] ... = ... -# 2298| Type = [PlainCharType] char -# 2298| ValueCategory = lvalue -# 2298| getLValue(): [VariableAccess] c -# 2298| Type = [PlainCharType] char -# 2298| ValueCategory = lvalue -# 2298| getRValue(): [Literal] 0 -# 2298| Type = [IntType] int -# 2298| Value = [Literal] 0 -# 2298| ValueCategory = prvalue -# 2298| getRValue().getFullyConverted(): [CStyleCast] (char)... -# 2298| Conversion = [IntegralConversion] integral conversion -# 2298| Type = [PlainCharType] char -# 2298| Value = [CStyleCast] 0 -# 2298| ValueCategory = prvalue -# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s2 -# 2297| Type = [Struct] String -# 2297| ValueCategory = lvalue -# 2297| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2297| Type = [VoidType] void -# 2297| ValueCategory = prvalue -# 2297| getQualifier(): [VariableAccess] s -# 2297| Type = [Struct] String -# 2297| ValueCategory = lvalue -# 2300| getStmt(4): [ReturnStmt] return ... -# 2302| [TopLevelFunction] void IfDestructors2(bool) -# 2302| : -# 2302| getParameter(0): [Parameter] b -# 2302| Type = [BoolType] bool -# 2302| getEntryPoint(): [BlockStmt] { ... } -# 2303| getStmt(0): [IfStmt] if (...) ... +# 2298| getStmt(2): [DeclStmt] declaration +# 2298| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 +# 2298| Type = [Struct] String +# 2298| getVariable().getInitializer(): [Initializer] initializer for s4 +# 2298| getExpr(): [ConstructorCall] call to String +# 2298| Type = [VoidType] void +# 2298| ValueCategory = prvalue +# 2299| getStmt(3): [ReturnStmt] return ... +# 2299| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2299| Type = [VoidType] void +# 2299| ValueCategory = prvalue +# 2299| getQualifier(): [VariableAccess] s4 +# 2299| Type = [Struct] String +# 2299| ValueCategory = lvalue +# 2299| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2299| Type = [VoidType] void +# 2299| ValueCategory = prvalue +# 2299| getQualifier(): [VariableAccess] s1 +# 2299| Type = [Struct] String +# 2299| ValueCategory = lvalue +# 2301| [TopLevelFunction] void ForDestructors() +# 2301| : +# 2301| getEntryPoint(): [BlockStmt] { ... } +# 2302| getStmt(0): [DeclStmt] declaration +# 2302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2302| Type = [PlainCharType] char +# 2302| getVariable().getInitializer(): [Initializer] initializer for c +# 2302| getExpr(): [CharLiteral] 97 +# 2302| Type = [PlainCharType] char +# 2302| Value = [CharLiteral] 97 +# 2302| ValueCategory = prvalue +# 2303| getStmt(1): [ForStmt] for(...;...;...) ... # 2303| getInitialization(): [DeclStmt] declaration # 2303| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s # 2303| Type = [Struct] String @@ -18700,1331 +18450,1629 @@ ir.cpp: # 2303| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 2303| Type = [PointerType] const char * # 2303| ValueCategory = prvalue -# 2303| getCondition(): [VariableAccess] b +# 2303| getCondition(): [NEExpr] ... != ... # 2303| Type = [BoolType] bool -# 2303| ValueCategory = prvalue(load) -# 2303| getThen(): [BlockStmt] { ... } +# 2303| ValueCategory = prvalue +# 2303| getLeftOperand(): [VariableAccess] c +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = prvalue(load) +# 2303| getRightOperand(): [Literal] 0 +# 2303| Type = [IntType] int +# 2303| Value = [Literal] 0 +# 2303| ValueCategory = prvalue +# 2303| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2303| Conversion = [IntegralConversion] integral conversion +# 2303| Type = [IntType] int +# 2303| ValueCategory = prvalue +# 2303| getUpdate(): [AssignExpr] ... = ... +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = lvalue +# 2303| getLValue(): [VariableAccess] c +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = lvalue +# 2303| getRValue(): [FunctionCall] call to pop_back +# 2303| Type = [PlainCharType] char +# 2303| ValueCategory = prvalue +# 2303| getQualifier(): [VariableAccess] s +# 2303| Type = [Struct] String +# 2303| ValueCategory = lvalue +# 2303| getStmt(): [BlockStmt] { ... } # 2304| getStmt(0): [DeclStmt] declaration -# 2304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2304| Type = [IntType] int -# 2304| getVariable().getInitializer(): [Initializer] initializer for x -# 2304| getExpr(): [Literal] 0 -# 2304| Type = [IntType] int -# 2304| Value = [Literal] 0 +# 2304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2304| Type = [Struct] String +# 2304| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2304| getExpr(): [ConstructorCall] call to String +# 2304| Type = [VoidType] void # 2304| ValueCategory = prvalue -# 2305| getElse(): [BlockStmt] { ... } -# 2306| getStmt(0): [DeclStmt] declaration -# 2306| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2306| Type = [IntType] int -# 2306| getVariable().getInitializer(): [Initializer] initializer for y -# 2306| getExpr(): [Literal] 0 -# 2306| Type = [IntType] int -# 2306| Value = [Literal] 0 -# 2306| ValueCategory = prvalue -# 2307| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2307| Type = [VoidType] void +# 2305| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2305| Type = [VoidType] void +# 2305| ValueCategory = prvalue +# 2305| getQualifier(): [VariableAccess] s2 +# 2305| Type = [Struct] String +# 2305| ValueCategory = lvalue +# 2303| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2303| Type = [VoidType] void +# 2303| ValueCategory = prvalue +# 2303| getQualifier(): [VariableAccess] s +# 2303| Type = [Struct] String +# 2303| ValueCategory = lvalue +# 2307| getStmt(2): [RangeBasedForStmt] for(...:...) ... +# 2307| getChild(1): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2307| Type = [RValueReferenceType] vector && +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2307| getExpr(): [ConstructorCall] call to vector +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [ConstructorCall] call to String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): hello +# 2307| Type = [ArrayType] const char[6] +# 2307| Value = [StringLiteral] "hello" +# 2307| ValueCategory = lvalue +# 2307| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2307| Type = [PointerType] const char * +# 2307| ValueCategory = prvalue +# 2307| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [ReuseExpr] reuse of temporary object +# 2307| Type = [Struct] String +# 2307| ValueCategory = xvalue +# 2307| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2307| Type = [LValueReferenceType] vector & +# 2307| ValueCategory = prvalue +# 2307| getExpr(): [TemporaryObjectExpr] temporary object +# 2307| Type = [ClassTemplateInstantiation,Struct] vector +# 2307| ValueCategory = xvalue +# 2307| getBeginEndDeclaration(): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2307| getExpr(): [FunctionCall] call to begin +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__range) +# 2307| Type = [RValueReferenceType] vector && +# 2307| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2307| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2307| getExpr(): [FunctionCall] call to end +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__range) +# 2307| Type = [RValueReferenceType] vector && +# 2307| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2307| getCondition(): [FunctionCall] call to operator!= +# 2307| Type = [BoolType] bool # 2307| ValueCategory = prvalue -# 2307| getQualifier(): [VariableAccess] s -# 2307| Type = [Struct] String +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator # 2307| ValueCategory = lvalue -# 2308| getStmt(1): [ReturnStmt] return ... -# 2310| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) -# 2310| : +# 2307| getArgument(0): [ConstructorCall] call to iterator +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [VariableAccess] (__end) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2307| getUpdate(): [FunctionCall] call to operator++ +# 2307| Type = [LValueReferenceType] iterator & +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +# 2307| getChild(5): [DeclStmt] declaration +# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2307| Type = [Struct] String +# 2307| getVariable().getInitializer(): [Initializer] initializer for s +# 2307| getExpr(): [ConstructorCall] call to String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* +# 2307| Type = [LValueReferenceType] String & +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] (__begin) +# 2307| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2307| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2307| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2307| Type = [LValueReferenceType] const String & +# 2307| ValueCategory = prvalue +# 2307| getExpr(): [CStyleCast] (const String)... +# 2307| Conversion = [GlvalueConversion] glvalue conversion +# 2307| Type = [SpecifiedType] const String +# 2307| ValueCategory = lvalue +# 2307| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getStmt(): [BlockStmt] { ... } +# 2308| getStmt(0): [DeclStmt] declaration +# 2308| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2308| Type = [Struct] String +# 2308| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2308| getExpr(): [ConstructorCall] call to String +# 2308| Type = [VoidType] void +# 2308| ValueCategory = prvalue +# 2309| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2309| Type = [VoidType] void +# 2309| ValueCategory = prvalue +# 2309| getQualifier(): [VariableAccess] s2 +# 2309| Type = [Struct] String +# 2309| ValueCategory = lvalue +# 2307| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] s +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2307| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2307| Type = [ClassTemplateInstantiation,Struct] iterator +# 2307| ValueCategory = lvalue +# 2311| getStmt(3): [ForStmt] for(...;...;...) ... +# 2311| getInitialization(): [DeclStmt] declaration +# 2311| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2311| Type = [Struct] String +# 2311| getVariable().getInitializer(): [Initializer] initializer for s +# 2311| getExpr(): [ConstructorCall] call to String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getArgument(0): hello +# 2311| Type = [ArrayType] const char[6] +# 2311| Value = [StringLiteral] "hello" +# 2311| ValueCategory = lvalue +# 2311| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2311| Type = [PointerType] const char * +# 2311| ValueCategory = prvalue +# 2311| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 +# 2311| Type = [Struct] String +# 2311| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2311| getExpr(): [ConstructorCall] call to String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getArgument(0): world +# 2311| Type = [ArrayType] const char[6] +# 2311| Value = [StringLiteral] "world" +# 2311| ValueCategory = lvalue +# 2311| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2311| Type = [PointerType] const char * +# 2311| ValueCategory = prvalue +# 2311| getCondition(): [NEExpr] ... != ... +# 2311| Type = [BoolType] bool +# 2311| ValueCategory = prvalue +# 2311| getLeftOperand(): [VariableAccess] c +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = prvalue(load) +# 2311| getRightOperand(): [Literal] 0 +# 2311| Type = [IntType] int +# 2311| Value = [Literal] 0 +# 2311| ValueCategory = prvalue +# 2311| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2311| Conversion = [IntegralConversion] integral conversion +# 2311| Type = [IntType] int +# 2311| ValueCategory = prvalue +# 2311| getUpdate(): [AssignExpr] ... = ... +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = lvalue +# 2311| getLValue(): [VariableAccess] c +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = lvalue +# 2311| getRValue(): [FunctionCall] call to pop_back +# 2311| Type = [PlainCharType] char +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2311| getStmt(): [BlockStmt] { ... } +# 2312| getStmt(0): [ExprStmt] ExprStmt +# 2312| getExpr(): [AssignExpr] ... = ... +# 2312| Type = [PlainCharType] char +# 2312| ValueCategory = lvalue +# 2312| getLValue(): [VariableAccess] c +# 2312| Type = [PlainCharType] char +# 2312| ValueCategory = lvalue +# 2312| getRValue(): [Literal] 0 +# 2312| Type = [IntType] int +# 2312| Value = [Literal] 0 +# 2312| ValueCategory = prvalue +# 2312| getRValue().getFullyConverted(): [CStyleCast] (char)... +# 2312| Conversion = [IntegralConversion] integral conversion +# 2312| Type = [PlainCharType] char +# 2312| Value = [CStyleCast] 0 +# 2312| ValueCategory = prvalue +# 2311| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s2 +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2311| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2311| Type = [VoidType] void +# 2311| ValueCategory = prvalue +# 2311| getQualifier(): [VariableAccess] s +# 2311| Type = [Struct] String +# 2311| ValueCategory = lvalue +# 2314| getStmt(4): [ReturnStmt] return ... +# 2316| [TopLevelFunction] void IfDestructors2(bool) +# 2316| : +# 2316| getParameter(0): [Parameter] b +# 2316| Type = [BoolType] bool +# 2316| getEntryPoint(): [BlockStmt] { ... } +# 2317| getStmt(0): [IfStmt] if (...) ... +# 2317| getInitialization(): [DeclStmt] declaration +# 2317| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2317| Type = [Struct] String +# 2317| getVariable().getInitializer(): [Initializer] initializer for s +# 2317| getExpr(): [ConstructorCall] call to String +# 2317| Type = [VoidType] void +# 2317| ValueCategory = prvalue +# 2317| getArgument(0): hello +# 2317| Type = [ArrayType] const char[6] +# 2317| Value = [StringLiteral] "hello" +# 2317| ValueCategory = lvalue +# 2317| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2317| Type = [PointerType] const char * +# 2317| ValueCategory = prvalue +# 2317| getCondition(): [VariableAccess] b +# 2317| Type = [BoolType] bool +# 2317| ValueCategory = prvalue(load) +# 2317| getThen(): [BlockStmt] { ... } +# 2318| getStmt(0): [DeclStmt] declaration +# 2318| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2318| Type = [IntType] int +# 2318| getVariable().getInitializer(): [Initializer] initializer for x +# 2318| getExpr(): [Literal] 0 +# 2318| Type = [IntType] int +# 2318| Value = [Literal] 0 +# 2318| ValueCategory = prvalue +# 2319| getElse(): [BlockStmt] { ... } +# 2320| getStmt(0): [DeclStmt] declaration +# 2320| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2320| Type = [IntType] int +# 2320| getVariable().getInitializer(): [Initializer] initializer for y +# 2320| getExpr(): [Literal] 0 +# 2320| Type = [IntType] int +# 2320| Value = [Literal] 0 +# 2320| ValueCategory = prvalue +# 2321| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2321| Type = [VoidType] void +# 2321| ValueCategory = prvalue +# 2321| getQualifier(): [VariableAccess] s +# 2321| Type = [Struct] String +# 2321| ValueCategory = lvalue +# 2322| getStmt(1): [ReturnStmt] return ... +# 2324| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) +# 2324| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bool & -# 2310| [CopyConstructor] void Bool::Bool(Bool const&) -# 2310| : +# 2324| [CopyConstructor] void Bool::Bool(Bool const&) +# 2324| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bool & -# 2312| [Constructor] void Bool::Bool(bool) -# 2312| : -# 2312| getParameter(0): [Parameter] b_ -# 2312| Type = [BoolType] bool -# 2313| [ConversionOperator] bool Bool::operator bool() -# 2313| : -# 2314| [Destructor] void Bool::~Bool() -# 2314| : -# 2317| [TopLevelFunction] void IfDestructors3(bool) -# 2317| : -# 2317| getParameter(0): [Parameter] b -# 2317| Type = [BoolType] bool -# 2317| getEntryPoint(): [BlockStmt] { ... } -# 2318| getStmt(0): [IfStmt] if (...) ... -# 2318| getCondition(): [ConditionDeclExpr] (condition decl) -# 2318| Type = [BoolType] bool -# 2318| ValueCategory = prvalue -# 2318| getChild(0): [FunctionCall] call to operator bool -# 2318| Type = [BoolType] bool -# 2318| ValueCategory = prvalue -# 2318| getQualifier(): [VariableAccess] B -# 2318| Type = [Class] Bool -# 2318| ValueCategory = prvalue(load) -# 2318| getInitializingExpr(): [ConstructorCall] call to Bool -# 2318| Type = [VoidType] void -# 2318| ValueCategory = prvalue -# 2318| getArgument(0): [VariableAccess] b -# 2318| Type = [BoolType] bool -# 2318| ValueCategory = prvalue(load) -# 2318| getThen(): [BlockStmt] { ... } -# 2319| getStmt(0): [DeclStmt] declaration -# 2319| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2319| Type = [Struct] String -# 2319| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2319| getExpr(): [ConstructorCall] call to String -# 2319| Type = [VoidType] void -# 2319| ValueCategory = prvalue -# 2320| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2320| Type = [VoidType] void -# 2320| ValueCategory = prvalue -# 2320| getQualifier(): [VariableAccess] s1 -# 2320| Type = [Struct] String -# 2320| ValueCategory = lvalue -# 2320| getElse(): [BlockStmt] { ... } -# 2321| getStmt(0): [DeclStmt] declaration -# 2321| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2321| Type = [Struct] String -# 2321| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2321| getExpr(): [ConstructorCall] call to String -# 2321| Type = [VoidType] void -# 2321| ValueCategory = prvalue -# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2322| Type = [VoidType] void -# 2322| ValueCategory = prvalue -# 2322| getQualifier(): [VariableAccess] s2 -# 2322| Type = [Struct] String -# 2322| ValueCategory = lvalue -# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2322| Type = [VoidType] void -# 2322| ValueCategory = prvalue -# 2322| getQualifier(): [VariableAccess] B -# 2322| Type = [Class] Bool -# 2322| ValueCategory = lvalue -# 2323| getStmt(1): [ReturnStmt] return ... -# 2325| [TopLevelFunction] void WhileLoopDestructors(bool) -# 2325| : -# 2325| getParameter(0): [Parameter] b -# 2325| Type = [BoolType] bool -# 2325| getEntryPoint(): [BlockStmt] { ... } -# 2326| getStmt(0): [BlockStmt] { ... } -# 2327| getStmt(0): [DeclStmt] declaration -# 2327| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2327| Type = [Struct] String -# 2327| getVariable().getInitializer(): [Initializer] initializer for s -# 2327| getExpr(): [ConstructorCall] call to String -# 2327| Type = [VoidType] void -# 2327| ValueCategory = prvalue -# 2328| getStmt(1): [WhileStmt] while (...) ... -# 2328| getCondition(): [VariableAccess] b -# 2328| Type = [BoolType] bool -# 2328| ValueCategory = prvalue(load) -# 2328| getStmt(): [BlockStmt] { ... } -# 2329| getStmt(0): [ExprStmt] ExprStmt -# 2329| getExpr(): [AssignExpr] ... = ... -# 2329| Type = [BoolType] bool -# 2329| ValueCategory = lvalue -# 2329| getLValue(): [VariableAccess] b -# 2329| Type = [BoolType] bool -# 2329| ValueCategory = lvalue -# 2329| getRValue(): [Literal] 0 -# 2329| Type = [BoolType] bool -# 2329| Value = [Literal] 0 -# 2329| ValueCategory = prvalue -# 2331| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2331| Type = [VoidType] void -# 2331| ValueCategory = prvalue -# 2331| getQualifier(): [VariableAccess] s -# 2331| Type = [Struct] String -# 2331| ValueCategory = lvalue -# 2333| getStmt(1): [BlockStmt] { ... } -# 2334| getStmt(0): [WhileStmt] while (...) ... -# 2334| getCondition(): [ConditionDeclExpr] (condition decl) -# 2334| Type = [BoolType] bool +# 2326| [Constructor] void Bool::Bool(bool) +# 2326| : +# 2326| getParameter(0): [Parameter] b_ +# 2326| Type = [BoolType] bool +# 2327| [ConversionOperator] bool Bool::operator bool() +# 2327| : +# 2328| [Destructor] void Bool::~Bool() +# 2328| : +# 2331| [TopLevelFunction] void IfDestructors3(bool) +# 2331| : +# 2331| getParameter(0): [Parameter] b +# 2331| Type = [BoolType] bool +# 2331| getEntryPoint(): [BlockStmt] { ... } +# 2332| getStmt(0): [IfStmt] if (...) ... +# 2332| getCondition(): [ConditionDeclExpr] (condition decl) +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue +# 2332| getChild(0): [FunctionCall] call to operator bool +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue +# 2332| getQualifier(): [VariableAccess] B +# 2332| Type = [Class] Bool +# 2332| ValueCategory = prvalue(load) +# 2332| getInitializingExpr(): [ConstructorCall] call to Bool +# 2332| Type = [VoidType] void +# 2332| ValueCategory = prvalue +# 2332| getArgument(0): [VariableAccess] b +# 2332| Type = [BoolType] bool +# 2332| ValueCategory = prvalue(load) +# 2332| getThen(): [BlockStmt] { ... } +# 2333| getStmt(0): [DeclStmt] declaration +# 2333| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2333| Type = [Struct] String +# 2333| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2333| getExpr(): [ConstructorCall] call to String +# 2333| Type = [VoidType] void +# 2333| ValueCategory = prvalue +# 2334| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2334| Type = [VoidType] void # 2334| ValueCategory = prvalue -# 2334| getChild(0): [FunctionCall] call to operator bool -# 2334| Type = [BoolType] bool -# 2334| ValueCategory = prvalue -# 2334| getQualifier(): [VariableAccess] B -# 2334| Type = [Class] Bool -# 2334| ValueCategory = prvalue(load) -# 2334| getInitializingExpr(): [ConstructorCall] call to Bool -# 2334| Type = [VoidType] void -# 2334| ValueCategory = prvalue -# 2334| getArgument(0): [VariableAccess] b -# 2334| Type = [BoolType] bool -# 2334| ValueCategory = prvalue(load) -# 2334| getStmt(): [BlockStmt] { ... } -# 2335| getStmt(0): [ExprStmt] ExprStmt -# 2335| getExpr(): [AssignExpr] ... = ... -# 2335| Type = [BoolType] bool -# 2335| ValueCategory = lvalue -# 2335| getLValue(): [VariableAccess] b -# 2335| Type = [BoolType] bool -# 2335| ValueCategory = lvalue -# 2335| getRValue(): [Literal] 0 -# 2335| Type = [BoolType] bool -# 2335| Value = [Literal] 0 +# 2334| getQualifier(): [VariableAccess] s1 +# 2334| Type = [Struct] String +# 2334| ValueCategory = lvalue +# 2334| getElse(): [BlockStmt] { ... } +# 2335| getStmt(0): [DeclStmt] declaration +# 2335| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2335| Type = [Struct] String +# 2335| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2335| getExpr(): [ConstructorCall] call to String +# 2335| Type = [VoidType] void # 2335| ValueCategory = prvalue -# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2336| Type = [VoidType] void -# 2336| ValueCategory = prvalue -# 2336| getQualifier(): [VariableAccess] B -# 2336| Type = [Class] Bool -# 2336| ValueCategory = lvalue -# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~String # 2336| Type = [VoidType] void # 2336| ValueCategory = prvalue -# 2336| getQualifier(): [VariableAccess] B -# 2336| Type = [Class] Bool +# 2336| getQualifier(): [VariableAccess] s2 +# 2336| Type = [Struct] String # 2336| ValueCategory = lvalue -# 2338| getStmt(2): [ReturnStmt] return ... -# 2340| [TopLevelFunction] void VoidFunc() -# 2340| : -# 2340| getEntryPoint(): [BlockStmt] { ... } -# 2340| getStmt(0): [ReturnStmt] return ... -# 2342| [TopLevelFunction] void IfReturnDestructors(bool) -# 2342| : -# 2342| getParameter(0): [Parameter] b -# 2342| Type = [BoolType] bool -# 2342| getEntryPoint(): [BlockStmt] { ... } -# 2343| getStmt(0): [DeclStmt] declaration -# 2343| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2343| Type = [Struct] String -# 2343| getVariable().getInitializer(): [Initializer] initializer for s -# 2343| getExpr(): [ConstructorCall] call to String -# 2343| Type = [VoidType] void -# 2343| ValueCategory = prvalue -# 2344| getStmt(1): [IfStmt] if (...) ... -# 2344| getCondition(): [VariableAccess] b -# 2344| Type = [BoolType] bool -# 2344| ValueCategory = prvalue(load) -# 2344| getThen(): [BlockStmt] { ... } -# 2345| getStmt(0): [ReturnStmt] return ... -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2347| getStmt(2): [IfStmt] if (...) ... -# 2347| getCondition(): [VariableAccess] b -# 2347| Type = [BoolType] bool -# 2347| ValueCategory = prvalue(load) -# 2347| getThen(): [BlockStmt] { ... } -# 2348| getStmt(0): [ReturnStmt] return ... -# 2348| getExpr(): [FunctionCall] call to VoidFunc +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| Type = [VoidType] void +# 2336| ValueCategory = prvalue +# 2336| getQualifier(): [VariableAccess] B +# 2336| Type = [Class] Bool +# 2336| ValueCategory = lvalue +# 2337| getStmt(1): [ReturnStmt] return ... +# 2339| [TopLevelFunction] void WhileLoopDestructors(bool) +# 2339| : +# 2339| getParameter(0): [Parameter] b +# 2339| Type = [BoolType] bool +# 2339| getEntryPoint(): [BlockStmt] { ... } +# 2340| getStmt(0): [BlockStmt] { ... } +# 2341| getStmt(0): [DeclStmt] declaration +# 2341| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2341| Type = [Struct] String +# 2341| getVariable().getInitializer(): [Initializer] initializer for s +# 2341| getExpr(): [ConstructorCall] call to String +# 2341| Type = [VoidType] void +# 2341| ValueCategory = prvalue +# 2342| getStmt(1): [WhileStmt] while (...) ... +# 2342| getCondition(): [VariableAccess] b +# 2342| Type = [BoolType] bool +# 2342| ValueCategory = prvalue(load) +# 2342| getStmt(): [BlockStmt] { ... } +# 2343| getStmt(0): [ExprStmt] ExprStmt +# 2343| getExpr(): [AssignExpr] ... = ... +# 2343| Type = [BoolType] bool +# 2343| ValueCategory = lvalue +# 2343| getLValue(): [VariableAccess] b +# 2343| Type = [BoolType] bool +# 2343| ValueCategory = lvalue +# 2343| getRValue(): [Literal] 0 +# 2343| Type = [BoolType] bool +# 2343| Value = [Literal] 0 +# 2343| ValueCategory = prvalue +# 2345| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2345| Type = [VoidType] void +# 2345| ValueCategory = prvalue +# 2345| getQualifier(): [VariableAccess] s +# 2345| Type = [Struct] String +# 2345| ValueCategory = lvalue +# 2347| getStmt(1): [BlockStmt] { ... } +# 2348| getStmt(0): [WhileStmt] while (...) ... +# 2348| getCondition(): [ConditionDeclExpr] (condition decl) +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue +# 2348| getChild(0): [FunctionCall] call to operator bool +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue +# 2348| getQualifier(): [VariableAccess] B +# 2348| Type = [Class] Bool +# 2348| ValueCategory = prvalue(load) +# 2348| getInitializingExpr(): [ConstructorCall] call to Bool # 2348| Type = [VoidType] void # 2348| ValueCategory = prvalue -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2350| getStmt(3): [ExprStmt] ExprStmt -# 2350| getExpr(): [VariableAccess] s -# 2350| Type = [Struct] String -# 2350| ValueCategory = lvalue -# 2351| getStmt(4): [ReturnStmt] return ... -# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2351| Type = [VoidType] void -# 2351| ValueCategory = prvalue -# 2351| getQualifier(): [VariableAccess] s -# 2351| Type = [Struct] String -# 2351| ValueCategory = lvalue -# 2353| [TopLevelFunction] int IfReturnDestructors3(bool) -# 2353| : -# 2353| getParameter(0): [Parameter] b -# 2353| Type = [BoolType] bool -# 2353| getEntryPoint(): [BlockStmt] { ... } -# 2354| getStmt(0): [DeclStmt] declaration -# 2354| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2354| Type = [Struct] String -# 2354| getVariable().getInitializer(): [Initializer] initializer for s -# 2354| getExpr(): [ConstructorCall] call to String -# 2354| Type = [VoidType] void -# 2354| ValueCategory = prvalue -# 2355| getStmt(1): [IfStmt] if (...) ... -# 2355| getCondition(): [VariableAccess] b -# 2355| Type = [BoolType] bool -# 2355| ValueCategory = prvalue(load) -# 2355| getThen(): [BlockStmt] { ... } -# 2356| getStmt(0): [ReturnStmt] return ... -# 2356| getExpr(): [Literal] 1 -# 2356| Type = [IntType] int -# 2356| Value = [Literal] 1 -# 2356| ValueCategory = prvalue -# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2359| Type = [VoidType] void -# 2359| ValueCategory = prvalue -# 2359| getQualifier(): [VariableAccess] s -# 2359| Type = [Struct] String -# 2359| ValueCategory = lvalue -# 2358| getStmt(2): [ReturnStmt] return ... -# 2358| getExpr(): [Literal] 0 -# 2358| Type = [IntType] int -# 2358| Value = [Literal] 0 -# 2358| ValueCategory = prvalue -# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2359| Type = [VoidType] void -# 2359| ValueCategory = prvalue -# 2359| getQualifier(): [VariableAccess] s -# 2359| Type = [Struct] String -# 2359| ValueCategory = lvalue -# 2361| [TopLevelFunction] void VoidReturnDestructors() -# 2361| : -# 2361| getEntryPoint(): [BlockStmt] { ... } -# 2362| getStmt(0): [DeclStmt] declaration -# 2362| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2362| Type = [Struct] String -# 2362| getVariable().getInitializer(): [Initializer] initializer for s -# 2362| getExpr(): [ConstructorCall] call to String +# 2348| getArgument(0): [VariableAccess] b +# 2348| Type = [BoolType] bool +# 2348| ValueCategory = prvalue(load) +# 2348| getStmt(): [BlockStmt] { ... } +# 2349| getStmt(0): [ExprStmt] ExprStmt +# 2349| getExpr(): [AssignExpr] ... = ... +# 2349| Type = [BoolType] bool +# 2349| ValueCategory = lvalue +# 2349| getLValue(): [VariableAccess] b +# 2349| Type = [BoolType] bool +# 2349| ValueCategory = lvalue +# 2349| getRValue(): [Literal] 0 +# 2349| Type = [BoolType] bool +# 2349| Value = [Literal] 0 +# 2349| ValueCategory = prvalue +# 2350| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2350| Type = [VoidType] void +# 2350| ValueCategory = prvalue +# 2350| getQualifier(): [VariableAccess] B +# 2350| Type = [Class] Bool +# 2350| ValueCategory = lvalue +# 2350| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2350| Type = [VoidType] void +# 2350| ValueCategory = prvalue +# 2350| getQualifier(): [VariableAccess] B +# 2350| Type = [Class] Bool +# 2350| ValueCategory = lvalue +# 2352| getStmt(2): [ReturnStmt] return ... +# 2354| [TopLevelFunction] void VoidFunc() +# 2354| : +# 2354| getEntryPoint(): [BlockStmt] { ... } +# 2354| getStmt(0): [ReturnStmt] return ... +# 2356| [TopLevelFunction] void IfReturnDestructors(bool) +# 2356| : +# 2356| getParameter(0): [Parameter] b +# 2356| Type = [BoolType] bool +# 2356| getEntryPoint(): [BlockStmt] { ... } +# 2357| getStmt(0): [DeclStmt] declaration +# 2357| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2357| Type = [Struct] String +# 2357| getVariable().getInitializer(): [Initializer] initializer for s +# 2357| getExpr(): [ConstructorCall] call to String +# 2357| Type = [VoidType] void +# 2357| ValueCategory = prvalue +# 2358| getStmt(1): [IfStmt] if (...) ... +# 2358| getCondition(): [VariableAccess] b +# 2358| Type = [BoolType] bool +# 2358| ValueCategory = prvalue(load) +# 2358| getThen(): [BlockStmt] { ... } +# 2359| getStmt(0): [ReturnStmt] return ... +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2361| getStmt(2): [IfStmt] if (...) ... +# 2361| getCondition(): [VariableAccess] b +# 2361| Type = [BoolType] bool +# 2361| ValueCategory = prvalue(load) +# 2361| getThen(): [BlockStmt] { ... } +# 2362| getStmt(0): [ReturnStmt] return ... +# 2362| getExpr(): [FunctionCall] call to VoidFunc # 2362| Type = [VoidType] void # 2362| ValueCategory = prvalue -# 2363| getStmt(1): [ReturnStmt] return ... -# 2363| getExpr(): [FunctionCall] call to VoidFunc -# 2363| Type = [VoidType] void -# 2363| ValueCategory = prvalue -# 2364| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2364| Type = [VoidType] void -# 2364| ValueCategory = prvalue -# 2364| getQualifier(): [VariableAccess] s -# 2364| Type = [Struct] String -# 2364| ValueCategory = lvalue -# 2367| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2364| getStmt(3): [ExprStmt] ExprStmt +# 2364| getExpr(): [VariableAccess] s +# 2364| Type = [Struct] String +# 2364| ValueCategory = lvalue +# 2365| getStmt(4): [ReturnStmt] return ... +# 2365| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2365| Type = [VoidType] void +# 2365| ValueCategory = prvalue +# 2365| getQualifier(): [VariableAccess] s +# 2365| Type = [Struct] String +# 2365| ValueCategory = lvalue +# 2367| [TopLevelFunction] int IfReturnDestructors3(bool) # 2367| : +# 2367| getParameter(0): [Parameter] b +# 2367| Type = [BoolType] bool +# 2367| getEntryPoint(): [BlockStmt] { ... } +# 2368| getStmt(0): [DeclStmt] declaration +# 2368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2368| Type = [Struct] String +# 2368| getVariable().getInitializer(): [Initializer] initializer for s +# 2368| getExpr(): [ConstructorCall] call to String +# 2368| Type = [VoidType] void +# 2368| ValueCategory = prvalue +# 2369| getStmt(1): [IfStmt] if (...) ... +# 2369| getCondition(): [VariableAccess] b +# 2369| Type = [BoolType] bool +# 2369| ValueCategory = prvalue(load) +# 2369| getThen(): [BlockStmt] { ... } +# 2370| getStmt(0): [ReturnStmt] return ... +# 2370| getExpr(): [Literal] 1 +# 2370| Type = [IntType] int +# 2370| Value = [Literal] 1 +# 2370| ValueCategory = prvalue +# 2373| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2373| Type = [VoidType] void +# 2373| ValueCategory = prvalue +# 2373| getQualifier(): [VariableAccess] s +# 2373| Type = [Struct] String +# 2373| ValueCategory = lvalue +# 2372| getStmt(2): [ReturnStmt] return ... +# 2372| getExpr(): [Literal] 0 +# 2372| Type = [IntType] int +# 2372| Value = [Literal] 0 +# 2372| ValueCategory = prvalue +# 2373| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2373| Type = [VoidType] void +# 2373| ValueCategory = prvalue +# 2373| getQualifier(): [VariableAccess] s +# 2373| Type = [Struct] String +# 2373| ValueCategory = lvalue +# 2375| [TopLevelFunction] void VoidReturnDestructors() +# 2375| : +# 2375| getEntryPoint(): [BlockStmt] { ... } +# 2376| getStmt(0): [DeclStmt] declaration +# 2376| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2376| Type = [Struct] String +# 2376| getVariable().getInitializer(): [Initializer] initializer for s +# 2376| getExpr(): [ConstructorCall] call to String +# 2376| Type = [VoidType] void +# 2376| ValueCategory = prvalue +# 2377| getStmt(1): [ReturnStmt] return ... +# 2377| getExpr(): [FunctionCall] call to VoidFunc +# 2377| Type = [VoidType] void +# 2377| ValueCategory = prvalue +# 2378| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2378| Type = [VoidType] void +# 2378| ValueCategory = prvalue +# 2378| getQualifier(): [VariableAccess] s +# 2378| Type = [Struct] String +# 2378| ValueCategory = lvalue +# 2381| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) +# 2381| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasVoidToIntFunc & -# 2367| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) -# 2367| : +# 2381| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) +# 2381| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasVoidToIntFunc && -# 2369| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) -# 2369| : -# 2369| getParameter(0): [Parameter] (unnamed parameter 0) -# 2369| Type = [IntType] int -# 2374| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| : -# 2375| getEntryPoint(): [BlockStmt] { ... } -# 2376| getStmt(0): [ReturnStmt] return ... -# 2376| getExpr(): [FunctionAccess] VoidToInt -# 2376| Type = [RoutineType] ..()(..) -# 2376| ValueCategory = prvalue -# 2381| [TopLevelFunction] int small_operation_should_not_be_constant_folded() -# 2381| : -# 2381| getEntryPoint(): [BlockStmt] { ... } -# 2382| getStmt(0): [ReturnStmt] return ... -# 2382| getExpr(): [BitwiseXorExpr] ... ^ ... -# 2382| Type = [IntType] int -# 2382| Value = [BitwiseXorExpr] 3 -# 2382| ValueCategory = prvalue -# 2382| getLeftOperand(): [Literal] 1 -# 2382| Type = [IntType] int -# 2382| Value = [Literal] 1 -# 2382| ValueCategory = prvalue -# 2382| getRightOperand(): [Literal] 2 -# 2382| Type = [IntType] int -# 2382| Value = [Literal] 2 -# 2382| ValueCategory = prvalue -# 2392| [TopLevelFunction] int large_operation_should_be_constant_folded() -# 2392| : -# 2392| getEntryPoint(): [BlockStmt] { ... } -# 2393| getStmt(0): [ReturnStmt] return ... -# 2393| getExpr(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [BitwiseXorExpr] ... ^ ... -# 2393| Type = [IntType] int -# 2393| Value = [BitwiseXorExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand(): [Literal] 1 -# 2393| Type = [IntType] int -# 2393| Value = [Literal] 1 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2393| getExpr().getFullyConverted(): [ParenthesisExpr] (...) -# 2393| Type = [IntType] int -# 2393| Value = [ParenthesisExpr] 0 -# 2393| ValueCategory = prvalue -# 2396| [TopLevelFunction] void initialization_with_temp_destructor() -# 2396| : -# 2396| getEntryPoint(): [BlockStmt] { ... } -# 2397| getStmt(0): [IfStmt] if (...) ... -# 2397| getCondition(): [ConditionDeclExpr] (condition decl) -# 2397| Type = [BoolType] bool -# 2397| ValueCategory = prvalue -# 2397| getVariableAccess(): [VariableAccess] x -# 2397| Type = [PlainCharType] char -# 2397| ValueCategory = prvalue(load) -# 2397| getInitializingExpr(): [FunctionCall] call to get_x -# 2397| Type = [PlainCharType] char -# 2397| ValueCategory = prvalue -# 2397| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2397| Type = [VoidType] void -# 2397| ValueCategory = prvalue -# 2397| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2397| Type = [VoidType] void -# 2397| ValueCategory = prvalue -# 2397| getQualifier(): [ReuseExpr] reuse of temporary object -# 2397| Type = [Class] ClassWithDestructor -# 2397| ValueCategory = xvalue -# 2397| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2397| Type = [Class] ClassWithDestructor -# 2397| ValueCategory = prvalue(load) -# 2397| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 2397| Conversion = [BoolConversion] conversion to bool -# 2397| Type = [BoolType] bool -# 2397| ValueCategory = prvalue -# 2398| getThen(): [ExprStmt] ExprStmt -# 2398| getExpr(): [PostfixIncrExpr] ... ++ -# 2398| Type = [PlainCharType] char -# 2398| ValueCategory = prvalue -# 2398| getOperand(): [VariableAccess] x -# 2398| Type = [PlainCharType] char -# 2398| ValueCategory = lvalue -# 2400| getStmt(1): [IfStmt] if (...) ... -# 2400| getInitialization(): [DeclStmt] declaration -# 2400| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2400| Type = [PlainCharType] char -# 2400| getVariable().getInitializer(): [Initializer] initializer for x -# 2400| getExpr(): [FunctionCall] call to get_x -# 2400| Type = [PlainCharType] char -# 2400| ValueCategory = prvalue -# 2400| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2400| Type = [VoidType] void -# 2400| ValueCategory = prvalue -# 2400| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2400| Type = [VoidType] void -# 2400| ValueCategory = prvalue -# 2400| getQualifier(): [ReuseExpr] reuse of temporary object -# 2400| Type = [Class] ClassWithDestructor -# 2400| ValueCategory = xvalue -# 2400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2400| Type = [Class] ClassWithDestructor -# 2400| ValueCategory = prvalue(load) -# 2400| getCondition(): [VariableAccess] x -# 2400| Type = [PlainCharType] char -# 2400| ValueCategory = prvalue(load) -# 2401| getThen(): [ExprStmt] ExprStmt -# 2401| getExpr(): [PostfixIncrExpr] ... ++ -# 2401| Type = [PlainCharType] char -# 2401| ValueCategory = prvalue -# 2401| getOperand(): [VariableAccess] x -# 2401| Type = [PlainCharType] char -# 2401| ValueCategory = lvalue -# 2400| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 2400| Conversion = [BoolConversion] conversion to bool -# 2400| Type = [BoolType] bool -# 2400| ValueCategory = prvalue -# 2403| getStmt(2): [ConstexprIfStmt] if constexpr (...) ... -# 2403| getInitialization(): [DeclStmt] declaration -# 2403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2403| Type = [PlainCharType] char -# 2403| getVariable().getInitializer(): [Initializer] initializer for x -# 2403| getExpr(): [FunctionCall] call to get_x -# 2403| Type = [PlainCharType] char -# 2403| ValueCategory = prvalue -# 2403| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2403| Type = [VoidType] void -# 2403| ValueCategory = prvalue -# 2403| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2403| Type = [VoidType] void -# 2403| ValueCategory = prvalue -# 2403| getQualifier(): [ReuseExpr] reuse of temporary object -# 2403| Type = [Class] ClassWithDestructor -# 2403| ValueCategory = xvalue -# 2403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2403| Type = [Class] ClassWithDestructor -# 2403| ValueCategory = prvalue(load) -# 2403| getCondition(): [VariableAccess] initialization_with_destructor_bool -# 2403| Type = [BoolType] bool -# 2403| Value = [VariableAccess] 1 -# 2403| ValueCategory = prvalue(load) -# 2404| getThen(): [ExprStmt] ExprStmt -# 2404| getExpr(): [PostfixIncrExpr] ... ++ -# 2404| Type = [PlainCharType] char -# 2404| ValueCategory = prvalue -# 2404| getOperand(): [VariableAccess] x -# 2404| Type = [PlainCharType] char -# 2404| ValueCategory = lvalue -# 2406| getStmt(3): [SwitchStmt] switch (...) ... -# 2406| getExpr(): [ConditionDeclExpr] (condition decl) -# 2406| Type = [IntType] int -# 2406| ValueCategory = prvalue -# 2406| getVariableAccess(): [VariableAccess] x -# 2406| Type = [PlainCharType] char -# 2406| ValueCategory = prvalue(load) -# 2406| getInitializingExpr(): [FunctionCall] call to get_x -# 2406| Type = [PlainCharType] char -# 2406| ValueCategory = prvalue -# 2406| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2406| Type = [VoidType] void -# 2406| ValueCategory = prvalue -# 2406| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2406| Type = [VoidType] void -# 2406| ValueCategory = prvalue -# 2406| getQualifier(): [ReuseExpr] reuse of temporary object -# 2406| Type = [Class] ClassWithDestructor -# 2406| ValueCategory = xvalue -# 2406| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2406| Type = [Class] ClassWithDestructor -# 2406| ValueCategory = prvalue(load) -# 2406| getVariableAccess().getFullyConverted(): [CStyleCast] (int)... -# 2406| Conversion = [IntegralConversion] integral conversion -# 2406| Type = [IntType] int -# 2406| ValueCategory = prvalue -# 2406| getStmt(): [BlockStmt] { ... } -# 2407| getStmt(0): [SwitchCase] case ...: -# 2407| getExpr(): [CharLiteral] 97 -# 2407| Type = [PlainCharType] char -# 2407| Value = [CharLiteral] 97 -# 2407| ValueCategory = prvalue -# 2407| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2407| Conversion = [IntegralConversion] integral conversion +# 2383| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) +# 2383| : +# 2383| getParameter(0): [Parameter] (unnamed parameter 0) +# 2383| Type = [IntType] int +# 2388| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| : +# 2389| getEntryPoint(): [BlockStmt] { ... } +# 2390| getStmt(0): [ReturnStmt] return ... +# 2390| getExpr(): [FunctionAccess] VoidToInt +# 2390| Type = [RoutineType] ..()(..) +# 2390| ValueCategory = prvalue +# 2395| [TopLevelFunction] int small_operation_should_not_be_constant_folded() +# 2395| : +# 2395| getEntryPoint(): [BlockStmt] { ... } +# 2396| getStmt(0): [ReturnStmt] return ... +# 2396| getExpr(): [BitwiseXorExpr] ... ^ ... +# 2396| Type = [IntType] int +# 2396| Value = [BitwiseXorExpr] 3 +# 2396| ValueCategory = prvalue +# 2396| getLeftOperand(): [Literal] 1 +# 2396| Type = [IntType] int +# 2396| Value = [Literal] 1 +# 2396| ValueCategory = prvalue +# 2396| getRightOperand(): [Literal] 2 +# 2396| Type = [IntType] int +# 2396| Value = [Literal] 2 +# 2396| ValueCategory = prvalue +# 2406| [TopLevelFunction] int large_operation_should_be_constant_folded() +# 2406| : +# 2406| getEntryPoint(): [BlockStmt] { ... } +# 2407| getStmt(0): [ReturnStmt] return ... +# 2407| getExpr(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... # 2407| Type = [IntType] int -# 2407| Value = [CStyleCast] 97 +# 2407| Value = [BitwiseXorExpr] 0 # 2407| ValueCategory = prvalue -# 2408| getStmt(1): [ExprStmt] ExprStmt -# 2408| getExpr(): [PostfixIncrExpr] ... ++ -# 2408| Type = [PlainCharType] char -# 2408| ValueCategory = prvalue -# 2408| getOperand(): [VariableAccess] x -# 2408| Type = [PlainCharType] char -# 2408| ValueCategory = lvalue -# 2411| getStmt(4): [SwitchStmt] switch (...) ... -# 2411| getInitialization(): [DeclStmt] declaration -# 2411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2411| Type = [PlainCharType] char -# 2411| getVariable().getInitializer(): [Initializer] initializer for x -# 2411| getExpr(): [FunctionCall] call to get_x -# 2411| Type = [PlainCharType] char -# 2411| ValueCategory = prvalue -# 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2411| Type = [VoidType] void -# 2411| ValueCategory = prvalue -# 2411| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2411| Type = [VoidType] void -# 2411| ValueCategory = prvalue -# 2411| getQualifier(): [ReuseExpr] reuse of temporary object -# 2411| Type = [Class] ClassWithDestructor -# 2411| ValueCategory = xvalue -# 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2411| Type = [Class] ClassWithDestructor -# 2411| ValueCategory = prvalue(load) -# 2411| getExpr(): [VariableAccess] x -# 2411| Type = [PlainCharType] char -# 2411| ValueCategory = prvalue(load) -# 2411| getStmt(): [BlockStmt] { ... } -# 2412| getStmt(0): [SwitchCase] case ...: -# 2412| getExpr(): [CharLiteral] 97 -# 2412| Type = [PlainCharType] char -# 2412| Value = [CharLiteral] 97 -# 2412| ValueCategory = prvalue -# 2412| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2412| Conversion = [IntegralConversion] integral conversion -# 2412| Type = [IntType] int -# 2412| Value = [CStyleCast] 97 -# 2412| ValueCategory = prvalue -# 2413| getStmt(1): [ExprStmt] ExprStmt -# 2413| getExpr(): [PostfixIncrExpr] ... ++ -# 2413| Type = [PlainCharType] char -# 2413| ValueCategory = prvalue -# 2413| getOperand(): [VariableAccess] x -# 2413| Type = [PlainCharType] char -# 2413| ValueCategory = lvalue -# 2411| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2411| Conversion = [IntegralConversion] integral conversion -# 2411| Type = [IntType] int +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [BitwiseXorExpr] ... ^ ... +# 2407| Type = [IntType] int +# 2407| Value = [BitwiseXorExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand(): [Literal] 1 +# 2407| Type = [IntType] int +# 2407| Value = [Literal] 1 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getRightOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2407| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2407| Type = [IntType] int +# 2407| Value = [ParenthesisExpr] 0 +# 2407| ValueCategory = prvalue +# 2410| [TopLevelFunction] void initialization_with_temp_destructor() +# 2410| : +# 2410| getEntryPoint(): [BlockStmt] { ... } +# 2411| getStmt(0): [IfStmt] if (...) ... +# 2411| getCondition(): [ConditionDeclExpr] (condition decl) +# 2411| Type = [BoolType] bool # 2411| ValueCategory = prvalue -# 2416| getStmt(5): [RangeBasedForStmt] for(...:...) ... -# 2416| getInitialization(): [DeclStmt] declaration -# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2416| Type = [PlainCharType] char -# 2416| getVariable().getInitializer(): [Initializer] initializer for x -# 2416| getExpr(): [FunctionCall] call to get_x -# 2416| Type = [PlainCharType] char -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [ConstructorCall] call to ClassWithDestructor -# 2416| Type = [VoidType] void -# 2416| ValueCategory = prvalue -# 2416| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2416| Type = [VoidType] void -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [ReuseExpr] reuse of temporary object -# 2416| Type = [Class] ClassWithDestructor -# 2416| ValueCategory = xvalue -# 2416| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2416| Type = [Class] ClassWithDestructor -# 2416| ValueCategory = prvalue(load) -# 2416| getChild(1): [DeclStmt] declaration -# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2416| Type = [RValueReferenceType] vector && +# 2411| getVariableAccess(): [VariableAccess] x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue(load) +# 2411| getInitializingExpr(): [FunctionCall] call to get_x +# 2411| Type = [PlainCharType] char +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2411| Type = [VoidType] void +# 2411| ValueCategory = prvalue +# 2411| getQualifier(): [ReuseExpr] reuse of temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = xvalue +# 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2411| Type = [Class] ClassWithDestructor +# 2411| ValueCategory = prvalue(load) +# 2411| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 2411| Conversion = [BoolConversion] conversion to bool +# 2411| Type = [BoolType] bool +# 2411| ValueCategory = prvalue +# 2412| getThen(): [ExprStmt] ExprStmt +# 2412| getExpr(): [PostfixIncrExpr] ... ++ +# 2412| Type = [PlainCharType] char +# 2412| ValueCategory = prvalue +# 2412| getOperand(): [VariableAccess] x +# 2412| Type = [PlainCharType] char +# 2412| ValueCategory = lvalue +# 2414| getStmt(1): [IfStmt] if (...) ... +# 2414| getInitialization(): [DeclStmt] declaration +# 2414| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2414| Type = [PlainCharType] char +# 2414| getVariable().getInitializer(): [Initializer] initializer for x +# 2414| getExpr(): [FunctionCall] call to get_x +# 2414| Type = [PlainCharType] char +# 2414| ValueCategory = prvalue +# 2414| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2414| Type = [VoidType] void +# 2414| ValueCategory = prvalue +# 2414| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2414| Type = [VoidType] void +# 2414| ValueCategory = prvalue +# 2414| getQualifier(): [ReuseExpr] reuse of temporary object +# 2414| Type = [Class] ClassWithDestructor +# 2414| ValueCategory = xvalue +# 2414| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2414| Type = [Class] ClassWithDestructor +# 2414| ValueCategory = prvalue(load) +# 2414| getCondition(): [VariableAccess] x +# 2414| Type = [PlainCharType] char +# 2414| ValueCategory = prvalue(load) +# 2415| getThen(): [ExprStmt] ExprStmt +# 2415| getExpr(): [PostfixIncrExpr] ... ++ +# 2415| Type = [PlainCharType] char +# 2415| ValueCategory = prvalue +# 2415| getOperand(): [VariableAccess] x +# 2415| Type = [PlainCharType] char +# 2415| ValueCategory = lvalue +# 2414| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 2414| Conversion = [BoolConversion] conversion to bool +# 2414| Type = [BoolType] bool +# 2414| ValueCategory = prvalue +# 2417| getStmt(2): [ConstexprIfStmt] if constexpr (...) ... +# 2417| getInitialization(): [DeclStmt] declaration +# 2417| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2417| Type = [PlainCharType] char +# 2417| getVariable().getInitializer(): [Initializer] initializer for x +# 2417| getExpr(): [FunctionCall] call to get_x +# 2417| Type = [PlainCharType] char +# 2417| ValueCategory = prvalue +# 2417| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2417| Type = [VoidType] void +# 2417| ValueCategory = prvalue +# 2417| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2417| Type = [VoidType] void +# 2417| ValueCategory = prvalue +# 2417| getQualifier(): [ReuseExpr] reuse of temporary object +# 2417| Type = [Class] ClassWithDestructor +# 2417| ValueCategory = xvalue +# 2417| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2417| Type = [Class] ClassWithDestructor +# 2417| ValueCategory = prvalue(load) +# 2417| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2417| Type = [BoolType] bool +# 2417| Value = [VariableAccess] 1 +# 2417| ValueCategory = prvalue(load) +# 2418| getThen(): [ExprStmt] ExprStmt +# 2418| getExpr(): [PostfixIncrExpr] ... ++ +# 2418| Type = [PlainCharType] char +# 2418| ValueCategory = prvalue +# 2418| getOperand(): [VariableAccess] x +# 2418| Type = [PlainCharType] char +# 2418| ValueCategory = lvalue +# 2420| getStmt(3): [SwitchStmt] switch (...) ... +# 2420| getExpr(): [ConditionDeclExpr] (condition decl) +# 2420| Type = [IntType] int +# 2420| ValueCategory = prvalue +# 2420| getVariableAccess(): [VariableAccess] x +# 2420| Type = [PlainCharType] char +# 2420| ValueCategory = prvalue(load) +# 2420| getInitializingExpr(): [FunctionCall] call to get_x +# 2420| Type = [PlainCharType] char +# 2420| ValueCategory = prvalue +# 2420| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2420| Type = [VoidType] void +# 2420| ValueCategory = prvalue +# 2420| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2420| Type = [VoidType] void +# 2420| ValueCategory = prvalue +# 2420| getQualifier(): [ReuseExpr] reuse of temporary object +# 2420| Type = [Class] ClassWithDestructor +# 2420| ValueCategory = xvalue +# 2420| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2420| Type = [Class] ClassWithDestructor +# 2420| ValueCategory = prvalue(load) +# 2420| getVariableAccess().getFullyConverted(): [CStyleCast] (int)... +# 2420| Conversion = [IntegralConversion] integral conversion +# 2420| Type = [IntType] int +# 2420| ValueCategory = prvalue +# 2420| getStmt(): [BlockStmt] { ... } +# 2421| getStmt(0): [SwitchCase] case ...: +# 2421| getExpr(): [CharLiteral] 97 +# 2421| Type = [PlainCharType] char +# 2421| Value = [CharLiteral] 97 +# 2421| ValueCategory = prvalue +# 2421| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2421| Conversion = [IntegralConversion] integral conversion +# 2421| Type = [IntType] int +# 2421| Value = [CStyleCast] 97 +# 2421| ValueCategory = prvalue +# 2422| getStmt(1): [ExprStmt] ExprStmt +# 2422| getExpr(): [PostfixIncrExpr] ... ++ +# 2422| Type = [PlainCharType] char +# 2422| ValueCategory = prvalue +# 2422| getOperand(): [VariableAccess] x +# 2422| Type = [PlainCharType] char +# 2422| ValueCategory = lvalue +# 2425| getStmt(4): [SwitchStmt] switch (...) ... +# 2425| getInitialization(): [DeclStmt] declaration +# 2425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2425| Type = [PlainCharType] char +# 2425| getVariable().getInitializer(): [Initializer] initializer for x +# 2425| getExpr(): [FunctionCall] call to get_x +# 2425| Type = [PlainCharType] char +# 2425| ValueCategory = prvalue +# 2425| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2425| Type = [VoidType] void +# 2425| ValueCategory = prvalue +# 2425| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2425| Type = [VoidType] void +# 2425| ValueCategory = prvalue +# 2425| getQualifier(): [ReuseExpr] reuse of temporary object +# 2425| Type = [Class] ClassWithDestructor +# 2425| ValueCategory = xvalue +# 2425| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2425| Type = [Class] ClassWithDestructor +# 2425| ValueCategory = prvalue(load) +# 2425| getExpr(): [VariableAccess] x +# 2425| Type = [PlainCharType] char +# 2425| ValueCategory = prvalue(load) +# 2425| getStmt(): [BlockStmt] { ... } +# 2426| getStmt(0): [SwitchCase] case ...: +# 2426| getExpr(): [CharLiteral] 97 +# 2426| Type = [PlainCharType] char +# 2426| Value = [CharLiteral] 97 +# 2426| ValueCategory = prvalue +# 2426| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2426| Conversion = [IntegralConversion] integral conversion +# 2426| Type = [IntType] int +# 2426| Value = [CStyleCast] 97 +# 2426| ValueCategory = prvalue +# 2427| getStmt(1): [ExprStmt] ExprStmt +# 2427| getExpr(): [PostfixIncrExpr] ... ++ +# 2427| Type = [PlainCharType] char +# 2427| ValueCategory = prvalue +# 2427| getOperand(): [VariableAccess] x +# 2427| Type = [PlainCharType] char +# 2427| ValueCategory = lvalue +# 2425| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2425| Conversion = [IntegralConversion] integral conversion +# 2425| Type = [IntType] int +# 2425| ValueCategory = prvalue +# 2430| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2430| getInitialization(): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2430| Type = [PlainCharType] char +# 2430| getVariable().getInitializer(): [Initializer] initializer for x +# 2430| getExpr(): [FunctionCall] call to get_x +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [ConstructorCall] call to ClassWithDestructor +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [ReuseExpr] reuse of temporary object +# 2430| Type = [Class] ClassWithDestructor +# 2430| ValueCategory = xvalue +# 2430| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2430| Type = [Class] ClassWithDestructor +# 2430| ValueCategory = prvalue(load) +# 2430| getChild(1): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2430| Type = [RValueReferenceType] vector && #-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2416| getExpr(): [ConstructorCall] call to vector -# 2416| Type = [VoidType] void -# 2416| ValueCategory = prvalue -# 2416| getArgument(0): [VariableAccess] x -# 2416| Type = [PlainCharType] char -# 2416| ValueCategory = prvalue(load) -# 2416| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2416| Type = [LValueReferenceType] vector & -# 2416| ValueCategory = prvalue -# 2416| getExpr(): [TemporaryObjectExpr] temporary object -# 2416| Type = [ClassTemplateInstantiation,Struct] vector -# 2416| ValueCategory = xvalue -# 2416| getBeginEndDeclaration(): [DeclStmt] declaration -# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| getExpr(): [ConstructorCall] call to vector +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getArgument(0): [VariableAccess] x +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue(load) +# 2430| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2430| Type = [LValueReferenceType] vector & +# 2430| ValueCategory = prvalue +# 2430| getExpr(): [TemporaryObjectExpr] temporary object +# 2430| Type = [ClassTemplateInstantiation,Struct] vector +# 2430| ValueCategory = xvalue +# 2430| getBeginEndDeclaration(): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2416| getExpr(): [FunctionCall] call to begin -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [VariableAccess] (__range) -# 2416| Type = [RValueReferenceType] vector && -# 2416| ValueCategory = prvalue(load) +# 2430| getExpr(): [FunctionCall] call to begin +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__range) +# 2430| Type = [RValueReferenceType] vector && +# 2430| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const vector @@ -20032,15 +20080,15 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ClassTemplateInstantiation,Struct] vector #-----| ValueCategory = lvalue -# 2416| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator #-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2416| getExpr(): [FunctionCall] call to end -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [VariableAccess] (__range) -# 2416| Type = [RValueReferenceType] vector && -# 2416| ValueCategory = prvalue(load) +# 2430| getExpr(): [FunctionCall] call to end +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__range) +# 2430| Type = [RValueReferenceType] vector && +# 2430| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const vector @@ -20048,18 +20096,18 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ClassTemplateInstantiation,Struct] vector #-----| ValueCategory = lvalue -# 2416| getCondition(): [FunctionCall] call to operator!= -# 2416| Type = [BoolType] bool -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [VariableAccess] (__begin) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = lvalue -# 2416| getArgument(0): [ConstructorCall] call to iterator -# 2416| Type = [VoidType] void -# 2416| ValueCategory = prvalue -# 2416| getArgument(0): [VariableAccess] (__end) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = lvalue +# 2430| getCondition(): [FunctionCall] call to operator!= +# 2430| Type = [BoolType] bool +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +# 2430| getArgument(0): [ConstructorCall] call to iterator +# 2430| Type = [VoidType] void +# 2430| ValueCategory = prvalue +# 2430| getArgument(0): [VariableAccess] (__end) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue #-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] const iterator & #-----| ValueCategory = prvalue @@ -20074,47 +20122,47 @@ ir.cpp: #-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [ClassTemplateInstantiation,Struct] iterator #-----| ValueCategory = lvalue -# 2416| getUpdate(): [FunctionCall] call to operator++ -# 2416| Type = [LValueReferenceType] iterator & -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [VariableAccess] (__begin) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = lvalue -# 2416| getChild(5): [DeclStmt] declaration -# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2416| Type = [PlainCharType] char -# 2416| getVariable().getInitializer(): [Initializer] initializer for y -# 2416| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2416| Type = [LValueReferenceType] char & -# 2416| ValueCategory = prvalue -# 2416| getQualifier(): [VariableAccess] (__begin) -# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator -# 2416| ValueCategory = lvalue +# 2430| getUpdate(): [FunctionCall] call to operator++ +# 2430| Type = [LValueReferenceType] iterator & +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue +# 2430| getChild(5): [DeclStmt] declaration +# 2430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2430| Type = [PlainCharType] char +# 2430| getVariable().getInitializer(): [Initializer] initializer for y +# 2430| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2430| Type = [LValueReferenceType] char & +# 2430| ValueCategory = prvalue +# 2430| getQualifier(): [VariableAccess] (__begin) +# 2430| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2430| ValueCategory = lvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 2416| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2416| Type = [PlainCharType] char -# 2416| ValueCategory = prvalue(load) -# 2417| getStmt(): [ExprStmt] ExprStmt -# 2417| getExpr(): [AssignAddExpr] ... += ... -# 2417| Type = [PlainCharType] char -# 2417| ValueCategory = lvalue -# 2417| getLValue(): [VariableAccess] y -# 2417| Type = [PlainCharType] char -# 2417| ValueCategory = lvalue -# 2417| getRValue(): [VariableAccess] x -# 2417| Type = [PlainCharType] char -# 2417| ValueCategory = prvalue(load) -# 2417| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 2417| Conversion = [IntegralConversion] integral conversion -# 2417| Type = [IntType] int -# 2417| ValueCategory = prvalue -# 2416| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2416| Type = [ClassTemplateInstantiation,Struct] iterator -# 2416| ValueCategory = lvalue -# 2418| getStmt(6): [ReturnStmt] return ... +# 2430| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2430| Type = [PlainCharType] char +# 2430| ValueCategory = prvalue(load) +# 2431| getStmt(): [ExprStmt] ExprStmt +# 2431| getExpr(): [AssignAddExpr] ... += ... +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = lvalue +# 2431| getLValue(): [VariableAccess] y +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = lvalue +# 2431| getRValue(): [VariableAccess] x +# 2431| Type = [PlainCharType] char +# 2431| ValueCategory = prvalue(load) +# 2431| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 2431| Conversion = [IntegralConversion] integral conversion +# 2431| Type = [IntType] int +# 2431| ValueCategory = prvalue +# 2430| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2430| Type = [ClassTemplateInstantiation,Struct] iterator +# 2430| ValueCategory = lvalue +# 2432| getStmt(6): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : 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 cb7eb8386d0..cbf32f3aab3 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -11624,2337 +11624,1991 @@ ir.cpp: # 1932| v1932_6(void) = AliasedUse : ~m1934_5 # 1932| v1932_7(void) = ExitFunction : -# 1938| char global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| m1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(char) = Constant[42] : -# 1938| m1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 -# 1938| v1938_7(void) = ReturnVoid : -# 1938| v1938_8(void) = AliasedUse : ~m1938_6 -# 1938| v1938_9(void) = ExitFunction : +# 1939| int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| Block 0 +# 1939| v1939_1(void) = EnterFunction : +# 1939| m1939_2(unknown) = AliasedDefinition : +# 1939| m1939_3(unknown) = InitializeNonLocal : +# 1939| m1939_4(unknown) = Chi : total:m1939_2, partial:m1939_3 +# 1939| r1939_5(glval) = VariableAddress[#this] : +# 1939| m1939_6(glval>) = InitializeParameter[#this] : &:r1939_5 +# 1939| r1939_7(glval>) = Load[#this] : &:r1939_5, m1939_6 +# 1939| m1939_8(Bar3) = InitializeIndirection[#this] : &:r1939_7 +# 1942| r1942_1(glval) = VariableAddress[#return] : +# 1942| r1942_2(glval) = VariableAddress[g] : +# 1942| r1942_3(int) = Load[g] : &:r1942_2, ~m1939_3 +# 1942| m1942_4(int) = Store[#return] : &:r1942_1, r1942_3 +# 1939| v1939_9(void) = ReturnIndirection[#this] : &:r1939_7, m1939_8 +# 1939| r1939_10(glval) = VariableAddress[#return] : +# 1939| v1939_11(void) = ReturnValue : &:r1939_10, m1942_4 +# 1939| v1939_12(void) = AliasedUse : m1939_3 +# 1939| v1939_13(void) = ExitFunction : -# 1938| int global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| m1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(int) = Constant[42] : -# 1938| m1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 -# 1938| v1938_7(void) = ReturnVoid : -# 1938| v1938_8(void) = AliasedUse : ~m1938_6 -# 1938| v1938_9(void) = ExitFunction : +# 1946| void missing_declaration_entries::test3() +# 1946| Block 0 +# 1946| v1946_1(void) = EnterFunction : +# 1946| m1946_2(unknown) = AliasedDefinition : +# 1946| m1946_3(unknown) = InitializeNonLocal : +# 1946| m1946_4(unknown) = Chi : total:m1946_2, partial:m1946_3 +# 1947| r1947_1(glval>) = VariableAddress[b] : +# 1947| m1947_2(Bar3) = Uninitialized[b] : &:r1947_1 +# 1948| r1948_1(glval>) = VariableAddress[b] : +# 1948| r1948_2(glval) = FunctionAddress[two_more_missing_variable_declaration_entries] : +# 1948| r1948_3(int) = Call[two_more_missing_variable_declaration_entries] : func:r1948_2, this:r1948_1 +# 1948| m1948_4(unknown) = ^CallSideEffect : ~m1946_4 +# 1948| m1948_5(unknown) = Chi : total:m1946_4, partial:m1948_4 +# 1948| v1948_6(void) = ^IndirectReadSideEffect[-1] : &:r1948_1, m1947_2 +# 1948| m1948_7(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 +# 1948| m1948_8(Bar3) = Chi : total:m1947_2, partial:m1948_7 +# 1949| v1949_1(void) = NoOp : +# 1946| v1946_5(void) = ReturnVoid : +# 1946| v1946_6(void) = AliasedUse : ~m1948_5 +# 1946| v1946_7(void) = ExitFunction : -# 1940| int test_global_template_int() -# 1940| Block 0 -# 1940| v1940_1(void) = EnterFunction : -# 1940| m1940_2(unknown) = AliasedDefinition : -# 1940| m1940_3(unknown) = InitializeNonLocal : -# 1940| m1940_4(unknown) = Chi : total:m1940_2, partial:m1940_3 -# 1941| r1941_1(glval) = VariableAddress[local_int] : -# 1941| r1941_2(glval) = VariableAddress[global_template] : -# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m1940_3 -# 1941| m1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 -# 1942| r1942_1(glval) = VariableAddress[local_char] : -# 1942| r1942_2(glval) = VariableAddress[global_template] : -# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m1940_3 -# 1942| m1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[local_int] : -# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, m1941_4 -# 1943| r1943_4(glval) = VariableAddress[local_char] : -# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, m1942_4 -# 1943| r1943_6(int) = Convert : r1943_5 -# 1943| r1943_7(int) = Add : r1943_3, r1943_6 -# 1943| m1943_8(int) = Store[#return] : &:r1943_1, r1943_7 -# 1940| r1940_5(glval) = VariableAddress[#return] : -# 1940| v1940_6(void) = ReturnValue : &:r1940_5, m1943_8 -# 1940| v1940_7(void) = AliasedUse : m1940_3 -# 1940| v1940_8(void) = ExitFunction : +# 1952| char global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(char) = Constant[42] : +# 1952| m1952_5(char) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| m1952_6(unknown) = Chi : total:m1952_2, partial:m1952_5 +# 1952| v1952_7(void) = ReturnVoid : +# 1952| v1952_8(void) = AliasedUse : ~m1952_6 +# 1952| v1952_9(void) = ExitFunction : -# 1948| int noreturnTest(int) -# 1948| Block 0 -# 1948| v1948_1(void) = EnterFunction : -# 1948| m1948_2(unknown) = AliasedDefinition : -# 1948| m1948_3(unknown) = InitializeNonLocal : -# 1948| m1948_4(unknown) = Chi : total:m1948_2, partial:m1948_3 -# 1948| r1948_5(glval) = VariableAddress[x] : -# 1948| m1948_6(int) = InitializeParameter[x] : &:r1948_5 -# 1949| r1949_1(glval) = VariableAddress[x] : -# 1949| r1949_2(int) = Load[x] : &:r1949_1, m1948_6 -# 1949| r1949_3(int) = Constant[10] : -# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 -# 1949| v1949_5(void) = ConditionalBranch : r1949_4 +# 1952| int global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(int) = Constant[42] : +# 1952| m1952_5(int) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| m1952_6(unknown) = Chi : total:m1952_2, partial:m1952_5 +# 1952| v1952_7(void) = ReturnVoid : +# 1952| v1952_8(void) = AliasedUse : ~m1952_6 +# 1952| v1952_9(void) = ExitFunction : + +# 1954| int test_global_template_int() +# 1954| Block 0 +# 1954| v1954_1(void) = EnterFunction : +# 1954| m1954_2(unknown) = AliasedDefinition : +# 1954| m1954_3(unknown) = InitializeNonLocal : +# 1954| m1954_4(unknown) = Chi : total:m1954_2, partial:m1954_3 +# 1955| r1955_1(glval) = VariableAddress[local_int] : +# 1955| r1955_2(glval) = VariableAddress[global_template] : +# 1955| r1955_3(int) = Load[global_template] : &:r1955_2, ~m1954_3 +# 1955| m1955_4(int) = Store[local_int] : &:r1955_1, r1955_3 +# 1956| r1956_1(glval) = VariableAddress[local_char] : +# 1956| r1956_2(glval) = VariableAddress[global_template] : +# 1956| r1956_3(char) = Load[global_template] : &:r1956_2, ~m1954_3 +# 1956| m1956_4(char) = Store[local_char] : &:r1956_1, r1956_3 +# 1957| r1957_1(glval) = VariableAddress[#return] : +# 1957| r1957_2(glval) = VariableAddress[local_int] : +# 1957| r1957_3(int) = Load[local_int] : &:r1957_2, m1955_4 +# 1957| r1957_4(glval) = VariableAddress[local_char] : +# 1957| r1957_5(char) = Load[local_char] : &:r1957_4, m1956_4 +# 1957| r1957_6(int) = Convert : r1957_5 +# 1957| r1957_7(int) = Add : r1957_3, r1957_6 +# 1957| m1957_8(int) = Store[#return] : &:r1957_1, r1957_7 +# 1954| r1954_5(glval) = VariableAddress[#return] : +# 1954| v1954_6(void) = ReturnValue : &:r1954_5, m1957_8 +# 1954| v1954_7(void) = AliasedUse : m1954_3 +# 1954| v1954_8(void) = ExitFunction : + +# 1962| int noreturnTest(int) +# 1962| Block 0 +# 1962| v1962_1(void) = EnterFunction : +# 1962| m1962_2(unknown) = AliasedDefinition : +# 1962| m1962_3(unknown) = InitializeNonLocal : +# 1962| m1962_4(unknown) = Chi : total:m1962_2, partial:m1962_3 +# 1962| r1962_5(glval) = VariableAddress[x] : +# 1962| m1962_6(int) = InitializeParameter[x] : &:r1962_5 +# 1963| r1963_1(glval) = VariableAddress[x] : +# 1963| r1963_2(int) = Load[x] : &:r1963_1, m1962_6 +# 1963| r1963_3(int) = Constant[10] : +# 1963| r1963_4(bool) = CompareLT : r1963_2, r1963_3 +# 1963| v1963_5(void) = ConditionalBranch : r1963_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1950| Block 1 -# 1950| r1950_1(glval) = VariableAddress[#return] : -# 1950| r1950_2(glval) = VariableAddress[x] : -# 1950| r1950_3(int) = Load[x] : &:r1950_2, m1948_6 -# 1950| m1950_4(int) = Store[#return] : &:r1950_1, r1950_3 -# 1948| r1948_7(glval) = VariableAddress[#return] : -# 1948| v1948_8(void) = ReturnValue : &:r1948_7, m1950_4 -# 1948| v1948_9(void) = AliasedUse : m1948_3 -# 1948| v1948_10(void) = ExitFunction : - -# 1952| Block 2 -# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : -# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 -# 1952| m1952_3(unknown) = ^CallSideEffect : ~m1948_4 -# 1952| m1952_4(unknown) = Chi : total:m1948_4, partial:m1952_3 -# 1948| v1948_11(void) = Unreached : - -# 1956| int noreturnTest2(int) -# 1956| Block 0 -# 1956| v1956_1(void) = EnterFunction : -# 1956| m1956_2(unknown) = AliasedDefinition : -# 1956| m1956_3(unknown) = InitializeNonLocal : -# 1956| m1956_4(unknown) = Chi : total:m1956_2, partial:m1956_3 -# 1956| r1956_5(glval) = VariableAddress[x] : -# 1956| m1956_6(int) = InitializeParameter[x] : &:r1956_5 -# 1957| r1957_1(glval) = VariableAddress[x] : -# 1957| r1957_2(int) = Load[x] : &:r1957_1, m1956_6 -# 1957| r1957_3(int) = Constant[10] : -# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 -# 1957| v1957_5(void) = ConditionalBranch : r1957_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 1958| Block 1 -# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : -# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 -# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1956_4 -# 1958| m1958_4(unknown) = Chi : total:m1956_4, partial:m1958_3 -# 1956| v1956_7(void) = Unreached : - -# 1960| Block 2 -# 1960| r1960_1(glval) = VariableAddress[#return] : -# 1960| r1960_2(glval) = VariableAddress[x] : -# 1960| r1960_3(int) = Load[x] : &:r1960_2, m1956_6 -# 1960| m1960_4(int) = Store[#return] : &:r1960_1, r1960_3 -# 1956| r1956_8(glval) = VariableAddress[#return] : -# 1956| v1956_9(void) = ReturnValue : &:r1956_8, m1960_4 -# 1956| v1956_10(void) = AliasedUse : m1956_3 -# 1956| v1956_11(void) = ExitFunction : - -# 1963| int static_function(int) -# 1963| Block 0 -# 1963| v1963_1(void) = EnterFunction : -# 1963| m1963_2(unknown) = AliasedDefinition : -# 1963| m1963_3(unknown) = InitializeNonLocal : -# 1963| m1963_4(unknown) = Chi : total:m1963_2, partial:m1963_3 -# 1963| r1963_5(glval) = VariableAddress[x] : -# 1963| m1963_6(int) = InitializeParameter[x] : &:r1963_5 +# 1964| Block 1 # 1964| r1964_1(glval) = VariableAddress[#return] : # 1964| r1964_2(glval) = VariableAddress[x] : -# 1964| r1964_3(int) = Load[x] : &:r1964_2, m1963_6 +# 1964| r1964_3(int) = Load[x] : &:r1964_2, m1962_6 # 1964| m1964_4(int) = Store[#return] : &:r1964_1, r1964_3 -# 1963| r1963_7(glval) = VariableAddress[#return] : -# 1963| v1963_8(void) = ReturnValue : &:r1963_7, m1964_4 -# 1963| v1963_9(void) = AliasedUse : m1963_3 -# 1963| v1963_10(void) = ExitFunction : +# 1962| r1962_7(glval) = VariableAddress[#return] : +# 1962| v1962_8(void) = ReturnValue : &:r1962_7, m1964_4 +# 1962| v1962_9(void) = AliasedUse : m1962_3 +# 1962| v1962_10(void) = ExitFunction : -# 1967| void test_static_functions_with_assignments() -# 1967| Block 0 -# 1967| v1967_1(void) = EnterFunction : -# 1967| m1967_2(unknown) = AliasedDefinition : -# 1967| m1967_3(unknown) = InitializeNonLocal : -# 1967| m1967_4(unknown) = Chi : total:m1967_2, partial:m1967_3 -# 1968| r1968_1(glval) = VariableAddress[c] : -# 1968| m1968_2(C) = Uninitialized[c] : &:r1968_1 -# 1968| r1968_3(glval) = FunctionAddress[C] : -# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 -# 1968| m1968_5(unknown) = ^CallSideEffect : ~m1967_4 -# 1968| m1968_6(unknown) = Chi : total:m1967_4, partial:m1968_5 -# 1968| m1968_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 -# 1968| m1968_8(C) = Chi : total:m1968_2, partial:m1968_7 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[c] : -# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1970| r1970_3(int) = Constant[10] : -# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 -# 1970| m1970_5(unknown) = ^CallSideEffect : ~m1968_6 -# 1970| m1970_6(unknown) = Chi : total:m1968_6, partial:m1970_5 -# 1970| r1970_7(glval) = VariableAddress[x] : -# 1970| m1970_8(int) = Store[x] : &:r1970_7, r1970_4 -# 1971| r1971_1(glval) = VariableAddress[y] : -# 1971| m1971_2(int) = Uninitialized[y] : &:r1971_1 -# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1972| r1972_2(int) = Constant[10] : -# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 -# 1972| m1972_4(unknown) = ^CallSideEffect : ~m1970_6 -# 1972| m1972_5(unknown) = Chi : total:m1970_6, partial:m1972_4 -# 1972| r1972_6(glval) = VariableAddress[y] : -# 1972| m1972_7(int) = Store[y] : &:r1972_6, r1972_3 -# 1973| r1973_1(glval) = VariableAddress[z] : -# 1973| m1973_2(int) = Uninitialized[z] : &:r1973_1 -# 1974| r1974_1(glval) = FunctionAddress[static_function] : -# 1974| r1974_2(int) = Constant[10] : -# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 -# 1974| m1974_4(unknown) = ^CallSideEffect : ~m1972_5 -# 1974| m1974_5(unknown) = Chi : total:m1972_5, partial:m1974_4 -# 1974| r1974_6(glval) = VariableAddress[z] : -# 1974| m1974_7(int) = Store[z] : &:r1974_6, r1974_3 -# 1975| v1975_1(void) = NoOp : -# 1975| r1975_2(glval) = VariableAddress[c] : -# 1975| r1975_3(glval) = FunctionAddress[~C] : -# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 -# 1975| m1975_5(unknown) = ^CallSideEffect : ~m1974_5 -# 1975| m1975_6(unknown) = Chi : total:m1974_5, partial:m1975_5 -# 1975| v1975_7(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, m1968_8 -# 1975| m1975_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 -# 1975| m1975_9(C) = Chi : total:m1968_8, partial:m1975_8 -# 1967| v1967_5(void) = ReturnVoid : -# 1967| v1967_6(void) = AliasedUse : ~m1975_6 -# 1967| v1967_7(void) = ExitFunction : +# 1966| Block 2 +# 1966| r1966_1(glval) = FunctionAddress[noreturnFunc] : +# 1966| v1966_2(void) = Call[noreturnFunc] : func:r1966_1 +# 1966| m1966_3(unknown) = ^CallSideEffect : ~m1962_4 +# 1966| m1966_4(unknown) = Chi : total:m1962_4, partial:m1966_3 +# 1962| v1962_11(void) = Unreached : -# 1977| void test_double_assign() +# 1970| int noreturnTest2(int) +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| m1970_2(unknown) = AliasedDefinition : +# 1970| m1970_3(unknown) = InitializeNonLocal : +# 1970| m1970_4(unknown) = Chi : total:m1970_2, partial:m1970_3 +# 1970| r1970_5(glval) = VariableAddress[x] : +# 1970| m1970_6(int) = InitializeParameter[x] : &:r1970_5 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| r1971_2(int) = Load[x] : &:r1971_1, m1970_6 +# 1971| r1971_3(int) = Constant[10] : +# 1971| r1971_4(bool) = CompareLT : r1971_2, r1971_3 +# 1971| v1971_5(void) = ConditionalBranch : r1971_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 1972| Block 1 +# 1972| r1972_1(glval) = FunctionAddress[noreturnFunc] : +# 1972| v1972_2(void) = Call[noreturnFunc] : func:r1972_1 +# 1972| m1972_3(unknown) = ^CallSideEffect : ~m1970_4 +# 1972| m1972_4(unknown) = Chi : total:m1970_4, partial:m1972_3 +# 1970| v1970_7(void) = Unreached : + +# 1974| Block 2 +# 1974| r1974_1(glval) = VariableAddress[#return] : +# 1974| r1974_2(glval) = VariableAddress[x] : +# 1974| r1974_3(int) = Load[x] : &:r1974_2, m1970_6 +# 1974| m1974_4(int) = Store[#return] : &:r1974_1, r1974_3 +# 1970| r1970_8(glval) = VariableAddress[#return] : +# 1970| v1970_9(void) = ReturnValue : &:r1970_8, m1974_4 +# 1970| v1970_10(void) = AliasedUse : m1970_3 +# 1970| v1970_11(void) = ExitFunction : + +# 1977| int static_function(int) # 1977| Block 0 -# 1977| v1977_1(void) = EnterFunction : -# 1977| m1977_2(unknown) = AliasedDefinition : -# 1977| m1977_3(unknown) = InitializeNonLocal : -# 1977| m1977_4(unknown) = Chi : total:m1977_2, partial:m1977_3 -# 1978| r1978_1(glval) = VariableAddress[i] : -# 1978| m1978_2(int) = Uninitialized[i] : &:r1978_1 -# 1978| r1978_3(glval) = VariableAddress[j] : -# 1978| m1978_4(int) = Uninitialized[j] : &:r1978_3 -# 1979| r1979_1(int) = Constant[40] : -# 1979| r1979_2(glval) = VariableAddress[j] : -# 1979| m1979_3(int) = Store[j] : &:r1979_2, r1979_1 -# 1979| r1979_4(int) = Load[j] : &:r1979_2, m1979_3 -# 1979| r1979_5(glval) = VariableAddress[i] : -# 1979| m1979_6(int) = Store[i] : &:r1979_5, r1979_4 -# 1980| v1980_1(void) = NoOp : -# 1977| v1977_5(void) = ReturnVoid : -# 1977| v1977_6(void) = AliasedUse : m1977_3 -# 1977| v1977_7(void) = ExitFunction : +# 1977| v1977_1(void) = EnterFunction : +# 1977| m1977_2(unknown) = AliasedDefinition : +# 1977| m1977_3(unknown) = InitializeNonLocal : +# 1977| m1977_4(unknown) = Chi : total:m1977_2, partial:m1977_3 +# 1977| r1977_5(glval) = VariableAddress[x] : +# 1977| m1977_6(int) = InitializeParameter[x] : &:r1977_5 +# 1978| r1978_1(glval) = VariableAddress[#return] : +# 1978| r1978_2(glval) = VariableAddress[x] : +# 1978| r1978_3(int) = Load[x] : &:r1978_2, m1977_6 +# 1978| m1978_4(int) = Store[#return] : &:r1978_1, r1978_3 +# 1977| r1977_7(glval) = VariableAddress[#return] : +# 1977| v1977_8(void) = ReturnValue : &:r1977_7, m1978_4 +# 1977| v1977_9(void) = AliasedUse : m1977_3 +# 1977| v1977_10(void) = ExitFunction : -# 1982| void test_assign_with_assign_operation() -# 1982| Block 0 -# 1982| v1982_1(void) = EnterFunction : -# 1982| m1982_2(unknown) = AliasedDefinition : -# 1982| m1982_3(unknown) = InitializeNonLocal : -# 1982| m1982_4(unknown) = Chi : total:m1982_2, partial:m1982_3 -# 1983| r1983_1(glval) = VariableAddress[i] : -# 1983| m1983_2(int) = Uninitialized[i] : &:r1983_1 -# 1983| r1983_3(glval) = VariableAddress[j] : -# 1983| r1983_4(int) = Constant[0] : -# 1983| m1983_5(int) = Store[j] : &:r1983_3, r1983_4 -# 1984| r1984_1(int) = Constant[40] : -# 1984| r1984_2(glval) = VariableAddress[j] : -# 1984| r1984_3(int) = Load[j] : &:r1984_2, m1983_5 -# 1984| r1984_4(int) = Add : r1984_3, r1984_1 -# 1984| m1984_5(int) = Store[j] : &:r1984_2, r1984_4 -# 1984| r1984_6(int) = Load[j] : &:r1984_2, m1984_5 -# 1984| r1984_7(glval) = VariableAddress[i] : -# 1984| m1984_8(int) = Store[i] : &:r1984_7, r1984_6 -# 1985| v1985_1(void) = NoOp : -# 1982| v1982_5(void) = ReturnVoid : -# 1982| v1982_6(void) = AliasedUse : m1982_3 -# 1982| v1982_7(void) = ExitFunction : +# 1981| void test_static_functions_with_assignments() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| m1981_2(unknown) = AliasedDefinition : +# 1981| m1981_3(unknown) = InitializeNonLocal : +# 1981| m1981_4(unknown) = Chi : total:m1981_2, partial:m1981_3 +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| m1982_2(C) = Uninitialized[c] : &:r1982_1 +# 1982| r1982_3(glval) = FunctionAddress[C] : +# 1982| v1982_4(void) = Call[C] : func:r1982_3, this:r1982_1 +# 1982| m1982_5(unknown) = ^CallSideEffect : ~m1981_4 +# 1982| m1982_6(unknown) = Chi : total:m1981_4, partial:m1982_5 +# 1982| m1982_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 +# 1982| m1982_8(C) = Chi : total:m1982_2, partial:m1982_7 +# 1983| r1983_1(glval) = VariableAddress[x] : +# 1983| m1983_2(int) = Uninitialized[x] : &:r1983_1 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1984| r1984_3(int) = Constant[10] : +# 1984| r1984_4(int) = Call[StaticMemberFunction] : func:r1984_2, 0:r1984_3 +# 1984| m1984_5(unknown) = ^CallSideEffect : ~m1982_6 +# 1984| m1984_6(unknown) = Chi : total:m1982_6, partial:m1984_5 +# 1984| r1984_7(glval) = VariableAddress[x] : +# 1984| m1984_8(int) = Store[x] : &:r1984_7, r1984_4 +# 1985| r1985_1(glval) = VariableAddress[y] : +# 1985| m1985_2(int) = Uninitialized[y] : &:r1985_1 +# 1986| r1986_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1986| r1986_2(int) = Constant[10] : +# 1986| r1986_3(int) = Call[StaticMemberFunction] : func:r1986_1, 0:r1986_2 +# 1986| m1986_4(unknown) = ^CallSideEffect : ~m1984_6 +# 1986| m1986_5(unknown) = Chi : total:m1984_6, partial:m1986_4 +# 1986| r1986_6(glval) = VariableAddress[y] : +# 1986| m1986_7(int) = Store[y] : &:r1986_6, r1986_3 +# 1987| r1987_1(glval) = VariableAddress[z] : +# 1987| m1987_2(int) = Uninitialized[z] : &:r1987_1 +# 1988| r1988_1(glval) = FunctionAddress[static_function] : +# 1988| r1988_2(int) = Constant[10] : +# 1988| r1988_3(int) = Call[static_function] : func:r1988_1, 0:r1988_2 +# 1988| m1988_4(unknown) = ^CallSideEffect : ~m1986_5 +# 1988| m1988_5(unknown) = Chi : total:m1986_5, partial:m1988_4 +# 1988| r1988_6(glval) = VariableAddress[z] : +# 1988| m1988_7(int) = Store[z] : &:r1988_6, r1988_3 +# 1989| v1989_1(void) = NoOp : +# 1989| r1989_2(glval) = VariableAddress[c] : +# 1989| r1989_3(glval) = FunctionAddress[~C] : +# 1989| v1989_4(void) = Call[~C] : func:r1989_3, this:r1989_2 +# 1989| m1989_5(unknown) = ^CallSideEffect : ~m1988_5 +# 1989| m1989_6(unknown) = Chi : total:m1988_5, partial:m1989_5 +# 1989| v1989_7(void) = ^IndirectReadSideEffect[-1] : &:r1989_2, m1982_8 +# 1989| m1989_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1989_2 +# 1989| m1989_9(C) = Chi : total:m1982_8, partial:m1989_8 +# 1981| v1981_5(void) = ReturnVoid : +# 1981| v1981_6(void) = AliasedUse : ~m1989_6 +# 1981| v1981_7(void) = ExitFunction : -# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| void test_double_assign() # 1991| Block 0 -# 1991| v1991_1(void) = EnterFunction : -# 1991| m1991_2(unknown) = AliasedDefinition : -# 1991| m1991_3(unknown) = InitializeNonLocal : -# 1991| m1991_4(unknown) = Chi : total:m1991_2, partial:m1991_3 -# 1992| r1992_1(glval) = VariableAddress[#return] : -# 1992| r1992_2(glval) = VariableAddress[x] : -# 1992| r1992_3(D &) = CopyValue : r1992_2 -# 1992| m1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 -# 1991| r1991_5(glval) = VariableAddress[#return] : -# 1991| v1991_6(void) = ReturnValue : &:r1991_5, m1992_4 -# 1991| v1991_7(void) = AliasedUse : m1991_3 -# 1991| v1991_8(void) = ExitFunction : +# 1991| v1991_1(void) = EnterFunction : +# 1991| m1991_2(unknown) = AliasedDefinition : +# 1991| m1991_3(unknown) = InitializeNonLocal : +# 1991| m1991_4(unknown) = Chi : total:m1991_2, partial:m1991_3 +# 1992| r1992_1(glval) = VariableAddress[i] : +# 1992| m1992_2(int) = Uninitialized[i] : &:r1992_1 +# 1992| r1992_3(glval) = VariableAddress[j] : +# 1992| m1992_4(int) = Uninitialized[j] : &:r1992_3 +# 1993| r1993_1(int) = Constant[40] : +# 1993| r1993_2(glval) = VariableAddress[j] : +# 1993| m1993_3(int) = Store[j] : &:r1993_2, r1993_1 +# 1993| r1993_4(int) = Load[j] : &:r1993_2, m1993_3 +# 1993| r1993_5(glval) = VariableAddress[i] : +# 1993| m1993_6(int) = Store[i] : &:r1993_5, r1993_4 +# 1994| v1994_1(void) = NoOp : +# 1991| v1991_5(void) = ReturnVoid : +# 1991| v1991_6(void) = AliasedUse : m1991_3 +# 1991| v1991_7(void) = ExitFunction : -# 1994| D D::ObjectStaticMemberFunction() -# 1994| Block 0 -# 1994| v1994_1(void) = EnterFunction : -# 1994| m1994_2(unknown) = AliasedDefinition : -# 1994| m1994_3(unknown) = InitializeNonLocal : -# 1994| m1994_4(unknown) = Chi : total:m1994_2, partial:m1994_3 -# 1995| r1995_1(glval) = VariableAddress[#return] : -# 1995| r1995_2(glval) = VariableAddress[x] : -# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m1994_3 -# 1995| m1995_4(D) = Store[#return] : &:r1995_1, r1995_3 -# 1994| r1994_5(glval) = VariableAddress[#return] : -# 1994| v1994_6(void) = ReturnValue : &:r1994_5, m1995_4 -# 1994| v1994_7(void) = AliasedUse : m1994_3 -# 1994| v1994_8(void) = ExitFunction : +# 1996| void test_assign_with_assign_operation() +# 1996| Block 0 +# 1996| v1996_1(void) = EnterFunction : +# 1996| m1996_2(unknown) = AliasedDefinition : +# 1996| m1996_3(unknown) = InitializeNonLocal : +# 1996| m1996_4(unknown) = Chi : total:m1996_2, partial:m1996_3 +# 1997| r1997_1(glval) = VariableAddress[i] : +# 1997| m1997_2(int) = Uninitialized[i] : &:r1997_1 +# 1997| r1997_3(glval) = VariableAddress[j] : +# 1997| r1997_4(int) = Constant[0] : +# 1997| m1997_5(int) = Store[j] : &:r1997_3, r1997_4 +# 1998| r1998_1(int) = Constant[40] : +# 1998| r1998_2(glval) = VariableAddress[j] : +# 1998| r1998_3(int) = Load[j] : &:r1998_2, m1997_5 +# 1998| r1998_4(int) = Add : r1998_3, r1998_1 +# 1998| m1998_5(int) = Store[j] : &:r1998_2, r1998_4 +# 1998| r1998_6(int) = Load[j] : &:r1998_2, m1998_5 +# 1998| r1998_7(glval) = VariableAddress[i] : +# 1998| m1998_8(int) = Store[i] : &:r1998_7, r1998_6 +# 1999| v1999_1(void) = NoOp : +# 1996| v1996_5(void) = ReturnVoid : +# 1996| v1996_6(void) = AliasedUse : m1996_3 +# 1996| v1996_7(void) = ExitFunction : -# 1999| void test_static_member_functions_with_reference_return() -# 1999| Block 0 -# 1999| v1999_1(void) = EnterFunction : -# 1999| m1999_2(unknown) = AliasedDefinition : -# 1999| m1999_3(unknown) = InitializeNonLocal : -# 1999| m1999_4(unknown) = Chi : total:m1999_2, partial:m1999_3 -# 2000| r2000_1(glval) = VariableAddress[d] : -# 2000| m2000_2(D) = Uninitialized[d] : &:r2000_1 -# 2002| r2002_1(glval) = VariableAddress[d] : -# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 -# 2002| m2002_4(unknown) = ^CallSideEffect : ~m1999_4 -# 2002| m2002_5(unknown) = Chi : total:m1999_4, partial:m2002_4 -# 2002| r2002_6(glval) = CopyValue : r2002_3 -# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 -# 2003| m2003_3(unknown) = ^CallSideEffect : ~m2002_5 -# 2003| m2003_4(unknown) = Chi : total:m2002_5, partial:m2003_3 -# 2003| r2003_5(glval) = CopyValue : r2003_2 -# 2004| r2004_1(glval) = VariableAddress[d] : -# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 -# 2004| m2004_4(unknown) = ^CallSideEffect : ~m2003_4 -# 2004| m2004_5(unknown) = Chi : total:m2003_4, partial:m2004_4 -# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 -# 2005| m2005_3(unknown) = ^CallSideEffect : ~m2004_5 -# 2005| m2005_4(unknown) = Chi : total:m2004_5, partial:m2005_3 -# 2007| r2007_1(glval) = VariableAddress[x] : -# 2007| m2007_2(D) = Uninitialized[x] : &:r2007_1 -# 2008| r2008_1(glval) = VariableAddress[d] : -# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 -# 2008| m2008_4(unknown) = ^CallSideEffect : ~m2005_4 -# 2008| m2008_5(unknown) = Chi : total:m2005_4, partial:m2008_4 -# 2008| r2008_6(D) = Load[?] : &:r2008_3, ~m2008_5 -# 2008| r2008_7(glval) = VariableAddress[x] : -# 2008| m2008_8(D) = Store[x] : &:r2008_7, r2008_6 -# 2009| r2009_1(glval) = VariableAddress[y] : -# 2009| m2009_2(D) = Uninitialized[y] : &:r2009_1 -# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 -# 2010| m2010_3(unknown) = ^CallSideEffect : ~m2008_5 -# 2010| m2010_4(unknown) = Chi : total:m2008_5, partial:m2010_3 -# 2010| r2010_5(D) = Load[?] : &:r2010_2, ~m2010_4 -# 2010| r2010_6(glval) = VariableAddress[y] : -# 2010| m2010_7(D) = Store[y] : &:r2010_6, r2010_5 -# 2011| r2011_1(glval) = VariableAddress[j] : -# 2011| m2011_2(D) = Uninitialized[j] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[d] : -# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 -# 2012| m2012_4(unknown) = ^CallSideEffect : ~m2010_4 -# 2012| m2012_5(unknown) = Chi : total:m2010_4, partial:m2012_4 -# 2012| r2012_6(glval) = VariableAddress[j] : -# 2012| m2012_7(D) = Store[j] : &:r2012_6, r2012_3 -# 2013| r2013_1(glval) = VariableAddress[k] : -# 2013| m2013_2(D) = Uninitialized[k] : &:r2013_1 -# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 -# 2014| m2014_3(unknown) = ^CallSideEffect : ~m2012_5 -# 2014| m2014_4(unknown) = Chi : total:m2012_5, partial:m2014_3 -# 2014| r2014_5(glval) = VariableAddress[k] : -# 2014| m2014_6(D) = Store[k] : &:r2014_5, r2014_2 -# 2015| v2015_1(void) = NoOp : -# 1999| v1999_5(void) = ReturnVoid : -# 1999| v1999_6(void) = AliasedUse : ~m2014_4 -# 1999| v1999_7(void) = ExitFunction : +# 2005| D& D::ReferenceStaticMemberFunction() +# 2005| Block 0 +# 2005| v2005_1(void) = EnterFunction : +# 2005| m2005_2(unknown) = AliasedDefinition : +# 2005| m2005_3(unknown) = InitializeNonLocal : +# 2005| m2005_4(unknown) = Chi : total:m2005_2, partial:m2005_3 +# 2006| r2006_1(glval) = VariableAddress[#return] : +# 2006| r2006_2(glval) = VariableAddress[x] : +# 2006| r2006_3(D &) = CopyValue : r2006_2 +# 2006| m2006_4(D &) = Store[#return] : &:r2006_1, r2006_3 +# 2005| r2005_5(glval) = VariableAddress[#return] : +# 2005| v2005_6(void) = ReturnValue : &:r2005_5, m2006_4 +# 2005| v2005_7(void) = AliasedUse : m2005_3 +# 2005| v2005_8(void) = ExitFunction : -# 2017| void test_volatile() -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| m2017_2(unknown) = AliasedDefinition : -# 2017| m2017_3(unknown) = InitializeNonLocal : -# 2017| m2017_4(unknown) = Chi : total:m2017_2, partial:m2017_3 -# 2018| r2018_1(glval) = VariableAddress[x] : -# 2018| m2018_2(int) = Uninitialized[x] : &:r2018_1 -# 2019| r2019_1(glval) = VariableAddress[x] : -# 2019| r2019_2(int) = Load[x] : &:r2019_1, m2018_2 -# 2020| v2020_1(void) = NoOp : -# 2017| v2017_5(void) = ReturnVoid : -# 2017| v2017_6(void) = AliasedUse : m2017_3 -# 2017| v2017_7(void) = ExitFunction : +# 2008| D D::ObjectStaticMemberFunction() +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| m2008_2(unknown) = AliasedDefinition : +# 2008| m2008_3(unknown) = InitializeNonLocal : +# 2008| m2008_4(unknown) = Chi : total:m2008_2, partial:m2008_3 +# 2009| r2009_1(glval) = VariableAddress[#return] : +# 2009| r2009_2(glval) = VariableAddress[x] : +# 2009| r2009_3(D) = Load[x] : &:r2009_2, ~m2008_3 +# 2009| m2009_4(D) = Store[#return] : &:r2009_1, r2009_3 +# 2008| r2008_5(glval) = VariableAddress[#return] : +# 2008| v2008_6(void) = ReturnValue : &:r2008_5, m2009_4 +# 2008| v2008_7(void) = AliasedUse : m2008_3 +# 2008| v2008_8(void) = ExitFunction : -# 2028| void value_category_test() -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| m2028_2(unknown) = AliasedDefinition : -# 2028| m2028_3(unknown) = InitializeNonLocal : -# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 -# 2029| r2029_1(glval) = VariableAddress[c] : -# 2029| m2029_2(ValCat) = Uninitialized[c] : &:r2029_1 +# 2013| void test_static_member_functions_with_reference_return() +# 2013| Block 0 +# 2013| v2013_1(void) = EnterFunction : +# 2013| m2013_2(unknown) = AliasedDefinition : +# 2013| m2013_3(unknown) = InitializeNonLocal : +# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 +# 2014| r2014_1(glval) = VariableAddress[d] : +# 2014| m2014_2(D) = Uninitialized[d] : &:r2014_1 +# 2016| r2016_1(glval) = VariableAddress[d] : +# 2016| r2016_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2016| r2016_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2016_2 +# 2016| m2016_4(unknown) = ^CallSideEffect : ~m2013_4 +# 2016| m2016_5(unknown) = Chi : total:m2013_4, partial:m2016_4 +# 2016| r2016_6(glval) = CopyValue : r2016_3 +# 2017| r2017_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2017| r2017_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2017_1 +# 2017| m2017_3(unknown) = ^CallSideEffect : ~m2016_5 +# 2017| m2017_4(unknown) = Chi : total:m2016_5, partial:m2017_3 +# 2017| r2017_5(glval) = CopyValue : r2017_2 +# 2018| r2018_1(glval) = VariableAddress[d] : +# 2018| r2018_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2018| r2018_3(D) = Call[ObjectStaticMemberFunction] : func:r2018_2 +# 2018| m2018_4(unknown) = ^CallSideEffect : ~m2017_4 +# 2018| m2018_5(unknown) = Chi : total:m2017_4, partial:m2018_4 +# 2019| r2019_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2019| r2019_2(D) = Call[ObjectStaticMemberFunction] : func:r2019_1 +# 2019| m2019_3(unknown) = ^CallSideEffect : ~m2018_5 +# 2019| m2019_4(unknown) = Chi : total:m2018_5, partial:m2019_3 +# 2021| r2021_1(glval) = VariableAddress[x] : +# 2021| m2021_2(D) = Uninitialized[x] : &:r2021_1 +# 2022| r2022_1(glval) = VariableAddress[d] : +# 2022| r2022_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2022| r2022_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2022_2 +# 2022| m2022_4(unknown) = ^CallSideEffect : ~m2019_4 +# 2022| m2022_5(unknown) = Chi : total:m2019_4, partial:m2022_4 +# 2022| r2022_6(D) = Load[?] : &:r2022_3, ~m2022_5 +# 2022| r2022_7(glval) = VariableAddress[x] : +# 2022| m2022_8(D) = Store[x] : &:r2022_7, r2022_6 +# 2023| r2023_1(glval) = VariableAddress[y] : +# 2023| m2023_2(D) = Uninitialized[y] : &:r2023_1 +# 2024| r2024_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2024| r2024_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2024_1 +# 2024| m2024_3(unknown) = ^CallSideEffect : ~m2022_5 +# 2024| m2024_4(unknown) = Chi : total:m2022_5, partial:m2024_3 +# 2024| r2024_5(D) = Load[?] : &:r2024_2, ~m2024_4 +# 2024| r2024_6(glval) = VariableAddress[y] : +# 2024| m2024_7(D) = Store[y] : &:r2024_6, r2024_5 +# 2025| r2025_1(glval) = VariableAddress[j] : +# 2025| m2025_2(D) = Uninitialized[j] : &:r2025_1 +# 2026| r2026_1(glval) = VariableAddress[d] : +# 2026| r2026_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2026| r2026_3(D) = Call[ObjectStaticMemberFunction] : func:r2026_2 +# 2026| m2026_4(unknown) = ^CallSideEffect : ~m2024_4 +# 2026| m2026_5(unknown) = Chi : total:m2024_4, partial:m2026_4 +# 2026| r2026_6(glval) = VariableAddress[j] : +# 2026| m2026_7(D) = Store[j] : &:r2026_6, r2026_3 +# 2027| r2027_1(glval) = VariableAddress[k] : +# 2027| m2027_2(D) = Uninitialized[k] : &:r2027_1 +# 2028| r2028_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2028| r2028_2(D) = Call[ObjectStaticMemberFunction] : func:r2028_1 +# 2028| m2028_3(unknown) = ^CallSideEffect : ~m2026_5 +# 2028| m2028_4(unknown) = Chi : total:m2026_5, partial:m2028_3 +# 2028| r2028_5(glval) = VariableAddress[k] : +# 2028| m2028_6(D) = Store[k] : &:r2028_5, r2028_2 +# 2029| v2029_1(void) = NoOp : +# 2013| v2013_5(void) = ReturnVoid : +# 2013| v2013_6(void) = AliasedUse : ~m2028_4 +# 2013| v2013_7(void) = ExitFunction : + +# 2031| void test_volatile() +# 2031| Block 0 +# 2031| v2031_1(void) = EnterFunction : +# 2031| m2031_2(unknown) = AliasedDefinition : +# 2031| m2031_3(unknown) = InitializeNonLocal : +# 2031| m2031_4(unknown) = Chi : total:m2031_2, partial:m2031_3 +# 2032| r2032_1(glval) = VariableAddress[x] : +# 2032| m2032_2(int) = Uninitialized[x] : &:r2032_1 +# 2033| r2033_1(glval) = VariableAddress[x] : +# 2033| r2033_2(int) = Load[x] : &:r2033_1, m2032_2 +# 2034| v2034_1(void) = NoOp : +# 2031| v2031_5(void) = ReturnVoid : +# 2031| v2031_6(void) = AliasedUse : m2031_3 +# 2031| v2031_7(void) = ExitFunction : + +# 2042| void value_category_test() +# 2042| Block 0 +# 2042| v2042_1(void) = EnterFunction : +# 2042| m2042_2(unknown) = AliasedDefinition : +# 2042| m2042_3(unknown) = InitializeNonLocal : +# 2042| m2042_4(unknown) = Chi : total:m2042_2, partial:m2042_3 +# 2043| r2043_1(glval) = VariableAddress[c] : +# 2043| m2043_2(ValCat) = Uninitialized[c] : &:r2043_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| m0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, m0_2 -# 2031| r2031_1(glval) = VariableAddress[c] : -# 2031| r2031_2(glval) = FunctionAddress[lvalue] : -# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 -# 2031| m2031_4(unknown) = ^CallSideEffect : ~m2028_4 -# 2031| m2031_5(unknown) = Chi : total:m2028_4, partial:m2031_4 -# 2031| r2031_6(glval) = CopyValue : r2031_3 -# 2031| m2031_7(ValCat) = Store[?] : &:r2031_6, r0_3 -# 2031| m2031_8(unknown) = Chi : total:m2031_5, partial:m2031_7 +# 2045| r2045_1(glval) = VariableAddress[c] : +# 2045| r2045_2(glval) = FunctionAddress[lvalue] : +# 2045| r2045_3(ValCat &) = Call[lvalue] : func:r2045_2 +# 2045| m2045_4(unknown) = ^CallSideEffect : ~m2042_4 +# 2045| m2045_5(unknown) = Chi : total:m2042_4, partial:m2045_4 +# 2045| r2045_6(glval) = CopyValue : r2045_3 +# 2045| m2045_7(ValCat) = Store[?] : &:r2045_6, r0_3 +# 2045| m2045_8(unknown) = Chi : total:m2045_5, partial:m2045_7 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 -# 2032| r2032_1(glval) = VariableAddress[c] : -# 2032| r2032_2(glval) = FunctionAddress[xvalue] : -# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 -# 2032| m2032_4(unknown) = ^CallSideEffect : ~m2031_8 -# 2032| m2032_5(unknown) = Chi : total:m2031_8, partial:m2032_4 -# 2032| r2032_6(glval) = CopyValue : r2032_3 -# 2032| m2032_7(ValCat) = Store[?] : &:r2032_6, r0_6 -# 2032| m2032_8(unknown) = Chi : total:m2032_5, partial:m2032_7 +# 2046| r2046_1(glval) = VariableAddress[c] : +# 2046| r2046_2(glval) = FunctionAddress[xvalue] : +# 2046| r2046_3(ValCat &&) = Call[xvalue] : func:r2046_2 +# 2046| m2046_4(unknown) = ^CallSideEffect : ~m2045_8 +# 2046| m2046_5(unknown) = Chi : total:m2045_8, partial:m2046_4 +# 2046| r2046_6(glval) = CopyValue : r2046_3 +# 2046| m2046_7(ValCat) = Store[?] : &:r2046_6, r0_6 +# 2046| m2046_8(unknown) = Chi : total:m2046_5, partial:m2046_7 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 -# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : -# 2033| r2033_2(glval) = VariableAddress[c] : -# 2033| r2033_3(glval) = FunctionAddress[prvalue] : -# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 -# 2033| m2033_5(unknown) = ^CallSideEffect : ~m2032_8 -# 2033| m2033_6(unknown) = Chi : total:m2032_8, partial:m2033_5 -# 2033| m2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 -# 2033| m2033_8(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 +# 2047| r2047_1(glval) = VariableAddress[#temp2047:5] : +# 2047| r2047_2(glval) = VariableAddress[c] : +# 2047| r2047_3(glval) = FunctionAddress[prvalue] : +# 2047| r2047_4(ValCat) = Call[prvalue] : func:r2047_3 +# 2047| m2047_5(unknown) = ^CallSideEffect : ~m2046_8 +# 2047| m2047_6(unknown) = Chi : total:m2046_8, partial:m2047_5 +# 2047| m2047_7(ValCat) = Store[#temp2047:5] : &:r2047_1, r2047_4 +# 2047| m2047_8(ValCat) = Store[#temp2047:5] : &:r2047_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 -# 2034| r2034_1(glval) = FunctionAddress[lvalue] : -# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 -# 2034| m2034_3(unknown) = ^CallSideEffect : ~m2033_6 -# 2034| m2034_4(unknown) = Chi : total:m2033_6, partial:m2034_3 -# 2034| r2034_5(glval) = CopyValue : r2034_2 -# 2034| m2034_6(ValCat) = Store[?] : &:r2034_5, r0_12 -# 2034| m2034_7(unknown) = Chi : total:m2034_4, partial:m2034_6 +# 2048| r2048_1(glval) = FunctionAddress[lvalue] : +# 2048| r2048_2(ValCat &) = Call[lvalue] : func:r2048_1 +# 2048| m2048_3(unknown) = ^CallSideEffect : ~m2047_6 +# 2048| m2048_4(unknown) = Chi : total:m2047_6, partial:m2048_3 +# 2048| r2048_5(glval) = CopyValue : r2048_2 +# 2048| m2048_6(ValCat) = Store[?] : &:r2048_5, r0_12 +# 2048| m2048_7(unknown) = Chi : total:m2048_4, partial:m2048_6 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 -# 2035| r2035_1(glval) = FunctionAddress[xvalue] : -# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 -# 2035| m2035_3(unknown) = ^CallSideEffect : ~m2034_7 -# 2035| m2035_4(unknown) = Chi : total:m2034_7, partial:m2035_3 -# 2035| r2035_5(glval) = CopyValue : r2035_2 -# 2035| m2035_6(ValCat) = Store[?] : &:r2035_5, r0_15 -# 2035| m2035_7(unknown) = Chi : total:m2035_4, partial:m2035_6 +# 2049| r2049_1(glval) = FunctionAddress[xvalue] : +# 2049| r2049_2(ValCat &&) = Call[xvalue] : func:r2049_1 +# 2049| m2049_3(unknown) = ^CallSideEffect : ~m2048_7 +# 2049| m2049_4(unknown) = Chi : total:m2048_7, partial:m2049_3 +# 2049| r2049_5(glval) = CopyValue : r2049_2 +# 2049| m2049_6(ValCat) = Store[?] : &:r2049_5, r0_15 +# 2049| m2049_7(unknown) = Chi : total:m2049_4, partial:m2049_6 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 -# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : -# 2036| r2036_2(glval) = FunctionAddress[prvalue] : -# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 -# 2036| m2036_4(unknown) = ^CallSideEffect : ~m2035_7 -# 2036| m2036_5(unknown) = Chi : total:m2035_7, partial:m2036_4 -# 2036| m2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 -# 2036| m2036_7(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 -# 2037| v2037_1(void) = NoOp : -# 2028| v2028_5(void) = ReturnVoid : -# 2028| v2028_6(void) = AliasedUse : ~m2036_5 -# 2028| v2028_7(void) = ExitFunction : +# 2050| r2050_1(glval) = VariableAddress[#temp2050:5] : +# 2050| r2050_2(glval) = FunctionAddress[prvalue] : +# 2050| r2050_3(ValCat) = Call[prvalue] : func:r2050_2 +# 2050| m2050_4(unknown) = ^CallSideEffect : ~m2049_7 +# 2050| m2050_5(unknown) = Chi : total:m2049_7, partial:m2050_4 +# 2050| m2050_6(ValCat) = Store[#temp2050:5] : &:r2050_1, r2050_3 +# 2050| m2050_7(ValCat) = Store[#temp2050:5] : &:r2050_1, r0_18 +# 2051| v2051_1(void) = NoOp : +# 2042| v2042_5(void) = ReturnVoid : +# 2042| v2042_6(void) = AliasedUse : ~m2050_5 +# 2042| v2042_7(void) = ExitFunction : -# 2039| void SetStaticFuncPtr() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| m2039_2(unknown) = AliasedDefinition : -# 2039| m2039_3(unknown) = InitializeNonLocal : -# 2039| m2039_4(unknown) = Chi : total:m2039_2, partial:m2039_3 -# 2040| r2040_1(glval) = VariableAddress[c] : -# 2040| m2040_2(C) = Uninitialized[c] : &:r2040_1 -# 2040| r2040_3(glval) = FunctionAddress[C] : -# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 -# 2040| m2040_5(unknown) = ^CallSideEffect : ~m2039_4 -# 2040| m2040_6(unknown) = Chi : total:m2039_4, partial:m2040_5 -# 2040| m2040_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 -# 2040| m2040_8(C) = Chi : total:m2040_2, partial:m2040_7 -# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2041| m2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 -# 2042| r2042_1(glval) = VariableAddress[c] : -# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2042| m2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 -# 2043| v2043_1(void) = NoOp : -# 2043| r2043_2(glval) = VariableAddress[c] : -# 2043| r2043_3(glval) = FunctionAddress[~C] : -# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 -# 2043| m2043_5(unknown) = ^CallSideEffect : ~m2040_6 -# 2043| m2043_6(unknown) = Chi : total:m2040_6, partial:m2043_5 -# 2043| v2043_7(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, m2040_8 -# 2043| m2043_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 -# 2043| m2043_9(C) = Chi : total:m2040_8, partial:m2043_8 -# 2039| v2039_5(void) = ReturnVoid : -# 2039| v2039_6(void) = AliasedUse : ~m2043_6 -# 2039| v2039_7(void) = ExitFunction : +# 2053| void SetStaticFuncPtr() +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| m2053_2(unknown) = AliasedDefinition : +# 2053| m2053_3(unknown) = InitializeNonLocal : +# 2053| m2053_4(unknown) = Chi : total:m2053_2, partial:m2053_3 +# 2054| r2054_1(glval) = VariableAddress[c] : +# 2054| m2054_2(C) = Uninitialized[c] : &:r2054_1 +# 2054| r2054_3(glval) = FunctionAddress[C] : +# 2054| v2054_4(void) = Call[C] : func:r2054_3, this:r2054_1 +# 2054| m2054_5(unknown) = ^CallSideEffect : ~m2053_4 +# 2054| m2054_6(unknown) = Chi : total:m2053_4, partial:m2054_5 +# 2054| m2054_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 +# 2054| m2054_8(C) = Chi : total:m2054_2, partial:m2054_7 +# 2055| r2055_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2055| r2055_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2055| m2055_3(..(*)(..)) = Store[pfn] : &:r2055_1, r2055_2 +# 2056| r2056_1(glval) = VariableAddress[c] : +# 2056| r2056_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2056| r2056_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2056| m2056_4(..(*)(..)) = Store[pfn] : &:r2056_3, r2056_2 +# 2057| v2057_1(void) = NoOp : +# 2057| r2057_2(glval) = VariableAddress[c] : +# 2057| r2057_3(glval) = FunctionAddress[~C] : +# 2057| v2057_4(void) = Call[~C] : func:r2057_3, this:r2057_2 +# 2057| m2057_5(unknown) = ^CallSideEffect : ~m2054_6 +# 2057| m2057_6(unknown) = Chi : total:m2054_6, partial:m2057_5 +# 2057| v2057_7(void) = ^IndirectReadSideEffect[-1] : &:r2057_2, m2054_8 +# 2057| m2057_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2057_2 +# 2057| m2057_9(C) = Chi : total:m2054_8, partial:m2057_8 +# 2053| v2053_5(void) = ReturnVoid : +# 2053| v2053_6(void) = AliasedUse : ~m2057_6 +# 2053| v2053_7(void) = ExitFunction : -# 2045| void TernaryTestInt(bool, int, int, int) -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| m2045_2(unknown) = AliasedDefinition : -# 2045| m2045_3(unknown) = InitializeNonLocal : -# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 -# 2045| r2045_5(glval) = VariableAddress[a] : -# 2045| m2045_6(bool) = InitializeParameter[a] : &:r2045_5 -# 2045| r2045_7(glval) = VariableAddress[x] : -# 2045| m2045_8(int) = InitializeParameter[x] : &:r2045_7 -# 2045| r2045_9(glval) = VariableAddress[y] : -# 2045| m2045_10(int) = InitializeParameter[y] : &:r2045_9 -# 2045| r2045_11(glval) = VariableAddress[z] : -# 2045| m2045_12(int) = InitializeParameter[z] : &:r2045_11 -# 2046| r2046_1(glval) = VariableAddress[a] : -# 2046| r2046_2(bool) = Load[a] : &:r2046_1, m2045_6 -# 2046| v2046_3(void) = ConditionalBranch : r2046_2 +# 2059| void TernaryTestInt(bool, int, int, int) +# 2059| Block 0 +# 2059| v2059_1(void) = EnterFunction : +# 2059| m2059_2(unknown) = AliasedDefinition : +# 2059| m2059_3(unknown) = InitializeNonLocal : +# 2059| m2059_4(unknown) = Chi : total:m2059_2, partial:m2059_3 +# 2059| r2059_5(glval) = VariableAddress[a] : +# 2059| m2059_6(bool) = InitializeParameter[a] : &:r2059_5 +# 2059| r2059_7(glval) = VariableAddress[x] : +# 2059| m2059_8(int) = InitializeParameter[x] : &:r2059_7 +# 2059| r2059_9(glval) = VariableAddress[y] : +# 2059| m2059_10(int) = InitializeParameter[y] : &:r2059_9 +# 2059| r2059_11(glval) = VariableAddress[z] : +# 2059| m2059_12(int) = InitializeParameter[z] : &:r2059_11 +# 2060| r2060_1(glval) = VariableAddress[a] : +# 2060| r2060_2(bool) = Load[a] : &:r2060_1, m2059_6 +# 2060| v2060_3(void) = ConditionalBranch : r2060_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2046| Block 1 -# 2046| m2046_4(int) = Phi : from 2:m2046_12, from 3:m2046_16 -# 2046| r2046_5(glval) = VariableAddress[#temp2046:9] : -# 2046| r2046_6(int) = Load[#temp2046:9] : &:r2046_5, m2046_4 -# 2046| r2046_7(glval) = VariableAddress[z] : -# 2046| m2046_8(int) = Store[z] : &:r2046_7, r2046_6 -# 2047| r2047_1(glval) = VariableAddress[a] : -# 2047| r2047_2(bool) = Load[a] : &:r2047_1, m2045_6 -# 2047| v2047_3(void) = ConditionalBranch : r2047_2 +# 2060| Block 1 +# 2060| m2060_4(int) = Phi : from 2:m2060_12, from 3:m2060_16 +# 2060| r2060_5(glval) = VariableAddress[#temp2060:9] : +# 2060| r2060_6(int) = Load[#temp2060:9] : &:r2060_5, m2060_4 +# 2060| r2060_7(glval) = VariableAddress[z] : +# 2060| m2060_8(int) = Store[z] : &:r2060_7, r2060_6 +# 2061| r2061_1(glval) = VariableAddress[a] : +# 2061| r2061_2(bool) = Load[a] : &:r2061_1, m2059_6 +# 2061| v2061_3(void) = ConditionalBranch : r2061_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2046| Block 2 -# 2046| r2046_9(glval) = VariableAddress[x] : -# 2046| r2046_10(int) = Load[x] : &:r2046_9, m2045_8 -# 2046| r2046_11(glval) = VariableAddress[#temp2046:9] : -# 2046| m2046_12(int) = Store[#temp2046:9] : &:r2046_11, r2046_10 +# 2060| Block 2 +# 2060| r2060_9(glval) = VariableAddress[x] : +# 2060| r2060_10(int) = Load[x] : &:r2060_9, m2059_8 +# 2060| r2060_11(glval) = VariableAddress[#temp2060:9] : +# 2060| m2060_12(int) = Store[#temp2060:9] : &:r2060_11, r2060_10 #-----| Goto -> Block 1 -# 2046| Block 3 -# 2046| r2046_13(glval) = VariableAddress[y] : -# 2046| r2046_14(int) = Load[y] : &:r2046_13, m2045_10 -# 2046| r2046_15(glval) = VariableAddress[#temp2046:9] : -# 2046| m2046_16(int) = Store[#temp2046:9] : &:r2046_15, r2046_14 +# 2060| Block 3 +# 2060| r2060_13(glval) = VariableAddress[y] : +# 2060| r2060_14(int) = Load[y] : &:r2060_13, m2059_10 +# 2060| r2060_15(glval) = VariableAddress[#temp2060:9] : +# 2060| m2060_16(int) = Store[#temp2060:9] : &:r2060_15, r2060_14 #-----| Goto -> Block 1 -# 2047| Block 4 -# 2047| m2047_4(int) = Phi : from 5:m2047_12, from 6:m2047_15 -# 2047| r2047_5(glval) = VariableAddress[#temp2047:9] : -# 2047| r2047_6(int) = Load[#temp2047:9] : &:r2047_5, m2047_4 -# 2047| r2047_7(glval) = VariableAddress[z] : -# 2047| m2047_8(int) = Store[z] : &:r2047_7, r2047_6 -# 2048| r2048_1(glval) = VariableAddress[a] : -# 2048| r2048_2(bool) = Load[a] : &:r2048_1, m2045_6 -# 2048| v2048_3(void) = ConditionalBranch : r2048_2 +# 2061| Block 4 +# 2061| m2061_4(int) = Phi : from 5:m2061_12, from 6:m2061_15 +# 2061| r2061_5(glval) = VariableAddress[#temp2061:9] : +# 2061| r2061_6(int) = Load[#temp2061:9] : &:r2061_5, m2061_4 +# 2061| r2061_7(glval) = VariableAddress[z] : +# 2061| m2061_8(int) = Store[z] : &:r2061_7, r2061_6 +# 2062| r2062_1(glval) = VariableAddress[a] : +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, m2059_6 +# 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2047| Block 5 -# 2047| r2047_9(glval) = VariableAddress[x] : -# 2047| r2047_10(int) = Load[x] : &:r2047_9, m2045_8 -# 2047| r2047_11(glval) = VariableAddress[#temp2047:9] : -# 2047| m2047_12(int) = Store[#temp2047:9] : &:r2047_11, r2047_10 +# 2061| Block 5 +# 2061| r2061_9(glval) = VariableAddress[x] : +# 2061| r2061_10(int) = Load[x] : &:r2061_9, m2059_8 +# 2061| r2061_11(glval) = VariableAddress[#temp2061:9] : +# 2061| m2061_12(int) = Store[#temp2061:9] : &:r2061_11, r2061_10 #-----| Goto -> Block 4 -# 2047| Block 6 -# 2047| r2047_13(int) = Constant[5] : -# 2047| r2047_14(glval) = VariableAddress[#temp2047:9] : -# 2047| m2047_15(int) = Store[#temp2047:9] : &:r2047_14, r2047_13 +# 2061| Block 6 +# 2061| r2061_13(int) = Constant[5] : +# 2061| r2061_14(glval) = VariableAddress[#temp2061:9] : +# 2061| m2061_15(int) = Store[#temp2061:9] : &:r2061_14, r2061_13 #-----| Goto -> Block 4 -# 2048| Block 7 -# 2048| m2048_4(int) = Phi : from 8:m2048_11, from 9:m2048_14 -# 2048| r2048_5(glval) = VariableAddress[#temp2048:9] : -# 2048| r2048_6(int) = Load[#temp2048:9] : &:r2048_5, m2048_4 -# 2048| r2048_7(glval) = VariableAddress[z] : -# 2048| m2048_8(int) = Store[z] : &:r2048_7, r2048_6 -# 2049| r2049_1(int) = Constant[7] : -# 2049| r2049_2(glval) = VariableAddress[a] : -# 2049| r2049_3(bool) = Load[a] : &:r2049_2, m2045_6 -# 2049| v2049_4(void) = ConditionalBranch : r2049_3 +# 2062| Block 7 +# 2062| m2062_4(int) = Phi : from 8:m2062_11, from 9:m2062_14 +# 2062| r2062_5(glval) = VariableAddress[#temp2062:9] : +# 2062| r2062_6(int) = Load[#temp2062:9] : &:r2062_5, m2062_4 +# 2062| r2062_7(glval) = VariableAddress[z] : +# 2062| m2062_8(int) = Store[z] : &:r2062_7, r2062_6 +# 2063| r2063_1(int) = Constant[7] : +# 2063| r2063_2(glval) = VariableAddress[a] : +# 2063| r2063_3(bool) = Load[a] : &:r2063_2, m2059_6 +# 2063| v2063_4(void) = ConditionalBranch : r2063_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2048| Block 8 -# 2048| r2048_9(int) = Constant[3] : -# 2048| r2048_10(glval) = VariableAddress[#temp2048:9] : -# 2048| m2048_11(int) = Store[#temp2048:9] : &:r2048_10, r2048_9 +# 2062| Block 8 +# 2062| r2062_9(int) = Constant[3] : +# 2062| r2062_10(glval) = VariableAddress[#temp2062:9] : +# 2062| m2062_11(int) = Store[#temp2062:9] : &:r2062_10, r2062_9 #-----| Goto -> Block 7 -# 2048| Block 9 -# 2048| r2048_12(int) = Constant[5] : -# 2048| r2048_13(glval) = VariableAddress[#temp2048:9] : -# 2048| m2048_14(int) = Store[#temp2048:9] : &:r2048_13, r2048_12 +# 2062| Block 9 +# 2062| r2062_12(int) = Constant[5] : +# 2062| r2062_13(glval) = VariableAddress[#temp2062:9] : +# 2062| m2062_14(int) = Store[#temp2062:9] : &:r2062_13, r2062_12 #-----| Goto -> Block 7 -# 2049| Block 10 -# 2049| m2049_5(glval) = Phi : from 11:m2049_12, from 12:m2049_15 -# 2049| r2049_6(glval) = VariableAddress[#temp2049:6] : -# 2049| r2049_7(glval) = Load[#temp2049:6] : &:r2049_6, m2049_5 -# 2049| m2049_8(int) = Store[?] : &:r2049_7, r2049_1 -# 2049| m2049_9(unknown) = Chi : total:m2045_4, partial:m2049_8 -# 2050| v2050_1(void) = NoOp : -# 2045| v2045_13(void) = ReturnVoid : -# 2045| v2045_14(void) = AliasedUse : ~m2049_9 -# 2045| v2045_15(void) = ExitFunction : +# 2063| Block 10 +# 2063| m2063_5(glval) = Phi : from 11:m2063_12, from 12:m2063_15 +# 2063| r2063_6(glval) = VariableAddress[#temp2063:6] : +# 2063| r2063_7(glval) = Load[#temp2063:6] : &:r2063_6, m2063_5 +# 2063| m2063_8(int) = Store[?] : &:r2063_7, r2063_1 +# 2063| m2063_9(unknown) = Chi : total:m2059_4, partial:m2063_8 +# 2064| v2064_1(void) = NoOp : +# 2059| v2059_13(void) = ReturnVoid : +# 2059| v2059_14(void) = AliasedUse : ~m2063_9 +# 2059| v2059_15(void) = ExitFunction : -# 2049| Block 11 -# 2049| r2049_10(glval) = VariableAddress[x] : -# 2049| r2049_11(glval) = VariableAddress[#temp2049:6] : -# 2049| m2049_12(glval) = Store[#temp2049:6] : &:r2049_11, r2049_10 +# 2063| Block 11 +# 2063| r2063_10(glval) = VariableAddress[x] : +# 2063| r2063_11(glval) = VariableAddress[#temp2063:6] : +# 2063| m2063_12(glval) = Store[#temp2063:6] : &:r2063_11, r2063_10 #-----| Goto -> Block 10 -# 2049| Block 12 -# 2049| r2049_13(glval) = VariableAddress[y] : -# 2049| r2049_14(glval) = VariableAddress[#temp2049:6] : -# 2049| m2049_15(glval) = Store[#temp2049:6] : &:r2049_14, r2049_13 +# 2063| Block 12 +# 2063| r2063_13(glval) = VariableAddress[y] : +# 2063| r2063_14(glval) = VariableAddress[#temp2063:6] : +# 2063| m2063_15(glval) = Store[#temp2063:6] : &:r2063_14, r2063_13 #-----| Goto -> Block 10 -# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| Block 0 -# 2055| v2055_1(void) = EnterFunction : -# 2055| m2055_2(unknown) = AliasedDefinition : -# 2055| m2055_3(unknown) = InitializeNonLocal : -# 2055| m2055_4(unknown) = Chi : total:m2055_2, partial:m2055_3 -# 2055| r2055_5(glval) = VariableAddress[a] : -# 2055| m2055_6(bool) = InitializeParameter[a] : &:r2055_5 -# 2055| r2055_7(glval) = VariableAddress[x] : -# 2055| m2055_8(TernaryPodObj) = InitializeParameter[x] : &:r2055_7 -# 2055| r2055_9(glval) = VariableAddress[y] : -# 2055| m2055_10(TernaryPodObj) = InitializeParameter[y] : &:r2055_9 -# 2055| r2055_11(glval) = VariableAddress[z] : -# 2055| m2055_12(TernaryPodObj) = InitializeParameter[z] : &:r2055_11 -# 2056| r2056_1(glval) = VariableAddress[a] : -# 2056| r2056_2(bool) = Load[a] : &:r2056_1, m2055_6 -# 2056| v2056_3(void) = ConditionalBranch : r2056_2 +# 2069| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| Block 0 +# 2069| v2069_1(void) = EnterFunction : +# 2069| m2069_2(unknown) = AliasedDefinition : +# 2069| m2069_3(unknown) = InitializeNonLocal : +# 2069| m2069_4(unknown) = Chi : total:m2069_2, partial:m2069_3 +# 2069| r2069_5(glval) = VariableAddress[a] : +# 2069| m2069_6(bool) = InitializeParameter[a] : &:r2069_5 +# 2069| r2069_7(glval) = VariableAddress[x] : +# 2069| m2069_8(TernaryPodObj) = InitializeParameter[x] : &:r2069_7 +# 2069| r2069_9(glval) = VariableAddress[y] : +# 2069| m2069_10(TernaryPodObj) = InitializeParameter[y] : &:r2069_9 +# 2069| r2069_11(glval) = VariableAddress[z] : +# 2069| m2069_12(TernaryPodObj) = InitializeParameter[z] : &:r2069_11 +# 2070| r2070_1(glval) = VariableAddress[a] : +# 2070| r2070_2(bool) = Load[a] : &:r2070_1, m2069_6 +# 2070| v2070_3(void) = ConditionalBranch : r2070_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2056| Block 1 -# 2056| m2056_4(TernaryPodObj) = Phi : from 2:m2056_12, from 3:m2056_16 -# 2056| r2056_5(glval) = VariableAddress[#temp2056:9] : -# 2056| r2056_6(TernaryPodObj) = Load[#temp2056:9] : &:r2056_5, m2056_4 -# 2056| r2056_7(glval) = VariableAddress[z] : -# 2056| m2056_8(TernaryPodObj) = Store[z] : &:r2056_7, r2056_6 -# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_2(glval) = VariableAddress[a] : -# 2057| r2057_3(bool) = Load[a] : &:r2057_2, m2055_6 -# 2057| v2057_4(void) = ConditionalBranch : r2057_3 +# 2070| Block 1 +# 2070| m2070_4(TernaryPodObj) = Phi : from 2:m2070_12, from 3:m2070_16 +# 2070| r2070_5(glval) = VariableAddress[#temp2070:9] : +# 2070| r2070_6(TernaryPodObj) = Load[#temp2070:9] : &:r2070_5, m2070_4 +# 2070| r2070_7(glval) = VariableAddress[z] : +# 2070| m2070_8(TernaryPodObj) = Store[z] : &:r2070_7, r2070_6 +# 2071| r2071_1(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_2(glval) = VariableAddress[a] : +# 2071| r2071_3(bool) = Load[a] : &:r2071_2, m2069_6 +# 2071| v2071_4(void) = ConditionalBranch : r2071_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2056| Block 2 -# 2056| r2056_9(glval) = VariableAddress[x] : -# 2056| r2056_10(TernaryPodObj) = Load[x] : &:r2056_9, m2055_8 -# 2056| r2056_11(glval) = VariableAddress[#temp2056:9] : -# 2056| m2056_12(TernaryPodObj) = Store[#temp2056:9] : &:r2056_11, r2056_10 +# 2070| Block 2 +# 2070| r2070_9(glval) = VariableAddress[x] : +# 2070| r2070_10(TernaryPodObj) = Load[x] : &:r2070_9, m2069_8 +# 2070| r2070_11(glval) = VariableAddress[#temp2070:9] : +# 2070| m2070_12(TernaryPodObj) = Store[#temp2070:9] : &:r2070_11, r2070_10 #-----| Goto -> Block 1 -# 2056| Block 3 -# 2056| r2056_13(glval) = VariableAddress[y] : -# 2056| r2056_14(TernaryPodObj) = Load[y] : &:r2056_13, m2055_10 -# 2056| r2056_15(glval) = VariableAddress[#temp2056:9] : -# 2056| m2056_16(TernaryPodObj) = Store[#temp2056:9] : &:r2056_15, r2056_14 +# 2070| Block 3 +# 2070| r2070_13(glval) = VariableAddress[y] : +# 2070| r2070_14(TernaryPodObj) = Load[y] : &:r2070_13, m2069_10 +# 2070| r2070_15(glval) = VariableAddress[#temp2070:9] : +# 2070| m2070_16(TernaryPodObj) = Store[#temp2070:9] : &:r2070_15, r2070_14 #-----| Goto -> Block 1 -# 2057| Block 4 -# 2057| m2057_5(TernaryPodObj) = Phi : from 5:m2057_18, from 6:m2057_24 -# 2057| r2057_6(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_7(TernaryPodObj) = Load[#temp2057:9] : &:r2057_6, m2057_5 -# 2057| m2057_8(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_7 -# 2057| r2057_9(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, m2057_8 -# 2057| r2057_10(glval) = VariableAddress[z] : -# 2057| m2057_11(TernaryPodObj) = Store[z] : &:r2057_10, r2057_9 -# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_2(glval) = VariableAddress[a] : -# 2058| r2058_3(bool) = Load[a] : &:r2058_2, m2055_6 -# 2058| v2058_4(void) = ConditionalBranch : r2058_3 +# 2071| Block 4 +# 2071| m2071_5(TernaryPodObj) = Phi : from 5:m2071_18, from 6:m2071_24 +# 2071| r2071_6(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_7(TernaryPodObj) = Load[#temp2071:9] : &:r2071_6, m2071_5 +# 2071| m2071_8(TernaryPodObj) = Store[#temp2071:9] : &:r2071_1, r2071_7 +# 2071| r2071_9(TernaryPodObj) = Load[#temp2071:9] : &:r2071_1, m2071_8 +# 2071| r2071_10(glval) = VariableAddress[z] : +# 2071| m2071_11(TernaryPodObj) = Store[z] : &:r2071_10, r2071_9 +# 2072| r2072_1(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_2(glval) = VariableAddress[a] : +# 2072| r2072_3(bool) = Load[a] : &:r2072_2, m2069_6 +# 2072| v2072_4(void) = ConditionalBranch : r2072_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2057| Block 5 -# 2057| r2057_12(glval) = VariableAddress[#temp2057:13] : -# 2057| r2057_13(glval) = VariableAddress[x] : -# 2057| r2057_14(TernaryPodObj) = Load[x] : &:r2057_13, m2055_8 -# 2057| m2057_15(TernaryPodObj) = Store[#temp2057:13] : &:r2057_12, r2057_14 -# 2057| r2057_16(TernaryPodObj) = Load[#temp2057:13] : &:r2057_12, m2057_15 -# 2057| r2057_17(glval) = VariableAddress[#temp2057:9] : -# 2057| m2057_18(TernaryPodObj) = Store[#temp2057:9] : &:r2057_17, r2057_16 +# 2071| Block 5 +# 2071| r2071_12(glval) = VariableAddress[#temp2071:13] : +# 2071| r2071_13(glval) = VariableAddress[x] : +# 2071| r2071_14(TernaryPodObj) = Load[x] : &:r2071_13, m2069_8 +# 2071| m2071_15(TernaryPodObj) = Store[#temp2071:13] : &:r2071_12, r2071_14 +# 2071| r2071_16(TernaryPodObj) = Load[#temp2071:13] : &:r2071_12, m2071_15 +# 2071| r2071_17(glval) = VariableAddress[#temp2071:9] : +# 2071| m2071_18(TernaryPodObj) = Store[#temp2071:9] : &:r2071_17, r2071_16 #-----| Goto -> Block 4 -# 2057| Block 6 -# 2057| r2057_19(glval) = VariableAddress[#temp2057:17] : -# 2057| r2057_20(TernaryPodObj) = Constant[0] : -# 2057| m2057_21(TernaryPodObj) = Store[#temp2057:17] : &:r2057_19, r2057_20 -# 2057| r2057_22(TernaryPodObj) = Load[#temp2057:17] : &:r2057_19, m2057_21 -# 2057| r2057_23(glval) = VariableAddress[#temp2057:9] : -# 2057| m2057_24(TernaryPodObj) = Store[#temp2057:9] : &:r2057_23, r2057_22 +# 2071| Block 6 +# 2071| r2071_19(glval) = VariableAddress[#temp2071:17] : +# 2071| r2071_20(TernaryPodObj) = Constant[0] : +# 2071| m2071_21(TernaryPodObj) = Store[#temp2071:17] : &:r2071_19, r2071_20 +# 2071| r2071_22(TernaryPodObj) = Load[#temp2071:17] : &:r2071_19, m2071_21 +# 2071| r2071_23(glval) = VariableAddress[#temp2071:9] : +# 2071| m2071_24(TernaryPodObj) = Store[#temp2071:9] : &:r2071_23, r2071_22 #-----| Goto -> Block 4 -# 2058| Block 7 -# 2058| m2058_5(TernaryPodObj) = Phi : from 8:m2058_17, from 9:m2058_23 -# 2058| r2058_6(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_7(TernaryPodObj) = Load[#temp2058:9] : &:r2058_6, m2058_5 -# 2058| m2058_8(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_7 -# 2058| r2058_9(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, m2058_8 -# 2058| r2058_10(glval) = VariableAddress[z] : -# 2058| m2058_11(TernaryPodObj) = Store[z] : &:r2058_10, r2058_9 -# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : -# 2059| r2059_2(TernaryPodObj) = Constant[0] : -# 2059| m2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 -# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, m2059_3 -# 2059| r2059_5(glval) = VariableAddress[a] : -# 2059| r2059_6(bool) = Load[a] : &:r2059_5, m2055_6 -# 2059| v2059_7(void) = ConditionalBranch : r2059_6 +# 2072| Block 7 +# 2072| m2072_5(TernaryPodObj) = Phi : from 8:m2072_17, from 9:m2072_23 +# 2072| r2072_6(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_7(TernaryPodObj) = Load[#temp2072:9] : &:r2072_6, m2072_5 +# 2072| m2072_8(TernaryPodObj) = Store[#temp2072:9] : &:r2072_1, r2072_7 +# 2072| r2072_9(TernaryPodObj) = Load[#temp2072:9] : &:r2072_1, m2072_8 +# 2072| r2072_10(glval) = VariableAddress[z] : +# 2072| m2072_11(TernaryPodObj) = Store[z] : &:r2072_10, r2072_9 +# 2073| r2073_1(glval) = VariableAddress[#temp2073:23] : +# 2073| r2073_2(TernaryPodObj) = Constant[0] : +# 2073| m2073_3(TernaryPodObj) = Store[#temp2073:23] : &:r2073_1, r2073_2 +# 2073| r2073_4(TernaryPodObj) = Load[#temp2073:23] : &:r2073_1, m2073_3 +# 2073| r2073_5(glval) = VariableAddress[a] : +# 2073| r2073_6(bool) = Load[a] : &:r2073_5, m2069_6 +# 2073| v2073_7(void) = ConditionalBranch : r2073_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2058| Block 8 -# 2058| r2058_12(glval) = VariableAddress[#temp2058:13] : -# 2058| r2058_13(TernaryPodObj) = Constant[0] : -# 2058| m2058_14(TernaryPodObj) = Store[#temp2058:13] : &:r2058_12, r2058_13 -# 2058| r2058_15(TernaryPodObj) = Load[#temp2058:13] : &:r2058_12, m2058_14 -# 2058| r2058_16(glval) = VariableAddress[#temp2058:9] : -# 2058| m2058_17(TernaryPodObj) = Store[#temp2058:9] : &:r2058_16, r2058_15 +# 2072| Block 8 +# 2072| r2072_12(glval) = VariableAddress[#temp2072:13] : +# 2072| r2072_13(TernaryPodObj) = Constant[0] : +# 2072| m2072_14(TernaryPodObj) = Store[#temp2072:13] : &:r2072_12, r2072_13 +# 2072| r2072_15(TernaryPodObj) = Load[#temp2072:13] : &:r2072_12, m2072_14 +# 2072| r2072_16(glval) = VariableAddress[#temp2072:9] : +# 2072| m2072_17(TernaryPodObj) = Store[#temp2072:9] : &:r2072_16, r2072_15 #-----| Goto -> Block 7 -# 2058| Block 9 -# 2058| r2058_18(glval) = VariableAddress[#temp2058:31] : -# 2058| r2058_19(TernaryPodObj) = Constant[0] : -# 2058| m2058_20(TernaryPodObj) = Store[#temp2058:31] : &:r2058_18, r2058_19 -# 2058| r2058_21(TernaryPodObj) = Load[#temp2058:31] : &:r2058_18, m2058_20 -# 2058| r2058_22(glval) = VariableAddress[#temp2058:9] : -# 2058| m2058_23(TernaryPodObj) = Store[#temp2058:9] : &:r2058_22, r2058_21 +# 2072| Block 9 +# 2072| r2072_18(glval) = VariableAddress[#temp2072:31] : +# 2072| r2072_19(TernaryPodObj) = Constant[0] : +# 2072| m2072_20(TernaryPodObj) = Store[#temp2072:31] : &:r2072_18, r2072_19 +# 2072| r2072_21(TernaryPodObj) = Load[#temp2072:31] : &:r2072_18, m2072_20 +# 2072| r2072_22(glval) = VariableAddress[#temp2072:9] : +# 2072| m2072_23(TernaryPodObj) = Store[#temp2072:9] : &:r2072_22, r2072_21 #-----| Goto -> Block 7 -# 2059| Block 10 -# 2059| m2059_8(TernaryPodObj) = Phi : from 11:m2059_18, from 12:m2059_22 -# 2059| r2059_9(glval) = VariableAddress[#temp2059:10] : -# 2059| r2059_10(TernaryPodObj) = Load[#temp2059:10] : &:r2059_9, m2059_8 -# 2059| r2059_11(glval) = VariableAddress[z] : -# 2059| m2059_12(TernaryPodObj) = Store[z] : &:r2059_11, r2059_10 -# 2059| r2059_13(glval) = CopyValue : r2059_11 -# 2059| m2059_14(TernaryPodObj) = Store[?] : &:r2059_13, r2059_4 -# 2060| v2060_1(void) = NoOp : -# 2055| v2055_13(void) = ReturnVoid : -# 2055| v2055_14(void) = AliasedUse : m2055_3 -# 2055| v2055_15(void) = ExitFunction : +# 2073| Block 10 +# 2073| m2073_8(TernaryPodObj) = Phi : from 11:m2073_18, from 12:m2073_22 +# 2073| r2073_9(glval) = VariableAddress[#temp2073:10] : +# 2073| r2073_10(TernaryPodObj) = Load[#temp2073:10] : &:r2073_9, m2073_8 +# 2073| r2073_11(glval) = VariableAddress[z] : +# 2073| m2073_12(TernaryPodObj) = Store[z] : &:r2073_11, r2073_10 +# 2073| r2073_13(glval) = CopyValue : r2073_11 +# 2073| m2073_14(TernaryPodObj) = Store[?] : &:r2073_13, r2073_4 +# 2074| v2074_1(void) = NoOp : +# 2069| v2069_13(void) = ReturnVoid : +# 2069| v2069_14(void) = AliasedUse : m2069_3 +# 2069| v2069_15(void) = ExitFunction : -# 2059| Block 11 -# 2059| r2059_15(glval) = VariableAddress[x] : -# 2059| r2059_16(TernaryPodObj) = Load[x] : &:r2059_15, m2055_8 -# 2059| r2059_17(glval) = VariableAddress[#temp2059:10] : -# 2059| m2059_18(TernaryPodObj) = Store[#temp2059:10] : &:r2059_17, r2059_16 +# 2073| Block 11 +# 2073| r2073_15(glval) = VariableAddress[x] : +# 2073| r2073_16(TernaryPodObj) = Load[x] : &:r2073_15, m2069_8 +# 2073| r2073_17(glval) = VariableAddress[#temp2073:10] : +# 2073| m2073_18(TernaryPodObj) = Store[#temp2073:10] : &:r2073_17, r2073_16 #-----| Goto -> Block 10 -# 2059| Block 12 -# 2059| r2059_19(glval) = VariableAddress[y] : -# 2059| r2059_20(TernaryPodObj) = Load[y] : &:r2059_19, m2055_10 -# 2059| r2059_21(glval) = VariableAddress[#temp2059:10] : -# 2059| m2059_22(TernaryPodObj) = Store[#temp2059:10] : &:r2059_21, r2059_20 +# 2073| Block 12 +# 2073| r2073_19(glval) = VariableAddress[y] : +# 2073| r2073_20(TernaryPodObj) = Load[y] : &:r2073_19, m2069_10 +# 2073| r2073_21(glval) = VariableAddress[#temp2073:10] : +# 2073| m2073_22(TernaryPodObj) = Store[#temp2073:10] : &:r2073_21, r2073_20 #-----| Goto -> Block 10 -# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 +# 2076| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#return] : #-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2062_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2076_6 #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2062| r2062_10(glval) = VariableAddress[#return] : -# 2062| v2062_11(void) = ReturnValue : &:r2062_10, m0_10 -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| r2076_10(glval) = VariableAddress[#return] : +# 2076| v2076_11(void) = ReturnValue : &:r2076_10, m0_10 +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj() -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 -# 2062| v2062_9(void) = NoOp : -# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 -# 2062| v2062_11(void) = ReturnVoid : -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| void TernaryNonPodObj::TernaryNonPodObj() +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 +# 2076| v2076_9(void) = NoOp : +# 2076| v2076_10(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 +# 2076| v2076_11(void) = ReturnVoid : +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| m2062_2(unknown) = AliasedDefinition : -# 2062| m2062_3(unknown) = InitializeNonLocal : -# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 -# 2062| r2062_5(glval) = VariableAddress[#this] : -# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 -# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 -# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 +# 2076| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| m2076_2(unknown) = AliasedDefinition : +# 2076| m2076_3(unknown) = InitializeNonLocal : +# 2076| m2076_4(unknown) = Chi : total:m2076_2, partial:m2076_3 +# 2076| r2076_5(glval) = VariableAddress[#this] : +# 2076| m2076_6(glval) = InitializeParameter[#this] : &:r2076_5 +# 2076| r2076_7(glval) = Load[#this] : &:r2076_5, m2076_6 +# 2076| m2076_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2062| v2062_9(void) = NoOp : -# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 +# 2076| v2076_9(void) = NoOp : +# 2076| v2076_10(void) = ReturnIndirection[#this] : &:r2076_7, m2076_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2062| v2062_11(void) = ReturnVoid : -# 2062| v2062_12(void) = AliasedUse : m2062_3 -# 2062| v2062_13(void) = ExitFunction : +# 2076| v2076_11(void) = ReturnVoid : +# 2076| v2076_12(void) = AliasedUse : m2076_3 +# 2076| v2076_13(void) = ExitFunction : -# 2063| void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| Block 0 -# 2063| v2063_1(void) = EnterFunction : -# 2063| m2063_2(unknown) = AliasedDefinition : -# 2063| m2063_3(unknown) = InitializeNonLocal : -# 2063| m2063_4(unknown) = Chi : total:m2063_2, partial:m2063_3 -# 2063| r2063_5(glval) = VariableAddress[#this] : -# 2063| m2063_6(glval) = InitializeParameter[#this] : &:r2063_5 -# 2063| r2063_7(glval) = Load[#this] : &:r2063_5, m2063_6 -# 2063| m2063_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_7 -# 2063| v2063_9(void) = NoOp : -# 2063| v2063_10(void) = ReturnIndirection[#this] : &:r2063_7, m2063_8 -# 2063| v2063_11(void) = ReturnVoid : -# 2063| v2063_12(void) = AliasedUse : m2063_3 -# 2063| v2063_13(void) = ExitFunction : +# 2077| void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| Block 0 +# 2077| v2077_1(void) = EnterFunction : +# 2077| m2077_2(unknown) = AliasedDefinition : +# 2077| m2077_3(unknown) = InitializeNonLocal : +# 2077| m2077_4(unknown) = Chi : total:m2077_2, partial:m2077_3 +# 2077| r2077_5(glval) = VariableAddress[#this] : +# 2077| m2077_6(glval) = InitializeParameter[#this] : &:r2077_5 +# 2077| r2077_7(glval) = Load[#this] : &:r2077_5, m2077_6 +# 2077| m2077_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2077_7 +# 2077| v2077_9(void) = NoOp : +# 2077| v2077_10(void) = ReturnIndirection[#this] : &:r2077_7, m2077_8 +# 2077| v2077_11(void) = ReturnVoid : +# 2077| v2077_12(void) = AliasedUse : m2077_3 +# 2077| v2077_13(void) = ExitFunction : -# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| Block 0 -# 2066| v2066_1(void) = EnterFunction : -# 2066| m2066_2(unknown) = AliasedDefinition : -# 2066| m2066_3(unknown) = InitializeNonLocal : -# 2066| m2066_4(unknown) = Chi : total:m2066_2, partial:m2066_3 -# 2066| r2066_5(glval) = VariableAddress[a] : -# 2066| m2066_6(bool) = InitializeParameter[a] : &:r2066_5 -# 2066| r2066_7(glval) = VariableAddress[x] : -# 2066| m2066_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_7 -# 2066| r2066_9(glval) = VariableAddress[y] : -# 2066| m2066_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_9 -# 2066| r2066_11(glval) = VariableAddress[z] : -# 2066| m2066_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_11 -# 2067| r2067_1(glval) = VariableAddress[z] : -# 2067| r2067_2(glval) = FunctionAddress[operator=] : -# 2067| r2067_3(glval) = VariableAddress[a] : -# 2067| r2067_4(bool) = Load[a] : &:r2067_3, m2066_6 -# 2067| v2067_5(void) = ConditionalBranch : r2067_4 +# 2080| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| Block 0 +# 2080| v2080_1(void) = EnterFunction : +# 2080| m2080_2(unknown) = AliasedDefinition : +# 2080| m2080_3(unknown) = InitializeNonLocal : +# 2080| m2080_4(unknown) = Chi : total:m2080_2, partial:m2080_3 +# 2080| r2080_5(glval) = VariableAddress[a] : +# 2080| m2080_6(bool) = InitializeParameter[a] : &:r2080_5 +# 2080| r2080_7(glval) = VariableAddress[x] : +# 2080| m2080_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_7 +# 2080| r2080_9(glval) = VariableAddress[y] : +# 2080| m2080_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_9 +# 2080| r2080_11(glval) = VariableAddress[z] : +# 2080| m2080_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_11 +# 2081| r2081_1(glval) = VariableAddress[z] : +# 2081| r2081_2(glval) = FunctionAddress[operator=] : +# 2081| r2081_3(glval) = VariableAddress[a] : +# 2081| r2081_4(bool) = Load[a] : &:r2081_3, m2080_6 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2067| Block 1 -# 2067| m2067_6(glval) = Phi : from 2:m2067_21, from 3:m2067_24 -# 2067| r2067_7(glval) = VariableAddress[#temp2067:9] : -# 2067| r2067_8(glval) = Load[#temp2067:9] : &:r2067_7, m2067_6 -# 2067| r2067_9(glval) = Convert : r2067_8 -# 2067| r2067_10(TernaryNonPodObj &) = CopyValue : r2067_9 -# 2067| r2067_11(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_10 -# 2067| m2067_12(unknown) = ^CallSideEffect : ~m2066_4 -# 2067| m2067_13(unknown) = Chi : total:m2066_4, partial:m2067_12 -# 2067| v2067_14(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, m2066_12 -# 2067| v2067_15(void) = ^BufferReadSideEffect[0] : &:r2067_10, ~m2067_13 -# 2067| m2067_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 -# 2067| m2067_17(TernaryNonPodObj) = Chi : total:m2066_12, partial:m2067_16 -# 2067| r2067_18(glval) = CopyValue : r2067_11 -# 2068| r2068_1(glval) = VariableAddress[z] : -# 2068| r2068_2(glval) = FunctionAddress[operator=] : -# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_4(glval) = VariableAddress[a] : -# 2068| r2068_5(bool) = Load[a] : &:r2068_4, m2066_6 -# 2068| v2068_6(void) = ConditionalBranch : r2068_5 +# 2081| Block 1 +# 2081| m2081_6(glval) = Phi : from 2:m2081_21, from 3:m2081_24 +# 2081| r2081_7(glval) = VariableAddress[#temp2081:9] : +# 2081| r2081_8(glval) = Load[#temp2081:9] : &:r2081_7, m2081_6 +# 2081| r2081_9(glval) = Convert : r2081_8 +# 2081| r2081_10(TernaryNonPodObj &) = CopyValue : r2081_9 +# 2081| r2081_11(TernaryNonPodObj &) = Call[operator=] : func:r2081_2, this:r2081_1, 0:r2081_10 +# 2081| m2081_12(unknown) = ^CallSideEffect : ~m2080_4 +# 2081| m2081_13(unknown) = Chi : total:m2080_4, partial:m2081_12 +# 2081| v2081_14(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, m2080_12 +# 2081| v2081_15(void) = ^BufferReadSideEffect[0] : &:r2081_10, ~m2081_13 +# 2081| m2081_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 +# 2081| m2081_17(TernaryNonPodObj) = Chi : total:m2080_12, partial:m2081_16 +# 2081| r2081_18(glval) = CopyValue : r2081_11 +# 2082| r2082_1(glval) = VariableAddress[z] : +# 2082| r2082_2(glval) = FunctionAddress[operator=] : +# 2082| r2082_3(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_4(glval) = VariableAddress[a] : +# 2082| r2082_5(bool) = Load[a] : &:r2082_4, m2080_6 +# 2082| v2082_6(void) = ConditionalBranch : r2082_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2067| Block 2 -# 2067| r2067_19(glval) = VariableAddress[x] : -# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : -# 2067| m2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 +# 2081| Block 2 +# 2081| r2081_19(glval) = VariableAddress[x] : +# 2081| r2081_20(glval) = VariableAddress[#temp2081:9] : +# 2081| m2081_21(glval) = Store[#temp2081:9] : &:r2081_20, r2081_19 #-----| Goto -> Block 1 -# 2067| Block 3 -# 2067| r2067_22(glval) = VariableAddress[y] : -# 2067| r2067_23(glval) = VariableAddress[#temp2067:9] : -# 2067| m2067_24(glval) = Store[#temp2067:9] : &:r2067_23, r2067_22 +# 2081| Block 3 +# 2081| r2081_22(glval) = VariableAddress[y] : +# 2081| r2081_23(glval) = VariableAddress[#temp2081:9] : +# 2081| m2081_24(glval) = Store[#temp2081:9] : &:r2081_23, r2081_22 #-----| Goto -> Block 1 -# 2068| Block 4 -# 2068| m2068_7(unknown) = Phi : from 5:~m2068_30, from 6:~m2068_42 -# 2068| m2068_8(TernaryNonPodObj) = Phi : from 5:m2068_36, from 6:m2068_47 -# 2068| r2068_9(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_10(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_9, m2068_8 -# 2068| m2068_11(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_10 -# 2068| r2068_12(glval) = Convert : r2068_3 -# 2068| r2068_13(TernaryNonPodObj &) = CopyValue : r2068_12 -# 2068| r2068_14(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_13 -# 2068| m2068_15(unknown) = ^CallSideEffect : ~m2068_7 -# 2068| m2068_16(unknown) = Chi : total:m2068_7, partial:m2068_15 -# 2068| v2068_17(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, m2067_17 -# 2068| v2068_18(void) = ^BufferReadSideEffect[0] : &:r2068_13, ~m2068_11 -# 2068| m2068_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2068| m2068_20(TernaryNonPodObj) = Chi : total:m2067_17, partial:m2068_19 -# 2068| r2068_21(glval) = CopyValue : r2068_14 -# 2069| r2069_1(glval) = VariableAddress[z] : -# 2069| r2069_2(glval) = FunctionAddress[operator=] : -# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_4(glval) = VariableAddress[a] : -# 2069| r2069_5(bool) = Load[a] : &:r2069_4, m2066_6 -# 2069| v2069_6(void) = ConditionalBranch : r2069_5 +# 2082| Block 4 +# 2082| m2082_7(unknown) = Phi : from 5:~m2082_30, from 6:~m2082_42 +# 2082| m2082_8(TernaryNonPodObj) = Phi : from 5:m2082_36, from 6:m2082_47 +# 2082| r2082_9(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_10(TernaryNonPodObj) = Load[#temp2082:9] : &:r2082_9, m2082_8 +# 2082| m2082_11(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_3, r2082_10 +# 2082| r2082_12(glval) = Convert : r2082_3 +# 2082| r2082_13(TernaryNonPodObj &) = CopyValue : r2082_12 +# 2082| r2082_14(TernaryNonPodObj &) = Call[operator=] : func:r2082_2, this:r2082_1, 0:r2082_13 +# 2082| m2082_15(unknown) = ^CallSideEffect : ~m2082_7 +# 2082| m2082_16(unknown) = Chi : total:m2082_7, partial:m2082_15 +# 2082| v2082_17(void) = ^IndirectReadSideEffect[-1] : &:r2082_1, m2081_17 +# 2082| v2082_18(void) = ^BufferReadSideEffect[0] : &:r2082_13, ~m2082_11 +# 2082| m2082_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_1 +# 2082| m2082_20(TernaryNonPodObj) = Chi : total:m2081_17, partial:m2082_19 +# 2082| r2082_21(glval) = CopyValue : r2082_14 +# 2083| r2083_1(glval) = VariableAddress[z] : +# 2083| r2083_2(glval) = FunctionAddress[operator=] : +# 2083| r2083_3(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_4(glval) = VariableAddress[a] : +# 2083| r2083_5(bool) = Load[a] : &:r2083_4, m2080_6 +# 2083| v2083_6(void) = ConditionalBranch : r2083_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2068| Block 5 -# 2068| r2068_22(glval) = VariableAddress[#temp2068:13] : -# 2068| m2068_23(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_22 -# 2068| r2068_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| r2068_25(glval) = VariableAddress[x] : -# 2068| r2068_26(glval) = Convert : r2068_25 -# 2068| r2068_27(TernaryNonPodObj &) = CopyValue : r2068_26 -# 2068| v2068_28(void) = Call[TernaryNonPodObj] : func:r2068_24, this:r2068_22, 0:r2068_27 -# 2068| m2068_29(unknown) = ^CallSideEffect : ~m2067_13 -# 2068| m2068_30(unknown) = Chi : total:m2067_13, partial:m2068_29 -# 2068| v2068_31(void) = ^BufferReadSideEffect[0] : &:r2068_27, ~m2066_8 -# 2068| m2068_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_22 -# 2068| m2068_33(TernaryNonPodObj) = Chi : total:m2068_23, partial:m2068_32 -# 2068| r2068_34(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_22, m2068_33 -# 2068| r2068_35(glval) = VariableAddress[#temp2068:9] : -# 2068| m2068_36(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_35, r2068_34 +# 2082| Block 5 +# 2082| r2082_22(glval) = VariableAddress[#temp2082:13] : +# 2082| m2082_23(TernaryNonPodObj) = Uninitialized[#temp2082:13] : &:r2082_22 +# 2082| r2082_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| r2082_25(glval) = VariableAddress[x] : +# 2082| r2082_26(glval) = Convert : r2082_25 +# 2082| r2082_27(TernaryNonPodObj &) = CopyValue : r2082_26 +# 2082| v2082_28(void) = Call[TernaryNonPodObj] : func:r2082_24, this:r2082_22, 0:r2082_27 +# 2082| m2082_29(unknown) = ^CallSideEffect : ~m2081_13 +# 2082| m2082_30(unknown) = Chi : total:m2081_13, partial:m2082_29 +# 2082| v2082_31(void) = ^BufferReadSideEffect[0] : &:r2082_27, ~m2080_8 +# 2082| m2082_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_22 +# 2082| m2082_33(TernaryNonPodObj) = Chi : total:m2082_23, partial:m2082_32 +# 2082| r2082_34(TernaryNonPodObj) = Load[#temp2082:13] : &:r2082_22, m2082_33 +# 2082| r2082_35(glval) = VariableAddress[#temp2082:9] : +# 2082| m2082_36(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_35, r2082_34 #-----| Goto -> Block 4 -# 2068| Block 6 -# 2068| r2068_37(glval) = VariableAddress[#temp2068:17] : -# 2068| m2068_38(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_37 -# 2068| r2068_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| v2068_40(void) = Call[TernaryNonPodObj] : func:r2068_39, this:r2068_37 -# 2068| m2068_41(unknown) = ^CallSideEffect : ~m2067_13 -# 2068| m2068_42(unknown) = Chi : total:m2067_13, partial:m2068_41 -# 2068| m2068_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_37 -# 2068| m2068_44(TernaryNonPodObj) = Chi : total:m2068_38, partial:m2068_43 -# 2068| r2068_45(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_37, m2068_44 -# 2068| r2068_46(glval) = VariableAddress[#temp2068:9] : -# 2068| m2068_47(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_46, r2068_45 +# 2082| Block 6 +# 2082| r2082_37(glval) = VariableAddress[#temp2082:17] : +# 2082| m2082_38(TernaryNonPodObj) = Uninitialized[#temp2082:17] : &:r2082_37 +# 2082| r2082_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| v2082_40(void) = Call[TernaryNonPodObj] : func:r2082_39, this:r2082_37 +# 2082| m2082_41(unknown) = ^CallSideEffect : ~m2081_13 +# 2082| m2082_42(unknown) = Chi : total:m2081_13, partial:m2082_41 +# 2082| m2082_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_37 +# 2082| m2082_44(TernaryNonPodObj) = Chi : total:m2082_38, partial:m2082_43 +# 2082| r2082_45(TernaryNonPodObj) = Load[#temp2082:17] : &:r2082_37, m2082_44 +# 2082| r2082_46(glval) = VariableAddress[#temp2082:9] : +# 2082| m2082_47(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_46, r2082_45 #-----| Goto -> Block 4 -# 2069| Block 7 -# 2069| m2069_7(unknown) = Phi : from 8:~m2069_27, from 9:~m2069_38 -# 2069| m2069_8(TernaryNonPodObj) = Phi : from 8:m2069_32, from 9:m2069_43 -# 2069| r2069_9(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_10(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_9, m2069_8 -# 2069| m2069_11(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_10 -# 2069| r2069_12(glval) = Convert : r2069_3 -# 2069| r2069_13(TernaryNonPodObj &) = CopyValue : r2069_12 -# 2069| r2069_14(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_13 -# 2069| m2069_15(unknown) = ^CallSideEffect : ~m2069_7 -# 2069| m2069_16(unknown) = Chi : total:m2069_7, partial:m2069_15 -# 2069| v2069_17(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, m2068_20 -# 2069| v2069_18(void) = ^BufferReadSideEffect[0] : &:r2069_13, ~m2069_11 -# 2069| m2069_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| m2069_20(TernaryNonPodObj) = Chi : total:m2068_20, partial:m2069_19 -# 2069| r2069_21(glval) = CopyValue : r2069_14 -# 2070| r2070_1(glval) = VariableAddress[z] : -# 2070| r2070_2(glval) = FunctionAddress[operator=] : -# 2070| r2070_3(glval) = VariableAddress[a] : -# 2070| r2070_4(bool) = Load[a] : &:r2070_3, m2066_6 -# 2070| v2070_5(void) = ConditionalBranch : r2070_4 +# 2083| Block 7 +# 2083| m2083_7(unknown) = Phi : from 8:~m2083_27, from 9:~m2083_38 +# 2083| m2083_8(TernaryNonPodObj) = Phi : from 8:m2083_32, from 9:m2083_43 +# 2083| r2083_9(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_10(TernaryNonPodObj) = Load[#temp2083:9] : &:r2083_9, m2083_8 +# 2083| m2083_11(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_3, r2083_10 +# 2083| r2083_12(glval) = Convert : r2083_3 +# 2083| r2083_13(TernaryNonPodObj &) = CopyValue : r2083_12 +# 2083| r2083_14(TernaryNonPodObj &) = Call[operator=] : func:r2083_2, this:r2083_1, 0:r2083_13 +# 2083| m2083_15(unknown) = ^CallSideEffect : ~m2083_7 +# 2083| m2083_16(unknown) = Chi : total:m2083_7, partial:m2083_15 +# 2083| v2083_17(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, m2082_20 +# 2083| v2083_18(void) = ^BufferReadSideEffect[0] : &:r2083_13, ~m2083_11 +# 2083| m2083_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 +# 2083| m2083_20(TernaryNonPodObj) = Chi : total:m2082_20, partial:m2083_19 +# 2083| r2083_21(glval) = CopyValue : r2083_14 +# 2084| r2084_1(glval) = VariableAddress[z] : +# 2084| r2084_2(glval) = FunctionAddress[operator=] : +# 2084| r2084_3(glval) = VariableAddress[a] : +# 2084| r2084_4(bool) = Load[a] : &:r2084_3, m2080_6 +# 2084| v2084_5(void) = ConditionalBranch : r2084_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2069| Block 8 -# 2069| r2069_22(glval) = VariableAddress[#temp2069:13] : -# 2069| m2069_23(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_22 -# 2069| r2069_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_25(void) = Call[TernaryNonPodObj] : func:r2069_24, this:r2069_22 -# 2069| m2069_26(unknown) = ^CallSideEffect : ~m2068_16 -# 2069| m2069_27(unknown) = Chi : total:m2068_16, partial:m2069_26 -# 2069| m2069_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_22 -# 2069| m2069_29(TernaryNonPodObj) = Chi : total:m2069_23, partial:m2069_28 -# 2069| r2069_30(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_22, m2069_29 -# 2069| r2069_31(glval) = VariableAddress[#temp2069:9] : -# 2069| m2069_32(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_31, r2069_30 +# 2083| Block 8 +# 2083| r2083_22(glval) = VariableAddress[#temp2083:13] : +# 2083| m2083_23(TernaryNonPodObj) = Uninitialized[#temp2083:13] : &:r2083_22 +# 2083| r2083_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_25(void) = Call[TernaryNonPodObj] : func:r2083_24, this:r2083_22 +# 2083| m2083_26(unknown) = ^CallSideEffect : ~m2082_16 +# 2083| m2083_27(unknown) = Chi : total:m2082_16, partial:m2083_26 +# 2083| m2083_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_22 +# 2083| m2083_29(TernaryNonPodObj) = Chi : total:m2083_23, partial:m2083_28 +# 2083| r2083_30(TernaryNonPodObj) = Load[#temp2083:13] : &:r2083_22, m2083_29 +# 2083| r2083_31(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_32(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_31, r2083_30 #-----| Goto -> Block 7 -# 2069| Block 9 -# 2069| r2069_33(glval) = VariableAddress[#temp2069:34] : -# 2069| m2069_34(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_33 -# 2069| r2069_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_36(void) = Call[TernaryNonPodObj] : func:r2069_35, this:r2069_33 -# 2069| m2069_37(unknown) = ^CallSideEffect : ~m2068_16 -# 2069| m2069_38(unknown) = Chi : total:m2068_16, partial:m2069_37 -# 2069| m2069_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_33 -# 2069| m2069_40(TernaryNonPodObj) = Chi : total:m2069_34, partial:m2069_39 -# 2069| r2069_41(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_33, m2069_40 -# 2069| r2069_42(glval) = VariableAddress[#temp2069:9] : -# 2069| m2069_43(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_42, r2069_41 +# 2083| Block 9 +# 2083| r2083_33(glval) = VariableAddress[#temp2083:34] : +# 2083| m2083_34(TernaryNonPodObj) = Uninitialized[#temp2083:34] : &:r2083_33 +# 2083| r2083_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_36(void) = Call[TernaryNonPodObj] : func:r2083_35, this:r2083_33 +# 2083| m2083_37(unknown) = ^CallSideEffect : ~m2082_16 +# 2083| m2083_38(unknown) = Chi : total:m2082_16, partial:m2083_37 +# 2083| m2083_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_33 +# 2083| m2083_40(TernaryNonPodObj) = Chi : total:m2083_34, partial:m2083_39 +# 2083| r2083_41(TernaryNonPodObj) = Load[#temp2083:34] : &:r2083_33, m2083_40 +# 2083| r2083_42(glval) = VariableAddress[#temp2083:9] : +# 2083| m2083_43(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_42, r2083_41 #-----| Goto -> Block 7 -# 2070| Block 10 -# 2070| m2070_6(glval) = Phi : from 11:m2070_40, from 12:m2070_43 -# 2070| r2070_7(glval) = VariableAddress[#temp2070:10] : -# 2070| r2070_8(glval) = Load[#temp2070:10] : &:r2070_7, m2070_6 -# 2070| r2070_9(glval) = Convert : r2070_8 -# 2070| r2070_10(TernaryNonPodObj &) = CopyValue : r2070_9 -# 2070| r2070_11(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_10 -# 2070| m2070_12(unknown) = ^CallSideEffect : ~m2069_16 -# 2070| m2070_13(unknown) = Chi : total:m2069_16, partial:m2070_12 -# 2070| v2070_14(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, m2069_20 -# 2070| v2070_15(void) = ^BufferReadSideEffect[0] : &:r2070_10, ~m2070_13 -# 2070| m2070_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 -# 2070| m2070_17(TernaryNonPodObj) = Chi : total:m2069_20, partial:m2070_16 -# 2070| r2070_18(glval) = CopyValue : r2070_11 -# 2070| r2070_19(glval) = FunctionAddress[operator=] : -# 2070| r2070_20(glval) = VariableAddress[#temp2070:23] : -# 2070| m2070_21(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_20 -# 2070| r2070_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2070| v2070_23(void) = Call[TernaryNonPodObj] : func:r2070_22, this:r2070_20 -# 2070| m2070_24(unknown) = ^CallSideEffect : ~m2070_13 -# 2070| m2070_25(unknown) = Chi : total:m2070_13, partial:m2070_24 -# 2070| m2070_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_20 -# 2070| m2070_27(TernaryNonPodObj) = Chi : total:m2070_21, partial:m2070_26 -# 2070| r2070_28(glval) = Convert : r2070_20 -# 2070| r2070_29(TernaryNonPodObj &) = CopyValue : r2070_28 -# 2070| r2070_30(TernaryNonPodObj &) = Call[operator=] : func:r2070_19, this:r2070_18, 0:r2070_29 -# 2070| m2070_31(unknown) = ^CallSideEffect : ~m2070_25 -# 2070| m2070_32(unknown) = Chi : total:m2070_25, partial:m2070_31 -# 2070| v2070_33(void) = ^IndirectReadSideEffect[-1] : &:r2070_18, m2070_17 -# 2070| v2070_34(void) = ^BufferReadSideEffect[0] : &:r2070_29, ~m2070_27 -# 2070| m2070_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_18 -# 2070| m2070_36(TernaryNonPodObj) = Chi : total:m2070_17, partial:m2070_35 -# 2070| r2070_37(glval) = CopyValue : r2070_30 -# 2071| v2071_1(void) = NoOp : -# 2066| v2066_13(void) = ReturnVoid : -# 2066| v2066_14(void) = AliasedUse : ~m2070_32 -# 2066| v2066_15(void) = ExitFunction : +# 2084| Block 10 +# 2084| m2084_6(glval) = Phi : from 11:m2084_40, from 12:m2084_43 +# 2084| r2084_7(glval) = VariableAddress[#temp2084:10] : +# 2084| r2084_8(glval) = Load[#temp2084:10] : &:r2084_7, m2084_6 +# 2084| r2084_9(glval) = Convert : r2084_8 +# 2084| r2084_10(TernaryNonPodObj &) = CopyValue : r2084_9 +# 2084| r2084_11(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_10 +# 2084| m2084_12(unknown) = ^CallSideEffect : ~m2083_16 +# 2084| m2084_13(unknown) = Chi : total:m2083_16, partial:m2084_12 +# 2084| v2084_14(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, m2083_20 +# 2084| v2084_15(void) = ^BufferReadSideEffect[0] : &:r2084_10, ~m2084_13 +# 2084| m2084_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 +# 2084| m2084_17(TernaryNonPodObj) = Chi : total:m2083_20, partial:m2084_16 +# 2084| r2084_18(glval) = CopyValue : r2084_11 +# 2084| r2084_19(glval) = FunctionAddress[operator=] : +# 2084| r2084_20(glval) = VariableAddress[#temp2084:23] : +# 2084| m2084_21(TernaryNonPodObj) = Uninitialized[#temp2084:23] : &:r2084_20 +# 2084| r2084_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| v2084_23(void) = Call[TernaryNonPodObj] : func:r2084_22, this:r2084_20 +# 2084| m2084_24(unknown) = ^CallSideEffect : ~m2084_13 +# 2084| m2084_25(unknown) = Chi : total:m2084_13, partial:m2084_24 +# 2084| m2084_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_20 +# 2084| m2084_27(TernaryNonPodObj) = Chi : total:m2084_21, partial:m2084_26 +# 2084| r2084_28(glval) = Convert : r2084_20 +# 2084| r2084_29(TernaryNonPodObj &) = CopyValue : r2084_28 +# 2084| r2084_30(TernaryNonPodObj &) = Call[operator=] : func:r2084_19, this:r2084_18, 0:r2084_29 +# 2084| m2084_31(unknown) = ^CallSideEffect : ~m2084_25 +# 2084| m2084_32(unknown) = Chi : total:m2084_25, partial:m2084_31 +# 2084| v2084_33(void) = ^IndirectReadSideEffect[-1] : &:r2084_18, m2084_17 +# 2084| v2084_34(void) = ^BufferReadSideEffect[0] : &:r2084_29, ~m2084_27 +# 2084| m2084_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_18 +# 2084| m2084_36(TernaryNonPodObj) = Chi : total:m2084_17, partial:m2084_35 +# 2084| r2084_37(glval) = CopyValue : r2084_30 +# 2085| v2085_1(void) = NoOp : +# 2080| v2080_13(void) = ReturnVoid : +# 2080| v2080_14(void) = AliasedUse : ~m2084_32 +# 2080| v2080_15(void) = ExitFunction : -# 2070| Block 11 -# 2070| r2070_38(glval) = VariableAddress[x] : -# 2070| r2070_39(glval) = VariableAddress[#temp2070:10] : -# 2070| m2070_40(glval) = Store[#temp2070:10] : &:r2070_39, r2070_38 +# 2084| Block 11 +# 2084| r2084_38(glval) = VariableAddress[x] : +# 2084| r2084_39(glval) = VariableAddress[#temp2084:10] : +# 2084| m2084_40(glval) = Store[#temp2084:10] : &:r2084_39, r2084_38 #-----| Goto -> Block 10 -# 2070| Block 12 -# 2070| r2070_41(glval) = VariableAddress[y] : -# 2070| r2070_42(glval) = VariableAddress[#temp2070:10] : -# 2070| m2070_43(glval) = Store[#temp2070:10] : &:r2070_42, r2070_41 +# 2084| Block 12 +# 2084| r2084_41(glval) = VariableAddress[y] : +# 2084| r2084_42(glval) = VariableAddress[#temp2084:10] : +# 2084| m2084_43(glval) = Store[#temp2084:10] : &:r2084_42, r2084_41 #-----| Goto -> Block 10 -# 2075| unsigned int CommaTest(unsigned int) -# 2075| Block 0 -# 2075| v2075_1(void) = EnterFunction : -# 2075| m2075_2(unknown) = AliasedDefinition : -# 2075| m2075_3(unknown) = InitializeNonLocal : -# 2075| m2075_4(unknown) = Chi : total:m2075_2, partial:m2075_3 -# 2075| r2075_5(glval) = VariableAddress[x] : -# 2075| m2075_6(unsigned int) = InitializeParameter[x] : &:r2075_5 -# 2076| r2076_1(glval) = VariableAddress[y] : -# 2076| m2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 -# 2077| r2077_1(glval) = VariableAddress[x] : -# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, m2075_6 -# 2077| r2077_3(unsigned int) = Constant[100] : -# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 -# 2077| v2077_5(void) = ConditionalBranch : r2077_4 +# 2089| unsigned int CommaTest(unsigned int) +# 2089| Block 0 +# 2089| v2089_1(void) = EnterFunction : +# 2089| m2089_2(unknown) = AliasedDefinition : +# 2089| m2089_3(unknown) = InitializeNonLocal : +# 2089| m2089_4(unknown) = Chi : total:m2089_2, partial:m2089_3 +# 2089| r2089_5(glval) = VariableAddress[x] : +# 2089| m2089_6(unsigned int) = InitializeParameter[x] : &:r2089_5 +# 2090| r2090_1(glval) = VariableAddress[y] : +# 2090| m2090_2(unsigned int) = Uninitialized[y] : &:r2090_1 +# 2091| r2091_1(glval) = VariableAddress[x] : +# 2091| r2091_2(unsigned int) = Load[x] : &:r2091_1, m2089_6 +# 2091| r2091_3(unsigned int) = Constant[100] : +# 2091| r2091_4(bool) = CompareLT : r2091_2, r2091_3 +# 2091| v2091_5(void) = ConditionalBranch : r2091_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2077| Block 1 -# 2077| m2077_6(unknown) = Phi : from 2:~m2078_6, from 3:~m2079_6 -# 2077| m2077_7(unsigned int) = Phi : from 2:m2077_13, from 3:m2077_15 -# 2077| r2077_8(glval) = VariableAddress[#temp2077:7] : -# 2077| r2077_9(unsigned int) = Load[#temp2077:7] : &:r2077_8, m2077_7 -# 2077| r2077_10(glval) = VariableAddress[y] : -# 2077| m2077_11(unsigned int) = Store[y] : &:r2077_10, r2077_9 -# 2080| r2080_1(glval) = VariableAddress[#return] : -# 2080| m2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 -# 2075| r2075_7(glval) = VariableAddress[#return] : -# 2075| v2075_8(void) = ReturnValue : &:r2075_7, m2080_2 -# 2075| v2075_9(void) = AliasedUse : ~m2077_6 -# 2075| v2075_10(void) = ExitFunction : +# 2091| Block 1 +# 2091| m2091_6(unknown) = Phi : from 2:~m2092_6, from 3:~m2093_6 +# 2091| m2091_7(unsigned int) = Phi : from 2:m2091_13, from 3:m2091_15 +# 2091| r2091_8(glval) = VariableAddress[#temp2091:7] : +# 2091| r2091_9(unsigned int) = Load[#temp2091:7] : &:r2091_8, m2091_7 +# 2091| r2091_10(glval) = VariableAddress[y] : +# 2091| m2091_11(unsigned int) = Store[y] : &:r2091_10, r2091_9 +# 2094| r2094_1(glval) = VariableAddress[#return] : +# 2094| m2094_2(unsigned int) = Uninitialized[#return] : &:r2094_1 +# 2089| r2089_7(glval) = VariableAddress[#return] : +# 2089| v2089_8(void) = ReturnValue : &:r2089_7, m2094_2 +# 2089| v2089_9(void) = AliasedUse : ~m2091_6 +# 2089| v2089_10(void) = ExitFunction : -# 2078| Block 2 -# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : -# 2078| r2078_2(glval) = VariableAddress[x] : -# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, m2075_6 -# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 -# 2078| m2078_5(unknown) = ^CallSideEffect : ~m2075_4 -# 2078| m2078_6(unknown) = Chi : total:m2075_4, partial:m2078_5 -# 2078| r2078_7(glval) = VariableAddress[x] : -# 2078| r2078_8(unsigned int) = Load[x] : &:r2078_7, m2075_6 -# 2078| r2078_9(unsigned int) = CopyValue : r2078_8 -# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : -# 2077| m2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2078_9 +# 2092| Block 2 +# 2092| r2092_1(glval) = FunctionAddress[CommaTestHelper] : +# 2092| r2092_2(glval) = VariableAddress[x] : +# 2092| r2092_3(unsigned int) = Load[x] : &:r2092_2, m2089_6 +# 2092| v2092_4(void) = Call[CommaTestHelper] : func:r2092_1, 0:r2092_3 +# 2092| m2092_5(unknown) = ^CallSideEffect : ~m2089_4 +# 2092| m2092_6(unknown) = Chi : total:m2089_4, partial:m2092_5 +# 2092| r2092_7(glval) = VariableAddress[x] : +# 2092| r2092_8(unsigned int) = Load[x] : &:r2092_7, m2089_6 +# 2092| r2092_9(unsigned int) = CopyValue : r2092_8 +# 2091| r2091_12(glval) = VariableAddress[#temp2091:7] : +# 2091| m2091_13(unsigned int) = Store[#temp2091:7] : &:r2091_12, r2092_9 #-----| Goto -> Block 1 -# 2079| Block 3 -# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : -# 2079| r2079_2(glval) = VariableAddress[x] : -# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, m2075_6 -# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 -# 2079| m2079_5(unknown) = ^CallSideEffect : ~m2075_4 -# 2079| m2079_6(unknown) = Chi : total:m2075_4, partial:m2079_5 -# 2079| r2079_7(int) = Constant[10] : -# 2079| r2079_8(int) = CopyValue : r2079_7 -# 2079| r2079_9(unsigned int) = Convert : r2079_8 -# 2077| r2077_14(glval) = VariableAddress[#temp2077:7] : -# 2077| m2077_15(unsigned int) = Store[#temp2077:7] : &:r2077_14, r2079_9 +# 2093| Block 3 +# 2093| r2093_1(glval) = FunctionAddress[CommaTestHelper] : +# 2093| r2093_2(glval) = VariableAddress[x] : +# 2093| r2093_3(unsigned int) = Load[x] : &:r2093_2, m2089_6 +# 2093| v2093_4(void) = Call[CommaTestHelper] : func:r2093_1, 0:r2093_3 +# 2093| m2093_5(unknown) = ^CallSideEffect : ~m2089_4 +# 2093| m2093_6(unknown) = Chi : total:m2089_4, partial:m2093_5 +# 2093| r2093_7(int) = Constant[10] : +# 2093| r2093_8(int) = CopyValue : r2093_7 +# 2093| r2093_9(unsigned int) = Convert : r2093_8 +# 2091| r2091_14(glval) = VariableAddress[#temp2091:7] : +# 2091| m2091_15(unsigned int) = Store[#temp2091:7] : &:r2091_14, r2093_9 #-----| Goto -> Block 1 -# 2082| void NewDeleteMem() -# 2082| Block 0 -# 2082| v2082_1(void) = EnterFunction : -# 2082| m2082_2(unknown) = AliasedDefinition : -# 2082| m2082_3(unknown) = InitializeNonLocal : -# 2082| m2082_4(unknown) = Chi : total:m2082_2, partial:m2082_3 -# 2083| r2083_1(glval) = VariableAddress[x] : -# 2083| r2083_2(glval) = FunctionAddress[operator new] : -# 2083| r2083_3(unsigned long) = Constant[4] : -# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 -# 2083| m2083_5(unknown) = ^CallSideEffect : ~m2082_4 -# 2083| m2083_6(unknown) = Chi : total:m2082_4, partial:m2083_5 -# 2083| m2083_7(unknown) = ^InitializeDynamicAllocation : &:r2083_4 -# 2083| r2083_8(int *) = Convert : r2083_4 -# 2083| m2083_9(int *) = Store[x] : &:r2083_1, r2083_8 -# 2084| r2084_1(int) = Constant[6] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int *) = Load[x] : &:r2084_2, m2083_9 -# 2084| r2084_4(glval) = CopyValue : r2084_3 -# 2084| m2084_5(int) = Store[?] : &:r2084_4, r2084_1 -# 2084| m2084_6(unknown) = Chi : total:m2083_7, partial:m2084_5 -# 2085| r2085_1(glval) = FunctionAddress[operator delete] : -# 2085| r2085_2(glval) = VariableAddress[x] : -# 2085| r2085_3(int *) = Load[x] : &:r2085_2, m2083_9 -# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 -# 2085| m2085_5(unknown) = ^CallSideEffect : ~m2083_6 -# 2085| m2085_6(unknown) = Chi : total:m2083_6, partial:m2085_5 -# 2086| v2086_1(void) = NoOp : -# 2082| v2082_5(void) = ReturnVoid : -# 2082| v2082_6(void) = AliasedUse : ~m2085_6 -# 2082| v2082_7(void) = ExitFunction : +# 2096| void NewDeleteMem() +# 2096| Block 0 +# 2096| v2096_1(void) = EnterFunction : +# 2096| m2096_2(unknown) = AliasedDefinition : +# 2096| m2096_3(unknown) = InitializeNonLocal : +# 2096| m2096_4(unknown) = Chi : total:m2096_2, partial:m2096_3 +# 2097| r2097_1(glval) = VariableAddress[x] : +# 2097| r2097_2(glval) = FunctionAddress[operator new] : +# 2097| r2097_3(unsigned long) = Constant[4] : +# 2097| r2097_4(void *) = Call[operator new] : func:r2097_2, 0:r2097_3 +# 2097| m2097_5(unknown) = ^CallSideEffect : ~m2096_4 +# 2097| m2097_6(unknown) = Chi : total:m2096_4, partial:m2097_5 +# 2097| m2097_7(unknown) = ^InitializeDynamicAllocation : &:r2097_4 +# 2097| r2097_8(int *) = Convert : r2097_4 +# 2097| m2097_9(int *) = Store[x] : &:r2097_1, r2097_8 +# 2098| r2098_1(int) = Constant[6] : +# 2098| r2098_2(glval) = VariableAddress[x] : +# 2098| r2098_3(int *) = Load[x] : &:r2098_2, m2097_9 +# 2098| r2098_4(glval) = CopyValue : r2098_3 +# 2098| m2098_5(int) = Store[?] : &:r2098_4, r2098_1 +# 2098| m2098_6(unknown) = Chi : total:m2097_7, partial:m2098_5 +# 2099| r2099_1(glval) = FunctionAddress[operator delete] : +# 2099| r2099_2(glval) = VariableAddress[x] : +# 2099| r2099_3(int *) = Load[x] : &:r2099_2, m2097_9 +# 2099| v2099_4(void) = Call[operator delete] : func:r2099_1, 0:r2099_3 +# 2099| m2099_5(unknown) = ^CallSideEffect : ~m2097_6 +# 2099| m2099_6(unknown) = Chi : total:m2097_6, partial:m2099_5 +# 2100| v2100_1(void) = NoOp : +# 2096| v2096_5(void) = ReturnVoid : +# 2096| v2096_6(void) = AliasedUse : ~m2099_6 +# 2096| v2096_7(void) = ExitFunction : -# 2088| void Base2::Base2() -# 2088| Block 0 -# 2088| v2088_1(void) = EnterFunction : -# 2088| m2088_2(unknown) = AliasedDefinition : -# 2088| m2088_3(unknown) = InitializeNonLocal : -# 2088| m2088_4(unknown) = Chi : total:m2088_2, partial:m2088_3 -# 2088| r2088_5(glval) = VariableAddress[#this] : -# 2088| m2088_6(glval) = InitializeParameter[#this] : &:r2088_5 -# 2088| r2088_7(glval) = Load[#this] : &:r2088_5, m2088_6 -# 2088| m2088_8(Base2) = InitializeIndirection[#this] : &:r2088_7 -# 2088| v2088_9(void) = NoOp : -# 2088| v2088_10(void) = ReturnIndirection[#this] : &:r2088_7, m2088_8 -# 2088| v2088_11(void) = ReturnVoid : -# 2088| v2088_12(void) = AliasedUse : m2088_3 -# 2088| v2088_13(void) = ExitFunction : +# 2102| void Base2::Base2() +# 2102| Block 0 +# 2102| v2102_1(void) = EnterFunction : +# 2102| m2102_2(unknown) = AliasedDefinition : +# 2102| m2102_3(unknown) = InitializeNonLocal : +# 2102| m2102_4(unknown) = Chi : total:m2102_2, partial:m2102_3 +# 2102| r2102_5(glval) = VariableAddress[#this] : +# 2102| m2102_6(glval) = InitializeParameter[#this] : &:r2102_5 +# 2102| r2102_7(glval) = Load[#this] : &:r2102_5, m2102_6 +# 2102| m2102_8(Base2) = InitializeIndirection[#this] : &:r2102_7 +# 2102| v2102_9(void) = NoOp : +# 2102| v2102_10(void) = ReturnIndirection[#this] : &:r2102_7, m2102_8 +# 2102| v2102_11(void) = ReturnVoid : +# 2102| v2102_12(void) = AliasedUse : m2102_3 +# 2102| v2102_13(void) = ExitFunction : -# 2090| void Base2::operator delete(void*) -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| m2090_2(unknown) = AliasedDefinition : -# 2090| m2090_3(unknown) = InitializeNonLocal : -# 2090| m2090_4(unknown) = Chi : total:m2090_2, partial:m2090_3 -# 2090| r2090_5(glval) = VariableAddress[p] : -# 2090| m2090_6(void *) = InitializeParameter[p] : &:r2090_5 -# 2090| r2090_7(void *) = Load[p] : &:r2090_5, m2090_6 -# 2090| m2090_8(unknown) = InitializeIndirection[p] : &:r2090_7 -# 2091| v2091_1(void) = NoOp : -# 2090| v2090_9(void) = ReturnIndirection[p] : &:r2090_7, m2090_8 -# 2090| v2090_10(void) = ReturnVoid : -# 2090| v2090_11(void) = AliasedUse : m2090_3 -# 2090| v2090_12(void) = ExitFunction : +# 2104| void Base2::operator delete(void*) +# 2104| Block 0 +# 2104| v2104_1(void) = EnterFunction : +# 2104| m2104_2(unknown) = AliasedDefinition : +# 2104| m2104_3(unknown) = InitializeNonLocal : +# 2104| m2104_4(unknown) = Chi : total:m2104_2, partial:m2104_3 +# 2104| r2104_5(glval) = VariableAddress[p] : +# 2104| m2104_6(void *) = InitializeParameter[p] : &:r2104_5 +# 2104| r2104_7(void *) = Load[p] : &:r2104_5, m2104_6 +# 2104| m2104_8(unknown) = InitializeIndirection[p] : &:r2104_7 +# 2105| v2105_1(void) = NoOp : +# 2104| v2104_9(void) = ReturnIndirection[p] : &:r2104_7, m2104_8 +# 2104| v2104_10(void) = ReturnVoid : +# 2104| v2104_11(void) = AliasedUse : m2104_3 +# 2104| v2104_12(void) = ExitFunction : -# 2092| void Base2::~Base2() -# 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| m2092_2(unknown) = AliasedDefinition : -# 2092| m2092_3(unknown) = InitializeNonLocal : -# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 -# 2092| r2092_5(glval) = VariableAddress[#this] : -# 2092| m2092_6(glval) = InitializeParameter[#this] : &:r2092_5 -# 2092| r2092_7(glval) = Load[#this] : &:r2092_5, m2092_6 -# 2092| m2092_8(Base2) = InitializeIndirection[#this] : &:r2092_7 -# 2092| v2092_9(void) = NoOp : -# 2092| v2092_10(void) = ReturnIndirection[#this] : &:r2092_7, m2092_8 -# 2092| v2092_11(void) = ReturnVoid : -# 2092| v2092_12(void) = AliasedUse : m2092_3 -# 2092| v2092_13(void) = ExitFunction : +# 2106| void Base2::~Base2() +# 2106| Block 0 +# 2106| v2106_1(void) = EnterFunction : +# 2106| m2106_2(unknown) = AliasedDefinition : +# 2106| m2106_3(unknown) = InitializeNonLocal : +# 2106| m2106_4(unknown) = Chi : total:m2106_2, partial:m2106_3 +# 2106| r2106_5(glval) = VariableAddress[#this] : +# 2106| m2106_6(glval) = InitializeParameter[#this] : &:r2106_5 +# 2106| r2106_7(glval) = Load[#this] : &:r2106_5, m2106_6 +# 2106| m2106_8(Base2) = InitializeIndirection[#this] : &:r2106_7 +# 2106| v2106_9(void) = NoOp : +# 2106| v2106_10(void) = ReturnIndirection[#this] : &:r2106_7, m2106_8 +# 2106| v2106_11(void) = ReturnVoid : +# 2106| v2106_12(void) = AliasedUse : m2106_3 +# 2106| v2106_13(void) = ExitFunction : -# 2095| void Derived2::Derived2() -# 2095| Block 0 -# 2095| v2095_1(void) = EnterFunction : -# 2095| m2095_2(unknown) = AliasedDefinition : -# 2095| m2095_3(unknown) = InitializeNonLocal : -# 2095| m2095_4(unknown) = Chi : total:m2095_2, partial:m2095_3 -# 2095| r2095_5(glval) = VariableAddress[#this] : -# 2095| m2095_6(glval) = InitializeParameter[#this] : &:r2095_5 -# 2095| r2095_7(glval) = Load[#this] : &:r2095_5, m2095_6 -# 2095| m2095_8(Derived2) = InitializeIndirection[#this] : &:r2095_7 -# 2095| r2095_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2095_6 -# 2095| r2095_10(glval) = FunctionAddress[Base2] : -# 2095| v2095_11(void) = Call[Base2] : func:r2095_10, this:r2095_9 -# 2095| m2095_12(unknown) = ^CallSideEffect : ~m2095_4 -# 2095| m2095_13(unknown) = Chi : total:m2095_4, partial:m2095_12 -# 2095| m2095_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_9 -# 2095| m2095_15(unknown) = Chi : total:m2095_8, partial:m2095_14 -# 2095| v2095_16(void) = NoOp : -# 2095| v2095_17(void) = ReturnIndirection[#this] : &:r2095_7, m2095_15 -# 2095| v2095_18(void) = ReturnVoid : -# 2095| v2095_19(void) = AliasedUse : ~m2095_13 -# 2095| v2095_20(void) = ExitFunction : +# 2109| void Derived2::Derived2() +# 2109| Block 0 +# 2109| v2109_1(void) = EnterFunction : +# 2109| m2109_2(unknown) = AliasedDefinition : +# 2109| m2109_3(unknown) = InitializeNonLocal : +# 2109| m2109_4(unknown) = Chi : total:m2109_2, partial:m2109_3 +# 2109| r2109_5(glval) = VariableAddress[#this] : +# 2109| m2109_6(glval) = InitializeParameter[#this] : &:r2109_5 +# 2109| r2109_7(glval) = Load[#this] : &:r2109_5, m2109_6 +# 2109| m2109_8(Derived2) = InitializeIndirection[#this] : &:r2109_7 +# 2109| r2109_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2109_6 +# 2109| r2109_10(glval) = FunctionAddress[Base2] : +# 2109| v2109_11(void) = Call[Base2] : func:r2109_10, this:r2109_9 +# 2109| m2109_12(unknown) = ^CallSideEffect : ~m2109_4 +# 2109| m2109_13(unknown) = Chi : total:m2109_4, partial:m2109_12 +# 2109| m2109_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2109_9 +# 2109| m2109_15(unknown) = Chi : total:m2109_8, partial:m2109_14 +# 2109| v2109_16(void) = NoOp : +# 2109| v2109_17(void) = ReturnIndirection[#this] : &:r2109_7, m2109_15 +# 2109| v2109_18(void) = ReturnVoid : +# 2109| v2109_19(void) = AliasedUse : ~m2109_13 +# 2109| v2109_20(void) = ExitFunction : -# 2098| void Derived2::~Derived2() -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| m2098_2(unknown) = AliasedDefinition : -# 2098| m2098_3(unknown) = InitializeNonLocal : -# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 -# 2098| r2098_5(glval) = VariableAddress[#this] : -# 2098| m2098_6(glval) = InitializeParameter[#this] : &:r2098_5 -# 2098| r2098_7(glval) = Load[#this] : &:r2098_5, m2098_6 -# 2098| m2098_8(Derived2) = InitializeIndirection[#this] : &:r2098_7 -# 2098| v2098_9(void) = NoOp : -# 2098| r2098_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2098_6 -# 2098| r2098_11(glval) = FunctionAddress[~Base2] : -# 2098| v2098_12(void) = Call[~Base2] : func:r2098_11, this:r2098_10 -# 2098| m2098_13(unknown) = ^CallSideEffect : ~m2098_4 -# 2098| m2098_14(unknown) = Chi : total:m2098_4, partial:m2098_13 -# 2098| v2098_15(void) = ReturnIndirection[#this] : &:r2098_7, m2098_8 -# 2098| v2098_16(void) = ReturnVoid : -# 2098| v2098_17(void) = AliasedUse : ~m2098_14 -# 2098| v2098_18(void) = ExitFunction : +# 2112| void Derived2::~Derived2() +# 2112| Block 0 +# 2112| v2112_1(void) = EnterFunction : +# 2112| m2112_2(unknown) = AliasedDefinition : +# 2112| m2112_3(unknown) = InitializeNonLocal : +# 2112| m2112_4(unknown) = Chi : total:m2112_2, partial:m2112_3 +# 2112| r2112_5(glval) = VariableAddress[#this] : +# 2112| m2112_6(glval) = InitializeParameter[#this] : &:r2112_5 +# 2112| r2112_7(glval) = Load[#this] : &:r2112_5, m2112_6 +# 2112| m2112_8(Derived2) = InitializeIndirection[#this] : &:r2112_7 +# 2112| v2112_9(void) = NoOp : +# 2112| r2112_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2112_6 +# 2112| r2112_11(glval) = FunctionAddress[~Base2] : +# 2112| v2112_12(void) = Call[~Base2] : func:r2112_11, this:r2112_10 +# 2112| m2112_13(unknown) = ^CallSideEffect : ~m2112_4 +# 2112| m2112_14(unknown) = Chi : total:m2112_4, partial:m2112_13 +# 2112| v2112_15(void) = ReturnIndirection[#this] : &:r2112_7, m2112_8 +# 2112| v2112_16(void) = ReturnVoid : +# 2112| v2112_17(void) = AliasedUse : ~m2112_14 +# 2112| v2112_18(void) = ExitFunction : -# 2100| void Derived2::operator delete(void*) -# 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| m2100_2(unknown) = AliasedDefinition : -# 2100| m2100_3(unknown) = InitializeNonLocal : -# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 -# 2100| r2100_5(glval) = VariableAddress[p] : -# 2100| m2100_6(void *) = InitializeParameter[p] : &:r2100_5 -# 2100| r2100_7(void *) = Load[p] : &:r2100_5, m2100_6 -# 2100| m2100_8(unknown) = InitializeIndirection[p] : &:r2100_7 -# 2101| v2101_1(void) = NoOp : -# 2100| v2100_9(void) = ReturnIndirection[p] : &:r2100_7, m2100_8 -# 2100| v2100_10(void) = ReturnVoid : -# 2100| v2100_11(void) = AliasedUse : m2100_3 -# 2100| v2100_12(void) = ExitFunction : +# 2114| void Derived2::operator delete(void*) +# 2114| Block 0 +# 2114| v2114_1(void) = EnterFunction : +# 2114| m2114_2(unknown) = AliasedDefinition : +# 2114| m2114_3(unknown) = InitializeNonLocal : +# 2114| m2114_4(unknown) = Chi : total:m2114_2, partial:m2114_3 +# 2114| r2114_5(glval) = VariableAddress[p] : +# 2114| m2114_6(void *) = InitializeParameter[p] : &:r2114_5 +# 2114| r2114_7(void *) = Load[p] : &:r2114_5, m2114_6 +# 2114| m2114_8(unknown) = InitializeIndirection[p] : &:r2114_7 +# 2115| v2115_1(void) = NoOp : +# 2114| v2114_9(void) = ReturnIndirection[p] : &:r2114_7, m2114_8 +# 2114| v2114_10(void) = ReturnVoid : +# 2114| v2114_11(void) = AliasedUse : m2114_3 +# 2114| v2114_12(void) = ExitFunction : -# 2105| int virtual_delete() -# 2105| Block 0 -# 2105| v2105_1(void) = EnterFunction : -# 2105| m2105_2(unknown) = AliasedDefinition : -# 2105| m2105_3(unknown) = InitializeNonLocal : -# 2105| m2105_4(unknown) = Chi : total:m2105_2, partial:m2105_3 -# 2107| r2107_1(glval) = VariableAddress[b1] : -# 2107| r2107_2(glval) = FunctionAddress[operator new] : -# 2107| r2107_3(unsigned long) = Constant[8] : -# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 -# 2107| m2107_5(unknown) = ^CallSideEffect : ~m2105_4 -# 2107| m2107_6(unknown) = Chi : total:m2105_4, partial:m2107_5 -# 2107| m2107_7(unknown) = ^InitializeDynamicAllocation : &:r2107_4 -# 2107| r2107_8(Base2 *) = Convert : r2107_4 -# 2107| r2107_9(glval) = FunctionAddress[Base2] : -# 2107| v2107_10(void) = Call[Base2] : func:r2107_9, this:r2107_8 -# 2107| m2107_11(unknown) = ^CallSideEffect : ~m2107_6 -# 2107| m2107_12(unknown) = Chi : total:m2107_6, partial:m2107_11 -# 2107| m2107_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_8 -# 2107| m2107_14(unknown) = Chi : total:m2107_7, partial:m2107_13 -# 2107| m2107_15(Base2 *) = Store[b1] : &:r2107_1, r2107_8 -# 2108| r2108_1(glval) = VariableAddress[b1] : -# 2108| r2108_2(Base2 *) = Load[b1] : &:r2108_1, m2107_15 -# 2108| r2108_3(glval) = FunctionAddress[~Base2] : -# 2108| v2108_4(void) = Call[~Base2] : func:r2108_3 -# 2108| m2108_5(unknown) = ^CallSideEffect : ~m2107_12 -# 2108| m2108_6(unknown) = Chi : total:m2107_12, partial:m2108_5 -# 2108| v2108_7(void) = ^IndirectReadSideEffect[-1] : &:r2108_2, ~m2107_14 -# 2108| m2108_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2108_2 -# 2108| m2108_9(unknown) = Chi : total:m2107_14, partial:m2108_8 -# 2108| r2108_10(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_11(Base2 *) = CopyValue : r2108_1 -# 2108| v2108_12(void) = Call[?] : func:r2108_10, 0:r2108_11 -# 2108| m2108_13(unknown) = ^CallSideEffect : ~m2108_6 -# 2108| m2108_14(unknown) = Chi : total:m2108_6, partial:m2108_13 -# 2110| r2110_1(glval) = VariableAddress[b2] : -# 2110| r2110_2(glval) = FunctionAddress[operator new] : -# 2110| r2110_3(unsigned long) = Constant[16] : -# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 -# 2110| m2110_5(unknown) = ^CallSideEffect : ~m2108_14 -# 2110| m2110_6(unknown) = Chi : total:m2108_14, partial:m2110_5 -# 2110| m2110_7(unknown) = ^InitializeDynamicAllocation : &:r2110_4 -# 2110| r2110_8(Derived2 *) = Convert : r2110_4 -# 2110| r2110_9(glval) = FunctionAddress[Derived2] : -# 2110| v2110_10(void) = Call[Derived2] : func:r2110_9, this:r2110_8 -# 2110| m2110_11(unknown) = ^CallSideEffect : ~m2110_6 -# 2110| m2110_12(unknown) = Chi : total:m2110_6, partial:m2110_11 -# 2110| m2110_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_8 -# 2110| m2110_14(unknown) = Chi : total:m2110_7, partial:m2110_13 -# 2110| r2110_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_8 -# 2110| m2110_16(Base2 *) = Store[b2] : &:r2110_1, r2110_15 -# 2111| r2111_1(glval) = VariableAddress[b2] : -# 2111| r2111_2(Base2 *) = Load[b2] : &:r2111_1, m2110_16 -# 2111| r2111_3(glval) = FunctionAddress[~Base2] : -# 2111| v2111_4(void) = Call[~Base2] : func:r2111_3 -# 2111| m2111_5(unknown) = ^CallSideEffect : ~m2110_12 -# 2111| m2111_6(unknown) = Chi : total:m2110_12, partial:m2111_5 -# 2111| v2111_7(void) = ^IndirectReadSideEffect[-1] : &:r2111_2, ~m2110_14 -# 2111| m2111_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_2 -# 2111| m2111_9(unknown) = Chi : total:m2110_14, partial:m2111_8 -# 2111| r2111_10(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_11(Base2 *) = CopyValue : r2111_1 -# 2111| v2111_12(void) = Call[?] : func:r2111_10, 0:r2111_11 -# 2111| m2111_13(unknown) = ^CallSideEffect : ~m2111_6 -# 2111| m2111_14(unknown) = Chi : total:m2111_6, partial:m2111_13 -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[operator new] : -# 2113| r2113_3(unsigned long) = Constant[16] : -# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 -# 2113| m2113_5(unknown) = ^CallSideEffect : ~m2111_14 -# 2113| m2113_6(unknown) = Chi : total:m2111_14, partial:m2113_5 -# 2113| m2113_7(unknown) = ^InitializeDynamicAllocation : &:r2113_4 -# 2113| r2113_8(Derived2 *) = Convert : r2113_4 -# 2113| r2113_9(glval) = FunctionAddress[Derived2] : -# 2113| v2113_10(void) = Call[Derived2] : func:r2113_9, this:r2113_8 -# 2113| m2113_11(unknown) = ^CallSideEffect : ~m2113_6 -# 2113| m2113_12(unknown) = Chi : total:m2113_6, partial:m2113_11 -# 2113| m2113_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_8 -# 2113| m2113_14(unknown) = Chi : total:m2113_7, partial:m2113_13 -# 2113| m2113_15(Derived2 *) = Store[d] : &:r2113_1, r2113_8 -# 2114| r2114_1(glval) = VariableAddress[d] : -# 2114| r2114_2(Derived2 *) = Load[d] : &:r2114_1, m2113_15 -# 2114| r2114_3(glval) = FunctionAddress[~Derived2] : -# 2114| v2114_4(void) = Call[~Derived2] : func:r2114_3 -# 2114| m2114_5(unknown) = ^CallSideEffect : ~m2113_12 -# 2114| m2114_6(unknown) = Chi : total:m2113_12, partial:m2114_5 -# 2114| v2114_7(void) = ^IndirectReadSideEffect[-1] : &:r2114_2, ~m2113_14 -# 2114| m2114_8(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2114_2 -# 2114| m2114_9(unknown) = Chi : total:m2113_14, partial:m2114_8 -# 2114| r2114_10(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_11(Derived2 *) = CopyValue : r2114_1 -# 2114| v2114_12(void) = Call[?] : func:r2114_10, 0:r2114_11 -# 2114| m2114_13(unknown) = ^CallSideEffect : ~m2114_6 -# 2114| m2114_14(unknown) = Chi : total:m2114_6, partial:m2114_13 -# 2115| r2115_1(glval) = VariableAddress[#return] : -# 2115| m2115_2(int) = Uninitialized[#return] : &:r2115_1 -# 2105| r2105_5(glval) = VariableAddress[#return] : -# 2105| v2105_6(void) = ReturnValue : &:r2105_5, m2115_2 -# 2105| v2105_7(void) = AliasedUse : ~m2114_14 -# 2105| v2105_8(void) = ExitFunction : - -# 2119| void test_constant_folding() +# 2119| int virtual_delete() # 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| m2119_2(unknown) = AliasedDefinition : -# 2119| m2119_3(unknown) = InitializeNonLocal : -# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 -# 2120| r2120_1(glval) = VariableAddress[x] : -# 2120| r2120_2(int) = Constant[116] : -# 2120| m2120_3(int) = Store[x] : &:r2120_1, r2120_2 -# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2121| r2121_2(int) = Constant[116] : -# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 -# 2121| m2121_4(unknown) = ^CallSideEffect : ~m2119_4 -# 2121| m2121_5(unknown) = Chi : total:m2119_4, partial:m2121_4 -# 2122| v2122_1(void) = NoOp : -# 2119| v2119_5(void) = ReturnVoid : -# 2119| v2119_6(void) = AliasedUse : ~m2121_5 -# 2119| v2119_7(void) = ExitFunction : +# 2119| v2119_1(void) = EnterFunction : +# 2119| m2119_2(unknown) = AliasedDefinition : +# 2119| m2119_3(unknown) = InitializeNonLocal : +# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 +# 2121| r2121_1(glval) = VariableAddress[b1] : +# 2121| r2121_2(glval) = FunctionAddress[operator new] : +# 2121| r2121_3(unsigned long) = Constant[8] : +# 2121| r2121_4(void *) = Call[operator new] : func:r2121_2, 0:r2121_3 +# 2121| m2121_5(unknown) = ^CallSideEffect : ~m2119_4 +# 2121| m2121_6(unknown) = Chi : total:m2119_4, partial:m2121_5 +# 2121| m2121_7(unknown) = ^InitializeDynamicAllocation : &:r2121_4 +# 2121| r2121_8(Base2 *) = Convert : r2121_4 +# 2121| r2121_9(glval) = FunctionAddress[Base2] : +# 2121| v2121_10(void) = Call[Base2] : func:r2121_9, this:r2121_8 +# 2121| m2121_11(unknown) = ^CallSideEffect : ~m2121_6 +# 2121| m2121_12(unknown) = Chi : total:m2121_6, partial:m2121_11 +# 2121| m2121_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2121_8 +# 2121| m2121_14(unknown) = Chi : total:m2121_7, partial:m2121_13 +# 2121| m2121_15(Base2 *) = Store[b1] : &:r2121_1, r2121_8 +# 2122| r2122_1(glval) = VariableAddress[b1] : +# 2122| r2122_2(Base2 *) = Load[b1] : &:r2122_1, m2121_15 +# 2122| r2122_3(glval) = FunctionAddress[~Base2] : +# 2122| v2122_4(void) = Call[~Base2] : func:r2122_3 +# 2122| m2122_5(unknown) = ^CallSideEffect : ~m2121_12 +# 2122| m2122_6(unknown) = Chi : total:m2121_12, partial:m2122_5 +# 2122| v2122_7(void) = ^IndirectReadSideEffect[-1] : &:r2122_2, ~m2121_14 +# 2122| m2122_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2122_2 +# 2122| m2122_9(unknown) = Chi : total:m2121_14, partial:m2122_8 +# 2122| r2122_10(glval) = VirtualDeleteFunctionAddress : +# 2122| r2122_11(Base2 *) = CopyValue : r2122_1 +# 2122| v2122_12(void) = Call[?] : func:r2122_10, 0:r2122_11 +# 2122| m2122_13(unknown) = ^CallSideEffect : ~m2122_6 +# 2122| m2122_14(unknown) = Chi : total:m2122_6, partial:m2122_13 +# 2124| r2124_1(glval) = VariableAddress[b2] : +# 2124| r2124_2(glval) = FunctionAddress[operator new] : +# 2124| r2124_3(unsigned long) = Constant[16] : +# 2124| r2124_4(void *) = Call[operator new] : func:r2124_2, 0:r2124_3 +# 2124| m2124_5(unknown) = ^CallSideEffect : ~m2122_14 +# 2124| m2124_6(unknown) = Chi : total:m2122_14, partial:m2124_5 +# 2124| m2124_7(unknown) = ^InitializeDynamicAllocation : &:r2124_4 +# 2124| r2124_8(Derived2 *) = Convert : r2124_4 +# 2124| r2124_9(glval) = FunctionAddress[Derived2] : +# 2124| v2124_10(void) = Call[Derived2] : func:r2124_9, this:r2124_8 +# 2124| m2124_11(unknown) = ^CallSideEffect : ~m2124_6 +# 2124| m2124_12(unknown) = Chi : total:m2124_6, partial:m2124_11 +# 2124| m2124_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_8 +# 2124| m2124_14(unknown) = Chi : total:m2124_7, partial:m2124_13 +# 2124| r2124_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2124_8 +# 2124| m2124_16(Base2 *) = Store[b2] : &:r2124_1, r2124_15 +# 2125| r2125_1(glval) = VariableAddress[b2] : +# 2125| r2125_2(Base2 *) = Load[b2] : &:r2125_1, m2124_16 +# 2125| r2125_3(glval) = FunctionAddress[~Base2] : +# 2125| v2125_4(void) = Call[~Base2] : func:r2125_3 +# 2125| m2125_5(unknown) = ^CallSideEffect : ~m2124_12 +# 2125| m2125_6(unknown) = Chi : total:m2124_12, partial:m2125_5 +# 2125| v2125_7(void) = ^IndirectReadSideEffect[-1] : &:r2125_2, ~m2124_14 +# 2125| m2125_8(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2125_2 +# 2125| m2125_9(unknown) = Chi : total:m2124_14, partial:m2125_8 +# 2125| r2125_10(glval) = VirtualDeleteFunctionAddress : +# 2125| r2125_11(Base2 *) = CopyValue : r2125_1 +# 2125| v2125_12(void) = Call[?] : func:r2125_10, 0:r2125_11 +# 2125| m2125_13(unknown) = ^CallSideEffect : ~m2125_6 +# 2125| m2125_14(unknown) = Chi : total:m2125_6, partial:m2125_13 +# 2127| r2127_1(glval) = VariableAddress[d] : +# 2127| r2127_2(glval) = FunctionAddress[operator new] : +# 2127| r2127_3(unsigned long) = Constant[16] : +# 2127| r2127_4(void *) = Call[operator new] : func:r2127_2, 0:r2127_3 +# 2127| m2127_5(unknown) = ^CallSideEffect : ~m2125_14 +# 2127| m2127_6(unknown) = Chi : total:m2125_14, partial:m2127_5 +# 2127| m2127_7(unknown) = ^InitializeDynamicAllocation : &:r2127_4 +# 2127| r2127_8(Derived2 *) = Convert : r2127_4 +# 2127| r2127_9(glval) = FunctionAddress[Derived2] : +# 2127| v2127_10(void) = Call[Derived2] : func:r2127_9, this:r2127_8 +# 2127| m2127_11(unknown) = ^CallSideEffect : ~m2127_6 +# 2127| m2127_12(unknown) = Chi : total:m2127_6, partial:m2127_11 +# 2127| m2127_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_8 +# 2127| m2127_14(unknown) = Chi : total:m2127_7, partial:m2127_13 +# 2127| m2127_15(Derived2 *) = Store[d] : &:r2127_1, r2127_8 +# 2128| r2128_1(glval) = VariableAddress[d] : +# 2128| r2128_2(Derived2 *) = Load[d] : &:r2128_1, m2127_15 +# 2128| r2128_3(glval) = FunctionAddress[~Derived2] : +# 2128| v2128_4(void) = Call[~Derived2] : func:r2128_3 +# 2128| m2128_5(unknown) = ^CallSideEffect : ~m2127_12 +# 2128| m2128_6(unknown) = Chi : total:m2127_12, partial:m2128_5 +# 2128| v2128_7(void) = ^IndirectReadSideEffect[-1] : &:r2128_2, ~m2127_14 +# 2128| m2128_8(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2128_2 +# 2128| m2128_9(unknown) = Chi : total:m2127_14, partial:m2128_8 +# 2128| r2128_10(glval) = VirtualDeleteFunctionAddress : +# 2128| r2128_11(Derived2 *) = CopyValue : r2128_1 +# 2128| v2128_12(void) = Call[?] : func:r2128_10, 0:r2128_11 +# 2128| m2128_13(unknown) = ^CallSideEffect : ~m2128_6 +# 2128| m2128_14(unknown) = Chi : total:m2128_6, partial:m2128_13 +# 2129| r2129_1(glval) = VariableAddress[#return] : +# 2129| m2129_2(int) = Uninitialized[#return] : &:r2129_1 +# 2119| r2119_5(glval) = VariableAddress[#return] : +# 2119| v2119_6(void) = ReturnValue : &:r2119_5, m2129_2 +# 2119| v2119_7(void) = AliasedUse : ~m2128_14 +# 2119| v2119_8(void) = ExitFunction : -# 2126| int NonExit() -# 2126| Block 0 -# 2126| v2126_1(void) = EnterFunction : -# 2126| m2126_2(unknown) = AliasedDefinition : -# 2126| m2126_3(unknown) = InitializeNonLocal : -# 2126| m2126_4(unknown) = Chi : total:m2126_2, partial:m2126_3 -# 2127| r2127_1(glval) = VariableAddress[x] : -# 2127| r2127_2(glval) = FunctionAddress[Add] : -# 2127| r2127_3(int) = Constant[3] : -# 2127| r2127_4(int) = Constant[4] : -# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 -# 2127| m2127_6(unknown) = ^CallSideEffect : ~m2126_4 -# 2127| m2127_7(unknown) = Chi : total:m2126_4, partial:m2127_6 -# 2127| m2127_8(int) = Store[x] : &:r2127_1, r2127_5 -# 2128| r2128_1(glval) = VariableAddress[x] : -# 2128| r2128_2(int) = Load[x] : &:r2128_1, m2127_8 -# 2128| r2128_3(int) = Constant[7] : -# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 -# 2128| v2128_5(void) = ConditionalBranch : r2128_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2133| void test_constant_folding() +# 2133| Block 0 +# 2133| v2133_1(void) = EnterFunction : +# 2133| m2133_2(unknown) = AliasedDefinition : +# 2133| m2133_3(unknown) = InitializeNonLocal : +# 2133| m2133_4(unknown) = Chi : total:m2133_2, partial:m2133_3 +# 2134| r2134_1(glval) = VariableAddress[x] : +# 2134| r2134_2(int) = Constant[116] : +# 2134| m2134_3(int) = Store[x] : &:r2134_1, r2134_2 +# 2135| r2135_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2135| r2135_2(int) = Constant[116] : +# 2135| v2135_3(void) = Call[test_constant_folding_use] : func:r2135_1, 0:r2135_2 +# 2135| m2135_4(unknown) = ^CallSideEffect : ~m2133_4 +# 2135| m2135_5(unknown) = Chi : total:m2133_4, partial:m2135_4 +# 2136| v2136_1(void) = NoOp : +# 2133| v2133_5(void) = ReturnVoid : +# 2133| v2133_6(void) = AliasedUse : ~m2135_5 +# 2133| v2133_7(void) = ExitFunction : -# 2129| Block 1 -# 2129| r2129_1(glval) = FunctionAddress[exit] : -# 2129| r2129_2(int) = Constant[3] : -# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 -# 2129| m2129_4(unknown) = ^CallSideEffect : ~m2127_7 -# 2129| m2129_5(unknown) = Chi : total:m2127_7, partial:m2129_4 -# 2126| v2126_5(void) = Unreached : - -# 2130| Block 2 -# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : -# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 -# 2130| m2130_3(unknown) = ^CallSideEffect : ~m2127_7 -# 2130| m2130_4(unknown) = Chi : total:m2127_7, partial:m2130_3 -# 2131| r2131_1(glval) = VariableAddress[#return] : -# 2131| r2131_2(glval) = VariableAddress[x] : -# 2131| r2131_3(int) = Load[x] : &:r2131_2, m2127_8 -# 2131| m2131_4(int) = Store[#return] : &:r2131_1, r2131_3 -# 2126| r2126_6(glval) = VariableAddress[#return] : -# 2126| v2126_7(void) = ReturnValue : &:r2126_6, m2131_4 -# 2126| v2126_8(void) = AliasedUse : ~m2130_4 -# 2126| v2126_9(void) = ExitFunction : - -# 2134| void CallsNonExit() -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| m2134_2(unknown) = AliasedDefinition : -# 2134| m2134_3(unknown) = InitializeNonLocal : -# 2134| m2134_4(unknown) = Chi : total:m2134_2, partial:m2134_3 -# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : -# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 -# 2135| m2135_3(unknown) = ^CallSideEffect : ~m2134_4 -# 2135| m2135_4(unknown) = Chi : total:m2134_4, partial:m2135_3 -# 2136| r2136_1(glval) = FunctionAddress[exit] : -# 2136| r2136_2(int) = Constant[3] : -# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 -# 2136| m2136_4(unknown) = ^CallSideEffect : ~m2135_4 -# 2136| m2136_5(unknown) = Chi : total:m2135_4, partial:m2136_4 -# 2134| v2134_5(void) = Unreached : - -# 2139| int TransNonExit() -# 2139| Block 0 -# 2139| v2139_1(void) = EnterFunction : -# 2139| m2139_2(unknown) = AliasedDefinition : -# 2139| m2139_3(unknown) = InitializeNonLocal : -# 2139| m2139_4(unknown) = Chi : total:m2139_2, partial:m2139_3 -# 2140| r2140_1(glval) = VariableAddress[x] : -# 2140| r2140_2(glval) = FunctionAddress[Add] : -# 2140| r2140_3(int) = Constant[3] : -# 2140| r2140_4(int) = Constant[4] : -# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 -# 2140| m2140_6(unknown) = ^CallSideEffect : ~m2139_4 -# 2140| m2140_7(unknown) = Chi : total:m2139_4, partial:m2140_6 -# 2140| m2140_8(int) = Store[x] : &:r2140_1, r2140_5 +# 2140| int NonExit() +# 2140| Block 0 +# 2140| v2140_1(void) = EnterFunction : +# 2140| m2140_2(unknown) = AliasedDefinition : +# 2140| m2140_3(unknown) = InitializeNonLocal : +# 2140| m2140_4(unknown) = Chi : total:m2140_2, partial:m2140_3 # 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(int) = Load[x] : &:r2141_1, m2140_8 -# 2141| r2141_3(int) = Constant[7] : -# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 -# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +# 2141| r2141_2(glval) = FunctionAddress[Add] : +# 2141| r2141_3(int) = Constant[3] : +# 2141| r2141_4(int) = Constant[4] : +# 2141| r2141_5(int) = Call[Add] : func:r2141_2, 0:r2141_3, 1:r2141_4 +# 2141| m2141_6(unknown) = ^CallSideEffect : ~m2140_4 +# 2141| m2141_7(unknown) = Chi : total:m2140_4, partial:m2141_6 +# 2141| m2141_8(int) = Store[x] : &:r2141_1, r2141_5 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(int) = Load[x] : &:r2142_1, m2141_8 +# 2142| r2142_3(int) = Constant[7] : +# 2142| r2142_4(bool) = CompareEQ : r2142_2, r2142_3 +# 2142| v2142_5(void) = ConditionalBranch : r2142_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2142| Block 1 -# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : -# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 -# 2139| v2139_5(void) = Unreached : +# 2143| Block 1 +# 2143| r2143_1(glval) = FunctionAddress[exit] : +# 2143| r2143_2(int) = Constant[3] : +# 2143| v2143_3(void) = Call[exit] : func:r2143_1, 0:r2143_2 +# 2143| m2143_4(unknown) = ^CallSideEffect : ~m2141_7 +# 2143| m2143_5(unknown) = Chi : total:m2141_7, partial:m2143_4 +# 2140| v2140_5(void) = Unreached : -# 2143| Block 2 -# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : -# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 -# 2143| m2143_3(unknown) = ^CallSideEffect : ~m2140_7 -# 2143| m2143_4(unknown) = Chi : total:m2140_7, partial:m2143_3 -# 2144| r2144_1(glval) = VariableAddress[#return] : -# 2144| r2144_2(glval) = VariableAddress[x] : -# 2144| r2144_3(int) = Load[x] : &:r2144_2, m2140_8 -# 2144| m2144_4(int) = Store[#return] : &:r2144_1, r2144_3 -# 2139| r2139_6(glval) = VariableAddress[#return] : -# 2139| v2139_7(void) = ReturnValue : &:r2139_6, m2144_4 -# 2139| v2139_8(void) = AliasedUse : ~m2143_4 -# 2139| v2139_9(void) = ExitFunction : +# 2144| Block 2 +# 2144| r2144_1(glval) = FunctionAddress[VoidFunc] : +# 2144| v2144_2(void) = Call[VoidFunc] : func:r2144_1 +# 2144| m2144_3(unknown) = ^CallSideEffect : ~m2141_7 +# 2144| m2144_4(unknown) = Chi : total:m2141_7, partial:m2144_3 +# 2145| r2145_1(glval) = VariableAddress[#return] : +# 2145| r2145_2(glval) = VariableAddress[x] : +# 2145| r2145_3(int) = Load[x] : &:r2145_2, m2141_8 +# 2145| m2145_4(int) = Store[#return] : &:r2145_1, r2145_3 +# 2140| r2140_6(glval) = VariableAddress[#return] : +# 2140| v2140_7(void) = ReturnValue : &:r2140_6, m2145_4 +# 2140| v2140_8(void) = AliasedUse : ~m2144_4 +# 2140| v2140_9(void) = ExitFunction : -# 2147| void newArrayCorrectType(size_t) -# 2147| Block 0 -# 2147| v2147_1(void) = EnterFunction : -# 2147| m2147_2(unknown) = AliasedDefinition : -# 2147| m2147_3(unknown) = InitializeNonLocal : -# 2147| m2147_4(unknown) = Chi : total:m2147_2, partial:m2147_3 -# 2147| r2147_5(glval) = VariableAddress[n] : -# 2147| m2147_6(unsigned long) = InitializeParameter[n] : &:r2147_5 -# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : -# 2148| r2148_2(glval) = VariableAddress[n] : -# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, m2147_6 -# 2148| r2148_4(unsigned long) = Constant[4] : -# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 -# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 -# 2148| m2148_7(unknown) = ^CallSideEffect : ~m2147_4 -# 2148| m2148_8(unknown) = Chi : total:m2147_4, partial:m2148_7 -# 2148| m2148_9(unknown) = ^InitializeDynamicAllocation : &:r2148_6 -# 2148| r2148_10(int *) = Convert : r2148_6 -# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : -# 2149| r2149_2(glval) = VariableAddress[n] : -# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, m2147_6 -# 2149| r2149_4(unsigned long) = Constant[4] : -# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 -# 2149| r2149_6(float) = Constant[1.0] : -# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 -# 2149| m2149_8(unknown) = ^CallSideEffect : ~m2148_8 -# 2149| m2149_9(unknown) = Chi : total:m2148_8, partial:m2149_8 -# 2149| m2149_10(unknown) = ^InitializeDynamicAllocation : &:r2149_7 -# 2149| r2149_11(int *) = Convert : r2149_7 -# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : -# 2150| r2150_2(glval) = VariableAddress[n] : -# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, m2147_6 -# 2150| r2150_4(unsigned long) = Constant[8] : -# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 -# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 -# 2150| m2150_7(unknown) = ^CallSideEffect : ~m2149_9 -# 2150| m2150_8(unknown) = Chi : total:m2149_9, partial:m2150_7 -# 2150| m2150_9(unknown) = ^InitializeDynamicAllocation : &:r2150_6 -# 2150| r2150_10(String *) = Convert : r2150_6 -# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : -# 2151| r2151_2(glval) = VariableAddress[n] : -# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, m2147_6 -# 2151| r2151_4(unsigned long) = Constant[256] : -# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 -# 2151| r2151_6(align_val_t) = Constant[128] : -# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 -# 2151| m2151_8(unknown) = ^CallSideEffect : ~m2150_8 -# 2151| m2151_9(unknown) = Chi : total:m2150_8, partial:m2151_8 -# 2151| m2151_10(unknown) = ^InitializeDynamicAllocation : &:r2151_7 -# 2151| r2151_11(Overaligned *) = Convert : r2151_7 -# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : -# 2152| r2152_2(glval) = VariableAddress[n] : -# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, m2147_6 -# 2152| r2152_4(unsigned long) = Constant[1] : -# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 -# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 -# 2152| m2152_7(unknown) = ^CallSideEffect : ~m2151_9 -# 2152| m2152_8(unknown) = Chi : total:m2151_9, partial:m2152_7 -# 2152| m2152_9(unknown) = ^InitializeDynamicAllocation : &:r2152_6 -# 2152| r2152_10(DefaultCtorWithDefaultParam *) = Convert : r2152_6 -# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : -# 2153| r2153_2(glval) = VariableAddress[n] : -# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, m2147_6 -# 2153| r2153_4(unsigned long) = Constant[4] : -# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 -# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 -# 2153| m2153_7(unknown) = ^CallSideEffect : ~m2152_8 -# 2153| m2153_8(unknown) = Chi : total:m2152_8, partial:m2153_7 -# 2153| m2153_9(unknown) = ^InitializeDynamicAllocation : &:r2153_6 -# 2153| r2153_10(int *) = Convert : r2153_6 -# 2154| v2154_1(void) = NoOp : -# 2147| v2147_7(void) = ReturnVoid : -# 2147| v2147_8(void) = AliasedUse : ~m2153_8 -# 2147| v2147_9(void) = ExitFunction : +# 2148| void CallsNonExit() +# 2148| Block 0 +# 2148| v2148_1(void) = EnterFunction : +# 2148| m2148_2(unknown) = AliasedDefinition : +# 2148| m2148_3(unknown) = InitializeNonLocal : +# 2148| m2148_4(unknown) = Chi : total:m2148_2, partial:m2148_3 +# 2149| r2149_1(glval) = FunctionAddress[VoidFunc] : +# 2149| v2149_2(void) = Call[VoidFunc] : func:r2149_1 +# 2149| m2149_3(unknown) = ^CallSideEffect : ~m2148_4 +# 2149| m2149_4(unknown) = Chi : total:m2148_4, partial:m2149_3 +# 2150| r2150_1(glval) = FunctionAddress[exit] : +# 2150| r2150_2(int) = Constant[3] : +# 2150| v2150_3(void) = Call[exit] : func:r2150_1, 0:r2150_2 +# 2150| m2150_4(unknown) = ^CallSideEffect : ~m2149_4 +# 2150| m2150_5(unknown) = Chi : total:m2149_4, partial:m2150_4 +# 2148| v2148_5(void) = Unreached : -# 2158| char* test_strtod(char*) -# 2158| Block 0 -# 2158| v2158_1(void) = EnterFunction : -# 2158| m2158_2(unknown) = AliasedDefinition : -# 2158| m2158_3(unknown) = InitializeNonLocal : -# 2158| m2158_4(unknown) = Chi : total:m2158_2, partial:m2158_3 -# 2158| r2158_5(glval) = VariableAddress[s] : -# 2158| m2158_6(char *) = InitializeParameter[s] : &:r2158_5 -# 2158| r2158_7(char *) = Load[s] : &:r2158_5, m2158_6 -# 2158| m2158_8(unknown) = InitializeIndirection[s] : &:r2158_7 -# 2159| r2159_1(glval) = VariableAddress[end] : -# 2159| m2159_2(char *) = Uninitialized[end] : &:r2159_1 -# 2160| r2160_1(glval) = VariableAddress[d] : -# 2160| r2160_2(glval) = FunctionAddress[strtod] : -# 2160| r2160_3(glval) = VariableAddress[s] : -# 2160| r2160_4(char *) = Load[s] : &:r2160_3, m2158_6 -# 2160| r2160_5(char *) = Convert : r2160_4 -# 2160| r2160_6(glval) = VariableAddress[end] : -# 2160| r2160_7(char **) = CopyValue : r2160_6 -# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 -# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m2158_8 -# 2160| m2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 -# 2160| m2160_11(char *) = Chi : total:m2159_2, partial:m2160_10 -# 2160| m2160_12(double) = Store[d] : &:r2160_1, r2160_8 -# 2161| r2161_1(glval) = VariableAddress[#return] : -# 2161| r2161_2(glval) = VariableAddress[end] : -# 2161| r2161_3(char *) = Load[end] : &:r2161_2, m2160_11 -# 2161| m2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 -# 2158| v2158_9(void) = ReturnIndirection[s] : &:r2158_7, m2158_8 -# 2158| r2158_10(glval) = VariableAddress[#return] : -# 2158| v2158_11(void) = ReturnValue : &:r2158_10, m2161_4 -# 2158| v2158_12(void) = AliasedUse : m2158_3 -# 2158| v2158_13(void) = ExitFunction : - -# 2168| void call_as_child_of_ConditionDeclExpr() -# 2168| Block 0 -# 2168| v2168_1(void) = EnterFunction : -# 2168| m2168_2(unknown) = AliasedDefinition : -# 2168| m2168_3(unknown) = InitializeNonLocal : -# 2168| m2168_4(unknown) = Chi : total:m2168_2, partial:m2168_3 -# 2169| r2169_1(glval) = VariableAddress[b] : -# 2169| r2169_2(HasOperatorBool) = Constant[0] : -# 2169| m2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 -# 2169| r2169_4(glval) = VariableAddress[b] : -# 2169| r2169_5(glval) = FunctionAddress[operator bool] : -# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 -# 2169| m2169_7(unknown) = ^CallSideEffect : ~m2168_4 -# 2169| m2169_8(unknown) = Chi : total:m2168_4, partial:m2169_7 -# 2169| v2169_9(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, m2169_3 -# 2169| m2169_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 -# 2169| m2169_11(HasOperatorBool) = Chi : total:m2169_3, partial:m2169_10 -# 2169| r2169_12(bool) = CopyValue : r2169_6 -# 2169| v2169_13(void) = ConditionalBranch : r2169_12 +# 2153| int TransNonExit() +# 2153| Block 0 +# 2153| v2153_1(void) = EnterFunction : +# 2153| m2153_2(unknown) = AliasedDefinition : +# 2153| m2153_3(unknown) = InitializeNonLocal : +# 2153| m2153_4(unknown) = Chi : total:m2153_2, partial:m2153_3 +# 2154| r2154_1(glval) = VariableAddress[x] : +# 2154| r2154_2(glval) = FunctionAddress[Add] : +# 2154| r2154_3(int) = Constant[3] : +# 2154| r2154_4(int) = Constant[4] : +# 2154| r2154_5(int) = Call[Add] : func:r2154_2, 0:r2154_3, 1:r2154_4 +# 2154| m2154_6(unknown) = ^CallSideEffect : ~m2153_4 +# 2154| m2154_7(unknown) = Chi : total:m2153_4, partial:m2154_6 +# 2154| m2154_8(int) = Store[x] : &:r2154_1, r2154_5 +# 2155| r2155_1(glval) = VariableAddress[x] : +# 2155| r2155_2(int) = Load[x] : &:r2155_1, m2154_8 +# 2155| r2155_3(int) = Constant[7] : +# 2155| r2155_4(bool) = CompareEQ : r2155_2, r2155_3 +# 2155| v2155_5(void) = ConditionalBranch : r2155_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2169| Block 1 -# 2169| v2169_14(void) = NoOp : +# 2156| Block 1 +# 2156| r2156_1(glval) = FunctionAddress[CallsNonExit] : +# 2156| v2156_2(void) = Call[CallsNonExit] : func:r2156_1 +# 2153| v2153_5(void) = Unreached : + +# 2157| Block 2 +# 2157| r2157_1(glval) = FunctionAddress[VoidFunc] : +# 2157| v2157_2(void) = Call[VoidFunc] : func:r2157_1 +# 2157| m2157_3(unknown) = ^CallSideEffect : ~m2154_7 +# 2157| m2157_4(unknown) = Chi : total:m2154_7, partial:m2157_3 +# 2158| r2158_1(glval) = VariableAddress[#return] : +# 2158| r2158_2(glval) = VariableAddress[x] : +# 2158| r2158_3(int) = Load[x] : &:r2158_2, m2154_8 +# 2158| m2158_4(int) = Store[#return] : &:r2158_1, r2158_3 +# 2153| r2153_6(glval) = VariableAddress[#return] : +# 2153| v2153_7(void) = ReturnValue : &:r2153_6, m2158_4 +# 2153| v2153_8(void) = AliasedUse : ~m2157_4 +# 2153| v2153_9(void) = ExitFunction : + +# 2161| void newArrayCorrectType(size_t) +# 2161| Block 0 +# 2161| v2161_1(void) = EnterFunction : +# 2161| m2161_2(unknown) = AliasedDefinition : +# 2161| m2161_3(unknown) = InitializeNonLocal : +# 2161| m2161_4(unknown) = Chi : total:m2161_2, partial:m2161_3 +# 2161| r2161_5(glval) = VariableAddress[n] : +# 2161| m2161_6(unsigned long) = InitializeParameter[n] : &:r2161_5 +# 2162| r2162_1(glval) = FunctionAddress[operator new[]] : +# 2162| r2162_2(glval) = VariableAddress[n] : +# 2162| r2162_3(unsigned long) = Load[n] : &:r2162_2, m2161_6 +# 2162| r2162_4(unsigned long) = Constant[4] : +# 2162| r2162_5(unsigned long) = Mul : r2162_3, r2162_4 +# 2162| r2162_6(void *) = Call[operator new[]] : func:r2162_1, 0:r2162_5 +# 2162| m2162_7(unknown) = ^CallSideEffect : ~m2161_4 +# 2162| m2162_8(unknown) = Chi : total:m2161_4, partial:m2162_7 +# 2162| m2162_9(unknown) = ^InitializeDynamicAllocation : &:r2162_6 +# 2162| r2162_10(int *) = Convert : r2162_6 +# 2163| r2163_1(glval) = FunctionAddress[operator new[]] : +# 2163| r2163_2(glval) = VariableAddress[n] : +# 2163| r2163_3(unsigned long) = Load[n] : &:r2163_2, m2161_6 +# 2163| r2163_4(unsigned long) = Constant[4] : +# 2163| r2163_5(unsigned long) = Mul : r2163_3, r2163_4 +# 2163| r2163_6(float) = Constant[1.0] : +# 2163| r2163_7(void *) = Call[operator new[]] : func:r2163_1, 0:r2163_5, 1:r2163_6 +# 2163| m2163_8(unknown) = ^CallSideEffect : ~m2162_8 +# 2163| m2163_9(unknown) = Chi : total:m2162_8, partial:m2163_8 +# 2163| m2163_10(unknown) = ^InitializeDynamicAllocation : &:r2163_7 +# 2163| r2163_11(int *) = Convert : r2163_7 +# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : +# 2164| r2164_2(glval) = VariableAddress[n] : +# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, m2161_6 +# 2164| r2164_4(unsigned long) = Constant[8] : +# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 +# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 +# 2164| m2164_7(unknown) = ^CallSideEffect : ~m2163_9 +# 2164| m2164_8(unknown) = Chi : total:m2163_9, partial:m2164_7 +# 2164| m2164_9(unknown) = ^InitializeDynamicAllocation : &:r2164_6 +# 2164| r2164_10(String *) = Convert : r2164_6 +# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : +# 2165| r2165_2(glval) = VariableAddress[n] : +# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, m2161_6 +# 2165| r2165_4(unsigned long) = Constant[256] : +# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 +# 2165| r2165_6(align_val_t) = Constant[128] : +# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 +# 2165| m2165_8(unknown) = ^CallSideEffect : ~m2164_8 +# 2165| m2165_9(unknown) = Chi : total:m2164_8, partial:m2165_8 +# 2165| m2165_10(unknown) = ^InitializeDynamicAllocation : &:r2165_7 +# 2165| r2165_11(Overaligned *) = Convert : r2165_7 +# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : +# 2166| r2166_2(glval) = VariableAddress[n] : +# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, m2161_6 +# 2166| r2166_4(unsigned long) = Constant[1] : +# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 +# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 +# 2166| m2166_7(unknown) = ^CallSideEffect : ~m2165_9 +# 2166| m2166_8(unknown) = Chi : total:m2165_9, partial:m2166_7 +# 2166| m2166_9(unknown) = ^InitializeDynamicAllocation : &:r2166_6 +# 2166| r2166_10(DefaultCtorWithDefaultParam *) = Convert : r2166_6 +# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : +# 2167| r2167_2(glval) = VariableAddress[n] : +# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, m2161_6 +# 2167| r2167_4(unsigned long) = Constant[4] : +# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 +# 2167| r2167_6(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5 +# 2167| m2167_7(unknown) = ^CallSideEffect : ~m2166_8 +# 2167| m2167_8(unknown) = Chi : total:m2166_8, partial:m2167_7 +# 2167| m2167_9(unknown) = ^InitializeDynamicAllocation : &:r2167_6 +# 2167| r2167_10(int *) = Convert : r2167_6 +# 2168| v2168_1(void) = NoOp : +# 2161| v2161_7(void) = ReturnVoid : +# 2161| v2161_8(void) = AliasedUse : ~m2167_8 +# 2161| v2161_9(void) = ExitFunction : + +# 2172| char* test_strtod(char*) +# 2172| Block 0 +# 2172| v2172_1(void) = EnterFunction : +# 2172| m2172_2(unknown) = AliasedDefinition : +# 2172| m2172_3(unknown) = InitializeNonLocal : +# 2172| m2172_4(unknown) = Chi : total:m2172_2, partial:m2172_3 +# 2172| r2172_5(glval) = VariableAddress[s] : +# 2172| m2172_6(char *) = InitializeParameter[s] : &:r2172_5 +# 2172| r2172_7(char *) = Load[s] : &:r2172_5, m2172_6 +# 2172| m2172_8(unknown) = InitializeIndirection[s] : &:r2172_7 +# 2173| r2173_1(glval) = VariableAddress[end] : +# 2173| m2173_2(char *) = Uninitialized[end] : &:r2173_1 +# 2174| r2174_1(glval) = VariableAddress[d] : +# 2174| r2174_2(glval) = FunctionAddress[strtod] : +# 2174| r2174_3(glval) = VariableAddress[s] : +# 2174| r2174_4(char *) = Load[s] : &:r2174_3, m2172_6 +# 2174| r2174_5(char *) = Convert : r2174_4 +# 2174| r2174_6(glval) = VariableAddress[end] : +# 2174| r2174_7(char **) = CopyValue : r2174_6 +# 2174| r2174_8(double) = Call[strtod] : func:r2174_2, 0:r2174_5, 1:r2174_7 +# 2174| v2174_9(void) = ^BufferReadSideEffect[0] : &:r2174_5, ~m2172_8 +# 2174| m2174_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2174_7 +# 2174| m2174_11(char *) = Chi : total:m2173_2, partial:m2174_10 +# 2174| m2174_12(double) = Store[d] : &:r2174_1, r2174_8 +# 2175| r2175_1(glval) = VariableAddress[#return] : +# 2175| r2175_2(glval) = VariableAddress[end] : +# 2175| r2175_3(char *) = Load[end] : &:r2175_2, m2174_11 +# 2175| m2175_4(char *) = Store[#return] : &:r2175_1, r2175_3 +# 2172| v2172_9(void) = ReturnIndirection[s] : &:r2172_7, m2172_8 +# 2172| r2172_10(glval) = VariableAddress[#return] : +# 2172| v2172_11(void) = ReturnValue : &:r2172_10, m2175_4 +# 2172| v2172_12(void) = AliasedUse : m2172_3 +# 2172| v2172_13(void) = ExitFunction : + +# 2182| void call_as_child_of_ConditionDeclExpr() +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| m2182_2(unknown) = AliasedDefinition : +# 2182| m2182_3(unknown) = InitializeNonLocal : +# 2182| m2182_4(unknown) = Chi : total:m2182_2, partial:m2182_3 +# 2183| r2183_1(glval) = VariableAddress[b] : +# 2183| r2183_2(HasOperatorBool) = Constant[0] : +# 2183| m2183_3(HasOperatorBool) = Store[b] : &:r2183_1, r2183_2 +# 2183| r2183_4(glval) = VariableAddress[b] : +# 2183| r2183_5(glval) = FunctionAddress[operator bool] : +# 2183| r2183_6(bool) = Call[operator bool] : func:r2183_5, this:r2183_4 +# 2183| m2183_7(unknown) = ^CallSideEffect : ~m2182_4 +# 2183| m2183_8(unknown) = Chi : total:m2182_4, partial:m2183_7 +# 2183| v2183_9(void) = ^IndirectReadSideEffect[-1] : &:r2183_4, m2183_3 +# 2183| m2183_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2183_4 +# 2183| m2183_11(HasOperatorBool) = Chi : total:m2183_3, partial:m2183_10 +# 2183| r2183_12(bool) = CopyValue : r2183_6 +# 2183| v2183_13(void) = ConditionalBranch : r2183_12 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2183| Block 1 +# 2183| v2183_14(void) = NoOp : #-----| Goto -> Block 2 -# 2170| Block 2 -# 2170| v2170_1(void) = NoOp : -# 2168| v2168_5(void) = ReturnVoid : -# 2168| v2168_6(void) = AliasedUse : ~m2169_8 -# 2168| v2168_7(void) = ExitFunction : +# 2184| Block 2 +# 2184| v2184_1(void) = NoOp : +# 2182| v2182_5(void) = ReturnVoid : +# 2182| v2182_6(void) = AliasedUse : ~m2183_8 +# 2182| v2182_7(void) = ExitFunction : -# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2172| Block 0 -# 2172| v2172_1(void) = EnterFunction : -# 2172| m2172_2(unknown) = AliasedDefinition : -# 2172| m2172_3(unknown) = InitializeNonLocal : -# 2172| m2172_4(unknown) = Chi : total:m2172_2, partial:m2172_3 -# 2172| r2172_5(glval) = VariableAddress[#this] : -# 2172| m2172_6(glval) = InitializeParameter[#this] : &:r2172_5 -# 2172| r2172_7(glval) = Load[#this] : &:r2172_5, m2172_6 -# 2172| m2172_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_7 +# 2186| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| Block 0 +# 2186| v2186_1(void) = EnterFunction : +# 2186| m2186_2(unknown) = AliasedDefinition : +# 2186| m2186_3(unknown) = InitializeNonLocal : +# 2186| m2186_4(unknown) = Chi : total:m2186_2, partial:m2186_3 +# 2186| r2186_5(glval) = VariableAddress[#this] : +# 2186| m2186_6(glval) = InitializeParameter[#this] : &:r2186_5 +# 2186| r2186_7(glval) = Load[#this] : &:r2186_5, m2186_6 +# 2186| m2186_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2186_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2172| r2172_9(glval) = FieldAddress[x] : m2172_6 -# 2172| r2172_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 2172| r2172_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_10, m0_2 -# 2172| r2172_12(glval) = CopyValue : r2172_11 -# 2172| r2172_13(glval) = FieldAddress[x] : r2172_12 -# 2172| r2172_14(char *) = Load[?] : &:r2172_13, ~m0_4 -# 2172| m2172_15(char *) = Store[?] : &:r2172_9, r2172_14 -# 2172| m2172_16(unknown) = Chi : total:m2172_8, partial:m2172_15 -# 2172| v2172_17(void) = NoOp : -# 2172| v2172_18(void) = ReturnIndirection[#this] : &:r2172_7, m2172_16 +# 2186| r2186_9(glval) = FieldAddress[x] : m2186_6 +# 2186| r2186_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 2186| r2186_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_10, m0_2 +# 2186| r2186_12(glval) = CopyValue : r2186_11 +# 2186| r2186_13(glval) = FieldAddress[x] : r2186_12 +# 2186| r2186_14(char *) = Load[?] : &:r2186_13, ~m0_4 +# 2186| m2186_15(char *) = Store[?] : &:r2186_9, r2186_14 +# 2186| m2186_16(unknown) = Chi : total:m2186_8, partial:m2186_15 +# 2186| v2186_17(void) = NoOp : +# 2186| v2186_18(void) = ReturnIndirection[#this] : &:r2186_7, m2186_16 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2172| v2172_19(void) = ReturnVoid : -# 2172| v2172_20(void) = AliasedUse : m2172_3 -# 2172| v2172_21(void) = ExitFunction : +# 2186| v2186_19(void) = ReturnVoid : +# 2186| v2186_20(void) = AliasedUse : m2186_3 +# 2186| v2186_21(void) = ExitFunction : -# 2175| void ClassWithDestructor::ClassWithDestructor() -# 2175| Block 0 -# 2175| v2175_1(void) = EnterFunction : -# 2175| m2175_2(unknown) = AliasedDefinition : -# 2175| m2175_3(unknown) = InitializeNonLocal : -# 2175| m2175_4(unknown) = Chi : total:m2175_2, partial:m2175_3 -# 2175| r2175_5(glval) = VariableAddress[#this] : -# 2175| m2175_6(glval) = InitializeParameter[#this] : &:r2175_5 -# 2175| r2175_7(glval) = Load[#this] : &:r2175_5, m2175_6 -# 2175| m2175_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_7 -# 2175| r2175_9(glval) = FunctionAddress[operator new] : -# 2175| r2175_10(unsigned long) = Constant[1] : -# 2175| r2175_11(void *) = Call[operator new] : func:r2175_9, 0:r2175_10 -# 2175| m2175_12(unknown) = ^CallSideEffect : ~m2175_4 -# 2175| m2175_13(unknown) = Chi : total:m2175_4, partial:m2175_12 -# 2175| m2175_14(unknown) = ^InitializeDynamicAllocation : &:r2175_11 -# 2175| r2175_15(char *) = Convert : r2175_11 -# 2175| r2175_16(glval) = VariableAddress[#this] : -# 2175| r2175_17(ClassWithDestructor *) = Load[#this] : &:r2175_16, m2175_6 -# 2175| r2175_18(glval) = FieldAddress[x] : r2175_17 -# 2175| m2175_19(char *) = Store[?] : &:r2175_18, r2175_15 -# 2175| m2175_20(unknown) = Chi : total:m2175_8, partial:m2175_19 -# 2175| v2175_21(void) = NoOp : -# 2175| v2175_22(void) = ReturnIndirection[#this] : &:r2175_7, m2175_20 -# 2175| v2175_23(void) = ReturnVoid : -# 2175| v2175_24(void) = AliasedUse : ~m2175_13 -# 2175| v2175_25(void) = ExitFunction : +# 2189| void ClassWithDestructor::ClassWithDestructor() +# 2189| Block 0 +# 2189| v2189_1(void) = EnterFunction : +# 2189| m2189_2(unknown) = AliasedDefinition : +# 2189| m2189_3(unknown) = InitializeNonLocal : +# 2189| m2189_4(unknown) = Chi : total:m2189_2, partial:m2189_3 +# 2189| r2189_5(glval) = VariableAddress[#this] : +# 2189| m2189_6(glval) = InitializeParameter[#this] : &:r2189_5 +# 2189| r2189_7(glval) = Load[#this] : &:r2189_5, m2189_6 +# 2189| m2189_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2189_7 +# 2189| r2189_9(glval) = FunctionAddress[operator new] : +# 2189| r2189_10(unsigned long) = Constant[1] : +# 2189| r2189_11(void *) = Call[operator new] : func:r2189_9, 0:r2189_10 +# 2189| m2189_12(unknown) = ^CallSideEffect : ~m2189_4 +# 2189| m2189_13(unknown) = Chi : total:m2189_4, partial:m2189_12 +# 2189| m2189_14(unknown) = ^InitializeDynamicAllocation : &:r2189_11 +# 2189| r2189_15(char *) = Convert : r2189_11 +# 2189| r2189_16(glval) = VariableAddress[#this] : +# 2189| r2189_17(ClassWithDestructor *) = Load[#this] : &:r2189_16, m2189_6 +# 2189| r2189_18(glval) = FieldAddress[x] : r2189_17 +# 2189| m2189_19(char *) = Store[?] : &:r2189_18, r2189_15 +# 2189| m2189_20(unknown) = Chi : total:m2189_8, partial:m2189_19 +# 2189| v2189_21(void) = NoOp : +# 2189| v2189_22(void) = ReturnIndirection[#this] : &:r2189_7, m2189_20 +# 2189| v2189_23(void) = ReturnVoid : +# 2189| v2189_24(void) = AliasedUse : ~m2189_13 +# 2189| v2189_25(void) = ExitFunction : -# 2176| void ClassWithDestructor::~ClassWithDestructor() -# 2176| Block 0 -# 2176| v2176_1(void) = EnterFunction : -# 2176| m2176_2(unknown) = AliasedDefinition : -# 2176| m2176_3(unknown) = InitializeNonLocal : -# 2176| m2176_4(unknown) = Chi : total:m2176_2, partial:m2176_3 -# 2176| r2176_5(glval) = VariableAddress[#this] : -# 2176| m2176_6(glval) = InitializeParameter[#this] : &:r2176_5 -# 2176| r2176_7(glval) = Load[#this] : &:r2176_5, m2176_6 -# 2176| m2176_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_7 -# 2176| r2176_9(glval) = FunctionAddress[operator delete] : -# 2176| r2176_10(glval) = VariableAddress[#this] : -# 2176| r2176_11(ClassWithDestructor *) = Load[#this] : &:r2176_10, m2176_6 -# 2176| r2176_12(glval) = FieldAddress[x] : r2176_11 -# 2176| r2176_13(char *) = Load[?] : &:r2176_12, ~m2176_8 -# 2176| v2176_14(void) = Call[operator delete] : func:r2176_9, 0:r2176_13 -# 2176| m2176_15(unknown) = ^CallSideEffect : ~m2176_4 -# 2176| m2176_16(unknown) = Chi : total:m2176_4, partial:m2176_15 -# 2176| v2176_17(void) = NoOp : -# 2176| v2176_18(void) = ReturnIndirection[#this] : &:r2176_7, m2176_8 -# 2176| v2176_19(void) = ReturnVoid : -# 2176| v2176_20(void) = AliasedUse : ~m2176_16 -# 2176| v2176_21(void) = ExitFunction : +# 2190| void ClassWithDestructor::~ClassWithDestructor() +# 2190| Block 0 +# 2190| v2190_1(void) = EnterFunction : +# 2190| m2190_2(unknown) = AliasedDefinition : +# 2190| m2190_3(unknown) = InitializeNonLocal : +# 2190| m2190_4(unknown) = Chi : total:m2190_2, partial:m2190_3 +# 2190| r2190_5(glval) = VariableAddress[#this] : +# 2190| m2190_6(glval) = InitializeParameter[#this] : &:r2190_5 +# 2190| r2190_7(glval) = Load[#this] : &:r2190_5, m2190_6 +# 2190| m2190_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2190_7 +# 2190| r2190_9(glval) = FunctionAddress[operator delete] : +# 2190| r2190_10(glval) = VariableAddress[#this] : +# 2190| r2190_11(ClassWithDestructor *) = Load[#this] : &:r2190_10, m2190_6 +# 2190| r2190_12(glval) = FieldAddress[x] : r2190_11 +# 2190| r2190_13(char *) = Load[?] : &:r2190_12, ~m2190_8 +# 2190| v2190_14(void) = Call[operator delete] : func:r2190_9, 0:r2190_13 +# 2190| m2190_15(unknown) = ^CallSideEffect : ~m2190_4 +# 2190| m2190_16(unknown) = Chi : total:m2190_4, partial:m2190_15 +# 2190| v2190_17(void) = NoOp : +# 2190| v2190_18(void) = ReturnIndirection[#this] : &:r2190_7, m2190_8 +# 2190| v2190_19(void) = ReturnVoid : +# 2190| v2190_20(void) = AliasedUse : ~m2190_16 +# 2190| v2190_21(void) = ExitFunction : -# 2178| void ClassWithDestructor::set_x(char) -# 2178| Block 0 -# 2178| v2178_1(void) = EnterFunction : -# 2178| m2178_2(unknown) = AliasedDefinition : -# 2178| m2178_3(unknown) = InitializeNonLocal : -# 2178| m2178_4(unknown) = Chi : total:m2178_2, partial:m2178_3 -# 2178| r2178_5(glval) = VariableAddress[#this] : -# 2178| m2178_6(glval) = InitializeParameter[#this] : &:r2178_5 -# 2178| r2178_7(glval) = Load[#this] : &:r2178_5, m2178_6 -# 2178| m2178_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_7 -# 2178| r2178_9(glval) = VariableAddress[y] : -# 2178| m2178_10(char) = InitializeParameter[y] : &:r2178_9 -# 2178| r2178_11(glval) = VariableAddress[y] : -# 2178| r2178_12(char) = Load[y] : &:r2178_11, m2178_10 -# 2178| r2178_13(glval) = VariableAddress[#this] : -# 2178| r2178_14(ClassWithDestructor *) = Load[#this] : &:r2178_13, m2178_6 -# 2178| r2178_15(glval) = FieldAddress[x] : r2178_14 -# 2178| r2178_16(char *) = Load[?] : &:r2178_15, ~m2178_8 -# 2178| r2178_17(glval) = CopyValue : r2178_16 -# 2178| m2178_18(char) = Store[?] : &:r2178_17, r2178_12 -# 2178| m2178_19(unknown) = Chi : total:m2178_4, partial:m2178_18 -# 2178| v2178_20(void) = NoOp : -# 2178| v2178_21(void) = ReturnIndirection[#this] : &:r2178_7, m2178_8 -# 2178| v2178_22(void) = ReturnVoid : -# 2178| v2178_23(void) = AliasedUse : ~m2178_19 -# 2178| v2178_24(void) = ExitFunction : +# 2192| void ClassWithDestructor::set_x(char) +# 2192| Block 0 +# 2192| v2192_1(void) = EnterFunction : +# 2192| m2192_2(unknown) = AliasedDefinition : +# 2192| m2192_3(unknown) = InitializeNonLocal : +# 2192| m2192_4(unknown) = Chi : total:m2192_2, partial:m2192_3 +# 2192| r2192_5(glval) = VariableAddress[#this] : +# 2192| m2192_6(glval) = InitializeParameter[#this] : &:r2192_5 +# 2192| r2192_7(glval) = Load[#this] : &:r2192_5, m2192_6 +# 2192| m2192_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_7 +# 2192| r2192_9(glval) = VariableAddress[y] : +# 2192| m2192_10(char) = InitializeParameter[y] : &:r2192_9 +# 2192| r2192_11(glval) = VariableAddress[y] : +# 2192| r2192_12(char) = Load[y] : &:r2192_11, m2192_10 +# 2192| r2192_13(glval) = VariableAddress[#this] : +# 2192| r2192_14(ClassWithDestructor *) = Load[#this] : &:r2192_13, m2192_6 +# 2192| r2192_15(glval) = FieldAddress[x] : r2192_14 +# 2192| r2192_16(char *) = Load[?] : &:r2192_15, ~m2192_8 +# 2192| r2192_17(glval) = CopyValue : r2192_16 +# 2192| m2192_18(char) = Store[?] : &:r2192_17, r2192_12 +# 2192| m2192_19(unknown) = Chi : total:m2192_4, partial:m2192_18 +# 2192| v2192_20(void) = NoOp : +# 2192| v2192_21(void) = ReturnIndirection[#this] : &:r2192_7, m2192_8 +# 2192| v2192_22(void) = ReturnVoid : +# 2192| v2192_23(void) = AliasedUse : ~m2192_19 +# 2192| v2192_24(void) = ExitFunction : -# 2179| char ClassWithDestructor::get_x() -# 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| m2179_2(unknown) = AliasedDefinition : -# 2179| m2179_3(unknown) = InitializeNonLocal : -# 2179| m2179_4(unknown) = Chi : total:m2179_2, partial:m2179_3 -# 2179| r2179_5(glval) = VariableAddress[#this] : -# 2179| m2179_6(glval) = InitializeParameter[#this] : &:r2179_5 -# 2179| r2179_7(glval) = Load[#this] : &:r2179_5, m2179_6 -# 2179| m2179_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_7 -# 2179| r2179_9(glval) = VariableAddress[#return] : -# 2179| r2179_10(glval) = VariableAddress[#this] : -# 2179| r2179_11(ClassWithDestructor *) = Load[#this] : &:r2179_10, m2179_6 -# 2179| r2179_12(glval) = FieldAddress[x] : r2179_11 -# 2179| r2179_13(char *) = Load[?] : &:r2179_12, ~m2179_8 -# 2179| r2179_14(char) = Load[?] : &:r2179_13, ~m2179_4 -# 2179| m2179_15(char) = Store[#return] : &:r2179_9, r2179_14 -# 2179| v2179_16(void) = ReturnIndirection[#this] : &:r2179_7, m2179_8 -# 2179| r2179_17(glval) = VariableAddress[#return] : -# 2179| v2179_18(void) = ReturnValue : &:r2179_17, m2179_15 -# 2179| v2179_19(void) = AliasedUse : m2179_3 -# 2179| v2179_20(void) = ExitFunction : +# 2193| char ClassWithDestructor::get_x() +# 2193| Block 0 +# 2193| v2193_1(void) = EnterFunction : +# 2193| m2193_2(unknown) = AliasedDefinition : +# 2193| m2193_3(unknown) = InitializeNonLocal : +# 2193| m2193_4(unknown) = Chi : total:m2193_2, partial:m2193_3 +# 2193| r2193_5(glval) = VariableAddress[#this] : +# 2193| m2193_6(glval) = InitializeParameter[#this] : &:r2193_5 +# 2193| r2193_7(glval) = Load[#this] : &:r2193_5, m2193_6 +# 2193| m2193_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2193_7 +# 2193| r2193_9(glval) = VariableAddress[#return] : +# 2193| r2193_10(glval) = VariableAddress[#this] : +# 2193| r2193_11(ClassWithDestructor *) = Load[#this] : &:r2193_10, m2193_6 +# 2193| r2193_12(glval) = FieldAddress[x] : r2193_11 +# 2193| r2193_13(char *) = Load[?] : &:r2193_12, ~m2193_8 +# 2193| r2193_14(char) = Load[?] : &:r2193_13, ~m2193_4 +# 2193| m2193_15(char) = Store[#return] : &:r2193_9, r2193_14 +# 2193| v2193_16(void) = ReturnIndirection[#this] : &:r2193_7, m2193_8 +# 2193| r2193_17(glval) = VariableAddress[#return] : +# 2193| v2193_18(void) = ReturnValue : &:r2193_17, m2193_15 +# 2193| v2193_19(void) = AliasedUse : m2193_3 +# 2193| v2193_20(void) = ExitFunction : -# 2182| bool initialization_with_destructor_bool -# 2182| Block 0 -# 2182| v2182_1(void) = EnterFunction : -# 2182| m2182_2(unknown) = AliasedDefinition : -# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2182| r2182_4(bool) = Constant[1] : -# 2182| m2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 -# 2182| m2182_6(unknown) = Chi : total:m2182_2, partial:m2182_5 -# 2182| v2182_7(void) = ReturnVoid : -# 2182| v2182_8(void) = AliasedUse : ~m2182_6 -# 2182| v2182_9(void) = ExitFunction : +# 2196| bool initialization_with_destructor_bool +# 2196| Block 0 +# 2196| v2196_1(void) = EnterFunction : +# 2196| m2196_2(unknown) = AliasedDefinition : +# 2196| r2196_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2196| r2196_4(bool) = Constant[1] : +# 2196| m2196_5(bool) = Store[initialization_with_destructor_bool] : &:r2196_3, r2196_4 +# 2196| m2196_6(unknown) = Chi : total:m2196_2, partial:m2196_5 +# 2196| v2196_7(void) = ReturnVoid : +# 2196| v2196_8(void) = AliasedUse : ~m2196_6 +# 2196| v2196_9(void) = ExitFunction : -# 2184| void initialization_with_destructor(bool, char) -# 2184| Block 0 -# 2184| v2184_1(void) = EnterFunction : -# 2184| m2184_2(unknown) = AliasedDefinition : -# 2184| m2184_3(unknown) = InitializeNonLocal : -# 2184| m2184_4(unknown) = Chi : total:m2184_2, partial:m2184_3 -# 2184| r2184_5(glval) = VariableAddress[b] : -# 2184| m2184_6(bool) = InitializeParameter[b] : &:r2184_5 -# 2184| r2184_7(glval) = VariableAddress[c] : -# 2184| m2184_8(char) = InitializeParameter[c] : &:r2184_7 -# 2185| r2185_1(glval) = VariableAddress[x] : -# 2185| m2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 -# 2185| m2185_5(unknown) = ^CallSideEffect : ~m2184_4 -# 2185| m2185_6(unknown) = Chi : total:m2184_4, partial:m2185_5 -# 2185| m2185_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2185| m2185_8(ClassWithDestructor) = Chi : total:m2185_2, partial:m2185_7 -# 2185| r2185_9(glval) = VariableAddress[b] : -# 2185| r2185_10(bool) = Load[b] : &:r2185_9, m2184_6 -# 2185| v2185_11(void) = ConditionalBranch : r2185_10 +# 2198| void initialization_with_destructor(bool, char) +# 2198| Block 0 +# 2198| v2198_1(void) = EnterFunction : +# 2198| m2198_2(unknown) = AliasedDefinition : +# 2198| m2198_3(unknown) = InitializeNonLocal : +# 2198| m2198_4(unknown) = Chi : total:m2198_2, partial:m2198_3 +# 2198| r2198_5(glval) = VariableAddress[b] : +# 2198| m2198_6(bool) = InitializeParameter[b] : &:r2198_5 +# 2198| r2198_7(glval) = VariableAddress[c] : +# 2198| m2198_8(char) = InitializeParameter[c] : &:r2198_7 +# 2199| r2199_1(glval) = VariableAddress[x] : +# 2199| m2199_2(ClassWithDestructor) = Uninitialized[x] : &:r2199_1 +# 2199| r2199_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2199| v2199_4(void) = Call[ClassWithDestructor] : func:r2199_3, this:r2199_1 +# 2199| m2199_5(unknown) = ^CallSideEffect : ~m2198_4 +# 2199| m2199_6(unknown) = Chi : total:m2198_4, partial:m2199_5 +# 2199| m2199_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1 +# 2199| m2199_8(ClassWithDestructor) = Chi : total:m2199_2, partial:m2199_7 +# 2199| r2199_9(glval) = VariableAddress[b] : +# 2199| r2199_10(bool) = Load[b] : &:r2199_9, m2198_6 +# 2199| v2199_11(void) = ConditionalBranch : r2199_10 #-----| False -> Block 3 #-----| True -> Block 2 -# 2184| Block 1 -# 2184| m2184_9(unknown) = Phi : from 13:~m2219_5, from 19:~m2219_13, from 23:~m2219_22 -# 2184| v2184_10(void) = ReturnVoid : -# 2184| v2184_11(void) = AliasedUse : ~m2184_9 -# 2184| v2184_12(void) = ExitFunction : +# 2198| Block 1 +# 2198| m2198_9(unknown) = Phi : from 13:~m2233_5, from 19:~m2233_13, from 23:~m2233_22 +# 2198| v2198_10(void) = ReturnVoid : +# 2198| v2198_11(void) = AliasedUse : ~m2198_9 +# 2198| v2198_12(void) = ExitFunction : -# 2186| Block 2 -# 2186| r2186_1(glval) = VariableAddress[x] : -# 2186| r2186_2(glval) = FunctionAddress[set_x] : -# 2186| r2186_3(char) = Constant[97] : -# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 -# 2186| m2186_5(unknown) = ^CallSideEffect : ~m2185_6 -# 2186| m2186_6(unknown) = Chi : total:m2185_6, partial:m2186_5 -# 2186| v2186_7(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, m2185_8 -# 2186| m2186_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| m2186_9(ClassWithDestructor) = Chi : total:m2185_8, partial:m2186_8 -# 2186| r2186_10(glval) = VariableAddress[x] : -# 2186| r2186_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2186| v2186_12(void) = Call[~ClassWithDestructor] : func:r2186_11, this:r2186_10 -# 2186| m2186_13(unknown) = ^CallSideEffect : ~m2186_6 -# 2186| m2186_14(unknown) = Chi : total:m2186_6, partial:m2186_13 -# 2186| v2186_15(void) = ^IndirectReadSideEffect[-1] : &:r2186_10, m2186_9 -# 2186| m2186_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_10 -# 2186| m2186_17(ClassWithDestructor) = Chi : total:m2186_9, partial:m2186_16 +# 2200| Block 2 +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| r2200_2(glval) = FunctionAddress[set_x] : +# 2200| r2200_3(char) = Constant[97] : +# 2200| v2200_4(void) = Call[set_x] : func:r2200_2, this:r2200_1, 0:r2200_3 +# 2200| m2200_5(unknown) = ^CallSideEffect : ~m2199_6 +# 2200| m2200_6(unknown) = Chi : total:m2199_6, partial:m2200_5 +# 2200| v2200_7(void) = ^IndirectReadSideEffect[-1] : &:r2200_1, m2199_8 +# 2200| m2200_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2200| m2200_9(ClassWithDestructor) = Chi : total:m2199_8, partial:m2200_8 +# 2200| r2200_10(glval) = VariableAddress[x] : +# 2200| r2200_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2200| v2200_12(void) = Call[~ClassWithDestructor] : func:r2200_11, this:r2200_10 +# 2200| m2200_13(unknown) = ^CallSideEffect : ~m2200_6 +# 2200| m2200_14(unknown) = Chi : total:m2200_6, partial:m2200_13 +# 2200| v2200_15(void) = ^IndirectReadSideEffect[-1] : &:r2200_10, m2200_9 +# 2200| m2200_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_10 +# 2200| m2200_17(ClassWithDestructor) = Chi : total:m2200_9, partial:m2200_16 #-----| Goto -> Block 3 -# 2188| Block 3 -# 2188| m2188_1(unknown) = Phi : from 0:~m2185_6, from 2:~m2186_14 -# 2188| r2188_2(glval) = VariableAddress[x] : -# 2188| m2188_3(ClassWithDestructor) = Uninitialized[x] : &:r2188_2 -# 2188| r2188_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2188| v2188_5(void) = Call[ClassWithDestructor] : func:r2188_4, this:r2188_2 -# 2188| m2188_6(unknown) = ^CallSideEffect : ~m2188_1 -# 2188| m2188_7(unknown) = Chi : total:m2188_1, partial:m2188_6 -# 2188| m2188_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_2 -# 2188| m2188_9(ClassWithDestructor) = Chi : total:m2188_3, partial:m2188_8 -# 2188| r2188_10(bool) = Constant[1] : -# 2188| v2188_11(void) = ConditionalBranch : r2188_10 +# 2202| Block 3 +# 2202| m2202_1(unknown) = Phi : from 0:~m2199_6, from 2:~m2200_14 +# 2202| r2202_2(glval) = VariableAddress[x] : +# 2202| m2202_3(ClassWithDestructor) = Uninitialized[x] : &:r2202_2 +# 2202| r2202_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2202| v2202_5(void) = Call[ClassWithDestructor] : func:r2202_4, this:r2202_2 +# 2202| m2202_6(unknown) = ^CallSideEffect : ~m2202_1 +# 2202| m2202_7(unknown) = Chi : total:m2202_1, partial:m2202_6 +# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_2 +# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2202_3, partial:m2202_8 +# 2202| r2202_10(bool) = Constant[1] : +# 2202| v2202_11(void) = ConditionalBranch : r2202_10 #-----| False -> Block 24 #-----| True -> Block 4 -# 2189| Block 4 -# 2189| r2189_1(glval) = VariableAddress[x] : -# 2189| r2189_2(glval) = FunctionAddress[set_x] : -# 2189| r2189_3(char) = Constant[97] : -# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 -# 2189| m2189_5(unknown) = ^CallSideEffect : ~m2188_7 -# 2189| m2189_6(unknown) = Chi : total:m2188_7, partial:m2189_5 -# 2189| v2189_7(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, m2188_9 -# 2189| m2189_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 -# 2189| m2189_9(ClassWithDestructor) = Chi : total:m2188_9, partial:m2189_8 -# 2191| r2191_1(glval) = VariableAddress[x] : -# 2191| m2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 -# 2191| m2191_5(unknown) = ^CallSideEffect : ~m2189_6 -# 2191| m2191_6(unknown) = Chi : total:m2189_6, partial:m2191_5 -# 2191| m2191_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2191| m2191_8(ClassWithDestructor) = Chi : total:m2191_2, partial:m2191_7 -# 2191| r2191_9(glval) = VariableAddress[c] : -# 2191| r2191_10(char) = Load[c] : &:r2191_9, m2184_8 -# 2191| r2191_11(int) = Convert : r2191_10 -# 2191| v2191_12(void) = Switch : r2191_11 +# 2203| Block 4 +# 2203| r2203_1(glval) = VariableAddress[x] : +# 2203| r2203_2(glval) = FunctionAddress[set_x] : +# 2203| r2203_3(char) = Constant[97] : +# 2203| v2203_4(void) = Call[set_x] : func:r2203_2, this:r2203_1, 0:r2203_3 +# 2203| m2203_5(unknown) = ^CallSideEffect : ~m2202_7 +# 2203| m2203_6(unknown) = Chi : total:m2202_7, partial:m2203_5 +# 2203| v2203_7(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, m2202_9 +# 2203| m2203_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 +# 2203| m2203_9(ClassWithDestructor) = Chi : total:m2202_9, partial:m2203_8 +# 2205| r2205_1(glval) = VariableAddress[x] : +# 2205| m2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 +# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 +# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2203_6 +# 2205| m2205_6(unknown) = Chi : total:m2203_6, partial:m2205_5 +# 2205| m2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| m2205_8(ClassWithDestructor) = Chi : total:m2205_2, partial:m2205_7 +# 2205| r2205_9(glval) = VariableAddress[c] : +# 2205| r2205_10(char) = Load[c] : &:r2205_9, m2198_8 +# 2205| r2205_11(int) = Convert : r2205_10 +# 2205| v2205_12(void) = Switch : r2205_11 #-----| Case[97] -> Block 5 #-----| Default -> Block 6 -# 2192| Block 5 -# 2192| v2192_1(void) = NoOp : -# 2193| r2193_1(glval) = VariableAddress[x] : -# 2193| r2193_2(glval) = FunctionAddress[set_x] : -# 2193| r2193_3(char) = Constant[97] : -# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 -# 2193| m2193_5(unknown) = ^CallSideEffect : ~m2191_6 -# 2193| m2193_6(unknown) = Chi : total:m2191_6, partial:m2193_5 -# 2193| v2193_7(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, m2191_8 -# 2193| m2193_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 -# 2193| m2193_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2193_8 -# 2194| v2194_1(void) = NoOp : +# 2206| Block 5 +# 2206| v2206_1(void) = NoOp : +# 2207| r2207_1(glval) = VariableAddress[x] : +# 2207| r2207_2(glval) = FunctionAddress[set_x] : +# 2207| r2207_3(char) = Constant[97] : +# 2207| v2207_4(void) = Call[set_x] : func:r2207_2, this:r2207_1, 0:r2207_3 +# 2207| m2207_5(unknown) = ^CallSideEffect : ~m2205_6 +# 2207| m2207_6(unknown) = Chi : total:m2205_6, partial:m2207_5 +# 2207| v2207_7(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, m2205_8 +# 2207| m2207_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 +# 2207| m2207_9(ClassWithDestructor) = Chi : total:m2205_8, partial:m2207_8 +# 2208| v2208_1(void) = NoOp : #-----| Goto -> Block 7 -# 2195| Block 6 -# 2195| v2195_1(void) = NoOp : -# 2196| r2196_1(glval) = VariableAddress[x] : -# 2196| r2196_2(glval) = FunctionAddress[set_x] : -# 2196| r2196_3(char) = Constant[98] : -# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 -# 2196| m2196_5(unknown) = ^CallSideEffect : ~m2191_6 -# 2196| m2196_6(unknown) = Chi : total:m2191_6, partial:m2196_5 -# 2196| v2196_7(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, m2191_8 -# 2196| m2196_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 -# 2196| m2196_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2196_8 -# 2197| v2197_1(void) = NoOp : +# 2209| Block 6 +# 2209| v2209_1(void) = NoOp : +# 2210| r2210_1(glval) = VariableAddress[x] : +# 2210| r2210_2(glval) = FunctionAddress[set_x] : +# 2210| r2210_3(char) = Constant[98] : +# 2210| v2210_4(void) = Call[set_x] : func:r2210_2, this:r2210_1, 0:r2210_3 +# 2210| m2210_5(unknown) = ^CallSideEffect : ~m2205_6 +# 2210| m2210_6(unknown) = Chi : total:m2205_6, partial:m2210_5 +# 2210| v2210_7(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, m2205_8 +# 2210| m2210_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| m2210_9(ClassWithDestructor) = Chi : total:m2205_8, partial:m2210_8 +# 2211| v2211_1(void) = NoOp : #-----| Goto -> Block 7 -# 2198| Block 7 -# 2198| m2198_1(unknown) = Phi : from 5:~m2193_6, from 6:~m2196_6 -# 2198| v2198_2(void) = NoOp : -# 2200| r2200_1(glval) = VariableAddress[x] : -# 2200| m2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 -# 2200| m2200_5(unknown) = ^CallSideEffect : ~m2198_1 -# 2200| m2200_6(unknown) = Chi : total:m2198_1, partial:m2200_5 -# 2200| m2200_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2200| m2200_8(ClassWithDestructor) = Chi : total:m2200_2, partial:m2200_7 -# 2201| r2201_1(glval>) = VariableAddress[ys] : -# 2201| m2201_2(vector) = Uninitialized[ys] : &:r2201_1 -# 2201| r2201_3(glval) = FunctionAddress[vector] : -# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : -# 2201| r2201_5(glval) = VariableAddress[x] : -# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, m2200_8 -# 2201| m2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 -# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, m2201_7 -# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 -# 2201| m2201_10(unknown) = ^CallSideEffect : ~m2200_6 -# 2201| m2201_11(unknown) = Chi : total:m2200_6, partial:m2201_10 -# 2201| m2201_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| m2201_13(vector) = Chi : total:m2201_2, partial:m2201_12 -# 2201| r2201_14(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_15(glval>) = VariableAddress[ys] : -# 2201| r2201_16(vector &) = CopyValue : r2201_15 -# 2201| m2201_17(vector &) = Store[(__range)] : &:r2201_14, r2201_16 -# 2201| r2201_18(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_19(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_20(vector &) = Load[(__range)] : &:r2201_19, m2201_17 -#-----| r0_1(glval>) = CopyValue : r2201_20 +# 2212| Block 7 +# 2212| m2212_1(unknown) = Phi : from 5:~m2207_6, from 6:~m2210_6 +# 2212| v2212_2(void) = NoOp : +# 2214| r2214_1(glval) = VariableAddress[x] : +# 2214| m2214_2(ClassWithDestructor) = Uninitialized[x] : &:r2214_1 +# 2214| r2214_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2214| v2214_4(void) = Call[ClassWithDestructor] : func:r2214_3, this:r2214_1 +# 2214| m2214_5(unknown) = ^CallSideEffect : ~m2212_1 +# 2214| m2214_6(unknown) = Chi : total:m2212_1, partial:m2214_5 +# 2214| m2214_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 +# 2214| m2214_8(ClassWithDestructor) = Chi : total:m2214_2, partial:m2214_7 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| m2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, m2214_8 +# 2215| m2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, m2215_7 +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2214_6 +# 2215| m2215_11(unknown) = Chi : total:m2214_6, partial:m2215_10 +# 2215| m2215_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| m2215_13(vector) = Chi : total:m2215_2, partial:m2215_12 +# 2215| r2215_14(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_15(glval>) = VariableAddress[ys] : +# 2215| r2215_16(vector &) = CopyValue : r2215_15 +# 2215| m2215_17(vector &) = Store[(__range)] : &:r2215_14, r2215_16 +# 2215| r2215_18(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_19(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_20(vector &) = Load[(__range)] : &:r2215_19, m2215_17 +#-----| r0_1(glval>) = CopyValue : r2215_20 #-----| r0_2(glval>) = Convert : r0_1 -# 2201| r2201_21(glval) = FunctionAddress[begin] : -# 2201| r2201_22(iterator) = Call[begin] : func:r2201_21, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2201_13 -# 2201| m2201_23(iterator) = Store[(__begin)] : &:r2201_18, r2201_22 -# 2201| r2201_24(glval>) = VariableAddress[(__end)] : -# 2201| r2201_25(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_26(vector &) = Load[(__range)] : &:r2201_25, m2201_17 -#-----| r0_4(glval>) = CopyValue : r2201_26 +# 2215| r2215_21(glval) = FunctionAddress[begin] : +# 2215| r2215_22(iterator) = Call[begin] : func:r2215_21, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2215_13 +# 2215| m2215_23(iterator) = Store[(__begin)] : &:r2215_18, r2215_22 +# 2215| r2215_24(glval>) = VariableAddress[(__end)] : +# 2215| r2215_25(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_26(vector &) = Load[(__range)] : &:r2215_25, m2215_17 +#-----| r0_4(glval>) = CopyValue : r2215_26 #-----| r0_5(glval>) = Convert : r0_4 -# 2201| r2201_27(glval) = FunctionAddress[end] : -# 2201| r2201_28(iterator) = Call[end] : func:r2201_27, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2201_13 -# 2201| m2201_29(iterator) = Store[(__end)] : &:r2201_24, r2201_28 +# 2215| r2215_27(glval) = FunctionAddress[end] : +# 2215| r2215_28(iterator) = Call[end] : func:r2215_27, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2215_13 +# 2215| m2215_29(iterator) = Store[(__end)] : &:r2215_24, r2215_28 #-----| Goto -> Block 8 -# 2201| Block 8 -# 2201| m2201_30(iterator) = Phi : from 7:m2201_23, from 9:m2201_68 -# 2201| m2201_31(unknown) = Phi : from 7:~m2201_11, from 9:~m2201_65 -# 2201| r2201_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2201_32 -# 2201| r2201_33(glval) = FunctionAddress[operator!=] : +# 2215| Block 8 +# 2215| m2215_30(iterator) = Phi : from 7:m2215_23, from 9:m2215_68 +# 2215| m2215_31(unknown) = Phi : from 7:~m2215_11, from 9:~m2215_65 +# 2215| r2215_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2215_32 +# 2215| r2215_33(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_34(glval) = FunctionAddress[iterator] : -# 2201| r2201_35(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2201_35 +# 2215| r2215_34(glval) = FunctionAddress[iterator] : +# 2215| r2215_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2215_35 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2201| v2201_36(void) = Call[iterator] : func:r2201_34, this:r0_8, 0:r0_11 -# 2201| m2201_37(unknown) = ^CallSideEffect : ~m2201_31 -# 2201| m2201_38(unknown) = Chi : total:m2201_31, partial:m2201_37 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2201_29 -# 2201| m2201_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2201| m2201_40(iterator) = Chi : total:m0_9, partial:m2201_39 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2201_40 -# 2201| r2201_41(bool) = Call[operator!=] : func:r2201_33, this:r0_7, 0:r0_13 -# 2201| m2201_42(unknown) = ^CallSideEffect : ~m2201_38 -# 2201| m2201_43(unknown) = Chi : total:m2201_38, partial:m2201_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2201_30 -# 2201| v2201_44(void) = ConditionalBranch : r2201_41 +# 2215| v2215_36(void) = Call[iterator] : func:r2215_34, this:r0_8, 0:r0_11 +# 2215| m2215_37(unknown) = ^CallSideEffect : ~m2215_31 +# 2215| m2215_38(unknown) = Chi : total:m2215_31, partial:m2215_37 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2215_29 +# 2215| m2215_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2215| m2215_40(iterator) = Chi : total:m0_9, partial:m2215_39 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2215_40 +# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_7, 0:r0_13 +# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 +# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2215_30 +# 2215| v2215_44(void) = ConditionalBranch : r2215_41 #-----| False -> Block 10 #-----| True -> Block 9 -# 2201| Block 9 -# 2201| r2201_45(glval) = VariableAddress[y] : -# 2201| r2201_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2201_46 -# 2201| r2201_47(glval) = FunctionAddress[operator*] : -# 2201| r2201_48(ClassWithDestructor &) = Call[operator*] : func:r2201_47, this:r0_15 -# 2201| m2201_49(unknown) = ^CallSideEffect : ~m2201_43 -# 2201| m2201_50(unknown) = Chi : total:m2201_43, partial:m2201_49 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2201_30 -# 2201| r2201_51(ClassWithDestructor) = Load[?] : &:r2201_48, ~m2201_50 -# 2201| m2201_52(ClassWithDestructor) = Store[y] : &:r2201_45, r2201_51 -# 2202| r2202_1(glval) = VariableAddress[y] : -# 2202| r2202_2(glval) = FunctionAddress[set_x] : -# 2202| r2202_3(char) = Constant[97] : -# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 -# 2202| m2202_5(unknown) = ^CallSideEffect : ~m2201_50 -# 2202| m2202_6(unknown) = Chi : total:m2201_50, partial:m2202_5 -# 2202| v2202_7(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, m2201_52 -# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2201_52, partial:m2202_8 -# 2201| r2201_53(glval) = VariableAddress[y] : -# 2201| r2201_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_55(void) = Call[~ClassWithDestructor] : func:r2201_54, this:r2201_53 -# 2201| m2201_56(unknown) = ^CallSideEffect : ~m2202_6 -# 2201| m2201_57(unknown) = Chi : total:m2202_6, partial:m2201_56 -# 2201| v2201_58(void) = ^IndirectReadSideEffect[-1] : &:r2201_53, m2202_9 -# 2201| m2201_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_53 -# 2201| m2201_60(ClassWithDestructor) = Chi : total:m2202_9, partial:m2201_59 -# 2201| r2201_61(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_62(glval) = FunctionAddress[operator++] : -# 2201| r2201_63(iterator &) = Call[operator++] : func:r2201_62, this:r2201_61 -# 2201| m2201_64(unknown) = ^CallSideEffect : ~m2201_57 -# 2201| m2201_65(unknown) = Chi : total:m2201_57, partial:m2201_64 -# 2201| v2201_66(void) = ^IndirectReadSideEffect[-1] : &:r2201_61, m2201_30 -# 2201| m2201_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_61 -# 2201| m2201_68(iterator) = Chi : total:m2201_30, partial:m2201_67 -# 2201| r2201_69(glval>) = CopyValue : r2201_63 -#-----| Goto (back edge) -> Block 8 - -# 2204| Block 10 -# 2204| r2204_1(glval>) = VariableAddress[ys] : -# 2204| m2204_2(vector) = Uninitialized[ys] : &:r2204_1 -# 2204| r2204_3(glval) = FunctionAddress[vector] : -# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : -# 2204| r2204_5(glval) = VariableAddress[x] : -# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, m2200_8 -# 2204| m2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 -# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, m2204_7 -# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 -# 2204| m2204_10(unknown) = ^CallSideEffect : ~m2201_43 -# 2204| m2204_11(unknown) = Chi : total:m2201_43, partial:m2204_10 -# 2204| m2204_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| m2204_13(vector) = Chi : total:m2204_2, partial:m2204_12 -# 2204| r2204_14(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_15(glval>) = VariableAddress[ys] : -# 2204| r2204_16(vector &) = CopyValue : r2204_15 -# 2204| m2204_17(vector &) = Store[(__range)] : &:r2204_14, r2204_16 -# 2204| r2204_18(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_19(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_20(vector &) = Load[(__range)] : &:r2204_19, m2204_17 -#-----| r0_17(glval>) = CopyValue : r2204_20 -#-----| r0_18(glval>) = Convert : r0_17 -# 2204| r2204_21(glval) = FunctionAddress[begin] : -# 2204| r2204_22(iterator) = Call[begin] : func:r2204_21, this:r0_18 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2204_13 -# 2204| m2204_23(iterator) = Store[(__begin)] : &:r2204_18, r2204_22 -# 2204| r2204_24(glval>) = VariableAddress[(__end)] : -# 2204| r2204_25(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_26(vector &) = Load[(__range)] : &:r2204_25, m2204_17 -#-----| r0_20(glval>) = CopyValue : r2204_26 -#-----| r0_21(glval>) = Convert : r0_20 -# 2204| r2204_27(glval) = FunctionAddress[end] : -# 2204| r2204_28(iterator) = Call[end] : func:r2204_27, this:r0_21 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2204_13 -# 2204| m2204_29(iterator) = Store[(__end)] : &:r2204_24, r2204_28 -#-----| Goto -> Block 11 - -# 2204| Block 11 -# 2204| m2204_30(iterator) = Phi : from 10:m2204_23, from 14:m2204_84 -# 2204| m2204_31(unknown) = Phi : from 10:~m2204_11, from 14:~m2204_81 -# 2204| r2204_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_23(glval>) = Convert : r2204_32 -# 2204| r2204_33(glval) = FunctionAddress[operator!=] : -#-----| r0_24(glval>) = VariableAddress[#temp0:0] : -#-----| m0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_34(glval) = FunctionAddress[iterator] : -# 2204| r2204_35(glval>) = VariableAddress[(__end)] : -#-----| r0_26(glval>) = Convert : r2204_35 -#-----| r0_27(iterator &) = CopyValue : r0_26 -# 2204| v2204_36(void) = Call[iterator] : func:r2204_34, this:r0_24, 0:r0_27 -# 2204| m2204_37(unknown) = ^CallSideEffect : ~m2204_31 -# 2204| m2204_38(unknown) = Chi : total:m2204_31, partial:m2204_37 -#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2204_29 -# 2204| m2204_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 -# 2204| m2204_40(iterator) = Chi : total:m0_25, partial:m2204_39 -#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2204_40 -# 2204| r2204_41(bool) = Call[operator!=] : func:r2204_33, this:r0_23, 0:r0_29 -# 2204| m2204_42(unknown) = ^CallSideEffect : ~m2204_38 -# 2204| m2204_43(unknown) = Chi : total:m2204_38, partial:m2204_42 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2204_30 -# 2204| v2204_44(void) = ConditionalBranch : r2204_41 -#-----| False -> Block 15 -#-----| True -> Block 12 - -# 2204| Block 12 -# 2204| r2204_45(glval) = VariableAddress[y] : -# 2204| r2204_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2204_46 -# 2204| r2204_47(glval) = FunctionAddress[operator*] : -# 2204| r2204_48(ClassWithDestructor &) = Call[operator*] : func:r2204_47, this:r0_31 -# 2204| m2204_49(unknown) = ^CallSideEffect : ~m2204_43 -# 2204| m2204_50(unknown) = Chi : total:m2204_43, partial:m2204_49 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2204_30 -# 2204| r2204_51(ClassWithDestructor) = Load[?] : &:r2204_48, ~m2204_50 -# 2204| m2204_52(ClassWithDestructor) = Store[y] : &:r2204_45, r2204_51 -# 2205| r2205_1(glval) = VariableAddress[y] : -# 2205| r2205_2(glval) = FunctionAddress[set_x] : -# 2205| r2205_3(char) = Constant[97] : -# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 -# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2204_50 -# 2205| m2205_6(unknown) = Chi : total:m2204_50, partial:m2205_5 -# 2205| v2205_7(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, m2204_52 -# 2205| m2205_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 -# 2205| m2205_9(ClassWithDestructor) = Chi : total:m2204_52, partial:m2205_8 -# 2206| r2206_1(glval) = VariableAddress[y] : -# 2206| r2206_2(glval) = FunctionAddress[get_x] : -# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 -# 2206| m2206_4(unknown) = ^CallSideEffect : ~m2205_6 -# 2206| m2206_5(unknown) = Chi : total:m2205_6, partial:m2206_4 -# 2206| v2206_6(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, m2205_9 -# 2206| m2206_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2206| m2206_8(ClassWithDestructor) = Chi : total:m2205_9, partial:m2206_7 -# 2206| r2206_9(int) = Convert : r2206_3 -# 2206| r2206_10(int) = Constant[98] : -# 2206| r2206_11(bool) = CompareEQ : r2206_9, r2206_10 -# 2206| v2206_12(void) = ConditionalBranch : r2206_11 -#-----| False -> Block 14 -#-----| True -> Block 13 - -# 2207| Block 13 -# 2207| v2207_1(void) = NoOp : -# 2204| r2204_53(glval) = VariableAddress[y] : -# 2204| r2204_54(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_55(void) = Call[~ClassWithDestructor] : func:r2204_54, this:r2204_53 -# 2204| m2204_56(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_57(unknown) = Chi : total:m2206_5, partial:m2204_56 -# 2204| v2204_58(void) = ^IndirectReadSideEffect[-1] : &:r2204_53, m2206_8 -# 2204| m2204_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_53 -# 2204| m2204_60(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_59 -# 2204| r2204_61(glval>) = VariableAddress[ys] : -# 2204| r2204_62(glval) = FunctionAddress[~vector] : -# 2204| v2204_63(void) = Call[~vector] : func:r2204_62, this:r2204_61 -# 2204| m2204_64(unknown) = ^CallSideEffect : ~m2204_57 -# 2204| m2204_65(unknown) = Chi : total:m2204_57, partial:m2204_64 -# 2204| v2204_66(void) = ^IndirectReadSideEffect[-1] : &:r2204_61, m2204_13 -# 2204| m2204_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_61 -# 2204| m2204_68(vector) = Chi : total:m2204_13, partial:m2204_67 -# 2219| r2219_1(glval) = VariableAddress[x] : -# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 -# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2204_65 -# 2219| m2219_5(unknown) = Chi : total:m2204_65, partial:m2219_4 -# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2200_8 -# 2219| m2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| m2219_8(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_7 -#-----| Goto -> Block 1 - -# 2204| Block 14 -# 2204| r2204_69(glval) = VariableAddress[y] : -# 2204| r2204_70(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_71(void) = Call[~ClassWithDestructor] : func:r2204_70, this:r2204_69 -# 2204| m2204_72(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_73(unknown) = Chi : total:m2206_5, partial:m2204_72 -# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_69, m2206_8 -# 2204| m2204_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_69 -# 2204| m2204_76(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_75 -# 2204| r2204_77(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_78(glval) = FunctionAddress[operator++] : -# 2204| r2204_79(iterator &) = Call[operator++] : func:r2204_78, this:r2204_77 -# 2204| m2204_80(unknown) = ^CallSideEffect : ~m2204_73 -# 2204| m2204_81(unknown) = Chi : total:m2204_73, partial:m2204_80 -# 2204| v2204_82(void) = ^IndirectReadSideEffect[-1] : &:r2204_77, m2204_30 -# 2204| m2204_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_77 -# 2204| m2204_84(iterator) = Chi : total:m2204_30, partial:m2204_83 -# 2204| r2204_85(glval>) = CopyValue : r2204_79 -#-----| Goto (back edge) -> Block 11 - -# 2210| Block 15 -# 2210| r2210_1(glval>) = VariableAddress[ys] : -# 2210| m2210_2(vector) = Uninitialized[ys] : &:r2210_1 -# 2210| r2210_3(glval) = FunctionAddress[vector] : -# 2210| r2210_4(int) = Constant[1] : -# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 -# 2210| m2210_6(unknown) = ^CallSideEffect : ~m2204_43 -# 2210| m2210_7(unknown) = Chi : total:m2204_43, partial:m2210_6 -# 2210| m2210_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| m2210_9(vector) = Chi : total:m2210_2, partial:m2210_8 -# 2210| r2210_10(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_11(glval>) = VariableAddress[ys] : -# 2210| r2210_12(vector &) = CopyValue : r2210_11 -# 2210| m2210_13(vector &) = Store[(__range)] : &:r2210_10, r2210_12 -# 2210| r2210_14(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_15(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_16(vector &) = Load[(__range)] : &:r2210_15, m2210_13 -#-----| r0_33(glval>) = CopyValue : r2210_16 -#-----| r0_34(glval>) = Convert : r0_33 -# 2210| r2210_17(glval) = FunctionAddress[begin] : -# 2210| r2210_18(iterator) = Call[begin] : func:r2210_17, this:r0_34 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2210_9 -# 2210| m2210_19(iterator) = Store[(__begin)] : &:r2210_14, r2210_18 -# 2210| r2210_20(glval>) = VariableAddress[(__end)] : -# 2210| r2210_21(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_22(vector &) = Load[(__range)] : &:r2210_21, m2210_13 -#-----| r0_36(glval>) = CopyValue : r2210_22 -#-----| r0_37(glval>) = Convert : r0_36 -# 2210| r2210_23(glval) = FunctionAddress[end] : -# 2210| r2210_24(iterator) = Call[end] : func:r2210_23, this:r0_37 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2210_9 -# 2210| m2210_25(iterator) = Store[(__end)] : &:r2210_20, r2210_24 -#-----| Goto -> Block 16 - -# 2210| Block 16 -# 2210| m2210_26(iterator) = Phi : from 15:m2210_19, from 17:m2210_48 -# 2210| m2210_27(unknown) = Phi : from 15:~m2210_7, from 17:~m2210_45 -# 2210| r2210_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_39(glval>) = Convert : r2210_28 -# 2210| r2210_29(glval) = FunctionAddress[operator!=] : -#-----| r0_40(glval>) = VariableAddress[#temp0:0] : -#-----| m0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_30(glval) = FunctionAddress[iterator] : -# 2210| r2210_31(glval>) = VariableAddress[(__end)] : -#-----| r0_42(glval>) = Convert : r2210_31 -#-----| r0_43(iterator &) = CopyValue : r0_42 -# 2210| v2210_32(void) = Call[iterator] : func:r2210_30, this:r0_40, 0:r0_43 -# 2210| m2210_33(unknown) = ^CallSideEffect : ~m2210_27 -# 2210| m2210_34(unknown) = Chi : total:m2210_27, partial:m2210_33 -#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2210_25 -# 2210| m2210_35(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 -# 2210| m2210_36(iterator) = Chi : total:m0_41, partial:m2210_35 -#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2210_36 -# 2210| r2210_37(bool) = Call[operator!=] : func:r2210_29, this:r0_39, 0:r0_45 -# 2210| m2210_38(unknown) = ^CallSideEffect : ~m2210_34 -# 2210| m2210_39(unknown) = Chi : total:m2210_34, partial:m2210_38 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2210_26 -# 2210| v2210_40(void) = ConditionalBranch : r2210_37 -#-----| False -> Block 20 -#-----| True -> Block 18 - -# 2210| Block 17 -# 2210| r2210_41(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_42(glval) = FunctionAddress[operator++] : -# 2210| r2210_43(iterator &) = Call[operator++] : func:r2210_42, this:r2210_41 -# 2210| m2210_44(unknown) = ^CallSideEffect : ~m2210_55 -# 2210| m2210_45(unknown) = Chi : total:m2210_55, partial:m2210_44 -# 2210| v2210_46(void) = ^IndirectReadSideEffect[-1] : &:r2210_41, m2210_26 -# 2210| m2210_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_41 -# 2210| m2210_48(iterator) = Chi : total:m2210_26, partial:m2210_47 -# 2210| r2210_49(glval>) = CopyValue : r2210_43 -#-----| Goto (back edge) -> Block 16 - -# 2210| Block 18 -# 2210| r2210_50(glval) = VariableAddress[y] : -# 2210| r2210_51(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2210_51 -# 2210| r2210_52(glval) = FunctionAddress[operator*] : -# 2210| r2210_53(int &) = Call[operator*] : func:r2210_52, this:r0_47 -# 2210| m2210_54(unknown) = ^CallSideEffect : ~m2210_39 -# 2210| m2210_55(unknown) = Chi : total:m2210_39, partial:m2210_54 -#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2210_26 -# 2210| r2210_56(int) = Load[?] : &:r2210_53, ~m2210_55 -# 2210| m2210_57(int) = Store[y] : &:r2210_50, r2210_56 -# 2211| r2211_1(glval) = VariableAddress[y] : -# 2211| r2211_2(int) = Load[y] : &:r2211_1, m2210_57 -# 2211| r2211_3(int) = Constant[1] : -# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 -# 2211| v2211_5(void) = ConditionalBranch : r2211_4 -#-----| False -> Block 17 -#-----| True -> Block 19 - -# 2212| Block 19 -# 2212| v2212_1(void) = NoOp : -# 2210| r2210_58(glval>) = VariableAddress[ys] : -# 2210| r2210_59(glval) = FunctionAddress[~vector] : -# 2210| v2210_60(void) = Call[~vector] : func:r2210_59, this:r2210_58 -# 2210| m2210_61(unknown) = ^CallSideEffect : ~m2210_55 -# 2210| m2210_62(unknown) = Chi : total:m2210_55, partial:m2210_61 -# 2210| v2210_63(void) = ^IndirectReadSideEffect[-1] : &:r2210_58, m2210_9 -# 2210| m2210_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_58 -# 2210| m2210_65(vector) = Chi : total:m2210_9, partial:m2210_64 -# 2219| r2219_9(glval) = VariableAddress[x] : -# 2219| r2219_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_11(void) = Call[~ClassWithDestructor] : func:r2219_10, this:r2219_9 -# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2210_62 -# 2219| m2219_13(unknown) = Chi : total:m2210_62, partial:m2219_12 -# 2219| v2219_14(void) = ^IndirectReadSideEffect[-1] : &:r2219_9, m2200_8 -# 2219| m2219_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_9 -# 2219| m2219_16(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_15 -#-----| Goto -> Block 1 - -# 2215| Block 20 -# 2215| r2215_1(glval>) = VariableAddress[ys] : -# 2215| m2215_2(vector) = Uninitialized[ys] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[vector] : -# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : -# 2215| r2215_5(glval) = VariableAddress[x] : -# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, m2200_8 -# 2215| m2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 -# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, m2215_7 -# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 -# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2210_39 -# 2215| m2215_11(unknown) = Chi : total:m2210_39, partial:m2215_10 -# 2215| m2215_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2215| m2215_13(vector) = Chi : total:m2215_2, partial:m2215_12 -# 2215| r2215_14(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_15(glval>) = VariableAddress[ys] : -# 2215| r2215_16(vector &) = CopyValue : r2215_15 -# 2215| m2215_17(vector &) = Store[(__range)] : &:r2215_14, r2215_16 -# 2215| r2215_18(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_19(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_20(vector &) = Load[(__range)] : &:r2215_19, m2215_17 -#-----| r0_49(glval>) = CopyValue : r2215_20 -#-----| r0_50(glval>) = Convert : r0_49 -# 2215| r2215_21(glval) = FunctionAddress[begin] : -# 2215| r2215_22(iterator) = Call[begin] : func:r2215_21, this:r0_50 -#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2215_13 -# 2215| m2215_23(iterator) = Store[(__begin)] : &:r2215_18, r2215_22 -# 2215| r2215_24(glval>) = VariableAddress[(__end)] : -# 2215| r2215_25(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_26(vector &) = Load[(__range)] : &:r2215_25, m2215_17 -#-----| r0_52(glval>) = CopyValue : r2215_26 -#-----| r0_53(glval>) = Convert : r0_52 -# 2215| r2215_27(glval) = FunctionAddress[end] : -# 2215| r2215_28(iterator) = Call[end] : func:r2215_27, this:r0_53 -#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2215_13 -# 2215| m2215_29(iterator) = Store[(__end)] : &:r2215_24, r2215_28 -#-----| Goto -> Block 21 - -# 2215| Block 21 -# 2215| m2215_30(iterator) = Phi : from 20:m2215_23, from 22:m2215_68 -# 2215| m2215_31(unknown) = Phi : from 20:~m2215_11, from 22:~m2215_65 -# 2215| r2215_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_55(glval>) = Convert : r2215_32 -# 2215| r2215_33(glval) = FunctionAddress[operator!=] : -#-----| r0_56(glval>) = VariableAddress[#temp0:0] : -#-----| m0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_34(glval) = FunctionAddress[iterator] : -# 2215| r2215_35(glval>) = VariableAddress[(__end)] : -#-----| r0_58(glval>) = Convert : r2215_35 -#-----| r0_59(iterator &) = CopyValue : r0_58 -# 2215| v2215_36(void) = Call[iterator] : func:r2215_34, this:r0_56, 0:r0_59 -# 2215| m2215_37(unknown) = ^CallSideEffect : ~m2215_31 -# 2215| m2215_38(unknown) = Chi : total:m2215_31, partial:m2215_37 -#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2215_29 -# 2215| m2215_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 -# 2215| m2215_40(iterator) = Chi : total:m0_57, partial:m2215_39 -#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2215_40 -# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_55, 0:r0_61 -# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 -# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 -#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2215_30 -# 2215| v2215_44(void) = ConditionalBranch : r2215_41 -#-----| False -> Block 23 -#-----| True -> Block 22 - -# 2215| Block 22 +# 2215| Block 9 # 2215| r2215_45(glval) = VariableAddress[y] : # 2215| r2215_46(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2215_46 +#-----| r0_15(glval>) = Convert : r2215_46 # 2215| r2215_47(glval) = FunctionAddress[operator*] : -# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_63 +# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_15 # 2215| m2215_49(unknown) = ^CallSideEffect : ~m2215_43 # 2215| m2215_50(unknown) = Chi : total:m2215_43, partial:m2215_49 -#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2215_30 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2215_30 # 2215| r2215_51(ClassWithDestructor) = Load[?] : &:r2215_48, ~m2215_50 # 2215| m2215_52(ClassWithDestructor) = Store[y] : &:r2215_45, r2215_51 -# 2216| r2216_1(glval) = VariableAddress[z1] : -# 2216| m2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 -# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| r2216_1(glval) = VariableAddress[y] : +# 2216| r2216_2(glval) = FunctionAddress[set_x] : +# 2216| r2216_3(char) = Constant[97] : +# 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3 # 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_50 # 2216| m2216_6(unknown) = Chi : total:m2215_50, partial:m2216_5 -# 2216| m2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2216| m2216_8(ClassWithDestructor) = Chi : total:m2216_2, partial:m2216_7 -# 2217| r2217_1(glval) = VariableAddress[z2] : -# 2217| m2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 -# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 -# 2217| m2217_5(unknown) = ^CallSideEffect : ~m2216_6 -# 2217| m2217_6(unknown) = Chi : total:m2216_6, partial:m2217_5 -# 2217| m2217_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 -# 2217| m2217_8(ClassWithDestructor) = Chi : total:m2217_2, partial:m2217_7 -# 2218| r2218_1(glval) = VariableAddress[z2] : -# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 -# 2218| m2218_4(unknown) = ^CallSideEffect : ~m2217_6 -# 2218| m2218_5(unknown) = Chi : total:m2217_6, partial:m2218_4 -# 2218| v2218_6(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, m2217_8 -# 2218| m2218_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2218| m2218_8(ClassWithDestructor) = Chi : total:m2217_8, partial:m2218_7 -# 2218| r2218_9(glval) = VariableAddress[z1] : -# 2218| r2218_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_11(void) = Call[~ClassWithDestructor] : func:r2218_10, this:r2218_9 -# 2218| m2218_12(unknown) = ^CallSideEffect : ~m2218_5 -# 2218| m2218_13(unknown) = Chi : total:m2218_5, partial:m2218_12 -# 2218| v2218_14(void) = ^IndirectReadSideEffect[-1] : &:r2218_9, m2216_8 -# 2218| m2218_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_9 -# 2218| m2218_16(ClassWithDestructor) = Chi : total:m2216_8, partial:m2218_15 +# 2216| v2216_7(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, m2215_52 +# 2216| m2216_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 +# 2216| m2216_9(ClassWithDestructor) = Chi : total:m2215_52, partial:m2216_8 # 2215| r2215_53(glval) = VariableAddress[y] : # 2215| r2215_54(glval) = FunctionAddress[~ClassWithDestructor] : # 2215| v2215_55(void) = Call[~ClassWithDestructor] : func:r2215_54, this:r2215_53 -# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2218_13 -# 2215| m2215_57(unknown) = Chi : total:m2218_13, partial:m2215_56 -# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2215_52 +# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2216_6 +# 2215| m2215_57(unknown) = Chi : total:m2216_6, partial:m2215_56 +# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2216_9 # 2215| m2215_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 -# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2215_52, partial:m2215_59 +# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2216_9, partial:m2215_59 # 2215| r2215_61(glval>) = VariableAddress[(__begin)] : # 2215| r2215_62(glval) = FunctionAddress[operator++] : # 2215| r2215_63(iterator &) = Call[operator++] : func:r2215_62, this:r2215_61 @@ -13964,1440 +13618,1695 @@ ir.cpp: # 2215| m2215_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61 # 2215| m2215_68(iterator) = Chi : total:m2215_30, partial:m2215_67 # 2215| r2215_69(glval>) = CopyValue : r2215_63 -#-----| Goto (back edge) -> Block 21 +#-----| Goto (back edge) -> Block 8 -# 2219| Block 23 -# 2219| v2219_17(void) = NoOp : -# 2219| r2219_18(glval) = VariableAddress[x] : -# 2219| r2219_19(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_20(void) = Call[~ClassWithDestructor] : func:r2219_19, this:r2219_18 -# 2219| m2219_21(unknown) = ^CallSideEffect : ~m2215_43 -# 2219| m2219_22(unknown) = Chi : total:m2215_43, partial:m2219_21 -# 2219| v2219_23(void) = ^IndirectReadSideEffect[-1] : &:r2219_18, m2200_8 -# 2219| m2219_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_18 -# 2219| m2219_25(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_24 +# 2218| Block 10 +# 2218| r2218_1(glval>) = VariableAddress[ys] : +# 2218| m2218_2(vector) = Uninitialized[ys] : &:r2218_1 +# 2218| r2218_3(glval) = FunctionAddress[vector] : +# 2218| r2218_4(glval) = VariableAddress[#temp2218:45] : +# 2218| r2218_5(glval) = VariableAddress[x] : +# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, m2214_8 +# 2218| m2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 +# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, m2218_7 +# 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 +# 2218| m2218_10(unknown) = ^CallSideEffect : ~m2215_43 +# 2218| m2218_11(unknown) = Chi : total:m2215_43, partial:m2218_10 +# 2218| m2218_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| m2218_13(vector) = Chi : total:m2218_2, partial:m2218_12 +# 2218| r2218_14(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_15(glval>) = VariableAddress[ys] : +# 2218| r2218_16(vector &) = CopyValue : r2218_15 +# 2218| m2218_17(vector &) = Store[(__range)] : &:r2218_14, r2218_16 +# 2218| r2218_18(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_19(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_20(vector &) = Load[(__range)] : &:r2218_19, m2218_17 +#-----| r0_17(glval>) = CopyValue : r2218_20 +#-----| r0_18(glval>) = Convert : r0_17 +# 2218| r2218_21(glval) = FunctionAddress[begin] : +# 2218| r2218_22(iterator) = Call[begin] : func:r2218_21, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2218_13 +# 2218| m2218_23(iterator) = Store[(__begin)] : &:r2218_18, r2218_22 +# 2218| r2218_24(glval>) = VariableAddress[(__end)] : +# 2218| r2218_25(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_26(vector &) = Load[(__range)] : &:r2218_25, m2218_17 +#-----| r0_20(glval>) = CopyValue : r2218_26 +#-----| r0_21(glval>) = Convert : r0_20 +# 2218| r2218_27(glval) = FunctionAddress[end] : +# 2218| r2218_28(iterator) = Call[end] : func:r2218_27, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2218_13 +# 2218| m2218_29(iterator) = Store[(__end)] : &:r2218_24, r2218_28 +#-----| Goto -> Block 11 + +# 2218| Block 11 +# 2218| m2218_30(iterator) = Phi : from 10:m2218_23, from 14:m2218_84 +# 2218| m2218_31(unknown) = Phi : from 10:~m2218_11, from 14:~m2218_81 +# 2218| r2218_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2218_32 +# 2218| r2218_33(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| m0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2218| r2218_34(glval) = FunctionAddress[iterator] : +# 2218| r2218_35(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2218_35 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2218| v2218_36(void) = Call[iterator] : func:r2218_34, this:r0_24, 0:r0_27 +# 2218| m2218_37(unknown) = ^CallSideEffect : ~m2218_31 +# 2218| m2218_38(unknown) = Chi : total:m2218_31, partial:m2218_37 +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2218_29 +# 2218| m2218_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2218| m2218_40(iterator) = Chi : total:m0_25, partial:m2218_39 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2218_40 +# 2218| r2218_41(bool) = Call[operator!=] : func:r2218_33, this:r0_23, 0:r0_29 +# 2218| m2218_42(unknown) = ^CallSideEffect : ~m2218_38 +# 2218| m2218_43(unknown) = Chi : total:m2218_38, partial:m2218_42 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2218_30 +# 2218| v2218_44(void) = ConditionalBranch : r2218_41 +#-----| False -> Block 15 +#-----| True -> Block 12 + +# 2218| Block 12 +# 2218| r2218_45(glval) = VariableAddress[y] : +# 2218| r2218_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_46 +# 2218| r2218_47(glval) = FunctionAddress[operator*] : +# 2218| r2218_48(ClassWithDestructor &) = Call[operator*] : func:r2218_47, this:r0_31 +# 2218| m2218_49(unknown) = ^CallSideEffect : ~m2218_43 +# 2218| m2218_50(unknown) = Chi : total:m2218_43, partial:m2218_49 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2218_30 +# 2218| r2218_51(ClassWithDestructor) = Load[?] : &:r2218_48, ~m2218_50 +# 2218| m2218_52(ClassWithDestructor) = Store[y] : &:r2218_45, r2218_51 +# 2219| r2219_1(glval) = VariableAddress[y] : +# 2219| r2219_2(glval) = FunctionAddress[set_x] : +# 2219| r2219_3(char) = Constant[97] : +# 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 +# 2219| m2219_5(unknown) = ^CallSideEffect : ~m2218_50 +# 2219| m2219_6(unknown) = Chi : total:m2218_50, partial:m2219_5 +# 2219| v2219_7(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_52 +# 2219| m2219_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2219| m2219_9(ClassWithDestructor) = Chi : total:m2218_52, partial:m2219_8 +# 2220| r2220_1(glval) = VariableAddress[y] : +# 2220| r2220_2(glval) = FunctionAddress[get_x] : +# 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1 +# 2220| m2220_4(unknown) = ^CallSideEffect : ~m2219_6 +# 2220| m2220_5(unknown) = Chi : total:m2219_6, partial:m2220_4 +# 2220| v2220_6(void) = ^IndirectReadSideEffect[-1] : &:r2220_1, m2219_9 +# 2220| m2220_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2220_1 +# 2220| m2220_8(ClassWithDestructor) = Chi : total:m2219_9, partial:m2220_7 +# 2220| r2220_9(int) = Convert : r2220_3 +# 2220| r2220_10(int) = Constant[98] : +# 2220| r2220_11(bool) = CompareEQ : r2220_9, r2220_10 +# 2220| v2220_12(void) = ConditionalBranch : r2220_11 +#-----| False -> Block 14 +#-----| True -> Block 13 + +# 2221| Block 13 +# 2221| v2221_1(void) = NoOp : +# 2218| r2218_53(glval) = VariableAddress[y] : +# 2218| r2218_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_55(void) = Call[~ClassWithDestructor] : func:r2218_54, this:r2218_53 +# 2218| m2218_56(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_57(unknown) = Chi : total:m2220_5, partial:m2218_56 +# 2218| v2218_58(void) = ^IndirectReadSideEffect[-1] : &:r2218_53, m2220_8 +# 2218| m2218_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_53 +# 2218| m2218_60(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_59 +# 2218| r2218_61(glval>) = VariableAddress[ys] : +# 2218| r2218_62(glval) = FunctionAddress[~vector] : +# 2218| v2218_63(void) = Call[~vector] : func:r2218_62, this:r2218_61 +# 2218| m2218_64(unknown) = ^CallSideEffect : ~m2218_57 +# 2218| m2218_65(unknown) = Chi : total:m2218_57, partial:m2218_64 +# 2218| v2218_66(void) = ^IndirectReadSideEffect[-1] : &:r2218_61, m2218_13 +# 2218| m2218_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_61 +# 2218| m2218_68(vector) = Chi : total:m2218_13, partial:m2218_67 +# 2233| r2233_1(glval) = VariableAddress[x] : +# 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 +# 2233| m2233_4(unknown) = ^CallSideEffect : ~m2218_65 +# 2233| m2233_5(unknown) = Chi : total:m2218_65, partial:m2233_4 +# 2233| v2233_6(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, m2214_8 +# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 +# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_7 #-----| Goto -> Block 1 -# 2184| Block 24 -# 2184| v2184_13(void) = Unreached : +# 2218| Block 14 +# 2218| r2218_69(glval) = VariableAddress[y] : +# 2218| r2218_70(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_71(void) = Call[~ClassWithDestructor] : func:r2218_70, this:r2218_69 +# 2218| m2218_72(unknown) = ^CallSideEffect : ~m2220_5 +# 2218| m2218_73(unknown) = Chi : total:m2220_5, partial:m2218_72 +# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_69, m2220_8 +# 2218| m2218_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_69 +# 2218| m2218_76(ClassWithDestructor) = Chi : total:m2220_8, partial:m2218_75 +# 2218| r2218_77(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_78(glval) = FunctionAddress[operator++] : +# 2218| r2218_79(iterator &) = Call[operator++] : func:r2218_78, this:r2218_77 +# 2218| m2218_80(unknown) = ^CallSideEffect : ~m2218_73 +# 2218| m2218_81(unknown) = Chi : total:m2218_73, partial:m2218_80 +# 2218| v2218_82(void) = ^IndirectReadSideEffect[-1] : &:r2218_77, m2218_30 +# 2218| m2218_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_77 +# 2218| m2218_84(iterator) = Chi : total:m2218_30, partial:m2218_83 +# 2218| r2218_85(glval>) = CopyValue : r2218_79 +#-----| Goto (back edge) -> Block 11 -# 2221| void static_variable_with_destructor_1() -# 2221| Block 0 -# 2221| v2221_1(void) = EnterFunction : -# 2221| m2221_2(unknown) = AliasedDefinition : -# 2221| m2221_3(unknown) = InitializeNonLocal : -# 2221| m2221_4(unknown) = Chi : total:m2221_2, partial:m2221_3 -# 2222| r2222_1(glval) = VariableAddress[a] : -# 2222| m2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 -# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 -# 2222| m2222_5(unknown) = ^CallSideEffect : ~m2221_4 -# 2222| m2222_6(unknown) = Chi : total:m2221_4, partial:m2222_5 -# 2222| m2222_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2222| m2222_8(ClassWithDestructor) = Chi : total:m2222_2, partial:m2222_7 -# 2223| r2223_1(glval) = VariableAddress[b#init] : -# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m2222_6 -# 2223| v2223_3(void) = ConditionalBranch : r2223_2 +# 2224| Block 15 +# 2224| r2224_1(glval>) = VariableAddress[ys] : +# 2224| m2224_2(vector) = Uninitialized[ys] : &:r2224_1 +# 2224| r2224_3(glval) = FunctionAddress[vector] : +# 2224| r2224_4(int) = Constant[1] : +# 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4 +# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2218_43 +# 2224| m2224_7(unknown) = Chi : total:m2218_43, partial:m2224_6 +# 2224| m2224_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 +# 2224| m2224_9(vector) = Chi : total:m2224_2, partial:m2224_8 +# 2224| r2224_10(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_11(glval>) = VariableAddress[ys] : +# 2224| r2224_12(vector &) = CopyValue : r2224_11 +# 2224| m2224_13(vector &) = Store[(__range)] : &:r2224_10, r2224_12 +# 2224| r2224_14(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_15(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_16(vector &) = Load[(__range)] : &:r2224_15, m2224_13 +#-----| r0_33(glval>) = CopyValue : r2224_16 +#-----| r0_34(glval>) = Convert : r0_33 +# 2224| r2224_17(glval) = FunctionAddress[begin] : +# 2224| r2224_18(iterator) = Call[begin] : func:r2224_17, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2224_9 +# 2224| m2224_19(iterator) = Store[(__begin)] : &:r2224_14, r2224_18 +# 2224| r2224_20(glval>) = VariableAddress[(__end)] : +# 2224| r2224_21(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_22(vector &) = Load[(__range)] : &:r2224_21, m2224_13 +#-----| r0_36(glval>) = CopyValue : r2224_22 +#-----| r0_37(glval>) = Convert : r0_36 +# 2224| r2224_23(glval) = FunctionAddress[end] : +# 2224| r2224_24(iterator) = Call[end] : func:r2224_23, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2224_9 +# 2224| m2224_25(iterator) = Store[(__end)] : &:r2224_20, r2224_24 +#-----| Goto -> Block 16 + +# 2224| Block 16 +# 2224| m2224_26(iterator) = Phi : from 15:m2224_19, from 17:m2224_48 +# 2224| m2224_27(unknown) = Phi : from 15:~m2224_7, from 17:~m2224_45 +# 2224| r2224_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2224_28 +# 2224| r2224_29(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| m0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2224| r2224_30(glval) = FunctionAddress[iterator] : +# 2224| r2224_31(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2224_31 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2224| v2224_32(void) = Call[iterator] : func:r2224_30, this:r0_40, 0:r0_43 +# 2224| m2224_33(unknown) = ^CallSideEffect : ~m2224_27 +# 2224| m2224_34(unknown) = Chi : total:m2224_27, partial:m2224_33 +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2224_25 +# 2224| m2224_35(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2224| m2224_36(iterator) = Chi : total:m0_41, partial:m2224_35 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2224_36 +# 2224| r2224_37(bool) = Call[operator!=] : func:r2224_29, this:r0_39, 0:r0_45 +# 2224| m2224_38(unknown) = ^CallSideEffect : ~m2224_34 +# 2224| m2224_39(unknown) = Chi : total:m2224_34, partial:m2224_38 +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2224_26 +# 2224| v2224_40(void) = ConditionalBranch : r2224_37 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2224| Block 17 +# 2224| r2224_41(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_42(glval) = FunctionAddress[operator++] : +# 2224| r2224_43(iterator &) = Call[operator++] : func:r2224_42, this:r2224_41 +# 2224| m2224_44(unknown) = ^CallSideEffect : ~m2224_55 +# 2224| m2224_45(unknown) = Chi : total:m2224_55, partial:m2224_44 +# 2224| v2224_46(void) = ^IndirectReadSideEffect[-1] : &:r2224_41, m2224_26 +# 2224| m2224_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_41 +# 2224| m2224_48(iterator) = Chi : total:m2224_26, partial:m2224_47 +# 2224| r2224_49(glval>) = CopyValue : r2224_43 +#-----| Goto (back edge) -> Block 16 + +# 2224| Block 18 +# 2224| r2224_50(glval) = VariableAddress[y] : +# 2224| r2224_51(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_51 +# 2224| r2224_52(glval) = FunctionAddress[operator*] : +# 2224| r2224_53(int &) = Call[operator*] : func:r2224_52, this:r0_47 +# 2224| m2224_54(unknown) = ^CallSideEffect : ~m2224_39 +# 2224| m2224_55(unknown) = Chi : total:m2224_39, partial:m2224_54 +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2224_26 +# 2224| r2224_56(int) = Load[?] : &:r2224_53, ~m2224_55 +# 2224| m2224_57(int) = Store[y] : &:r2224_50, r2224_56 +# 2225| r2225_1(glval) = VariableAddress[y] : +# 2225| r2225_2(int) = Load[y] : &:r2225_1, m2224_57 +# 2225| r2225_3(int) = Constant[1] : +# 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3 +# 2225| v2225_5(void) = ConditionalBranch : r2225_4 +#-----| False -> Block 17 +#-----| True -> Block 19 + +# 2226| Block 19 +# 2226| v2226_1(void) = NoOp : +# 2224| r2224_58(glval>) = VariableAddress[ys] : +# 2224| r2224_59(glval) = FunctionAddress[~vector] : +# 2224| v2224_60(void) = Call[~vector] : func:r2224_59, this:r2224_58 +# 2224| m2224_61(unknown) = ^CallSideEffect : ~m2224_55 +# 2224| m2224_62(unknown) = Chi : total:m2224_55, partial:m2224_61 +# 2224| v2224_63(void) = ^IndirectReadSideEffect[-1] : &:r2224_58, m2224_9 +# 2224| m2224_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_58 +# 2224| m2224_65(vector) = Chi : total:m2224_9, partial:m2224_64 +# 2233| r2233_9(glval) = VariableAddress[x] : +# 2233| r2233_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_11(void) = Call[~ClassWithDestructor] : func:r2233_10, this:r2233_9 +# 2233| m2233_12(unknown) = ^CallSideEffect : ~m2224_62 +# 2233| m2233_13(unknown) = Chi : total:m2224_62, partial:m2233_12 +# 2233| v2233_14(void) = ^IndirectReadSideEffect[-1] : &:r2233_9, m2214_8 +# 2233| m2233_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_9 +# 2233| m2233_16(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_15 +#-----| Goto -> Block 1 + +# 2229| Block 20 +# 2229| r2229_1(glval>) = VariableAddress[ys] : +# 2229| m2229_2(vector) = Uninitialized[ys] : &:r2229_1 +# 2229| r2229_3(glval) = FunctionAddress[vector] : +# 2229| r2229_4(glval) = VariableAddress[#temp2229:45] : +# 2229| r2229_5(glval) = VariableAddress[x] : +# 2229| r2229_6(ClassWithDestructor) = Load[x] : &:r2229_5, m2214_8 +# 2229| m2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6 +# 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, m2229_7 +# 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8 +# 2229| m2229_10(unknown) = ^CallSideEffect : ~m2224_39 +# 2229| m2229_11(unknown) = Chi : total:m2224_39, partial:m2229_10 +# 2229| m2229_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1 +# 2229| m2229_13(vector) = Chi : total:m2229_2, partial:m2229_12 +# 2229| r2229_14(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_15(glval>) = VariableAddress[ys] : +# 2229| r2229_16(vector &) = CopyValue : r2229_15 +# 2229| m2229_17(vector &) = Store[(__range)] : &:r2229_14, r2229_16 +# 2229| r2229_18(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_19(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_20(vector &) = Load[(__range)] : &:r2229_19, m2229_17 +#-----| r0_49(glval>) = CopyValue : r2229_20 +#-----| r0_50(glval>) = Convert : r0_49 +# 2229| r2229_21(glval) = FunctionAddress[begin] : +# 2229| r2229_22(iterator) = Call[begin] : func:r2229_21, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2229_13 +# 2229| m2229_23(iterator) = Store[(__begin)] : &:r2229_18, r2229_22 +# 2229| r2229_24(glval>) = VariableAddress[(__end)] : +# 2229| r2229_25(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_26(vector &) = Load[(__range)] : &:r2229_25, m2229_17 +#-----| r0_52(glval>) = CopyValue : r2229_26 +#-----| r0_53(glval>) = Convert : r0_52 +# 2229| r2229_27(glval) = FunctionAddress[end] : +# 2229| r2229_28(iterator) = Call[end] : func:r2229_27, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2229_13 +# 2229| m2229_29(iterator) = Store[(__end)] : &:r2229_24, r2229_28 +#-----| Goto -> Block 21 + +# 2229| Block 21 +# 2229| m2229_30(iterator) = Phi : from 20:m2229_23, from 22:m2229_68 +# 2229| m2229_31(unknown) = Phi : from 20:~m2229_11, from 22:~m2229_65 +# 2229| r2229_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2229_32 +# 2229| r2229_33(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| m0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2229| r2229_34(glval) = FunctionAddress[iterator] : +# 2229| r2229_35(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2229_35 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2229| v2229_36(void) = Call[iterator] : func:r2229_34, this:r0_56, 0:r0_59 +# 2229| m2229_37(unknown) = ^CallSideEffect : ~m2229_31 +# 2229| m2229_38(unknown) = Chi : total:m2229_31, partial:m2229_37 +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2229_29 +# 2229| m2229_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2229| m2229_40(iterator) = Chi : total:m0_57, partial:m2229_39 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2229_40 +# 2229| r2229_41(bool) = Call[operator!=] : func:r2229_33, this:r0_55, 0:r0_61 +# 2229| m2229_42(unknown) = ^CallSideEffect : ~m2229_38 +# 2229| m2229_43(unknown) = Chi : total:m2229_38, partial:m2229_42 +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2229_30 +# 2229| v2229_44(void) = ConditionalBranch : r2229_41 +#-----| False -> Block 23 +#-----| True -> Block 22 + +# 2229| Block 22 +# 2229| r2229_45(glval) = VariableAddress[y] : +# 2229| r2229_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_46 +# 2229| r2229_47(glval) = FunctionAddress[operator*] : +# 2229| r2229_48(ClassWithDestructor &) = Call[operator*] : func:r2229_47, this:r0_63 +# 2229| m2229_49(unknown) = ^CallSideEffect : ~m2229_43 +# 2229| m2229_50(unknown) = Chi : total:m2229_43, partial:m2229_49 +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2229_30 +# 2229| r2229_51(ClassWithDestructor) = Load[?] : &:r2229_48, ~m2229_50 +# 2229| m2229_52(ClassWithDestructor) = Store[y] : &:r2229_45, r2229_51 +# 2230| r2230_1(glval) = VariableAddress[z1] : +# 2230| m2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 +# 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1 +# 2230| m2230_5(unknown) = ^CallSideEffect : ~m2229_50 +# 2230| m2230_6(unknown) = Chi : total:m2229_50, partial:m2230_5 +# 2230| m2230_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 +# 2230| m2230_8(ClassWithDestructor) = Chi : total:m2230_2, partial:m2230_7 +# 2231| r2231_1(glval) = VariableAddress[z2] : +# 2231| m2231_2(ClassWithDestructor) = Uninitialized[z2] : &:r2231_1 +# 2231| r2231_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2231| v2231_4(void) = Call[ClassWithDestructor] : func:r2231_3, this:r2231_1 +# 2231| m2231_5(unknown) = ^CallSideEffect : ~m2230_6 +# 2231| m2231_6(unknown) = Chi : total:m2230_6, partial:m2231_5 +# 2231| m2231_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 +# 2231| m2231_8(ClassWithDestructor) = Chi : total:m2231_2, partial:m2231_7 +# 2232| r2232_1(glval) = VariableAddress[z2] : +# 2232| r2232_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_3(void) = Call[~ClassWithDestructor] : func:r2232_2, this:r2232_1 +# 2232| m2232_4(unknown) = ^CallSideEffect : ~m2231_6 +# 2232| m2232_5(unknown) = Chi : total:m2231_6, partial:m2232_4 +# 2232| v2232_6(void) = ^IndirectReadSideEffect[-1] : &:r2232_1, m2231_8 +# 2232| m2232_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2232| m2232_8(ClassWithDestructor) = Chi : total:m2231_8, partial:m2232_7 +# 2232| r2232_9(glval) = VariableAddress[z1] : +# 2232| r2232_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_11(void) = Call[~ClassWithDestructor] : func:r2232_10, this:r2232_9 +# 2232| m2232_12(unknown) = ^CallSideEffect : ~m2232_5 +# 2232| m2232_13(unknown) = Chi : total:m2232_5, partial:m2232_12 +# 2232| v2232_14(void) = ^IndirectReadSideEffect[-1] : &:r2232_9, m2230_8 +# 2232| m2232_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_9 +# 2232| m2232_16(ClassWithDestructor) = Chi : total:m2230_8, partial:m2232_15 +# 2229| r2229_53(glval) = VariableAddress[y] : +# 2229| r2229_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_55(void) = Call[~ClassWithDestructor] : func:r2229_54, this:r2229_53 +# 2229| m2229_56(unknown) = ^CallSideEffect : ~m2232_13 +# 2229| m2229_57(unknown) = Chi : total:m2232_13, partial:m2229_56 +# 2229| v2229_58(void) = ^IndirectReadSideEffect[-1] : &:r2229_53, m2229_52 +# 2229| m2229_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_53 +# 2229| m2229_60(ClassWithDestructor) = Chi : total:m2229_52, partial:m2229_59 +# 2229| r2229_61(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_62(glval) = FunctionAddress[operator++] : +# 2229| r2229_63(iterator &) = Call[operator++] : func:r2229_62, this:r2229_61 +# 2229| m2229_64(unknown) = ^CallSideEffect : ~m2229_57 +# 2229| m2229_65(unknown) = Chi : total:m2229_57, partial:m2229_64 +# 2229| v2229_66(void) = ^IndirectReadSideEffect[-1] : &:r2229_61, m2229_30 +# 2229| m2229_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_61 +# 2229| m2229_68(iterator) = Chi : total:m2229_30, partial:m2229_67 +# 2229| r2229_69(glval>) = CopyValue : r2229_63 +#-----| Goto (back edge) -> Block 21 + +# 2233| Block 23 +# 2233| v2233_17(void) = NoOp : +# 2233| r2233_18(glval) = VariableAddress[x] : +# 2233| r2233_19(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_20(void) = Call[~ClassWithDestructor] : func:r2233_19, this:r2233_18 +# 2233| m2233_21(unknown) = ^CallSideEffect : ~m2229_43 +# 2233| m2233_22(unknown) = Chi : total:m2229_43, partial:m2233_21 +# 2233| v2233_23(void) = ^IndirectReadSideEffect[-1] : &:r2233_18, m2214_8 +# 2233| m2233_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_18 +# 2233| m2233_25(ClassWithDestructor) = Chi : total:m2214_8, partial:m2233_24 +#-----| Goto -> Block 1 + +# 2198| Block 24 +# 2198| v2198_13(void) = Unreached : + +# 2235| void static_variable_with_destructor_1() +# 2235| Block 0 +# 2235| v2235_1(void) = EnterFunction : +# 2235| m2235_2(unknown) = AliasedDefinition : +# 2235| m2235_3(unknown) = InitializeNonLocal : +# 2235| m2235_4(unknown) = Chi : total:m2235_2, partial:m2235_3 +# 2236| r2236_1(glval) = VariableAddress[a] : +# 2236| m2236_2(ClassWithDestructor) = Uninitialized[a] : &:r2236_1 +# 2236| r2236_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2236| v2236_4(void) = Call[ClassWithDestructor] : func:r2236_3, this:r2236_1 +# 2236| m2236_5(unknown) = ^CallSideEffect : ~m2235_4 +# 2236| m2236_6(unknown) = Chi : total:m2235_4, partial:m2236_5 +# 2236| m2236_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 +# 2236| m2236_8(ClassWithDestructor) = Chi : total:m2236_2, partial:m2236_7 +# 2237| r2237_1(glval) = VariableAddress[b#init] : +# 2237| r2237_2(bool) = Load[b#init] : &:r2237_1, ~m2236_6 +# 2237| v2237_3(void) = ConditionalBranch : r2237_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2223| Block 1 -# 2223| r2223_4(glval) = VariableAddress[b] : +# 2237| Block 1 +# 2237| r2237_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2222_6 -#-----| m0_4(unknown) = Chi : total:m2222_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2237_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2236_6 +#-----| m0_4(unknown) = Chi : total:m2236_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2223| r2223_5(bool) = Constant[1] : -# 2223| m2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 -# 2223| m2223_7(unknown) = Chi : total:m0_6, partial:m2223_6 +# 2237| r2237_5(bool) = Constant[1] : +# 2237| m2237_6(bool) = Store[b#init] : &:r2237_1, r2237_5 +# 2237| m2237_7(unknown) = Chi : total:m0_6, partial:m2237_6 #-----| Goto -> Block 2 -# 2224| Block 2 -# 2224| m2224_1(unknown) = Phi : from 0:~m2222_6, from 1:~m2223_7 -# 2224| v2224_2(void) = NoOp : -# 2224| r2224_3(glval) = VariableAddress[a] : -# 2224| r2224_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2224| v2224_5(void) = Call[~ClassWithDestructor] : func:r2224_4, this:r2224_3 -# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2224_1 -# 2224| m2224_7(unknown) = Chi : total:m2224_1, partial:m2224_6 -# 2224| v2224_8(void) = ^IndirectReadSideEffect[-1] : &:r2224_3, m2222_8 -# 2224| m2224_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_3 -# 2224| m2224_10(ClassWithDestructor) = Chi : total:m2222_8, partial:m2224_9 -# 2221| v2221_5(void) = ReturnVoid : -# 2221| v2221_6(void) = AliasedUse : ~m2224_7 -# 2221| v2221_7(void) = ExitFunction : +# 2238| Block 2 +# 2238| m2238_1(unknown) = Phi : from 0:~m2236_6, from 1:~m2237_7 +# 2238| v2238_2(void) = NoOp : +# 2238| r2238_3(glval) = VariableAddress[a] : +# 2238| r2238_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2238| v2238_5(void) = Call[~ClassWithDestructor] : func:r2238_4, this:r2238_3 +# 2238| m2238_6(unknown) = ^CallSideEffect : ~m2238_1 +# 2238| m2238_7(unknown) = Chi : total:m2238_1, partial:m2238_6 +# 2238| v2238_8(void) = ^IndirectReadSideEffect[-1] : &:r2238_3, m2236_8 +# 2238| m2238_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2238_3 +# 2238| m2238_10(ClassWithDestructor) = Chi : total:m2236_8, partial:m2238_9 +# 2235| v2235_5(void) = ReturnVoid : +# 2235| v2235_6(void) = AliasedUse : ~m2238_7 +# 2235| v2235_7(void) = ExitFunction : -# 2226| void static_variable_with_destructor_2() -# 2226| Block 0 -# 2226| v2226_1(void) = EnterFunction : -# 2226| m2226_2(unknown) = AliasedDefinition : -# 2226| m2226_3(unknown) = InitializeNonLocal : -# 2226| m2226_4(unknown) = Chi : total:m2226_2, partial:m2226_3 -# 2227| r2227_1(glval) = VariableAddress[a#init] : -# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m2226_3 -# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +# 2240| void static_variable_with_destructor_2() +# 2240| Block 0 +# 2240| v2240_1(void) = EnterFunction : +# 2240| m2240_2(unknown) = AliasedDefinition : +# 2240| m2240_3(unknown) = InitializeNonLocal : +# 2240| m2240_4(unknown) = Chi : total:m2240_2, partial:m2240_3 +# 2241| r2241_1(glval) = VariableAddress[a#init] : +# 2241| r2241_2(bool) = Load[a#init] : &:r2241_1, ~m2240_3 +# 2241| v2241_3(void) = ConditionalBranch : r2241_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2227| Block 1 -# 2227| r2227_4(glval) = VariableAddress[a] : +# 2241| Block 1 +# 2241| r2241_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2226_4 -#-----| m0_4(unknown) = Chi : total:m2226_4, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2241_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2240_4 +#-----| m0_4(unknown) = Chi : total:m2240_4, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2227| r2227_5(bool) = Constant[1] : -# 2227| m2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 -# 2227| m2227_7(unknown) = Chi : total:m0_6, partial:m2227_6 +# 2241| r2241_5(bool) = Constant[1] : +# 2241| m2241_6(bool) = Store[a#init] : &:r2241_1, r2241_5 +# 2241| m2241_7(unknown) = Chi : total:m0_6, partial:m2241_6 #-----| Goto -> Block 2 -# 2228| Block 2 -# 2228| m2228_1(unknown) = Phi : from 0:~m2226_4, from 1:~m2227_7 -# 2228| r2228_2(glval) = VariableAddress[b] : -# 2228| m2228_3(ClassWithDestructor) = Uninitialized[b] : &:r2228_2 -# 2228| r2228_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2228| v2228_5(void) = Call[ClassWithDestructor] : func:r2228_4, this:r2228_2 -# 2228| m2228_6(unknown) = ^CallSideEffect : ~m2228_1 -# 2228| m2228_7(unknown) = Chi : total:m2228_1, partial:m2228_6 -# 2228| m2228_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_2 -# 2228| m2228_9(ClassWithDestructor) = Chi : total:m2228_3, partial:m2228_8 -# 2229| v2229_1(void) = NoOp : -# 2229| r2229_2(glval) = VariableAddress[b] : -# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 -# 2229| m2229_5(unknown) = ^CallSideEffect : ~m2228_7 -# 2229| m2229_6(unknown) = Chi : total:m2228_7, partial:m2229_5 -# 2229| v2229_7(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, m2228_9 -# 2229| m2229_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 -# 2229| m2229_9(ClassWithDestructor) = Chi : total:m2228_9, partial:m2229_8 -# 2226| v2226_5(void) = ReturnVoid : -# 2226| v2226_6(void) = AliasedUse : ~m2229_6 -# 2226| v2226_7(void) = ExitFunction : +# 2242| Block 2 +# 2242| m2242_1(unknown) = Phi : from 0:~m2240_4, from 1:~m2241_7 +# 2242| r2242_2(glval) = VariableAddress[b] : +# 2242| m2242_3(ClassWithDestructor) = Uninitialized[b] : &:r2242_2 +# 2242| r2242_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2242| v2242_5(void) = Call[ClassWithDestructor] : func:r2242_4, this:r2242_2 +# 2242| m2242_6(unknown) = ^CallSideEffect : ~m2242_1 +# 2242| m2242_7(unknown) = Chi : total:m2242_1, partial:m2242_6 +# 2242| m2242_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2242_2 +# 2242| m2242_9(ClassWithDestructor) = Chi : total:m2242_3, partial:m2242_8 +# 2243| v2243_1(void) = NoOp : +# 2243| r2243_2(glval) = VariableAddress[b] : +# 2243| r2243_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2243| v2243_4(void) = Call[~ClassWithDestructor] : func:r2243_3, this:r2243_2 +# 2243| m2243_5(unknown) = ^CallSideEffect : ~m2242_7 +# 2243| m2243_6(unknown) = Chi : total:m2242_7, partial:m2243_5 +# 2243| v2243_7(void) = ^IndirectReadSideEffect[-1] : &:r2243_2, m2242_9 +# 2243| m2243_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2243_2 +# 2243| m2243_9(ClassWithDestructor) = Chi : total:m2242_9, partial:m2243_8 +# 2240| v2240_5(void) = ReturnVoid : +# 2240| v2240_6(void) = AliasedUse : ~m2243_6 +# 2240| v2240_7(void) = ExitFunction : -# 2231| void static_variable_with_destructor_3() -# 2231| Block 0 -# 2231| v2231_1(void) = EnterFunction : -# 2231| m2231_2(unknown) = AliasedDefinition : -# 2231| m2231_3(unknown) = InitializeNonLocal : -# 2231| m2231_4(unknown) = Chi : total:m2231_2, partial:m2231_3 -# 2232| r2232_1(glval) = VariableAddress[a] : -# 2232| m2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 -# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 -# 2232| m2232_5(unknown) = ^CallSideEffect : ~m2231_4 -# 2232| m2232_6(unknown) = Chi : total:m2231_4, partial:m2232_5 -# 2232| m2232_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 -# 2232| m2232_8(ClassWithDestructor) = Chi : total:m2232_2, partial:m2232_7 -# 2233| r2233_1(glval) = VariableAddress[b] : -# 2233| m2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 -# 2233| m2233_5(unknown) = ^CallSideEffect : ~m2232_6 -# 2233| m2233_6(unknown) = Chi : total:m2232_6, partial:m2233_5 -# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2233_2, partial:m2233_7 -# 2234| r2234_1(glval) = VariableAddress[c#init] : -# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m2233_6 -# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +# 2245| void static_variable_with_destructor_3() +# 2245| Block 0 +# 2245| v2245_1(void) = EnterFunction : +# 2245| m2245_2(unknown) = AliasedDefinition : +# 2245| m2245_3(unknown) = InitializeNonLocal : +# 2245| m2245_4(unknown) = Chi : total:m2245_2, partial:m2245_3 +# 2246| r2246_1(glval) = VariableAddress[a] : +# 2246| m2246_2(ClassWithDestructor) = Uninitialized[a] : &:r2246_1 +# 2246| r2246_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2246| v2246_4(void) = Call[ClassWithDestructor] : func:r2246_3, this:r2246_1 +# 2246| m2246_5(unknown) = ^CallSideEffect : ~m2245_4 +# 2246| m2246_6(unknown) = Chi : total:m2245_4, partial:m2246_5 +# 2246| m2246_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 +# 2246| m2246_8(ClassWithDestructor) = Chi : total:m2246_2, partial:m2246_7 +# 2247| r2247_1(glval) = VariableAddress[b] : +# 2247| m2247_2(ClassWithDestructor) = Uninitialized[b] : &:r2247_1 +# 2247| r2247_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2247| v2247_4(void) = Call[ClassWithDestructor] : func:r2247_3, this:r2247_1 +# 2247| m2247_5(unknown) = ^CallSideEffect : ~m2246_6 +# 2247| m2247_6(unknown) = Chi : total:m2246_6, partial:m2247_5 +# 2247| m2247_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 +# 2247| m2247_8(ClassWithDestructor) = Chi : total:m2247_2, partial:m2247_7 +# 2248| r2248_1(glval) = VariableAddress[c#init] : +# 2248| r2248_2(bool) = Load[c#init] : &:r2248_1, ~m2247_6 +# 2248| v2248_3(void) = ConditionalBranch : r2248_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2234| Block 1 -# 2234| r2234_4(glval) = VariableAddress[c] : +# 2248| Block 1 +# 2248| r2248_4(glval) = VariableAddress[c] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2233_6 -#-----| m0_4(unknown) = Chi : total:m2233_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2248_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2247_6 +#-----| m0_4(unknown) = Chi : total:m2247_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2248_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2234| r2234_5(bool) = Constant[1] : -# 2234| m2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 -# 2234| m2234_7(unknown) = Chi : total:m0_6, partial:m2234_6 +# 2248| r2248_5(bool) = Constant[1] : +# 2248| m2248_6(bool) = Store[c#init] : &:r2248_1, r2248_5 +# 2248| m2248_7(unknown) = Chi : total:m0_6, partial:m2248_6 #-----| Goto -> Block 2 -# 2235| Block 2 -# 2235| m2235_1(unknown) = Phi : from 0:~m2233_6, from 1:~m2234_7 -# 2235| v2235_2(void) = NoOp : -# 2235| r2235_3(glval) = VariableAddress[b] : -# 2235| r2235_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_5(void) = Call[~ClassWithDestructor] : func:r2235_4, this:r2235_3 -# 2235| m2235_6(unknown) = ^CallSideEffect : ~m2235_1 -# 2235| m2235_7(unknown) = Chi : total:m2235_1, partial:m2235_6 -# 2235| v2235_8(void) = ^IndirectReadSideEffect[-1] : &:r2235_3, m2233_8 -# 2235| m2235_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_3 -# 2235| m2235_10(ClassWithDestructor) = Chi : total:m2233_8, partial:m2235_9 -# 2235| r2235_11(glval) = VariableAddress[a] : -# 2235| r2235_12(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_13(void) = Call[~ClassWithDestructor] : func:r2235_12, this:r2235_11 -# 2235| m2235_14(unknown) = ^CallSideEffect : ~m2235_7 -# 2235| m2235_15(unknown) = Chi : total:m2235_7, partial:m2235_14 -# 2235| v2235_16(void) = ^IndirectReadSideEffect[-1] : &:r2235_11, m2232_8 -# 2235| m2235_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_11 -# 2235| m2235_18(ClassWithDestructor) = Chi : total:m2232_8, partial:m2235_17 -# 2231| v2231_5(void) = ReturnVoid : -# 2231| v2231_6(void) = AliasedUse : ~m2235_15 -# 2231| v2231_7(void) = ExitFunction : +# 2249| Block 2 +# 2249| m2249_1(unknown) = Phi : from 0:~m2247_6, from 1:~m2248_7 +# 2249| v2249_2(void) = NoOp : +# 2249| r2249_3(glval) = VariableAddress[b] : +# 2249| r2249_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_5(void) = Call[~ClassWithDestructor] : func:r2249_4, this:r2249_3 +# 2249| m2249_6(unknown) = ^CallSideEffect : ~m2249_1 +# 2249| m2249_7(unknown) = Chi : total:m2249_1, partial:m2249_6 +# 2249| v2249_8(void) = ^IndirectReadSideEffect[-1] : &:r2249_3, m2247_8 +# 2249| m2249_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_3 +# 2249| m2249_10(ClassWithDestructor) = Chi : total:m2247_8, partial:m2249_9 +# 2249| r2249_11(glval) = VariableAddress[a] : +# 2249| r2249_12(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_13(void) = Call[~ClassWithDestructor] : func:r2249_12, this:r2249_11 +# 2249| m2249_14(unknown) = ^CallSideEffect : ~m2249_7 +# 2249| m2249_15(unknown) = Chi : total:m2249_7, partial:m2249_14 +# 2249| v2249_16(void) = ^IndirectReadSideEffect[-1] : &:r2249_11, m2246_8 +# 2249| m2249_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_11 +# 2249| m2249_18(ClassWithDestructor) = Chi : total:m2246_8, partial:m2249_17 +# 2245| v2245_5(void) = ReturnVoid : +# 2245| v2245_6(void) = AliasedUse : ~m2249_15 +# 2245| v2245_7(void) = ExitFunction : -# 2237| ClassWithDestructor global_class_with_destructor -# 2237| Block 0 -# 2237| v2237_1(void) = EnterFunction : -# 2237| m2237_2(unknown) = AliasedDefinition : -# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : -# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 -# 2237| m2237_6(unknown) = ^CallSideEffect : ~m2237_2 -# 2237| m2237_7(unknown) = Chi : total:m2237_2, partial:m2237_6 -# 2237| m2237_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 -# 2237| m2237_9(unknown) = Chi : total:m2237_7, partial:m2237_8 -# 2237| v2237_10(void) = ReturnVoid : -# 2237| v2237_11(void) = AliasedUse : ~m2237_9 -# 2237| v2237_12(void) = ExitFunction : +# 2251| ClassWithDestructor global_class_with_destructor +# 2251| Block 0 +# 2251| v2251_1(void) = EnterFunction : +# 2251| m2251_2(unknown) = AliasedDefinition : +# 2251| r2251_3(glval) = VariableAddress[global_class_with_destructor] : +# 2251| r2251_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2251| v2251_5(void) = Call[ClassWithDestructor] : func:r2251_4, this:r2251_3 +# 2251| m2251_6(unknown) = ^CallSideEffect : ~m2251_2 +# 2251| m2251_7(unknown) = Chi : total:m2251_2, partial:m2251_6 +# 2251| m2251_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_3 +# 2251| m2251_9(unknown) = Chi : total:m2251_7, partial:m2251_8 +# 2251| v2251_10(void) = ReturnVoid : +# 2251| v2251_11(void) = AliasedUse : ~m2251_9 +# 2251| v2251_12(void) = ExitFunction : -# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| m2241_2(unknown) = AliasedDefinition : -# 2241| m2241_3(unknown) = InitializeNonLocal : -# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 -# 2241| r2241_5(glval) = VariableAddress[t] : -# 2241| m2241_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_5 -# 2241| r2241_7(ClassWithDestructor &) = Load[t] : &:r2241_5, m2241_6 -# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 -# 2241| r2241_9(glval) = VariableAddress[#return] : -# 2241| r2241_10(glval) = VariableAddress[t] : -# 2241| r2241_11(ClassWithDestructor &) = Load[t] : &:r2241_10, m2241_6 -# 2241| r2241_12(glval) = CopyValue : r2241_11 -# 2241| r2241_13(ClassWithDestructor &) = CopyValue : r2241_12 -# 2241| m2241_14(ClassWithDestructor &) = Store[#return] : &:r2241_9, r2241_13 -# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 -# 2241| r2241_16(glval) = VariableAddress[#return] : -# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 -# 2241| v2241_18(void) = AliasedUse : m2241_3 -# 2241| v2241_19(void) = ExitFunction : +# 2255| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| m2255_2(unknown) = AliasedDefinition : +# 2255| m2255_3(unknown) = InitializeNonLocal : +# 2255| m2255_4(unknown) = Chi : total:m2255_2, partial:m2255_3 +# 2255| r2255_5(glval) = VariableAddress[t] : +# 2255| m2255_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2255_5 +# 2255| r2255_7(ClassWithDestructor &) = Load[t] : &:r2255_5, m2255_6 +# 2255| m2255_8(unknown) = InitializeIndirection[t] : &:r2255_7 +# 2255| r2255_9(glval) = VariableAddress[#return] : +# 2255| r2255_10(glval) = VariableAddress[t] : +# 2255| r2255_11(ClassWithDestructor &) = Load[t] : &:r2255_10, m2255_6 +# 2255| r2255_12(glval) = CopyValue : r2255_11 +# 2255| r2255_13(ClassWithDestructor &) = CopyValue : r2255_12 +# 2255| m2255_14(ClassWithDestructor &) = Store[#return] : &:r2255_9, r2255_13 +# 2255| v2255_15(void) = ReturnIndirection[t] : &:r2255_7, m2255_8 +# 2255| r2255_16(glval) = VariableAddress[#return] : +# 2255| v2255_17(void) = ReturnValue : &:r2255_16, m2255_14 +# 2255| v2255_18(void) = AliasedUse : m2255_3 +# 2255| v2255_19(void) = ExitFunction : -# 2241| int& vacuous_destructor_call::get(int&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| m2241_2(unknown) = AliasedDefinition : -# 2241| m2241_3(unknown) = InitializeNonLocal : -# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 -# 2241| r2241_5(glval) = VariableAddress[t] : -# 2241| m2241_6(int &) = InitializeParameter[t] : &:r2241_5 -# 2241| r2241_7(int &) = Load[t] : &:r2241_5, m2241_6 -# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 -# 2241| r2241_9(glval) = VariableAddress[#return] : -# 2241| r2241_10(glval) = VariableAddress[t] : -# 2241| r2241_11(int &) = Load[t] : &:r2241_10, m2241_6 -# 2241| r2241_12(glval) = CopyValue : r2241_11 -# 2241| r2241_13(int &) = CopyValue : r2241_12 -# 2241| m2241_14(int &) = Store[#return] : &:r2241_9, r2241_13 -# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 -# 2241| r2241_16(glval) = VariableAddress[#return] : -# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 -# 2241| v2241_18(void) = AliasedUse : m2241_3 -# 2241| v2241_19(void) = ExitFunction : +# 2255| int& vacuous_destructor_call::get(int&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| m2255_2(unknown) = AliasedDefinition : +# 2255| m2255_3(unknown) = InitializeNonLocal : +# 2255| m2255_4(unknown) = Chi : total:m2255_2, partial:m2255_3 +# 2255| r2255_5(glval) = VariableAddress[t] : +# 2255| m2255_6(int &) = InitializeParameter[t] : &:r2255_5 +# 2255| r2255_7(int &) = Load[t] : &:r2255_5, m2255_6 +# 2255| m2255_8(unknown) = InitializeIndirection[t] : &:r2255_7 +# 2255| r2255_9(glval) = VariableAddress[#return] : +# 2255| r2255_10(glval) = VariableAddress[t] : +# 2255| r2255_11(int &) = Load[t] : &:r2255_10, m2255_6 +# 2255| r2255_12(glval) = CopyValue : r2255_11 +# 2255| r2255_13(int &) = CopyValue : r2255_12 +# 2255| m2255_14(int &) = Store[#return] : &:r2255_9, r2255_13 +# 2255| v2255_15(void) = ReturnIndirection[t] : &:r2255_7, m2255_8 +# 2255| r2255_16(glval) = VariableAddress[#return] : +# 2255| v2255_17(void) = ReturnValue : &:r2255_16, m2255_14 +# 2255| v2255_18(void) = AliasedUse : m2255_3 +# 2255| v2255_19(void) = ExitFunction : -# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| m2244_2(unknown) = AliasedDefinition : -# 2244| m2244_3(unknown) = InitializeNonLocal : -# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 -# 2244| r2244_5(glval) = VariableAddress[t] : -# 2244| m2244_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_5 -# 2244| r2244_7(ClassWithDestructor &) = Load[t] : &:r2244_5, m2244_6 -# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, m2244_6 -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 -# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 -# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 -# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 -# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 -# 2245| r2245_12(glval) = CopyValue : r2245_6 -# 2245| r2245_13(glval) = FunctionAddress[~ClassWithDestructor] : -# 2245| v2245_14(void) = Call[~ClassWithDestructor] : func:r2245_13 -# 2245| m2245_15(unknown) = ^CallSideEffect : ~m2245_8 -# 2245| m2245_16(unknown) = Chi : total:m2245_8, partial:m2245_15 -# 2245| v2245_17(void) = ^IndirectReadSideEffect[-1] : &:r2245_12, ~m2245_11 -# 2245| m2245_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_12 -# 2245| m2245_19(unknown) = Chi : total:m2245_11, partial:m2245_18 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_19 -# 2244| v2244_10(void) = ReturnVoid : -# 2244| v2244_11(void) = AliasedUse : ~m2245_16 -# 2244| v2244_12(void) = ExitFunction : +# 2258| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| m2258_2(unknown) = AliasedDefinition : +# 2258| m2258_3(unknown) = InitializeNonLocal : +# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 +# 2258| r2258_5(glval) = VariableAddress[t] : +# 2258| m2258_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_5 +# 2258| r2258_7(ClassWithDestructor &) = Load[t] : &:r2258_5, m2258_6 +# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(ClassWithDestructor &) = Load[t] : &:r2259_2, m2258_6 +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(ClassWithDestructor &) = CopyValue : r2259_4 +# 2259| r2259_6(ClassWithDestructor &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| m2259_7(unknown) = ^CallSideEffect : ~m2258_4 +# 2259| m2259_8(unknown) = Chi : total:m2258_4, partial:m2259_7 +# 2259| v2259_9(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m2258_8 +# 2259| m2259_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| m2259_11(unknown) = Chi : total:m2258_8, partial:m2259_10 +# 2259| r2259_12(glval) = CopyValue : r2259_6 +# 2259| r2259_13(glval) = FunctionAddress[~ClassWithDestructor] : +# 2259| v2259_14(void) = Call[~ClassWithDestructor] : func:r2259_13 +# 2259| m2259_15(unknown) = ^CallSideEffect : ~m2259_8 +# 2259| m2259_16(unknown) = Chi : total:m2259_8, partial:m2259_15 +# 2259| v2259_17(void) = ^IndirectReadSideEffect[-1] : &:r2259_12, ~m2259_11 +# 2259| m2259_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2259_12 +# 2259| m2259_19(unknown) = Chi : total:m2259_11, partial:m2259_18 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_9(void) = ReturnIndirection[t] : &:r2258_7, m2259_19 +# 2258| v2258_10(void) = ReturnVoid : +# 2258| v2258_11(void) = AliasedUse : ~m2259_16 +# 2258| v2258_12(void) = ExitFunction : -# 2244| void vacuous_destructor_call::call_destructor(int&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| m2244_2(unknown) = AliasedDefinition : -# 2244| m2244_3(unknown) = InitializeNonLocal : -# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 -# 2244| r2244_5(glval) = VariableAddress[t] : -# 2244| m2244_6(int &) = InitializeParameter[t] : &:r2244_5 -# 2244| r2244_7(int &) = Load[t] : &:r2244_5, m2244_6 -# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(int &) = Load[t] : &:r2245_2, m2244_6 -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(int &) = CopyValue : r2245_4 -# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 -# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 -# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 -# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 -# 2245| r2245_12(glval) = CopyValue : r2245_6 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_11 -# 2244| v2244_10(void) = ReturnVoid : -# 2244| v2244_11(void) = AliasedUse : ~m2245_8 -# 2244| v2244_12(void) = ExitFunction : +# 2258| void vacuous_destructor_call::call_destructor(int&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| m2258_2(unknown) = AliasedDefinition : +# 2258| m2258_3(unknown) = InitializeNonLocal : +# 2258| m2258_4(unknown) = Chi : total:m2258_2, partial:m2258_3 +# 2258| r2258_5(glval) = VariableAddress[t] : +# 2258| m2258_6(int &) = InitializeParameter[t] : &:r2258_5 +# 2258| r2258_7(int &) = Load[t] : &:r2258_5, m2258_6 +# 2258| m2258_8(unknown) = InitializeIndirection[t] : &:r2258_7 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(int &) = Load[t] : &:r2259_2, m2258_6 +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(int &) = CopyValue : r2259_4 +# 2259| r2259_6(int &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| m2259_7(unknown) = ^CallSideEffect : ~m2258_4 +# 2259| m2259_8(unknown) = Chi : total:m2258_4, partial:m2259_7 +# 2259| v2259_9(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m2258_8 +# 2259| m2259_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| m2259_11(unknown) = Chi : total:m2258_8, partial:m2259_10 +# 2259| r2259_12(glval) = CopyValue : r2259_6 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_9(void) = ReturnIndirection[t] : &:r2258_7, m2259_11 +# 2258| v2258_10(void) = ReturnVoid : +# 2258| v2258_11(void) = AliasedUse : ~m2259_8 +# 2258| v2258_12(void) = ExitFunction : -# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| Block 0 -# 2248| v2248_1(void) = EnterFunction : -# 2248| m2248_2(unknown) = AliasedDefinition : -# 2248| m2248_3(unknown) = InitializeNonLocal : -# 2248| m2248_4(unknown) = Chi : total:m2248_2, partial:m2248_3 -# 2249| r2249_1(glval) = VariableAddress[c] : -# 2249| m2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 -# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 -# 2249| m2249_5(unknown) = ^CallSideEffect : ~m2248_4 -# 2249| m2249_6(unknown) = Chi : total:m2248_4, partial:m2249_5 -# 2249| m2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2249| m2249_8(ClassWithDestructor) = Chi : total:m2249_2, partial:m2249_7 -# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : -# 2250| r2250_2(glval) = VariableAddress[c] : -# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 -# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 -# 2250| m2250_5(unknown) = ^CallSideEffect : ~m2249_6 -# 2250| m2250_6(unknown) = Chi : total:m2249_6, partial:m2250_5 -# 2250| v2250_7(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m2249_8 -# 2250| m2250_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 -# 2250| m2250_9(ClassWithDestructor) = Chi : total:m2249_8, partial:m2250_8 -# 2251| v2251_1(void) = NoOp : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 -# 2251| m2251_5(unknown) = ^CallSideEffect : ~m2250_6 -# 2251| m2251_6(unknown) = Chi : total:m2250_6, partial:m2251_5 -# 2251| v2251_7(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, m2250_9 -# 2251| m2251_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 -# 2251| m2251_9(ClassWithDestructor) = Chi : total:m2250_9, partial:m2251_8 -# 2248| v2248_5(void) = ReturnVoid : -# 2248| v2248_6(void) = AliasedUse : ~m2251_6 -# 2248| v2248_7(void) = ExitFunction : +# 2262| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| Block 0 +# 2262| v2262_1(void) = EnterFunction : +# 2262| m2262_2(unknown) = AliasedDefinition : +# 2262| m2262_3(unknown) = InitializeNonLocal : +# 2262| m2262_4(unknown) = Chi : total:m2262_2, partial:m2262_3 +# 2263| r2263_1(glval) = VariableAddress[c] : +# 2263| m2263_2(ClassWithDestructor) = Uninitialized[c] : &:r2263_1 +# 2263| r2263_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2263| v2263_4(void) = Call[ClassWithDestructor] : func:r2263_3, this:r2263_1 +# 2263| m2263_5(unknown) = ^CallSideEffect : ~m2262_4 +# 2263| m2263_6(unknown) = Chi : total:m2262_4, partial:m2263_5 +# 2263| m2263_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 +# 2263| m2263_8(ClassWithDestructor) = Chi : total:m2263_2, partial:m2263_7 +# 2264| r2264_1(glval) = FunctionAddress[call_destructor] : +# 2264| r2264_2(glval) = VariableAddress[c] : +# 2264| r2264_3(ClassWithDestructor &) = CopyValue : r2264_2 +# 2264| v2264_4(void) = Call[call_destructor] : func:r2264_1, 0:r2264_3 +# 2264| m2264_5(unknown) = ^CallSideEffect : ~m2263_6 +# 2264| m2264_6(unknown) = Chi : total:m2263_6, partial:m2264_5 +# 2264| v2264_7(void) = ^BufferReadSideEffect[0] : &:r2264_3, ~m2263_8 +# 2264| m2264_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2264_3 +# 2264| m2264_9(ClassWithDestructor) = Chi : total:m2263_8, partial:m2264_8 +# 2265| v2265_1(void) = NoOp : +# 2265| r2265_2(glval) = VariableAddress[c] : +# 2265| r2265_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2265| v2265_4(void) = Call[~ClassWithDestructor] : func:r2265_3, this:r2265_2 +# 2265| m2265_5(unknown) = ^CallSideEffect : ~m2264_6 +# 2265| m2265_6(unknown) = Chi : total:m2264_6, partial:m2265_5 +# 2265| v2265_7(void) = ^IndirectReadSideEffect[-1] : &:r2265_2, m2264_9 +# 2265| m2265_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2265_2 +# 2265| m2265_9(ClassWithDestructor) = Chi : total:m2264_9, partial:m2265_8 +# 2262| v2262_5(void) = ReturnVoid : +# 2262| v2262_6(void) = AliasedUse : ~m2265_6 +# 2262| v2262_7(void) = ExitFunction : -# 2253| void vacuous_destructor_call::vacuous_destructor_call() -# 2253| Block 0 -# 2253| v2253_1(void) = EnterFunction : -# 2253| m2253_2(unknown) = AliasedDefinition : -# 2253| m2253_3(unknown) = InitializeNonLocal : -# 2253| m2253_4(unknown) = Chi : total:m2253_2, partial:m2253_3 -# 2254| r2254_1(glval) = VariableAddress[i] : -# 2254| m2254_2(int) = Uninitialized[i] : &:r2254_1 -# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : -# 2255| r2255_2(glval) = VariableAddress[i] : -# 2255| r2255_3(int &) = CopyValue : r2255_2 -# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 -# 2255| m2255_5(unknown) = ^CallSideEffect : ~m2253_4 -# 2255| m2255_6(unknown) = Chi : total:m2253_4, partial:m2255_5 -# 2255| v2255_7(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m2254_2 -# 2255| m2255_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 -# 2255| m2255_9(int) = Chi : total:m2254_2, partial:m2255_8 -# 2256| v2256_1(void) = NoOp : -# 2253| v2253_5(void) = ReturnVoid : -# 2253| v2253_6(void) = AliasedUse : ~m2255_6 -# 2253| v2253_7(void) = ExitFunction : +# 2267| void vacuous_destructor_call::vacuous_destructor_call() +# 2267| Block 0 +# 2267| v2267_1(void) = EnterFunction : +# 2267| m2267_2(unknown) = AliasedDefinition : +# 2267| m2267_3(unknown) = InitializeNonLocal : +# 2267| m2267_4(unknown) = Chi : total:m2267_2, partial:m2267_3 +# 2268| r2268_1(glval) = VariableAddress[i] : +# 2268| m2268_2(int) = Uninitialized[i] : &:r2268_1 +# 2269| r2269_1(glval) = FunctionAddress[call_destructor] : +# 2269| r2269_2(glval) = VariableAddress[i] : +# 2269| r2269_3(int &) = CopyValue : r2269_2 +# 2269| v2269_4(void) = Call[call_destructor] : func:r2269_1, 0:r2269_3 +# 2269| m2269_5(unknown) = ^CallSideEffect : ~m2267_4 +# 2269| m2269_6(unknown) = Chi : total:m2267_4, partial:m2269_5 +# 2269| v2269_7(void) = ^BufferReadSideEffect[0] : &:r2269_3, ~m2268_2 +# 2269| m2269_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2269_3 +# 2269| m2269_9(int) = Chi : total:m2268_2, partial:m2269_8 +# 2270| v2270_1(void) = NoOp : +# 2267| v2267_5(void) = ReturnVoid : +# 2267| v2267_6(void) = AliasedUse : ~m2269_6 +# 2267| v2267_7(void) = ExitFunction : -# 2259| void TryCatchDestructors(bool) -# 2259| Block 0 -# 2259| v2259_1(void) = EnterFunction : -# 2259| m2259_2(unknown) = AliasedDefinition : -# 2259| m2259_3(unknown) = InitializeNonLocal : -# 2259| m2259_4(unknown) = Chi : total:m2259_2, partial:m2259_3 -# 2259| r2259_5(glval) = VariableAddress[b] : -# 2259| m2259_6(bool) = InitializeParameter[b] : &:r2259_5 -# 2261| r2261_1(glval) = VariableAddress[s] : -# 2261| m2261_2(String) = Uninitialized[s] : &:r2261_1 -# 2261| r2261_3(glval) = FunctionAddress[String] : -# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 -# 2261| m2261_5(unknown) = ^CallSideEffect : ~m2259_4 -# 2261| m2261_6(unknown) = Chi : total:m2259_4, partial:m2261_5 -# 2261| m2261_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2261| m2261_8(String) = Chi : total:m2261_2, partial:m2261_7 -# 2262| r2262_1(glval) = VariableAddress[b] : -# 2262| r2262_2(bool) = Load[b] : &:r2262_1, m2259_6 -# 2262| v2262_3(void) = ConditionalBranch : r2262_2 +# 2273| void TryCatchDestructors(bool) +# 2273| Block 0 +# 2273| v2273_1(void) = EnterFunction : +# 2273| m2273_2(unknown) = AliasedDefinition : +# 2273| m2273_3(unknown) = InitializeNonLocal : +# 2273| m2273_4(unknown) = Chi : total:m2273_2, partial:m2273_3 +# 2273| r2273_5(glval) = VariableAddress[b] : +# 2273| m2273_6(bool) = InitializeParameter[b] : &:r2273_5 +# 2275| r2275_1(glval) = VariableAddress[s] : +# 2275| m2275_2(String) = Uninitialized[s] : &:r2275_1 +# 2275| r2275_3(glval) = FunctionAddress[String] : +# 2275| v2275_4(void) = Call[String] : func:r2275_3, this:r2275_1 +# 2275| m2275_5(unknown) = ^CallSideEffect : ~m2273_4 +# 2275| m2275_6(unknown) = Chi : total:m2273_4, partial:m2275_5 +# 2275| m2275_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 +# 2275| m2275_8(String) = Chi : total:m2275_2, partial:m2275_7 +# 2276| r2276_1(glval) = VariableAddress[b] : +# 2276| r2276_2(bool) = Load[b] : &:r2276_1, m2273_6 +# 2276| v2276_3(void) = ConditionalBranch : r2276_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 2259| Block 1 -# 2259| m2259_7(unknown) = Phi : from 2:~m2259_10, from 10:~m2275_1 -# 2259| v2259_8(void) = AliasedUse : ~m2259_7 -# 2259| v2259_9(void) = ExitFunction : +# 2273| Block 1 +# 2273| m2273_7(unknown) = Phi : from 2:~m2273_10, from 10:~m2289_1 +# 2273| v2273_8(void) = AliasedUse : ~m2273_7 +# 2273| v2273_9(void) = ExitFunction : -# 2259| Block 2 -# 2259| m2259_10(unknown) = Phi : from 6:~m2268_8, from 9:~m2261_6 -# 2259| v2259_11(void) = Unwind : +# 2273| Block 2 +# 2273| m2273_10(unknown) = Phi : from 6:~m2282_8, from 9:~m2275_6 +# 2273| v2273_11(void) = Unwind : #-----| Goto -> Block 1 -# 2263| Block 3 -# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : -# 2263| r2263_2(glval) = StringConstant["string literal"] : -# 2263| r2263_3(char *) = Convert : r2263_2 -# 2263| m2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 -# 2263| v2263_5(void) = ThrowValue : &:r2263_1, m2263_4 +# 2277| Block 3 +# 2277| r2277_1(glval) = VariableAddress[#throw2277:7] : +# 2277| r2277_2(glval) = StringConstant["string literal"] : +# 2277| r2277_3(char *) = Convert : r2277_2 +# 2277| m2277_4(char *) = Store[#throw2277:7] : &:r2277_1, r2277_3 +# 2277| v2277_5(void) = ThrowValue : &:r2277_1, m2277_4 #-----| Exception -> Block 5 -# 2265| Block 4 -# 2265| r2265_1(glval) = VariableAddress[s2] : -# 2265| m2265_2(String) = Uninitialized[s2] : &:r2265_1 -# 2265| r2265_3(glval) = FunctionAddress[String] : -# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 -# 2265| m2265_5(unknown) = ^CallSideEffect : ~m2261_6 -# 2265| m2265_6(unknown) = Chi : total:m2261_6, partial:m2265_5 -# 2265| m2265_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 -# 2265| m2265_8(String) = Chi : total:m2265_2, partial:m2265_7 -# 2266| r2266_1(glval) = VariableAddress[s2] : -# 2266| r2266_2(glval) = FunctionAddress[~String] : -# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 -# 2266| m2266_4(unknown) = ^CallSideEffect : ~m2265_6 -# 2266| m2266_5(unknown) = Chi : total:m2265_6, partial:m2266_4 -# 2266| v2266_6(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, m2265_8 -# 2266| m2266_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2266| m2266_8(String) = Chi : total:m2265_8, partial:m2266_7 -# 2266| r2266_9(glval) = VariableAddress[s] : -# 2266| r2266_10(glval) = FunctionAddress[~String] : -# 2266| v2266_11(void) = Call[~String] : func:r2266_10, this:r2266_9 -# 2266| m2266_12(unknown) = ^CallSideEffect : ~m2266_5 -# 2266| m2266_13(unknown) = Chi : total:m2266_5, partial:m2266_12 -# 2266| v2266_14(void) = ^IndirectReadSideEffect[-1] : &:r2266_9, m2261_8 -# 2266| m2266_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_9 -# 2266| m2266_16(String) = Chi : total:m2261_8, partial:m2266_15 +# 2279| Block 4 +# 2279| r2279_1(glval) = VariableAddress[s2] : +# 2279| m2279_2(String) = Uninitialized[s2] : &:r2279_1 +# 2279| r2279_3(glval) = FunctionAddress[String] : +# 2279| v2279_4(void) = Call[String] : func:r2279_3, this:r2279_1 +# 2279| m2279_5(unknown) = ^CallSideEffect : ~m2275_6 +# 2279| m2279_6(unknown) = Chi : total:m2275_6, partial:m2279_5 +# 2279| m2279_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 +# 2279| m2279_8(String) = Chi : total:m2279_2, partial:m2279_7 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| r2280_2(glval) = FunctionAddress[~String] : +# 2280| v2280_3(void) = Call[~String] : func:r2280_2, this:r2280_1 +# 2280| m2280_4(unknown) = ^CallSideEffect : ~m2279_6 +# 2280| m2280_5(unknown) = Chi : total:m2279_6, partial:m2280_4 +# 2280| v2280_6(void) = ^IndirectReadSideEffect[-1] : &:r2280_1, m2279_8 +# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2280| m2280_8(String) = Chi : total:m2279_8, partial:m2280_7 +# 2280| r2280_9(glval) = VariableAddress[s] : +# 2280| r2280_10(glval) = FunctionAddress[~String] : +# 2280| v2280_11(void) = Call[~String] : func:r2280_10, this:r2280_9 +# 2280| m2280_12(unknown) = ^CallSideEffect : ~m2280_5 +# 2280| m2280_13(unknown) = Chi : total:m2280_5, partial:m2280_12 +# 2280| v2280_14(void) = ^IndirectReadSideEffect[-1] : &:r2280_9, m2275_8 +# 2280| m2280_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_9 +# 2280| m2280_16(String) = Chi : total:m2275_8, partial:m2280_15 #-----| Goto -> Block 10 -# 2267| Block 5 -# 2267| v2267_1(void) = CatchByType[const char *] : +# 2281| Block 5 +# 2281| v2281_1(void) = CatchByType[const char *] : #-----| Exception -> Block 7 #-----| Goto -> Block 6 -# 2267| Block 6 -# 2267| r2267_2(glval) = VariableAddress[s] : -# 2267| m2267_3(char *) = InitializeParameter[s] : &:r2267_2 -# 2267| r2267_4(char *) = Load[s] : &:r2267_2, m2267_3 -# 2267| m2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 -# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : -# 2268| m2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 -# 2268| r2268_3(glval) = FunctionAddress[String] : -# 2268| r2268_4(glval) = VariableAddress[s] : -# 2268| r2268_5(char *) = Load[s] : &:r2268_4, m2267_3 -# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 -# 2268| m2268_7(unknown) = ^CallSideEffect : ~m2261_6 -# 2268| m2268_8(unknown) = Chi : total:m2261_6, partial:m2268_7 -# 2268| v2268_9(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m2267_5 -# 2268| m2268_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 -# 2268| m2268_11(String) = Chi : total:m2268_2, partial:m2268_10 -# 2268| v2268_12(void) = ThrowValue : &:r2268_1, m2268_11 +# 2281| Block 6 +# 2281| r2281_2(glval) = VariableAddress[s] : +# 2281| m2281_3(char *) = InitializeParameter[s] : &:r2281_2 +# 2281| r2281_4(char *) = Load[s] : &:r2281_2, m2281_3 +# 2281| m2281_5(unknown) = InitializeIndirection[s] : &:r2281_4 +# 2282| r2282_1(glval) = VariableAddress[#throw2282:5] : +# 2282| m2282_2(String) = Uninitialized[#throw2282:5] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| r2282_4(glval) = VariableAddress[s] : +# 2282| r2282_5(char *) = Load[s] : &:r2282_4, m2281_3 +# 2282| v2282_6(void) = Call[String] : func:r2282_3, this:r2282_1, 0:r2282_5 +# 2282| m2282_7(unknown) = ^CallSideEffect : ~m2275_6 +# 2282| m2282_8(unknown) = Chi : total:m2275_6, partial:m2282_7 +# 2282| v2282_9(void) = ^BufferReadSideEffect[0] : &:r2282_5, ~m2281_5 +# 2282| m2282_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2282| m2282_11(String) = Chi : total:m2282_2, partial:m2282_10 +# 2282| v2282_12(void) = ThrowValue : &:r2282_1, m2282_11 #-----| Exception -> Block 2 -# 2270| Block 7 -# 2270| v2270_1(void) = CatchByType[const String &] : +# 2284| Block 7 +# 2284| v2284_1(void) = CatchByType[const String &] : #-----| Exception -> Block 9 #-----| Goto -> Block 8 -# 2270| Block 8 -# 2270| r2270_2(glval) = VariableAddress[e] : -# 2270| m2270_3(String &) = InitializeParameter[e] : &:r2270_2 -# 2270| r2270_4(String &) = Load[e] : &:r2270_2, m2270_3 -# 2270| m2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 -# 2270| v2270_6(void) = NoOp : +# 2284| Block 8 +# 2284| r2284_2(glval) = VariableAddress[e] : +# 2284| m2284_3(String &) = InitializeParameter[e] : &:r2284_2 +# 2284| r2284_4(String &) = Load[e] : &:r2284_2, m2284_3 +# 2284| m2284_5(unknown) = InitializeIndirection[e] : &:r2284_4 +# 2284| v2284_6(void) = NoOp : #-----| Goto -> Block 10 -# 2272| Block 9 -# 2272| v2272_1(void) = CatchAny : -# 2273| v2273_1(void) = ReThrow : +# 2286| Block 9 +# 2286| v2286_1(void) = CatchAny : +# 2287| v2287_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2275| Block 10 -# 2275| m2275_1(unknown) = Phi : from 4:~m2266_13, from 8:~m2261_6 -# 2275| v2275_2(void) = NoOp : -# 2259| v2259_12(void) = ReturnVoid : +# 2289| Block 10 +# 2289| m2289_1(unknown) = Phi : from 4:~m2280_13, from 8:~m2275_6 +# 2289| v2289_2(void) = NoOp : +# 2273| v2273_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 2277| void IfDestructors(bool) -# 2277| Block 0 -# 2277| v2277_1(void) = EnterFunction : -# 2277| m2277_2(unknown) = AliasedDefinition : -# 2277| m2277_3(unknown) = InitializeNonLocal : -# 2277| m2277_4(unknown) = Chi : total:m2277_2, partial:m2277_3 -# 2277| r2277_5(glval) = VariableAddress[b] : -# 2277| m2277_6(bool) = InitializeParameter[b] : &:r2277_5 -# 2278| r2278_1(glval) = VariableAddress[s1] : -# 2278| m2278_2(String) = Uninitialized[s1] : &:r2278_1 -# 2278| r2278_3(glval) = FunctionAddress[String] : -# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 -# 2278| m2278_5(unknown) = ^CallSideEffect : ~m2277_4 -# 2278| m2278_6(unknown) = Chi : total:m2277_4, partial:m2278_5 -# 2278| m2278_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 -# 2278| m2278_8(String) = Chi : total:m2278_2, partial:m2278_7 -# 2279| r2279_1(glval) = VariableAddress[b] : -# 2279| r2279_2(bool) = Load[b] : &:r2279_1, m2277_6 -# 2279| v2279_3(void) = ConditionalBranch : r2279_2 +# 2291| void IfDestructors(bool) +# 2291| Block 0 +# 2291| v2291_1(void) = EnterFunction : +# 2291| m2291_2(unknown) = AliasedDefinition : +# 2291| m2291_3(unknown) = InitializeNonLocal : +# 2291| m2291_4(unknown) = Chi : total:m2291_2, partial:m2291_3 +# 2291| r2291_5(glval) = VariableAddress[b] : +# 2291| m2291_6(bool) = InitializeParameter[b] : &:r2291_5 +# 2292| r2292_1(glval) = VariableAddress[s1] : +# 2292| m2292_2(String) = Uninitialized[s1] : &:r2292_1 +# 2292| r2292_3(glval) = FunctionAddress[String] : +# 2292| v2292_4(void) = Call[String] : func:r2292_3, this:r2292_1 +# 2292| m2292_5(unknown) = ^CallSideEffect : ~m2291_4 +# 2292| m2292_6(unknown) = Chi : total:m2291_4, partial:m2292_5 +# 2292| m2292_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2292_1 +# 2292| m2292_8(String) = Chi : total:m2292_2, partial:m2292_7 +# 2293| r2293_1(glval) = VariableAddress[b] : +# 2293| r2293_2(bool) = Load[b] : &:r2293_1, m2291_6 +# 2293| v2293_3(void) = ConditionalBranch : r2293_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2280| Block 1 -# 2280| r2280_1(glval) = VariableAddress[s2] : -# 2280| m2280_2(String) = Uninitialized[s2] : &:r2280_1 -# 2280| r2280_3(glval) = FunctionAddress[String] : -# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 -# 2280| m2280_5(unknown) = ^CallSideEffect : ~m2278_6 -# 2280| m2280_6(unknown) = Chi : total:m2278_6, partial:m2280_5 -# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 -# 2280| m2280_8(String) = Chi : total:m2280_2, partial:m2280_7 -# 2281| r2281_1(glval) = VariableAddress[s2] : -# 2281| r2281_2(glval) = FunctionAddress[~String] : -# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 -# 2281| m2281_4(unknown) = ^CallSideEffect : ~m2280_6 -# 2281| m2281_5(unknown) = Chi : total:m2280_6, partial:m2281_4 -# 2281| v2281_6(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, m2280_8 -# 2281| m2281_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 -# 2281| m2281_8(String) = Chi : total:m2280_8, partial:m2281_7 +# 2294| Block 1 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2292_6 +# 2294| m2294_6(unknown) = Chi : total:m2292_6, partial:m2294_5 +# 2294| m2294_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2294| m2294_8(String) = Chi : total:m2294_2, partial:m2294_7 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| m2295_4(unknown) = ^CallSideEffect : ~m2294_6 +# 2295| m2295_5(unknown) = Chi : total:m2294_6, partial:m2295_4 +# 2295| v2295_6(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, m2294_8 +# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 +# 2295| m2295_8(String) = Chi : total:m2294_8, partial:m2295_7 #-----| Goto -> Block 3 -# 2282| Block 2 -# 2282| r2282_1(glval) = VariableAddress[s3] : -# 2282| m2282_2(String) = Uninitialized[s3] : &:r2282_1 -# 2282| r2282_3(glval) = FunctionAddress[String] : -# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 -# 2282| m2282_5(unknown) = ^CallSideEffect : ~m2278_6 -# 2282| m2282_6(unknown) = Chi : total:m2278_6, partial:m2282_5 -# 2282| m2282_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2282| m2282_8(String) = Chi : total:m2282_2, partial:m2282_7 -# 2283| r2283_1(glval) = VariableAddress[s3] : -# 2283| r2283_2(glval) = FunctionAddress[~String] : -# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 -# 2283| m2283_4(unknown) = ^CallSideEffect : ~m2282_6 -# 2283| m2283_5(unknown) = Chi : total:m2282_6, partial:m2283_4 -# 2283| v2283_6(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, m2282_8 -# 2283| m2283_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 -# 2283| m2283_8(String) = Chi : total:m2282_8, partial:m2283_7 +# 2296| Block 2 +# 2296| r2296_1(glval) = VariableAddress[s3] : +# 2296| m2296_2(String) = Uninitialized[s3] : &:r2296_1 +# 2296| r2296_3(glval) = FunctionAddress[String] : +# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 +# 2296| m2296_5(unknown) = ^CallSideEffect : ~m2292_6 +# 2296| m2296_6(unknown) = Chi : total:m2292_6, partial:m2296_5 +# 2296| m2296_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 +# 2296| m2296_8(String) = Chi : total:m2296_2, partial:m2296_7 +# 2297| r2297_1(glval) = VariableAddress[s3] : +# 2297| r2297_2(glval) = FunctionAddress[~String] : +# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1 +# 2297| m2297_4(unknown) = ^CallSideEffect : ~m2296_6 +# 2297| m2297_5(unknown) = Chi : total:m2296_6, partial:m2297_4 +# 2297| v2297_6(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, m2296_8 +# 2297| m2297_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 +# 2297| m2297_8(String) = Chi : total:m2296_8, partial:m2297_7 #-----| Goto -> Block 3 -# 2284| Block 3 -# 2284| m2284_1(unknown) = Phi : from 1:~m2281_5, from 2:~m2283_5 -# 2284| r2284_2(glval) = VariableAddress[s4] : -# 2284| m2284_3(String) = Uninitialized[s4] : &:r2284_2 -# 2284| r2284_4(glval) = FunctionAddress[String] : -# 2284| v2284_5(void) = Call[String] : func:r2284_4, this:r2284_2 -# 2284| m2284_6(unknown) = ^CallSideEffect : ~m2284_1 -# 2284| m2284_7(unknown) = Chi : total:m2284_1, partial:m2284_6 -# 2284| m2284_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_2 -# 2284| m2284_9(String) = Chi : total:m2284_3, partial:m2284_8 -# 2285| v2285_1(void) = NoOp : -# 2285| r2285_2(glval) = VariableAddress[s4] : -# 2285| r2285_3(glval) = FunctionAddress[~String] : -# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 -# 2285| m2285_5(unknown) = ^CallSideEffect : ~m2284_7 -# 2285| m2285_6(unknown) = Chi : total:m2284_7, partial:m2285_5 -# 2285| v2285_7(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, m2284_9 -# 2285| m2285_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 -# 2285| m2285_9(String) = Chi : total:m2284_9, partial:m2285_8 -# 2285| r2285_10(glval) = VariableAddress[s1] : -# 2285| r2285_11(glval) = FunctionAddress[~String] : -# 2285| v2285_12(void) = Call[~String] : func:r2285_11, this:r2285_10 -# 2285| m2285_13(unknown) = ^CallSideEffect : ~m2285_6 -# 2285| m2285_14(unknown) = Chi : total:m2285_6, partial:m2285_13 -# 2285| v2285_15(void) = ^IndirectReadSideEffect[-1] : &:r2285_10, m2278_8 -# 2285| m2285_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_10 -# 2285| m2285_17(String) = Chi : total:m2278_8, partial:m2285_16 -# 2277| v2277_7(void) = ReturnVoid : -# 2277| v2277_8(void) = AliasedUse : ~m2285_14 -# 2277| v2277_9(void) = ExitFunction : +# 2298| Block 3 +# 2298| m2298_1(unknown) = Phi : from 1:~m2295_5, from 2:~m2297_5 +# 2298| r2298_2(glval) = VariableAddress[s4] : +# 2298| m2298_3(String) = Uninitialized[s4] : &:r2298_2 +# 2298| r2298_4(glval) = FunctionAddress[String] : +# 2298| v2298_5(void) = Call[String] : func:r2298_4, this:r2298_2 +# 2298| m2298_6(unknown) = ^CallSideEffect : ~m2298_1 +# 2298| m2298_7(unknown) = Chi : total:m2298_1, partial:m2298_6 +# 2298| m2298_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_2 +# 2298| m2298_9(String) = Chi : total:m2298_3, partial:m2298_8 +# 2299| v2299_1(void) = NoOp : +# 2299| r2299_2(glval) = VariableAddress[s4] : +# 2299| r2299_3(glval) = FunctionAddress[~String] : +# 2299| v2299_4(void) = Call[~String] : func:r2299_3, this:r2299_2 +# 2299| m2299_5(unknown) = ^CallSideEffect : ~m2298_7 +# 2299| m2299_6(unknown) = Chi : total:m2298_7, partial:m2299_5 +# 2299| v2299_7(void) = ^IndirectReadSideEffect[-1] : &:r2299_2, m2298_9 +# 2299| m2299_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_2 +# 2299| m2299_9(String) = Chi : total:m2298_9, partial:m2299_8 +# 2299| r2299_10(glval) = VariableAddress[s1] : +# 2299| r2299_11(glval) = FunctionAddress[~String] : +# 2299| v2299_12(void) = Call[~String] : func:r2299_11, this:r2299_10 +# 2299| m2299_13(unknown) = ^CallSideEffect : ~m2299_6 +# 2299| m2299_14(unknown) = Chi : total:m2299_6, partial:m2299_13 +# 2299| v2299_15(void) = ^IndirectReadSideEffect[-1] : &:r2299_10, m2292_8 +# 2299| m2299_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_10 +# 2299| m2299_17(String) = Chi : total:m2292_8, partial:m2299_16 +# 2291| v2291_7(void) = ReturnVoid : +# 2291| v2291_8(void) = AliasedUse : ~m2299_14 +# 2291| v2291_9(void) = ExitFunction : -# 2287| void ForDestructors() -# 2287| Block 0 -# 2287| v2287_1(void) = EnterFunction : -# 2287| m2287_2(unknown) = AliasedDefinition : -# 2287| m2287_3(unknown) = InitializeNonLocal : -# 2287| m2287_4(unknown) = Chi : total:m2287_2, partial:m2287_3 -# 2288| r2288_1(glval) = VariableAddress[c] : -# 2288| r2288_2(char) = Constant[97] : -# 2288| m2288_3(char) = Store[c] : &:r2288_1, r2288_2 -# 2289| r2289_1(glval) = VariableAddress[s] : -# 2289| m2289_2(String) = Uninitialized[s] : &:r2289_1 -# 2289| r2289_3(glval) = FunctionAddress[String] : -# 2289| r2289_4(glval) = StringConstant["hello"] : -# 2289| r2289_5(char *) = Convert : r2289_4 -# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 -# 2289| m2289_7(unknown) = ^CallSideEffect : ~m2287_4 -# 2289| m2289_8(unknown) = Chi : total:m2287_4, partial:m2289_7 -# 2289| v2289_9(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m2287_3 -# 2289| m2289_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 -# 2289| m2289_11(String) = Chi : total:m2289_2, partial:m2289_10 -#-----| Goto -> Block 1 - -# 2289| Block 1 -# 2289| m2289_12(String) = Phi : from 0:m2289_11, from 2:m2289_28 -# 2289| m2289_13(unknown) = Phi : from 0:~m2289_8, from 2:~m2289_25 -# 2289| m2289_14(char) = Phi : from 0:m2288_3, from 2:m2289_30 -# 2289| r2289_15(glval) = VariableAddress[c] : -# 2289| r2289_16(char) = Load[c] : &:r2289_15, m2289_14 -# 2289| r2289_17(int) = Convert : r2289_16 -# 2289| r2289_18(int) = Constant[0] : -# 2289| r2289_19(bool) = CompareNE : r2289_17, r2289_18 -# 2289| v2289_20(void) = ConditionalBranch : r2289_19 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2290| Block 2 -# 2290| r2290_1(glval) = VariableAddress[s2] : -# 2290| m2290_2(String) = Uninitialized[s2] : &:r2290_1 -# 2290| r2290_3(glval) = FunctionAddress[String] : -# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 -# 2290| m2290_5(unknown) = ^CallSideEffect : ~m2289_13 -# 2290| m2290_6(unknown) = Chi : total:m2289_13, partial:m2290_5 -# 2290| m2290_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 -# 2290| m2290_8(String) = Chi : total:m2290_2, partial:m2290_7 -# 2291| r2291_1(glval) = VariableAddress[s2] : -# 2291| r2291_2(glval) = FunctionAddress[~String] : -# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 -# 2291| m2291_4(unknown) = ^CallSideEffect : ~m2290_6 -# 2291| m2291_5(unknown) = Chi : total:m2290_6, partial:m2291_4 -# 2291| v2291_6(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, m2290_8 -# 2291| m2291_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 -# 2291| m2291_8(String) = Chi : total:m2290_8, partial:m2291_7 -# 2289| r2289_21(glval) = VariableAddress[s] : -# 2289| r2289_22(glval) = FunctionAddress[pop_back] : -# 2289| r2289_23(char) = Call[pop_back] : func:r2289_22, this:r2289_21 -# 2289| m2289_24(unknown) = ^CallSideEffect : ~m2291_5 -# 2289| m2289_25(unknown) = Chi : total:m2291_5, partial:m2289_24 -# 2289| v2289_26(void) = ^IndirectReadSideEffect[-1] : &:r2289_21, m2289_12 -# 2289| m2289_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_21 -# 2289| m2289_28(String) = Chi : total:m2289_12, partial:m2289_27 -# 2289| r2289_29(glval) = VariableAddress[c] : -# 2289| m2289_30(char) = Store[c] : &:r2289_29, r2289_23 -#-----| Goto (back edge) -> Block 1 - -# 2289| Block 3 -# 2289| r2289_31(glval) = VariableAddress[s] : -# 2289| r2289_32(glval) = FunctionAddress[~String] : -# 2289| v2289_33(void) = Call[~String] : func:r2289_32, this:r2289_31 -# 2289| m2289_34(unknown) = ^CallSideEffect : ~m2289_13 -# 2289| m2289_35(unknown) = Chi : total:m2289_13, partial:m2289_34 -# 2289| v2289_36(void) = ^IndirectReadSideEffect[-1] : &:r2289_31, m2289_12 -# 2289| m2289_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_31 -# 2289| m2289_38(String) = Chi : total:m2289_12, partial:m2289_37 -# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : -# 2293| m2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 -# 2293| r2293_4(glval) = FunctionAddress[vector] : -# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : -# 2293| m2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 -# 2293| r2293_7(glval) = FunctionAddress[String] : -# 2293| r2293_8(glval) = StringConstant["hello"] : -# 2293| r2293_9(char *) = Convert : r2293_8 -# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 -# 2293| m2293_11(unknown) = ^CallSideEffect : ~m2289_35 -# 2293| m2293_12(unknown) = Chi : total:m2289_35, partial:m2293_11 -# 2293| v2293_13(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m2287_3 -# 2293| m2293_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 -# 2293| m2293_15(String) = Chi : total:m2293_6, partial:m2293_14 -# 2293| r2293_16(String) = Load[#temp2293:40] : &:r2293_5, m2293_15 -# 2293| v2293_17(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_16 -# 2293| m2293_18(unknown) = ^CallSideEffect : ~m2293_12 -# 2293| m2293_19(unknown) = Chi : total:m2293_12, partial:m2293_18 -# 2293| m2293_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 -# 2293| m2293_21(vector) = Chi : total:m2293_3, partial:m2293_20 -# 2293| r2293_22(vector &) = CopyValue : r2293_2 -# 2293| m2293_23(vector &&) = Store[(__range)] : &:r2293_1, r2293_22 -# 2293| r2293_24(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_25(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_26(vector &&) = Load[(__range)] : &:r2293_25, m2293_23 -#-----| r0_1(glval>) = CopyValue : r2293_26 -#-----| r0_2(glval>) = Convert : r0_1 -# 2293| r2293_27(glval) = FunctionAddress[begin] : -# 2293| r2293_28(iterator) = Call[begin] : func:r2293_27, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2293_21 -# 2293| m2293_29(iterator) = Store[(__begin)] : &:r2293_24, r2293_28 -# 2293| r2293_30(glval>) = VariableAddress[(__end)] : -# 2293| r2293_31(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_32(vector &&) = Load[(__range)] : &:r2293_31, m2293_23 -#-----| r0_4(glval>) = CopyValue : r2293_32 -#-----| r0_5(glval>) = Convert : r0_4 -# 2293| r2293_33(glval) = FunctionAddress[end] : -# 2293| r2293_34(iterator) = Call[end] : func:r2293_33, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2293_21 -# 2293| m2293_35(iterator) = Store[(__end)] : &:r2293_30, r2293_34 -#-----| Goto -> Block 4 - -# 2293| Block 4 -# 2293| m2293_36(iterator) = Phi : from 3:m2293_29, from 5:m2293_83 -# 2293| m2293_37(unknown) = Phi : from 3:~m2293_19, from 5:~m2293_80 -# 2293| r2293_38(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2293_38 -# 2293| r2293_39(glval) = FunctionAddress[operator!=] : -#-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_40(glval) = FunctionAddress[iterator] : -# 2293| r2293_41(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2293_41 -#-----| r0_11(iterator &) = CopyValue : r0_10 -# 2293| v2293_42(void) = Call[iterator] : func:r2293_40, this:r0_8, 0:r0_11 -# 2293| m2293_43(unknown) = ^CallSideEffect : ~m2293_37 -# 2293| m2293_44(unknown) = Chi : total:m2293_37, partial:m2293_43 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2293_35 -# 2293| m2293_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2293| m2293_46(iterator) = Chi : total:m0_9, partial:m2293_45 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2293_46 -# 2293| r2293_47(bool) = Call[operator!=] : func:r2293_39, this:r0_7, 0:r0_13 -# 2293| m2293_48(unknown) = ^CallSideEffect : ~m2293_44 -# 2293| m2293_49(unknown) = Chi : total:m2293_44, partial:m2293_48 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2293_36 -# 2293| v2293_50(void) = ConditionalBranch : r2293_47 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 2293| Block 5 -# 2293| r2293_51(glval) = VariableAddress[s] : -# 2293| m2293_52(String) = Uninitialized[s] : &:r2293_51 -# 2293| r2293_53(glval) = FunctionAddress[String] : -# 2293| r2293_54(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2293_54 -# 2293| r2293_55(glval) = FunctionAddress[operator*] : -# 2293| r2293_56(String &) = Call[operator*] : func:r2293_55, this:r0_15 -# 2293| m2293_57(unknown) = ^CallSideEffect : ~m2293_49 -# 2293| m2293_58(unknown) = Chi : total:m2293_49, partial:m2293_57 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2293_36 -# 2293| r2293_59(glval) = CopyValue : r2293_56 -# 2293| r2293_60(glval) = Convert : r2293_59 -# 2293| r2293_61(String &) = CopyValue : r2293_60 -# 2293| v2293_62(void) = Call[String] : func:r2293_53, this:r2293_51, 0:r2293_61 -# 2293| m2293_63(unknown) = ^CallSideEffect : ~m2293_58 -# 2293| m2293_64(unknown) = Chi : total:m2293_58, partial:m2293_63 -# 2293| v2293_65(void) = ^BufferReadSideEffect[0] : &:r2293_61, ~m2293_64 -# 2293| m2293_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_51 -# 2293| m2293_67(String) = Chi : total:m2293_52, partial:m2293_66 -# 2294| r2294_1(glval) = VariableAddress[s2] : -# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 -# 2294| r2294_3(glval) = FunctionAddress[String] : -# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 -# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2293_64 -# 2294| m2294_6(unknown) = Chi : total:m2293_64, partial:m2294_5 -# 2294| m2294_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2294| m2294_8(String) = Chi : total:m2294_2, partial:m2294_7 -# 2295| r2295_1(glval) = VariableAddress[s2] : -# 2295| r2295_2(glval) = FunctionAddress[~String] : -# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 -# 2295| m2295_4(unknown) = ^CallSideEffect : ~m2294_6 -# 2295| m2295_5(unknown) = Chi : total:m2294_6, partial:m2295_4 -# 2295| v2295_6(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, m2294_8 -# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 -# 2295| m2295_8(String) = Chi : total:m2294_8, partial:m2295_7 -# 2293| r2293_68(glval) = VariableAddress[s] : -# 2293| r2293_69(glval) = FunctionAddress[~String] : -# 2293| v2293_70(void) = Call[~String] : func:r2293_69, this:r2293_68 -# 2293| m2293_71(unknown) = ^CallSideEffect : ~m2295_5 -# 2293| m2293_72(unknown) = Chi : total:m2295_5, partial:m2293_71 -# 2293| v2293_73(void) = ^IndirectReadSideEffect[-1] : &:r2293_68, m2293_67 -# 2293| m2293_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_68 -# 2293| m2293_75(String) = Chi : total:m2293_67, partial:m2293_74 -# 2293| r2293_76(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_77(glval) = FunctionAddress[operator++] : -# 2293| r2293_78(iterator &) = Call[operator++] : func:r2293_77, this:r2293_76 -# 2293| m2293_79(unknown) = ^CallSideEffect : ~m2293_72 -# 2293| m2293_80(unknown) = Chi : total:m2293_72, partial:m2293_79 -# 2293| v2293_81(void) = ^IndirectReadSideEffect[-1] : &:r2293_76, m2293_36 -# 2293| m2293_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_76 -# 2293| m2293_83(iterator) = Chi : total:m2293_36, partial:m2293_82 -# 2293| r2293_84(glval>) = CopyValue : r2293_78 -#-----| Goto (back edge) -> Block 4 - -# 2297| Block 6 -# 2297| r2297_1(glval) = VariableAddress[s] : -# 2297| m2297_2(String) = Uninitialized[s] : &:r2297_1 -# 2297| r2297_3(glval) = FunctionAddress[String] : -# 2297| r2297_4(glval) = StringConstant["hello"] : -# 2297| r2297_5(char *) = Convert : r2297_4 -# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 -# 2297| m2297_7(unknown) = ^CallSideEffect : ~m2293_49 -# 2297| m2297_8(unknown) = Chi : total:m2293_49, partial:m2297_7 -# 2297| v2297_9(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m2287_3 -# 2297| m2297_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 -# 2297| m2297_11(String) = Chi : total:m2297_2, partial:m2297_10 -# 2297| r2297_12(glval) = VariableAddress[s2] : -# 2297| m2297_13(String) = Uninitialized[s2] : &:r2297_12 -# 2297| r2297_14(glval) = FunctionAddress[String] : -# 2297| r2297_15(glval) = StringConstant["world"] : -# 2297| r2297_16(char *) = Convert : r2297_15 -# 2297| v2297_17(void) = Call[String] : func:r2297_14, this:r2297_12, 0:r2297_16 -# 2297| m2297_18(unknown) = ^CallSideEffect : ~m2297_8 -# 2297| m2297_19(unknown) = Chi : total:m2297_8, partial:m2297_18 -# 2297| v2297_20(void) = ^BufferReadSideEffect[0] : &:r2297_16, ~m2287_3 -# 2297| m2297_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_12 -# 2297| m2297_22(String) = Chi : total:m2297_13, partial:m2297_21 -#-----| Goto -> Block 7 - -# 2297| Block 7 -# 2297| m2297_23(String) = Phi : from 6:m2297_11, from 8:m2297_39 -# 2297| m2297_24(unknown) = Phi : from 6:~m2297_19, from 8:~m2297_36 -# 2297| m2297_25(char) = Phi : from 6:m2289_14, from 8:m2297_41 -# 2297| r2297_26(glval) = VariableAddress[c] : -# 2297| r2297_27(char) = Load[c] : &:r2297_26, m2297_25 -# 2297| r2297_28(int) = Convert : r2297_27 -# 2297| r2297_29(int) = Constant[0] : -# 2297| r2297_30(bool) = CompareNE : r2297_28, r2297_29 -# 2297| v2297_31(void) = ConditionalBranch : r2297_30 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 2298| Block 8 -# 2298| r2298_1(char) = Constant[0] : -# 2298| r2298_2(glval) = VariableAddress[c] : -# 2298| m2298_3(char) = Store[c] : &:r2298_2, r2298_1 -# 2297| r2297_32(glval) = VariableAddress[s] : -# 2297| r2297_33(glval) = FunctionAddress[pop_back] : -# 2297| r2297_34(char) = Call[pop_back] : func:r2297_33, this:r2297_32 -# 2297| m2297_35(unknown) = ^CallSideEffect : ~m2297_24 -# 2297| m2297_36(unknown) = Chi : total:m2297_24, partial:m2297_35 -# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_32, m2297_23 -# 2297| m2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_32 -# 2297| m2297_39(String) = Chi : total:m2297_23, partial:m2297_38 -# 2297| r2297_40(glval) = VariableAddress[c] : -# 2297| m2297_41(char) = Store[c] : &:r2297_40, r2297_34 -#-----| Goto (back edge) -> Block 7 - -# 2297| Block 9 -# 2297| r2297_42(glval) = VariableAddress[s2] : -# 2297| r2297_43(glval) = FunctionAddress[~String] : -# 2297| v2297_44(void) = Call[~String] : func:r2297_43, this:r2297_42 -# 2297| m2297_45(unknown) = ^CallSideEffect : ~m2297_24 -# 2297| m2297_46(unknown) = Chi : total:m2297_24, partial:m2297_45 -# 2297| v2297_47(void) = ^IndirectReadSideEffect[-1] : &:r2297_42, m2297_22 -# 2297| m2297_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_42 -# 2297| m2297_49(String) = Chi : total:m2297_22, partial:m2297_48 -# 2297| r2297_50(glval) = VariableAddress[s] : -# 2297| r2297_51(glval) = FunctionAddress[~String] : -# 2297| v2297_52(void) = Call[~String] : func:r2297_51, this:r2297_50 -# 2297| m2297_53(unknown) = ^CallSideEffect : ~m2297_46 -# 2297| m2297_54(unknown) = Chi : total:m2297_46, partial:m2297_53 -# 2297| v2297_55(void) = ^IndirectReadSideEffect[-1] : &:r2297_50, m2297_23 -# 2297| m2297_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_50 -# 2297| m2297_57(String) = Chi : total:m2297_23, partial:m2297_56 -# 2300| v2300_1(void) = NoOp : -# 2287| v2287_5(void) = ReturnVoid : -# 2287| v2287_6(void) = AliasedUse : ~m2297_54 -# 2287| v2287_7(void) = ExitFunction : - -# 2302| void IfDestructors2(bool) -# 2302| Block 0 -# 2302| v2302_1(void) = EnterFunction : -# 2302| m2302_2(unknown) = AliasedDefinition : -# 2302| m2302_3(unknown) = InitializeNonLocal : -# 2302| m2302_4(unknown) = Chi : total:m2302_2, partial:m2302_3 -# 2302| r2302_5(glval) = VariableAddress[b] : -# 2302| m2302_6(bool) = InitializeParameter[b] : &:r2302_5 +# 2301| void ForDestructors() +# 2301| Block 0 +# 2301| v2301_1(void) = EnterFunction : +# 2301| m2301_2(unknown) = AliasedDefinition : +# 2301| m2301_3(unknown) = InitializeNonLocal : +# 2301| m2301_4(unknown) = Chi : total:m2301_2, partial:m2301_3 +# 2302| r2302_1(glval) = VariableAddress[c] : +# 2302| r2302_2(char) = Constant[97] : +# 2302| m2302_3(char) = Store[c] : &:r2302_1, r2302_2 # 2303| r2303_1(glval) = VariableAddress[s] : # 2303| m2303_2(String) = Uninitialized[s] : &:r2303_1 # 2303| r2303_3(glval) = FunctionAddress[String] : # 2303| r2303_4(glval) = StringConstant["hello"] : # 2303| r2303_5(char *) = Convert : r2303_4 # 2303| v2303_6(void) = Call[String] : func:r2303_3, this:r2303_1, 0:r2303_5 -# 2303| m2303_7(unknown) = ^CallSideEffect : ~m2302_4 -# 2303| m2303_8(unknown) = Chi : total:m2302_4, partial:m2303_7 -# 2303| v2303_9(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m2302_3 +# 2303| m2303_7(unknown) = ^CallSideEffect : ~m2301_4 +# 2303| m2303_8(unknown) = Chi : total:m2301_4, partial:m2303_7 +# 2303| v2303_9(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m2301_3 # 2303| m2303_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 # 2303| m2303_11(String) = Chi : total:m2303_2, partial:m2303_10 -# 2303| r2303_12(glval) = VariableAddress[b] : -# 2303| r2303_13(bool) = Load[b] : &:r2303_12, m2302_6 -# 2303| v2303_14(void) = ConditionalBranch : r2303_13 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2304| Block 1 -# 2304| r2304_1(glval) = VariableAddress[x] : -# 2304| r2304_2(int) = Constant[0] : -# 2304| m2304_3(int) = Store[x] : &:r2304_1, r2304_2 -#-----| Goto -> Block 3 - -# 2306| Block 2 -# 2306| r2306_1(glval) = VariableAddress[y] : -# 2306| r2306_2(int) = Constant[0] : -# 2306| m2306_3(int) = Store[y] : &:r2306_1, r2306_2 -#-----| Goto -> Block 3 - -# 2307| Block 3 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| r2307_2(glval) = FunctionAddress[~String] : -# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 -# 2307| m2307_4(unknown) = ^CallSideEffect : ~m2303_8 -# 2307| m2307_5(unknown) = Chi : total:m2303_8, partial:m2307_4 -# 2307| v2307_6(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, m2303_11 -# 2307| m2307_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2307| m2307_8(String) = Chi : total:m2303_11, partial:m2307_7 -# 2308| v2308_1(void) = NoOp : -# 2302| v2302_7(void) = ReturnVoid : -# 2302| v2302_8(void) = AliasedUse : ~m2307_5 -# 2302| v2302_9(void) = ExitFunction : - -# 2317| void IfDestructors3(bool) -# 2317| Block 0 -# 2317| v2317_1(void) = EnterFunction : -# 2317| m2317_2(unknown) = AliasedDefinition : -# 2317| m2317_3(unknown) = InitializeNonLocal : -# 2317| m2317_4(unknown) = Chi : total:m2317_2, partial:m2317_3 -# 2317| r2317_5(glval) = VariableAddress[b] : -# 2317| m2317_6(bool) = InitializeParameter[b] : &:r2317_5 -# 2318| r2318_1(glval) = VariableAddress[B] : -# 2318| m2318_2(Bool) = Uninitialized[B] : &:r2318_1 -# 2318| r2318_3(glval) = FunctionAddress[Bool] : -# 2318| r2318_4(glval) = VariableAddress[b] : -# 2318| r2318_5(bool) = Load[b] : &:r2318_4, m2317_6 -# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 -# 2318| m2318_7(unknown) = ^CallSideEffect : ~m2317_4 -# 2318| m2318_8(unknown) = Chi : total:m2317_4, partial:m2318_7 -# 2318| m2318_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| m2318_10(Bool) = Chi : total:m2318_2, partial:m2318_9 -# 2318| r2318_11(glval) = VariableAddress[B] : -# 2318| r2318_12(glval) = FunctionAddress[operator bool] : -# 2318| r2318_13(bool) = Call[operator bool] : func:r2318_12, this:r2318_11 -# 2318| m2318_14(unknown) = ^CallSideEffect : ~m2318_8 -# 2318| m2318_15(unknown) = Chi : total:m2318_8, partial:m2318_14 -# 2318| v2318_16(void) = ^IndirectReadSideEffect[-1] : &:r2318_11, m2318_10 -# 2318| m2318_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_11 -# 2318| m2318_18(Bool) = Chi : total:m2318_10, partial:m2318_17 -# 2318| r2318_19(bool) = CopyValue : r2318_13 -# 2318| v2318_20(void) = ConditionalBranch : r2318_19 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2319| Block 1 -# 2319| r2319_1(glval) = VariableAddress[s1] : -# 2319| m2319_2(String) = Uninitialized[s1] : &:r2319_1 -# 2319| r2319_3(glval) = FunctionAddress[String] : -# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 -# 2319| m2319_5(unknown) = ^CallSideEffect : ~m2318_15 -# 2319| m2319_6(unknown) = Chi : total:m2318_15, partial:m2319_5 -# 2319| m2319_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 -# 2319| m2319_8(String) = Chi : total:m2319_2, partial:m2319_7 -# 2320| r2320_1(glval) = VariableAddress[s1] : -# 2320| r2320_2(glval) = FunctionAddress[~String] : -# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 -# 2320| m2320_4(unknown) = ^CallSideEffect : ~m2319_6 -# 2320| m2320_5(unknown) = Chi : total:m2319_6, partial:m2320_4 -# 2320| v2320_6(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, m2319_8 -# 2320| m2320_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -# 2320| m2320_8(String) = Chi : total:m2319_8, partial:m2320_7 -#-----| Goto -> Block 3 - -# 2321| Block 2 -# 2321| r2321_1(glval) = VariableAddress[s2] : -# 2321| m2321_2(String) = Uninitialized[s2] : &:r2321_1 -# 2321| r2321_3(glval) = FunctionAddress[String] : -# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 -# 2321| m2321_5(unknown) = ^CallSideEffect : ~m2318_15 -# 2321| m2321_6(unknown) = Chi : total:m2318_15, partial:m2321_5 -# 2321| m2321_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 -# 2321| m2321_8(String) = Chi : total:m2321_2, partial:m2321_7 -# 2322| r2322_1(glval) = VariableAddress[s2] : -# 2322| r2322_2(glval) = FunctionAddress[~String] : -# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 -# 2322| m2322_4(unknown) = ^CallSideEffect : ~m2321_6 -# 2322| m2322_5(unknown) = Chi : total:m2321_6, partial:m2322_4 -# 2322| v2322_6(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, m2321_8 -# 2322| m2322_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 -# 2322| m2322_8(String) = Chi : total:m2321_8, partial:m2322_7 -#-----| Goto -> Block 3 - -# 2322| Block 3 -# 2322| m2322_9(unknown) = Phi : from 1:~m2320_5, from 2:~m2322_5 -# 2322| r2322_10(glval) = VariableAddress[B] : -# 2322| r2322_11(glval) = FunctionAddress[~Bool] : -# 2322| v2322_12(void) = Call[~Bool] : func:r2322_11, this:r2322_10 -# 2322| m2322_13(unknown) = ^CallSideEffect : ~m2322_9 -# 2322| m2322_14(unknown) = Chi : total:m2322_9, partial:m2322_13 -# 2322| v2322_15(void) = ^IndirectReadSideEffect[-1] : &:r2322_10, m2318_18 -# 2322| m2322_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_10 -# 2322| m2322_17(Bool) = Chi : total:m2318_18, partial:m2322_16 -# 2323| v2323_1(void) = NoOp : -# 2317| v2317_7(void) = ReturnVoid : -# 2317| v2317_8(void) = AliasedUse : ~m2322_14 -# 2317| v2317_9(void) = ExitFunction : - -# 2325| void WhileLoopDestructors(bool) -# 2325| Block 0 -# 2325| v2325_1(void) = EnterFunction : -# 2325| m2325_2(unknown) = AliasedDefinition : -# 2325| m2325_3(unknown) = InitializeNonLocal : -# 2325| m2325_4(unknown) = Chi : total:m2325_2, partial:m2325_3 -# 2325| r2325_5(glval) = VariableAddress[b] : -# 2325| m2325_6(bool) = InitializeParameter[b] : &:r2325_5 -# 2327| r2327_1(glval) = VariableAddress[s] : -# 2327| m2327_2(String) = Uninitialized[s] : &:r2327_1 -# 2327| r2327_3(glval) = FunctionAddress[String] : -# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 -# 2327| m2327_5(unknown) = ^CallSideEffect : ~m2325_4 -# 2327| m2327_6(unknown) = Chi : total:m2325_4, partial:m2327_5 -# 2327| m2327_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 -# 2327| m2327_8(String) = Chi : total:m2327_2, partial:m2327_7 #-----| Goto -> Block 1 -# 2328| Block 1 -# 2328| m2328_1(bool) = Phi : from 0:m2325_6, from 2:m2329_3 -# 2328| r2328_2(glval) = VariableAddress[b] : -# 2328| r2328_3(bool) = Load[b] : &:r2328_2, m2328_1 -# 2328| v2328_4(void) = ConditionalBranch : r2328_3 +# 2303| Block 1 +# 2303| m2303_12(String) = Phi : from 0:m2303_11, from 2:m2303_28 +# 2303| m2303_13(unknown) = Phi : from 0:~m2303_8, from 2:~m2303_25 +# 2303| m2303_14(char) = Phi : from 0:m2302_3, from 2:m2303_30 +# 2303| r2303_15(glval) = VariableAddress[c] : +# 2303| r2303_16(char) = Load[c] : &:r2303_15, m2303_14 +# 2303| r2303_17(int) = Convert : r2303_16 +# 2303| r2303_18(int) = Constant[0] : +# 2303| r2303_19(bool) = CompareNE : r2303_17, r2303_18 +# 2303| v2303_20(void) = ConditionalBranch : r2303_19 #-----| False -> Block 3 #-----| True -> Block 2 -# 2329| Block 2 -# 2329| r2329_1(bool) = Constant[0] : -# 2329| r2329_2(glval) = VariableAddress[b] : -# 2329| m2329_3(bool) = Store[b] : &:r2329_2, r2329_1 +# 2304| Block 2 +# 2304| r2304_1(glval) = VariableAddress[s2] : +# 2304| m2304_2(String) = Uninitialized[s2] : &:r2304_1 +# 2304| r2304_3(glval) = FunctionAddress[String] : +# 2304| v2304_4(void) = Call[String] : func:r2304_3, this:r2304_1 +# 2304| m2304_5(unknown) = ^CallSideEffect : ~m2303_13 +# 2304| m2304_6(unknown) = Chi : total:m2303_13, partial:m2304_5 +# 2304| m2304_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 +# 2304| m2304_8(String) = Chi : total:m2304_2, partial:m2304_7 +# 2305| r2305_1(glval) = VariableAddress[s2] : +# 2305| r2305_2(glval) = FunctionAddress[~String] : +# 2305| v2305_3(void) = Call[~String] : func:r2305_2, this:r2305_1 +# 2305| m2305_4(unknown) = ^CallSideEffect : ~m2304_6 +# 2305| m2305_5(unknown) = Chi : total:m2304_6, partial:m2305_4 +# 2305| v2305_6(void) = ^IndirectReadSideEffect[-1] : &:r2305_1, m2304_8 +# 2305| m2305_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 +# 2305| m2305_8(String) = Chi : total:m2304_8, partial:m2305_7 +# 2303| r2303_21(glval) = VariableAddress[s] : +# 2303| r2303_22(glval) = FunctionAddress[pop_back] : +# 2303| r2303_23(char) = Call[pop_back] : func:r2303_22, this:r2303_21 +# 2303| m2303_24(unknown) = ^CallSideEffect : ~m2305_5 +# 2303| m2303_25(unknown) = Chi : total:m2305_5, partial:m2303_24 +# 2303| v2303_26(void) = ^IndirectReadSideEffect[-1] : &:r2303_21, m2303_12 +# 2303| m2303_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_21 +# 2303| m2303_28(String) = Chi : total:m2303_12, partial:m2303_27 +# 2303| r2303_29(glval) = VariableAddress[c] : +# 2303| m2303_30(char) = Store[c] : &:r2303_29, r2303_23 #-----| Goto (back edge) -> Block 1 -# 2331| Block 3 -# 2331| r2331_1(glval) = VariableAddress[s] : -# 2331| r2331_2(glval) = FunctionAddress[~String] : -# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 -# 2331| m2331_4(unknown) = ^CallSideEffect : ~m2327_6 -# 2331| m2331_5(unknown) = Chi : total:m2327_6, partial:m2331_4 -# 2331| v2331_6(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, m2327_8 -# 2331| m2331_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 -# 2331| m2331_8(String) = Chi : total:m2327_8, partial:m2331_7 +# 2303| Block 3 +# 2303| r2303_31(glval) = VariableAddress[s] : +# 2303| r2303_32(glval) = FunctionAddress[~String] : +# 2303| v2303_33(void) = Call[~String] : func:r2303_32, this:r2303_31 +# 2303| m2303_34(unknown) = ^CallSideEffect : ~m2303_13 +# 2303| m2303_35(unknown) = Chi : total:m2303_13, partial:m2303_34 +# 2303| v2303_36(void) = ^IndirectReadSideEffect[-1] : &:r2303_31, m2303_12 +# 2303| m2303_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_31 +# 2303| m2303_38(String) = Chi : total:m2303_12, partial:m2303_37 +# 2307| r2307_1(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_2(glval>) = VariableAddress[#temp2307:20] : +# 2307| m2307_3(vector) = Uninitialized[#temp2307:20] : &:r2307_2 +# 2307| r2307_4(glval) = FunctionAddress[vector] : +# 2307| r2307_5(glval) = VariableAddress[#temp2307:40] : +# 2307| m2307_6(String) = Uninitialized[#temp2307:40] : &:r2307_5 +# 2307| r2307_7(glval) = FunctionAddress[String] : +# 2307| r2307_8(glval) = StringConstant["hello"] : +# 2307| r2307_9(char *) = Convert : r2307_8 +# 2307| v2307_10(void) = Call[String] : func:r2307_7, this:r2307_5, 0:r2307_9 +# 2307| m2307_11(unknown) = ^CallSideEffect : ~m2303_35 +# 2307| m2307_12(unknown) = Chi : total:m2303_35, partial:m2307_11 +# 2307| v2307_13(void) = ^BufferReadSideEffect[0] : &:r2307_9, ~m2301_3 +# 2307| m2307_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_5 +# 2307| m2307_15(String) = Chi : total:m2307_6, partial:m2307_14 +# 2307| r2307_16(String) = Load[#temp2307:40] : &:r2307_5, m2307_15 +# 2307| v2307_17(void) = Call[vector] : func:r2307_4, this:r2307_2, 0:r2307_16 +# 2307| m2307_18(unknown) = ^CallSideEffect : ~m2307_12 +# 2307| m2307_19(unknown) = Chi : total:m2307_12, partial:m2307_18 +# 2307| m2307_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2307_2 +# 2307| m2307_21(vector) = Chi : total:m2307_3, partial:m2307_20 +# 2307| r2307_22(vector &) = CopyValue : r2307_2 +# 2307| m2307_23(vector &&) = Store[(__range)] : &:r2307_1, r2307_22 +# 2307| r2307_24(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_25(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_26(vector &&) = Load[(__range)] : &:r2307_25, m2307_23 +#-----| r0_1(glval>) = CopyValue : r2307_26 +#-----| r0_2(glval>) = Convert : r0_1 +# 2307| r2307_27(glval) = FunctionAddress[begin] : +# 2307| r2307_28(iterator) = Call[begin] : func:r2307_27, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2307_21 +# 2307| m2307_29(iterator) = Store[(__begin)] : &:r2307_24, r2307_28 +# 2307| r2307_30(glval>) = VariableAddress[(__end)] : +# 2307| r2307_31(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_32(vector &&) = Load[(__range)] : &:r2307_31, m2307_23 +#-----| r0_4(glval>) = CopyValue : r2307_32 +#-----| r0_5(glval>) = Convert : r0_4 +# 2307| r2307_33(glval) = FunctionAddress[end] : +# 2307| r2307_34(iterator) = Call[end] : func:r2307_33, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2307_21 +# 2307| m2307_35(iterator) = Store[(__end)] : &:r2307_30, r2307_34 #-----| Goto -> Block 4 -# 2334| Block 4 -# 2334| m2334_1(unknown) = Phi : from 3:~m2331_5, from 5:~m2336_5 -# 2334| m2334_2(bool) = Phi : from 3:m2328_1, from 5:m2335_3 -# 2334| r2334_3(glval) = VariableAddress[B] : -# 2334| m2334_4(Bool) = Uninitialized[B] : &:r2334_3 -# 2334| r2334_5(glval) = FunctionAddress[Bool] : -# 2334| r2334_6(glval) = VariableAddress[b] : -# 2334| r2334_7(bool) = Load[b] : &:r2334_6, m2334_2 -# 2334| v2334_8(void) = Call[Bool] : func:r2334_5, this:r2334_3, 0:r2334_7 -# 2334| m2334_9(unknown) = ^CallSideEffect : ~m2334_1 -# 2334| m2334_10(unknown) = Chi : total:m2334_1, partial:m2334_9 -# 2334| m2334_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_3 -# 2334| m2334_12(Bool) = Chi : total:m2334_4, partial:m2334_11 -# 2334| r2334_13(glval) = VariableAddress[B] : -# 2334| r2334_14(glval) = FunctionAddress[operator bool] : -# 2334| r2334_15(bool) = Call[operator bool] : func:r2334_14, this:r2334_13 -# 2334| m2334_16(unknown) = ^CallSideEffect : ~m2334_10 -# 2334| m2334_17(unknown) = Chi : total:m2334_10, partial:m2334_16 -# 2334| v2334_18(void) = ^IndirectReadSideEffect[-1] : &:r2334_13, m2334_12 -# 2334| m2334_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_13 -# 2334| m2334_20(Bool) = Chi : total:m2334_12, partial:m2334_19 -# 2334| r2334_21(bool) = CopyValue : r2334_15 -# 2334| v2334_22(void) = ConditionalBranch : r2334_21 +# 2307| Block 4 +# 2307| m2307_36(iterator) = Phi : from 3:m2307_29, from 5:m2307_83 +# 2307| m2307_37(unknown) = Phi : from 3:~m2307_19, from 5:~m2307_80 +# 2307| r2307_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2307_38 +# 2307| r2307_39(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2307| r2307_40(glval) = FunctionAddress[iterator] : +# 2307| r2307_41(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2307_41 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2307| v2307_42(void) = Call[iterator] : func:r2307_40, this:r0_8, 0:r0_11 +# 2307| m2307_43(unknown) = ^CallSideEffect : ~m2307_37 +# 2307| m2307_44(unknown) = Chi : total:m2307_37, partial:m2307_43 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2307_35 +# 2307| m2307_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2307| m2307_46(iterator) = Chi : total:m0_9, partial:m2307_45 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2307_46 +# 2307| r2307_47(bool) = Call[operator!=] : func:r2307_39, this:r0_7, 0:r0_13 +# 2307| m2307_48(unknown) = ^CallSideEffect : ~m2307_44 +# 2307| m2307_49(unknown) = Chi : total:m2307_44, partial:m2307_48 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2307_36 +# 2307| v2307_50(void) = ConditionalBranch : r2307_47 #-----| False -> Block 6 #-----| True -> Block 5 -# 2335| Block 5 -# 2335| r2335_1(bool) = Constant[0] : -# 2335| r2335_2(glval) = VariableAddress[b] : -# 2335| m2335_3(bool) = Store[b] : &:r2335_2, r2335_1 -# 2336| r2336_1(glval) = VariableAddress[B] : -# 2336| r2336_2(glval) = FunctionAddress[~Bool] : -# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 -# 2336| m2336_4(unknown) = ^CallSideEffect : ~m2334_17 -# 2336| m2336_5(unknown) = Chi : total:m2334_17, partial:m2336_4 -# 2336| v2336_6(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, m2334_20 -# 2336| m2336_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 -# 2336| m2336_8(Bool) = Chi : total:m2334_20, partial:m2336_7 +# 2307| Block 5 +# 2307| r2307_51(glval) = VariableAddress[s] : +# 2307| m2307_52(String) = Uninitialized[s] : &:r2307_51 +# 2307| r2307_53(glval) = FunctionAddress[String] : +# 2307| r2307_54(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_54 +# 2307| r2307_55(glval) = FunctionAddress[operator*] : +# 2307| r2307_56(String &) = Call[operator*] : func:r2307_55, this:r0_15 +# 2307| m2307_57(unknown) = ^CallSideEffect : ~m2307_49 +# 2307| m2307_58(unknown) = Chi : total:m2307_49, partial:m2307_57 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2307_36 +# 2307| r2307_59(glval) = CopyValue : r2307_56 +# 2307| r2307_60(glval) = Convert : r2307_59 +# 2307| r2307_61(String &) = CopyValue : r2307_60 +# 2307| v2307_62(void) = Call[String] : func:r2307_53, this:r2307_51, 0:r2307_61 +# 2307| m2307_63(unknown) = ^CallSideEffect : ~m2307_58 +# 2307| m2307_64(unknown) = Chi : total:m2307_58, partial:m2307_63 +# 2307| v2307_65(void) = ^BufferReadSideEffect[0] : &:r2307_61, ~m2307_64 +# 2307| m2307_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_51 +# 2307| m2307_67(String) = Chi : total:m2307_52, partial:m2307_66 +# 2308| r2308_1(glval) = VariableAddress[s2] : +# 2308| m2308_2(String) = Uninitialized[s2] : &:r2308_1 +# 2308| r2308_3(glval) = FunctionAddress[String] : +# 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1 +# 2308| m2308_5(unknown) = ^CallSideEffect : ~m2307_64 +# 2308| m2308_6(unknown) = Chi : total:m2307_64, partial:m2308_5 +# 2308| m2308_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 +# 2308| m2308_8(String) = Chi : total:m2308_2, partial:m2308_7 +# 2309| r2309_1(glval) = VariableAddress[s2] : +# 2309| r2309_2(glval) = FunctionAddress[~String] : +# 2309| v2309_3(void) = Call[~String] : func:r2309_2, this:r2309_1 +# 2309| m2309_4(unknown) = ^CallSideEffect : ~m2308_6 +# 2309| m2309_5(unknown) = Chi : total:m2308_6, partial:m2309_4 +# 2309| v2309_6(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, m2308_8 +# 2309| m2309_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 +# 2309| m2309_8(String) = Chi : total:m2308_8, partial:m2309_7 +# 2307| r2307_68(glval) = VariableAddress[s] : +# 2307| r2307_69(glval) = FunctionAddress[~String] : +# 2307| v2307_70(void) = Call[~String] : func:r2307_69, this:r2307_68 +# 2307| m2307_71(unknown) = ^CallSideEffect : ~m2309_5 +# 2307| m2307_72(unknown) = Chi : total:m2309_5, partial:m2307_71 +# 2307| v2307_73(void) = ^IndirectReadSideEffect[-1] : &:r2307_68, m2307_67 +# 2307| m2307_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_68 +# 2307| m2307_75(String) = Chi : total:m2307_67, partial:m2307_74 +# 2307| r2307_76(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_77(glval) = FunctionAddress[operator++] : +# 2307| r2307_78(iterator &) = Call[operator++] : func:r2307_77, this:r2307_76 +# 2307| m2307_79(unknown) = ^CallSideEffect : ~m2307_72 +# 2307| m2307_80(unknown) = Chi : total:m2307_72, partial:m2307_79 +# 2307| v2307_81(void) = ^IndirectReadSideEffect[-1] : &:r2307_76, m2307_36 +# 2307| m2307_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_76 +# 2307| m2307_83(iterator) = Chi : total:m2307_36, partial:m2307_82 +# 2307| r2307_84(glval>) = CopyValue : r2307_78 #-----| Goto (back edge) -> Block 4 -# 2336| Block 6 -# 2336| r2336_9(glval) = VariableAddress[B] : -# 2336| r2336_10(glval) = FunctionAddress[~Bool] : -# 2336| v2336_11(void) = Call[~Bool] : func:r2336_10, this:r2336_9 -# 2336| m2336_12(unknown) = ^CallSideEffect : ~m2334_17 -# 2336| m2336_13(unknown) = Chi : total:m2334_17, partial:m2336_12 -# 2336| v2336_14(void) = ^IndirectReadSideEffect[-1] : &:r2336_9, m2334_20 -# 2336| m2336_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_9 -# 2336| m2336_16(Bool) = Chi : total:m2334_20, partial:m2336_15 -# 2338| v2338_1(void) = NoOp : -# 2325| v2325_7(void) = ReturnVoid : -# 2325| v2325_8(void) = AliasedUse : ~m2336_13 -# 2325| v2325_9(void) = ExitFunction : +# 2311| Block 6 +# 2311| r2311_1(glval) = VariableAddress[s] : +# 2311| m2311_2(String) = Uninitialized[s] : &:r2311_1 +# 2311| r2311_3(glval) = FunctionAddress[String] : +# 2311| r2311_4(glval) = StringConstant["hello"] : +# 2311| r2311_5(char *) = Convert : r2311_4 +# 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5 +# 2311| m2311_7(unknown) = ^CallSideEffect : ~m2307_49 +# 2311| m2311_8(unknown) = Chi : total:m2307_49, partial:m2311_7 +# 2311| v2311_9(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m2301_3 +# 2311| m2311_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 +# 2311| m2311_11(String) = Chi : total:m2311_2, partial:m2311_10 +# 2311| r2311_12(glval) = VariableAddress[s2] : +# 2311| m2311_13(String) = Uninitialized[s2] : &:r2311_12 +# 2311| r2311_14(glval) = FunctionAddress[String] : +# 2311| r2311_15(glval) = StringConstant["world"] : +# 2311| r2311_16(char *) = Convert : r2311_15 +# 2311| v2311_17(void) = Call[String] : func:r2311_14, this:r2311_12, 0:r2311_16 +# 2311| m2311_18(unknown) = ^CallSideEffect : ~m2311_8 +# 2311| m2311_19(unknown) = Chi : total:m2311_8, partial:m2311_18 +# 2311| v2311_20(void) = ^BufferReadSideEffect[0] : &:r2311_16, ~m2301_3 +# 2311| m2311_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_12 +# 2311| m2311_22(String) = Chi : total:m2311_13, partial:m2311_21 +#-----| Goto -> Block 7 -# 2340| void VoidFunc() -# 2340| Block 0 -# 2340| v2340_1(void) = EnterFunction : -# 2340| m2340_2(unknown) = AliasedDefinition : -# 2340| m2340_3(unknown) = InitializeNonLocal : -# 2340| m2340_4(unknown) = Chi : total:m2340_2, partial:m2340_3 -# 2340| v2340_5(void) = NoOp : -# 2340| v2340_6(void) = ReturnVoid : -# 2340| v2340_7(void) = AliasedUse : m2340_3 -# 2340| v2340_8(void) = ExitFunction : +# 2311| Block 7 +# 2311| m2311_23(String) = Phi : from 6:m2311_11, from 8:m2311_39 +# 2311| m2311_24(unknown) = Phi : from 6:~m2311_19, from 8:~m2311_36 +# 2311| m2311_25(char) = Phi : from 6:m2303_14, from 8:m2311_41 +# 2311| r2311_26(glval) = VariableAddress[c] : +# 2311| r2311_27(char) = Load[c] : &:r2311_26, m2311_25 +# 2311| r2311_28(int) = Convert : r2311_27 +# 2311| r2311_29(int) = Constant[0] : +# 2311| r2311_30(bool) = CompareNE : r2311_28, r2311_29 +# 2311| v2311_31(void) = ConditionalBranch : r2311_30 +#-----| False -> Block 9 +#-----| True -> Block 8 -# 2342| void IfReturnDestructors(bool) -# 2342| Block 0 -# 2342| v2342_1(void) = EnterFunction : -# 2342| m2342_2(unknown) = AliasedDefinition : -# 2342| m2342_3(unknown) = InitializeNonLocal : -# 2342| m2342_4(unknown) = Chi : total:m2342_2, partial:m2342_3 -# 2342| r2342_5(glval) = VariableAddress[b] : -# 2342| m2342_6(bool) = InitializeParameter[b] : &:r2342_5 -# 2343| r2343_1(glval) = VariableAddress[s] : -# 2343| m2343_2(String) = Uninitialized[s] : &:r2343_1 -# 2343| r2343_3(glval) = FunctionAddress[String] : -# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 -# 2343| m2343_5(unknown) = ^CallSideEffect : ~m2342_4 -# 2343| m2343_6(unknown) = Chi : total:m2342_4, partial:m2343_5 -# 2343| m2343_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 -# 2343| m2343_8(String) = Chi : total:m2343_2, partial:m2343_7 -# 2344| r2344_1(glval) = VariableAddress[b] : -# 2344| r2344_2(bool) = Load[b] : &:r2344_1, m2342_6 -# 2344| v2344_3(void) = ConditionalBranch : r2344_2 -#-----| False -> Block 3 -#-----| True -> Block 2 +# 2312| Block 8 +# 2312| r2312_1(char) = Constant[0] : +# 2312| r2312_2(glval) = VariableAddress[c] : +# 2312| m2312_3(char) = Store[c] : &:r2312_2, r2312_1 +# 2311| r2311_32(glval) = VariableAddress[s] : +# 2311| r2311_33(glval) = FunctionAddress[pop_back] : +# 2311| r2311_34(char) = Call[pop_back] : func:r2311_33, this:r2311_32 +# 2311| m2311_35(unknown) = ^CallSideEffect : ~m2311_24 +# 2311| m2311_36(unknown) = Chi : total:m2311_24, partial:m2311_35 +# 2311| v2311_37(void) = ^IndirectReadSideEffect[-1] : &:r2311_32, m2311_23 +# 2311| m2311_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_32 +# 2311| m2311_39(String) = Chi : total:m2311_23, partial:m2311_38 +# 2311| r2311_40(glval) = VariableAddress[c] : +# 2311| m2311_41(char) = Store[c] : &:r2311_40, r2311_34 +#-----| Goto (back edge) -> Block 7 -# 2342| Block 1 -# 2342| m2342_7(unknown) = Phi : from 2:~m2351_5, from 4:~m2351_13, from 5:~m2351_22 -# 2342| v2342_8(void) = ReturnVoid : -# 2342| v2342_9(void) = AliasedUse : ~m2342_7 -# 2342| v2342_10(void) = ExitFunction : +# 2311| Block 9 +# 2311| r2311_42(glval) = VariableAddress[s2] : +# 2311| r2311_43(glval) = FunctionAddress[~String] : +# 2311| v2311_44(void) = Call[~String] : func:r2311_43, this:r2311_42 +# 2311| m2311_45(unknown) = ^CallSideEffect : ~m2311_24 +# 2311| m2311_46(unknown) = Chi : total:m2311_24, partial:m2311_45 +# 2311| v2311_47(void) = ^IndirectReadSideEffect[-1] : &:r2311_42, m2311_22 +# 2311| m2311_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_42 +# 2311| m2311_49(String) = Chi : total:m2311_22, partial:m2311_48 +# 2311| r2311_50(glval) = VariableAddress[s] : +# 2311| r2311_51(glval) = FunctionAddress[~String] : +# 2311| v2311_52(void) = Call[~String] : func:r2311_51, this:r2311_50 +# 2311| m2311_53(unknown) = ^CallSideEffect : ~m2311_46 +# 2311| m2311_54(unknown) = Chi : total:m2311_46, partial:m2311_53 +# 2311| v2311_55(void) = ^IndirectReadSideEffect[-1] : &:r2311_50, m2311_23 +# 2311| m2311_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_50 +# 2311| m2311_57(String) = Chi : total:m2311_23, partial:m2311_56 +# 2314| v2314_1(void) = NoOp : +# 2301| v2301_5(void) = ReturnVoid : +# 2301| v2301_6(void) = AliasedUse : ~m2311_54 +# 2301| v2301_7(void) = ExitFunction : -# 2345| Block 2 -# 2345| v2345_1(void) = NoOp : -# 2351| r2351_1(glval) = VariableAddress[s] : -# 2351| r2351_2(glval) = FunctionAddress[~String] : -# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 -# 2351| m2351_4(unknown) = ^CallSideEffect : ~m2343_6 -# 2351| m2351_5(unknown) = Chi : total:m2343_6, partial:m2351_4 -# 2351| v2351_6(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, m2343_8 -# 2351| m2351_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 -# 2351| m2351_8(String) = Chi : total:m2343_8, partial:m2351_7 -#-----| Goto -> Block 1 - -# 2347| Block 3 -# 2347| r2347_1(glval) = VariableAddress[b] : -# 2347| r2347_2(bool) = Load[b] : &:r2347_1, m2342_6 -# 2347| v2347_3(void) = ConditionalBranch : r2347_2 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 2348| Block 4 -# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : -# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 -# 2348| m2348_3(unknown) = ^CallSideEffect : ~m2343_6 -# 2348| m2348_4(unknown) = Chi : total:m2343_6, partial:m2348_3 -# 2348| v2348_5(void) = NoOp : -# 2351| r2351_9(glval) = VariableAddress[s] : -# 2351| r2351_10(glval) = FunctionAddress[~String] : -# 2351| v2351_11(void) = Call[~String] : func:r2351_10, this:r2351_9 -# 2351| m2351_12(unknown) = ^CallSideEffect : ~m2348_4 -# 2351| m2351_13(unknown) = Chi : total:m2348_4, partial:m2351_12 -# 2351| v2351_14(void) = ^IndirectReadSideEffect[-1] : &:r2351_9, m2343_8 -# 2351| m2351_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_9 -# 2351| m2351_16(String) = Chi : total:m2343_8, partial:m2351_15 -#-----| Goto -> Block 1 - -# 2350| Block 5 -# 2350| r2350_1(glval) = VariableAddress[s] : -# 2351| v2351_17(void) = NoOp : -# 2351| r2351_18(glval) = VariableAddress[s] : -# 2351| r2351_19(glval) = FunctionAddress[~String] : -# 2351| v2351_20(void) = Call[~String] : func:r2351_19, this:r2351_18 -# 2351| m2351_21(unknown) = ^CallSideEffect : ~m2343_6 -# 2351| m2351_22(unknown) = Chi : total:m2343_6, partial:m2351_21 -# 2351| v2351_23(void) = ^IndirectReadSideEffect[-1] : &:r2351_18, m2343_8 -# 2351| m2351_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_18 -# 2351| m2351_25(String) = Chi : total:m2343_8, partial:m2351_24 -#-----| Goto -> Block 1 - -# 2353| int IfReturnDestructors3(bool) -# 2353| Block 0 -# 2353| v2353_1(void) = EnterFunction : -# 2353| m2353_2(unknown) = AliasedDefinition : -# 2353| m2353_3(unknown) = InitializeNonLocal : -# 2353| m2353_4(unknown) = Chi : total:m2353_2, partial:m2353_3 -# 2353| r2353_5(glval) = VariableAddress[b] : -# 2353| m2353_6(bool) = InitializeParameter[b] : &:r2353_5 -# 2354| r2354_1(glval) = VariableAddress[s] : -# 2354| m2354_2(String) = Uninitialized[s] : &:r2354_1 -# 2354| r2354_3(glval) = FunctionAddress[String] : -# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 -# 2354| m2354_5(unknown) = ^CallSideEffect : ~m2353_4 -# 2354| m2354_6(unknown) = Chi : total:m2353_4, partial:m2354_5 -# 2354| m2354_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2354| m2354_8(String) = Chi : total:m2354_2, partial:m2354_7 -# 2355| r2355_1(glval) = VariableAddress[b] : -# 2355| r2355_2(bool) = Load[b] : &:r2355_1, m2353_6 -# 2355| v2355_3(void) = ConditionalBranch : r2355_2 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2353| Block 1 -# 2353| m2353_7(unknown) = Phi : from 2:~m2359_5, from 3:~m2359_13 -# 2353| m2353_8(int) = Phi : from 2:m2356_3, from 3:m2358_3 -# 2353| r2353_9(glval) = VariableAddress[#return] : -# 2353| v2353_10(void) = ReturnValue : &:r2353_9, m2353_8 -# 2353| v2353_11(void) = AliasedUse : ~m2353_7 -# 2353| v2353_12(void) = ExitFunction : - -# 2356| Block 2 -# 2356| r2356_1(glval) = VariableAddress[#return] : -# 2356| r2356_2(int) = Constant[1] : -# 2356| m2356_3(int) = Store[#return] : &:r2356_1, r2356_2 -# 2359| r2359_1(glval) = VariableAddress[s] : -# 2359| r2359_2(glval) = FunctionAddress[~String] : -# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 -# 2359| m2359_4(unknown) = ^CallSideEffect : ~m2354_6 -# 2359| m2359_5(unknown) = Chi : total:m2354_6, partial:m2359_4 -# 2359| v2359_6(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, m2354_8 -# 2359| m2359_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 -# 2359| m2359_8(String) = Chi : total:m2354_8, partial:m2359_7 -#-----| Goto -> Block 1 - -# 2358| Block 3 -# 2358| r2358_1(glval) = VariableAddress[#return] : -# 2358| r2358_2(int) = Constant[0] : -# 2358| m2358_3(int) = Store[#return] : &:r2358_1, r2358_2 -# 2359| r2359_9(glval) = VariableAddress[s] : -# 2359| r2359_10(glval) = FunctionAddress[~String] : -# 2359| v2359_11(void) = Call[~String] : func:r2359_10, this:r2359_9 -# 2359| m2359_12(unknown) = ^CallSideEffect : ~m2354_6 -# 2359| m2359_13(unknown) = Chi : total:m2354_6, partial:m2359_12 -# 2359| v2359_14(void) = ^IndirectReadSideEffect[-1] : &:r2359_9, m2354_8 -# 2359| m2359_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_9 -# 2359| m2359_16(String) = Chi : total:m2354_8, partial:m2359_15 -#-----| Goto -> Block 1 - -# 2361| void VoidReturnDestructors() -# 2361| Block 0 -# 2361| v2361_1(void) = EnterFunction : -# 2361| m2361_2(unknown) = AliasedDefinition : -# 2361| m2361_3(unknown) = InitializeNonLocal : -# 2361| m2361_4(unknown) = Chi : total:m2361_2, partial:m2361_3 -# 2362| r2362_1(glval) = VariableAddress[s] : -# 2362| m2362_2(String) = Uninitialized[s] : &:r2362_1 -# 2362| r2362_3(glval) = FunctionAddress[String] : -# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 -# 2362| m2362_5(unknown) = ^CallSideEffect : ~m2361_4 -# 2362| m2362_6(unknown) = Chi : total:m2361_4, partial:m2362_5 -# 2362| m2362_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 -# 2362| m2362_8(String) = Chi : total:m2362_2, partial:m2362_7 -# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : -# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 -# 2363| m2363_3(unknown) = ^CallSideEffect : ~m2362_6 -# 2363| m2363_4(unknown) = Chi : total:m2362_6, partial:m2363_3 -# 2363| v2363_5(void) = NoOp : -# 2364| r2364_1(glval) = VariableAddress[s] : -# 2364| r2364_2(glval) = FunctionAddress[~String] : -# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 -# 2364| m2364_4(unknown) = ^CallSideEffect : ~m2363_4 -# 2364| m2364_5(unknown) = Chi : total:m2363_4, partial:m2364_4 -# 2364| v2364_6(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, m2362_8 -# 2364| m2364_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 -# 2364| m2364_8(String) = Chi : total:m2362_8, partial:m2364_7 -# 2361| v2361_5(void) = ReturnVoid : -# 2361| v2361_6(void) = AliasedUse : ~m2364_5 -# 2361| v2361_7(void) = ExitFunction : - -# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| Block 0 -# 2374| v2374_1(void) = EnterFunction : -# 2374| m2374_2(unknown) = AliasedDefinition : -# 2374| m2374_3(unknown) = InitializeNonLocal : -# 2374| m2374_4(unknown) = Chi : total:m2374_2, partial:m2374_3 -# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : -# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2376| m2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 -# 2374| r2374_5(glval<..:: *>) = VariableAddress[#return] : -# 2374| v2374_6(void) = ReturnValue : &:r2374_5, m2376_3 -# 2374| v2374_7(void) = AliasedUse : m2374_3 -# 2374| v2374_8(void) = ExitFunction : - -# 2381| int small_operation_should_not_be_constant_folded() -# 2381| Block 0 -# 2381| v2381_1(void) = EnterFunction : -# 2381| m2381_2(unknown) = AliasedDefinition : -# 2381| m2381_3(unknown) = InitializeNonLocal : -# 2381| m2381_4(unknown) = Chi : total:m2381_2, partial:m2381_3 -# 2382| r2382_1(glval) = VariableAddress[#return] : -# 2382| r2382_2(int) = Constant[1] : -# 2382| r2382_3(int) = Constant[2] : -# 2382| r2382_4(int) = BitXor : r2382_2, r2382_3 -# 2382| m2382_5(int) = Store[#return] : &:r2382_1, r2382_4 -# 2381| r2381_5(glval) = VariableAddress[#return] : -# 2381| v2381_6(void) = ReturnValue : &:r2381_5, m2382_5 -# 2381| v2381_7(void) = AliasedUse : m2381_3 -# 2381| v2381_8(void) = ExitFunction : - -# 2392| int large_operation_should_be_constant_folded() -# 2392| Block 0 -# 2392| v2392_1(void) = EnterFunction : -# 2392| m2392_2(unknown) = AliasedDefinition : -# 2392| m2392_3(unknown) = InitializeNonLocal : -# 2392| m2392_4(unknown) = Chi : total:m2392_2, partial:m2392_3 -# 2393| r2393_1(glval) = VariableAddress[#return] : -# 2393| r2393_2(int) = Constant[0] : -# 2393| m2393_3(int) = Store[#return] : &:r2393_1, r2393_2 -# 2392| r2392_5(glval) = VariableAddress[#return] : -# 2392| v2392_6(void) = ReturnValue : &:r2392_5, m2393_3 -# 2392| v2392_7(void) = AliasedUse : m2392_3 -# 2392| v2392_8(void) = ExitFunction : - -# 2396| void initialization_with_temp_destructor() -# 2396| Block 0 -# 2396| v2396_1(void) = EnterFunction : -# 2396| m2396_2(unknown) = AliasedDefinition : -# 2396| m2396_3(unknown) = InitializeNonLocal : -# 2396| m2396_4(unknown) = Chi : total:m2396_2, partial:m2396_3 -# 2397| r2397_1(glval) = VariableAddress[x] : -# 2397| r2397_2(glval) = VariableAddress[#temp2397:18] : -# 2397| m2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2 -# 2397| r2397_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2 -# 2397| m2397_6(unknown) = ^CallSideEffect : ~m2396_4 -# 2397| m2397_7(unknown) = Chi : total:m2396_4, partial:m2397_6 -# 2397| m2397_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 -# 2397| m2397_9(ClassWithDestructor) = Chi : total:m2397_3, partial:m2397_8 -# 2397| r2397_10(glval) = FunctionAddress[get_x] : -# 2397| r2397_11(char) = Call[get_x] : func:r2397_10, this:r2397_2 -# 2397| m2397_12(unknown) = ^CallSideEffect : ~m2397_7 -# 2397| m2397_13(unknown) = Chi : total:m2397_7, partial:m2397_12 -# 2397| v2397_14(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, m2397_9 -# 2397| m2397_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 -# 2397| m2397_16(ClassWithDestructor) = Chi : total:m2397_9, partial:m2397_15 -# 2397| m2397_17(char) = Store[x] : &:r2397_1, r2397_11 -# 2397| r2397_18(glval) = VariableAddress[x] : -# 2397| r2397_19(char) = Load[x] : &:r2397_18, m2397_17 -# 2397| r2397_20(char) = Constant[0] : -# 2397| r2397_21(bool) = CompareNE : r2397_19, r2397_20 -# 2397| r2397_22(bool) = CopyValue : r2397_21 -# 2397| v2397_23(void) = ConditionalBranch : r2397_22 +# 2316| void IfDestructors2(bool) +# 2316| Block 0 +# 2316| v2316_1(void) = EnterFunction : +# 2316| m2316_2(unknown) = AliasedDefinition : +# 2316| m2316_3(unknown) = InitializeNonLocal : +# 2316| m2316_4(unknown) = Chi : total:m2316_2, partial:m2316_3 +# 2316| r2316_5(glval) = VariableAddress[b] : +# 2316| m2316_6(bool) = InitializeParameter[b] : &:r2316_5 +# 2317| r2317_1(glval) = VariableAddress[s] : +# 2317| m2317_2(String) = Uninitialized[s] : &:r2317_1 +# 2317| r2317_3(glval) = FunctionAddress[String] : +# 2317| r2317_4(glval) = StringConstant["hello"] : +# 2317| r2317_5(char *) = Convert : r2317_4 +# 2317| v2317_6(void) = Call[String] : func:r2317_3, this:r2317_1, 0:r2317_5 +# 2317| m2317_7(unknown) = ^CallSideEffect : ~m2316_4 +# 2317| m2317_8(unknown) = Chi : total:m2316_4, partial:m2317_7 +# 2317| v2317_9(void) = ^BufferReadSideEffect[0] : &:r2317_5, ~m2316_3 +# 2317| m2317_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 +# 2317| m2317_11(String) = Chi : total:m2317_2, partial:m2317_10 +# 2317| r2317_12(glval) = VariableAddress[b] : +# 2317| r2317_13(bool) = Load[b] : &:r2317_12, m2316_6 +# 2317| v2317_14(void) = ConditionalBranch : r2317_13 #-----| False -> Block 2 #-----| True -> Block 1 -# 2398| Block 1 -# 2398| r2398_1(glval) = VariableAddress[x] : -# 2398| r2398_2(char) = Load[x] : &:r2398_1, m2397_17 -# 2398| r2398_3(char) = Constant[1] : -# 2398| r2398_4(char) = Add : r2398_2, r2398_3 -# 2398| m2398_5(char) = Store[x] : &:r2398_1, r2398_4 -#-----| Goto -> Block 2 +# 2318| Block 1 +# 2318| r2318_1(glval) = VariableAddress[x] : +# 2318| r2318_2(int) = Constant[0] : +# 2318| m2318_3(int) = Store[x] : &:r2318_1, r2318_2 +#-----| Goto -> Block 3 -# 2400| Block 2 -# 2400| r2400_1(glval) = VariableAddress[x] : -# 2400| r2400_2(glval) = VariableAddress[#temp2400:18] : -# 2400| m2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2 -# 2400| r2400_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2 -# 2400| m2400_6(unknown) = ^CallSideEffect : ~m2397_13 -# 2400| m2400_7(unknown) = Chi : total:m2397_13, partial:m2400_6 -# 2400| m2400_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 -# 2400| m2400_9(ClassWithDestructor) = Chi : total:m2400_3, partial:m2400_8 -# 2400| r2400_10(glval) = FunctionAddress[get_x] : -# 2400| r2400_11(char) = Call[get_x] : func:r2400_10, this:r2400_2 -# 2400| m2400_12(unknown) = ^CallSideEffect : ~m2400_7 -# 2400| m2400_13(unknown) = Chi : total:m2400_7, partial:m2400_12 -# 2400| v2400_14(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, m2400_9 -# 2400| m2400_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 -# 2400| m2400_16(ClassWithDestructor) = Chi : total:m2400_9, partial:m2400_15 -# 2400| m2400_17(char) = Store[x] : &:r2400_1, r2400_11 -# 2400| r2400_18(glval) = VariableAddress[x] : -# 2400| r2400_19(char) = Load[x] : &:r2400_18, m2400_17 -# 2400| r2400_20(char) = Constant[0] : -# 2400| r2400_21(bool) = CompareNE : r2400_19, r2400_20 -# 2400| v2400_22(void) = ConditionalBranch : r2400_21 -#-----| False -> Block 4 -#-----| True -> Block 3 +# 2320| Block 2 +# 2320| r2320_1(glval) = VariableAddress[y] : +# 2320| r2320_2(int) = Constant[0] : +# 2320| m2320_3(int) = Store[y] : &:r2320_1, r2320_2 +#-----| Goto -> Block 3 -# 2401| Block 3 -# 2401| r2401_1(glval) = VariableAddress[x] : -# 2401| r2401_2(char) = Load[x] : &:r2401_1, m2400_17 -# 2401| r2401_3(char) = Constant[1] : -# 2401| r2401_4(char) = Add : r2401_2, r2401_3 -# 2401| m2401_5(char) = Store[x] : &:r2401_1, r2401_4 +# 2321| Block 3 +# 2321| r2321_1(glval) = VariableAddress[s] : +# 2321| r2321_2(glval) = FunctionAddress[~String] : +# 2321| v2321_3(void) = Call[~String] : func:r2321_2, this:r2321_1 +# 2321| m2321_4(unknown) = ^CallSideEffect : ~m2317_8 +# 2321| m2321_5(unknown) = Chi : total:m2317_8, partial:m2321_4 +# 2321| v2321_6(void) = ^IndirectReadSideEffect[-1] : &:r2321_1, m2317_11 +# 2321| m2321_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2321| m2321_8(String) = Chi : total:m2317_11, partial:m2321_7 +# 2322| v2322_1(void) = NoOp : +# 2316| v2316_7(void) = ReturnVoid : +# 2316| v2316_8(void) = AliasedUse : ~m2321_5 +# 2316| v2316_9(void) = ExitFunction : + +# 2331| void IfDestructors3(bool) +# 2331| Block 0 +# 2331| v2331_1(void) = EnterFunction : +# 2331| m2331_2(unknown) = AliasedDefinition : +# 2331| m2331_3(unknown) = InitializeNonLocal : +# 2331| m2331_4(unknown) = Chi : total:m2331_2, partial:m2331_3 +# 2331| r2331_5(glval) = VariableAddress[b] : +# 2331| m2331_6(bool) = InitializeParameter[b] : &:r2331_5 +# 2332| r2332_1(glval) = VariableAddress[B] : +# 2332| m2332_2(Bool) = Uninitialized[B] : &:r2332_1 +# 2332| r2332_3(glval) = FunctionAddress[Bool] : +# 2332| r2332_4(glval) = VariableAddress[b] : +# 2332| r2332_5(bool) = Load[b] : &:r2332_4, m2331_6 +# 2332| v2332_6(void) = Call[Bool] : func:r2332_3, this:r2332_1, 0:r2332_5 +# 2332| m2332_7(unknown) = ^CallSideEffect : ~m2331_4 +# 2332| m2332_8(unknown) = Chi : total:m2331_4, partial:m2332_7 +# 2332| m2332_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 +# 2332| m2332_10(Bool) = Chi : total:m2332_2, partial:m2332_9 +# 2332| r2332_11(glval) = VariableAddress[B] : +# 2332| r2332_12(glval) = FunctionAddress[operator bool] : +# 2332| r2332_13(bool) = Call[operator bool] : func:r2332_12, this:r2332_11 +# 2332| m2332_14(unknown) = ^CallSideEffect : ~m2332_8 +# 2332| m2332_15(unknown) = Chi : total:m2332_8, partial:m2332_14 +# 2332| v2332_16(void) = ^IndirectReadSideEffect[-1] : &:r2332_11, m2332_10 +# 2332| m2332_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_11 +# 2332| m2332_18(Bool) = Chi : total:m2332_10, partial:m2332_17 +# 2332| r2332_19(bool) = CopyValue : r2332_13 +# 2332| v2332_20(void) = ConditionalBranch : r2332_19 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2333| Block 1 +# 2333| r2333_1(glval) = VariableAddress[s1] : +# 2333| m2333_2(String) = Uninitialized[s1] : &:r2333_1 +# 2333| r2333_3(glval) = FunctionAddress[String] : +# 2333| v2333_4(void) = Call[String] : func:r2333_3, this:r2333_1 +# 2333| m2333_5(unknown) = ^CallSideEffect : ~m2332_15 +# 2333| m2333_6(unknown) = Chi : total:m2332_15, partial:m2333_5 +# 2333| m2333_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 +# 2333| m2333_8(String) = Chi : total:m2333_2, partial:m2333_7 +# 2334| r2334_1(glval) = VariableAddress[s1] : +# 2334| r2334_2(glval) = FunctionAddress[~String] : +# 2334| v2334_3(void) = Call[~String] : func:r2334_2, this:r2334_1 +# 2334| m2334_4(unknown) = ^CallSideEffect : ~m2333_6 +# 2334| m2334_5(unknown) = Chi : total:m2333_6, partial:m2334_4 +# 2334| v2334_6(void) = ^IndirectReadSideEffect[-1] : &:r2334_1, m2333_8 +# 2334| m2334_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 +# 2334| m2334_8(String) = Chi : total:m2333_8, partial:m2334_7 +#-----| Goto -> Block 3 + +# 2335| Block 2 +# 2335| r2335_1(glval) = VariableAddress[s2] : +# 2335| m2335_2(String) = Uninitialized[s2] : &:r2335_1 +# 2335| r2335_3(glval) = FunctionAddress[String] : +# 2335| v2335_4(void) = Call[String] : func:r2335_3, this:r2335_1 +# 2335| m2335_5(unknown) = ^CallSideEffect : ~m2332_15 +# 2335| m2335_6(unknown) = Chi : total:m2332_15, partial:m2335_5 +# 2335| m2335_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 +# 2335| m2335_8(String) = Chi : total:m2335_2, partial:m2335_7 +# 2336| r2336_1(glval) = VariableAddress[s2] : +# 2336| r2336_2(glval) = FunctionAddress[~String] : +# 2336| v2336_3(void) = Call[~String] : func:r2336_2, this:r2336_1 +# 2336| m2336_4(unknown) = ^CallSideEffect : ~m2335_6 +# 2336| m2336_5(unknown) = Chi : total:m2335_6, partial:m2336_4 +# 2336| v2336_6(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, m2335_8 +# 2336| m2336_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +# 2336| m2336_8(String) = Chi : total:m2335_8, partial:m2336_7 +#-----| Goto -> Block 3 + +# 2336| Block 3 +# 2336| m2336_9(unknown) = Phi : from 1:~m2334_5, from 2:~m2336_5 +# 2336| r2336_10(glval) = VariableAddress[B] : +# 2336| r2336_11(glval) = FunctionAddress[~Bool] : +# 2336| v2336_12(void) = Call[~Bool] : func:r2336_11, this:r2336_10 +# 2336| m2336_13(unknown) = ^CallSideEffect : ~m2336_9 +# 2336| m2336_14(unknown) = Chi : total:m2336_9, partial:m2336_13 +# 2336| v2336_15(void) = ^IndirectReadSideEffect[-1] : &:r2336_10, m2332_18 +# 2336| m2336_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_10 +# 2336| m2336_17(Bool) = Chi : total:m2332_18, partial:m2336_16 +# 2337| v2337_1(void) = NoOp : +# 2331| v2331_7(void) = ReturnVoid : +# 2331| v2331_8(void) = AliasedUse : ~m2336_14 +# 2331| v2331_9(void) = ExitFunction : + +# 2339| void WhileLoopDestructors(bool) +# 2339| Block 0 +# 2339| v2339_1(void) = EnterFunction : +# 2339| m2339_2(unknown) = AliasedDefinition : +# 2339| m2339_3(unknown) = InitializeNonLocal : +# 2339| m2339_4(unknown) = Chi : total:m2339_2, partial:m2339_3 +# 2339| r2339_5(glval) = VariableAddress[b] : +# 2339| m2339_6(bool) = InitializeParameter[b] : &:r2339_5 +# 2341| r2341_1(glval) = VariableAddress[s] : +# 2341| m2341_2(String) = Uninitialized[s] : &:r2341_1 +# 2341| r2341_3(glval) = FunctionAddress[String] : +# 2341| v2341_4(void) = Call[String] : func:r2341_3, this:r2341_1 +# 2341| m2341_5(unknown) = ^CallSideEffect : ~m2339_4 +# 2341| m2341_6(unknown) = Chi : total:m2339_4, partial:m2341_5 +# 2341| m2341_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2341_1 +# 2341| m2341_8(String) = Chi : total:m2341_2, partial:m2341_7 +#-----| Goto -> Block 1 + +# 2342| Block 1 +# 2342| m2342_1(bool) = Phi : from 0:m2339_6, from 2:m2343_3 +# 2342| r2342_2(glval) = VariableAddress[b] : +# 2342| r2342_3(bool) = Load[b] : &:r2342_2, m2342_1 +# 2342| v2342_4(void) = ConditionalBranch : r2342_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2343| Block 2 +# 2343| r2343_1(bool) = Constant[0] : +# 2343| r2343_2(glval) = VariableAddress[b] : +# 2343| m2343_3(bool) = Store[b] : &:r2343_2, r2343_1 +#-----| Goto (back edge) -> Block 1 + +# 2345| Block 3 +# 2345| r2345_1(glval) = VariableAddress[s] : +# 2345| r2345_2(glval) = FunctionAddress[~String] : +# 2345| v2345_3(void) = Call[~String] : func:r2345_2, this:r2345_1 +# 2345| m2345_4(unknown) = ^CallSideEffect : ~m2341_6 +# 2345| m2345_5(unknown) = Chi : total:m2341_6, partial:m2345_4 +# 2345| v2345_6(void) = ^IndirectReadSideEffect[-1] : &:r2345_1, m2341_8 +# 2345| m2345_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2345_1 +# 2345| m2345_8(String) = Chi : total:m2341_8, partial:m2345_7 #-----| Goto -> Block 4 -# 2403| Block 4 -# 2403| r2403_1(glval) = VariableAddress[x] : -# 2403| r2403_2(glval) = VariableAddress[#temp2403:28] : -# 2403| m2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2 -# 2403| r2403_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2 -# 2403| m2403_6(unknown) = ^CallSideEffect : ~m2400_13 -# 2403| m2403_7(unknown) = Chi : total:m2400_13, partial:m2403_6 -# 2403| m2403_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 -# 2403| m2403_9(ClassWithDestructor) = Chi : total:m2403_3, partial:m2403_8 -# 2403| r2403_10(glval) = FunctionAddress[get_x] : -# 2403| r2403_11(char) = Call[get_x] : func:r2403_10, this:r2403_2 -# 2403| m2403_12(unknown) = ^CallSideEffect : ~m2403_7 -# 2403| m2403_13(unknown) = Chi : total:m2403_7, partial:m2403_12 -# 2403| v2403_14(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, m2403_9 -# 2403| m2403_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 -# 2403| m2403_16(ClassWithDestructor) = Chi : total:m2403_9, partial:m2403_15 -# 2403| m2403_17(char) = Store[x] : &:r2403_1, r2403_11 -# 2403| r2403_18(bool) = Constant[1] : -# 2403| v2403_19(void) = ConditionalBranch : r2403_18 -#-----| False -> Block 13 +# 2348| Block 4 +# 2348| m2348_1(unknown) = Phi : from 3:~m2345_5, from 5:~m2350_5 +# 2348| m2348_2(bool) = Phi : from 3:m2342_1, from 5:m2349_3 +# 2348| r2348_3(glval) = VariableAddress[B] : +# 2348| m2348_4(Bool) = Uninitialized[B] : &:r2348_3 +# 2348| r2348_5(glval) = FunctionAddress[Bool] : +# 2348| r2348_6(glval) = VariableAddress[b] : +# 2348| r2348_7(bool) = Load[b] : &:r2348_6, m2348_2 +# 2348| v2348_8(void) = Call[Bool] : func:r2348_5, this:r2348_3, 0:r2348_7 +# 2348| m2348_9(unknown) = ^CallSideEffect : ~m2348_1 +# 2348| m2348_10(unknown) = Chi : total:m2348_1, partial:m2348_9 +# 2348| m2348_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_3 +# 2348| m2348_12(Bool) = Chi : total:m2348_4, partial:m2348_11 +# 2348| r2348_13(glval) = VariableAddress[B] : +# 2348| r2348_14(glval) = FunctionAddress[operator bool] : +# 2348| r2348_15(bool) = Call[operator bool] : func:r2348_14, this:r2348_13 +# 2348| m2348_16(unknown) = ^CallSideEffect : ~m2348_10 +# 2348| m2348_17(unknown) = Chi : total:m2348_10, partial:m2348_16 +# 2348| v2348_18(void) = ^IndirectReadSideEffect[-1] : &:r2348_13, m2348_12 +# 2348| m2348_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_13 +# 2348| m2348_20(Bool) = Chi : total:m2348_12, partial:m2348_19 +# 2348| r2348_21(bool) = CopyValue : r2348_15 +# 2348| v2348_22(void) = ConditionalBranch : r2348_21 +#-----| False -> Block 6 #-----| True -> Block 5 -# 2404| Block 5 -# 2404| r2404_1(glval) = VariableAddress[x] : -# 2404| r2404_2(char) = Load[x] : &:r2404_1, m2403_17 -# 2404| r2404_3(char) = Constant[1] : -# 2404| r2404_4(char) = Add : r2404_2, r2404_3 -# 2404| m2404_5(char) = Store[x] : &:r2404_1, r2404_4 -# 2406| r2406_1(glval) = VariableAddress[x] : -# 2406| r2406_2(glval) = VariableAddress[#temp2406:21] : -# 2406| m2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2 -# 2406| r2406_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2 -# 2406| m2406_6(unknown) = ^CallSideEffect : ~m2403_13 -# 2406| m2406_7(unknown) = Chi : total:m2403_13, partial:m2406_6 -# 2406| m2406_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 -# 2406| m2406_9(ClassWithDestructor) = Chi : total:m2406_3, partial:m2406_8 -# 2406| r2406_10(glval) = FunctionAddress[get_x] : -# 2406| r2406_11(char) = Call[get_x] : func:r2406_10, this:r2406_2 -# 2406| m2406_12(unknown) = ^CallSideEffect : ~m2406_7 -# 2406| m2406_13(unknown) = Chi : total:m2406_7, partial:m2406_12 -# 2406| v2406_14(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, m2406_9 -# 2406| m2406_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 -# 2406| m2406_16(ClassWithDestructor) = Chi : total:m2406_9, partial:m2406_15 -# 2406| m2406_17(char) = Store[x] : &:r2406_1, r2406_11 -# 2406| r2406_18(glval) = VariableAddress[x] : -# 2406| r2406_19(char) = Load[x] : &:r2406_18, m2406_17 -# 2406| r2406_20(int) = Convert : r2406_19 -# 2406| r2406_21(int) = CopyValue : r2406_20 -# 2406| v2406_22(void) = Switch : r2406_21 -#-----| Case[97] -> Block 6 -#-----| Default -> Block 7 +# 2349| Block 5 +# 2349| r2349_1(bool) = Constant[0] : +# 2349| r2349_2(glval) = VariableAddress[b] : +# 2349| m2349_3(bool) = Store[b] : &:r2349_2, r2349_1 +# 2350| r2350_1(glval) = VariableAddress[B] : +# 2350| r2350_2(glval) = FunctionAddress[~Bool] : +# 2350| v2350_3(void) = Call[~Bool] : func:r2350_2, this:r2350_1 +# 2350| m2350_4(unknown) = ^CallSideEffect : ~m2348_17 +# 2350| m2350_5(unknown) = Chi : total:m2348_17, partial:m2350_4 +# 2350| v2350_6(void) = ^IndirectReadSideEffect[-1] : &:r2350_1, m2348_20 +# 2350| m2350_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 +# 2350| m2350_8(Bool) = Chi : total:m2348_20, partial:m2350_7 +#-----| Goto (back edge) -> Block 4 -# 2407| Block 6 -# 2407| v2407_1(void) = NoOp : -# 2408| r2408_1(glval) = VariableAddress[x] : -# 2408| r2408_2(char) = Load[x] : &:r2408_1, m2406_17 -# 2408| r2408_3(char) = Constant[1] : -# 2408| r2408_4(char) = Add : r2408_2, r2408_3 -# 2408| m2408_5(char) = Store[x] : &:r2408_1, r2408_4 -#-----| Goto -> Block 7 +# 2350| Block 6 +# 2350| r2350_9(glval) = VariableAddress[B] : +# 2350| r2350_10(glval) = FunctionAddress[~Bool] : +# 2350| v2350_11(void) = Call[~Bool] : func:r2350_10, this:r2350_9 +# 2350| m2350_12(unknown) = ^CallSideEffect : ~m2348_17 +# 2350| m2350_13(unknown) = Chi : total:m2348_17, partial:m2350_12 +# 2350| v2350_14(void) = ^IndirectReadSideEffect[-1] : &:r2350_9, m2348_20 +# 2350| m2350_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_9 +# 2350| m2350_16(Bool) = Chi : total:m2348_20, partial:m2350_15 +# 2352| v2352_1(void) = NoOp : +# 2339| v2339_7(void) = ReturnVoid : +# 2339| v2339_8(void) = AliasedUse : ~m2350_13 +# 2339| v2339_9(void) = ExitFunction : -# 2411| Block 7 +# 2354| void VoidFunc() +# 2354| Block 0 +# 2354| v2354_1(void) = EnterFunction : +# 2354| m2354_2(unknown) = AliasedDefinition : +# 2354| m2354_3(unknown) = InitializeNonLocal : +# 2354| m2354_4(unknown) = Chi : total:m2354_2, partial:m2354_3 +# 2354| v2354_5(void) = NoOp : +# 2354| v2354_6(void) = ReturnVoid : +# 2354| v2354_7(void) = AliasedUse : m2354_3 +# 2354| v2354_8(void) = ExitFunction : + +# 2356| void IfReturnDestructors(bool) +# 2356| Block 0 +# 2356| v2356_1(void) = EnterFunction : +# 2356| m2356_2(unknown) = AliasedDefinition : +# 2356| m2356_3(unknown) = InitializeNonLocal : +# 2356| m2356_4(unknown) = Chi : total:m2356_2, partial:m2356_3 +# 2356| r2356_5(glval) = VariableAddress[b] : +# 2356| m2356_6(bool) = InitializeParameter[b] : &:r2356_5 +# 2357| r2357_1(glval) = VariableAddress[s] : +# 2357| m2357_2(String) = Uninitialized[s] : &:r2357_1 +# 2357| r2357_3(glval) = FunctionAddress[String] : +# 2357| v2357_4(void) = Call[String] : func:r2357_3, this:r2357_1 +# 2357| m2357_5(unknown) = ^CallSideEffect : ~m2356_4 +# 2357| m2357_6(unknown) = Chi : total:m2356_4, partial:m2357_5 +# 2357| m2357_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 +# 2357| m2357_8(String) = Chi : total:m2357_2, partial:m2357_7 +# 2358| r2358_1(glval) = VariableAddress[b] : +# 2358| r2358_2(bool) = Load[b] : &:r2358_1, m2356_6 +# 2358| v2358_3(void) = ConditionalBranch : r2358_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2356| Block 1 +# 2356| m2356_7(unknown) = Phi : from 2:~m2365_5, from 4:~m2365_13, from 5:~m2365_22 +# 2356| v2356_8(void) = ReturnVoid : +# 2356| v2356_9(void) = AliasedUse : ~m2356_7 +# 2356| v2356_10(void) = ExitFunction : + +# 2359| Block 2 +# 2359| v2359_1(void) = NoOp : +# 2365| r2365_1(glval) = VariableAddress[s] : +# 2365| r2365_2(glval) = FunctionAddress[~String] : +# 2365| v2365_3(void) = Call[~String] : func:r2365_2, this:r2365_1 +# 2365| m2365_4(unknown) = ^CallSideEffect : ~m2357_6 +# 2365| m2365_5(unknown) = Chi : total:m2357_6, partial:m2365_4 +# 2365| v2365_6(void) = ^IndirectReadSideEffect[-1] : &:r2365_1, m2357_8 +# 2365| m2365_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 +# 2365| m2365_8(String) = Chi : total:m2357_8, partial:m2365_7 +#-----| Goto -> Block 1 + +# 2361| Block 3 +# 2361| r2361_1(glval) = VariableAddress[b] : +# 2361| r2361_2(bool) = Load[b] : &:r2361_1, m2356_6 +# 2361| v2361_3(void) = ConditionalBranch : r2361_2 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 2362| Block 4 +# 2362| r2362_1(glval) = FunctionAddress[VoidFunc] : +# 2362| v2362_2(void) = Call[VoidFunc] : func:r2362_1 +# 2362| m2362_3(unknown) = ^CallSideEffect : ~m2357_6 +# 2362| m2362_4(unknown) = Chi : total:m2357_6, partial:m2362_3 +# 2362| v2362_5(void) = NoOp : +# 2365| r2365_9(glval) = VariableAddress[s] : +# 2365| r2365_10(glval) = FunctionAddress[~String] : +# 2365| v2365_11(void) = Call[~String] : func:r2365_10, this:r2365_9 +# 2365| m2365_12(unknown) = ^CallSideEffect : ~m2362_4 +# 2365| m2365_13(unknown) = Chi : total:m2362_4, partial:m2365_12 +# 2365| v2365_14(void) = ^IndirectReadSideEffect[-1] : &:r2365_9, m2357_8 +# 2365| m2365_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_9 +# 2365| m2365_16(String) = Chi : total:m2357_8, partial:m2365_15 +#-----| Goto -> Block 1 + +# 2364| Block 5 +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2365| v2365_17(void) = NoOp : +# 2365| r2365_18(glval) = VariableAddress[s] : +# 2365| r2365_19(glval) = FunctionAddress[~String] : +# 2365| v2365_20(void) = Call[~String] : func:r2365_19, this:r2365_18 +# 2365| m2365_21(unknown) = ^CallSideEffect : ~m2357_6 +# 2365| m2365_22(unknown) = Chi : total:m2357_6, partial:m2365_21 +# 2365| v2365_23(void) = ^IndirectReadSideEffect[-1] : &:r2365_18, m2357_8 +# 2365| m2365_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_18 +# 2365| m2365_25(String) = Chi : total:m2357_8, partial:m2365_24 +#-----| Goto -> Block 1 + +# 2367| int IfReturnDestructors3(bool) +# 2367| Block 0 +# 2367| v2367_1(void) = EnterFunction : +# 2367| m2367_2(unknown) = AliasedDefinition : +# 2367| m2367_3(unknown) = InitializeNonLocal : +# 2367| m2367_4(unknown) = Chi : total:m2367_2, partial:m2367_3 +# 2367| r2367_5(glval) = VariableAddress[b] : +# 2367| m2367_6(bool) = InitializeParameter[b] : &:r2367_5 +# 2368| r2368_1(glval) = VariableAddress[s] : +# 2368| m2368_2(String) = Uninitialized[s] : &:r2368_1 +# 2368| r2368_3(glval) = FunctionAddress[String] : +# 2368| v2368_4(void) = Call[String] : func:r2368_3, this:r2368_1 +# 2368| m2368_5(unknown) = ^CallSideEffect : ~m2367_4 +# 2368| m2368_6(unknown) = Chi : total:m2367_4, partial:m2368_5 +# 2368| m2368_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 +# 2368| m2368_8(String) = Chi : total:m2368_2, partial:m2368_7 +# 2369| r2369_1(glval) = VariableAddress[b] : +# 2369| r2369_2(bool) = Load[b] : &:r2369_1, m2367_6 +# 2369| v2369_3(void) = ConditionalBranch : r2369_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2367| Block 1 +# 2367| m2367_7(unknown) = Phi : from 2:~m2373_5, from 3:~m2373_13 +# 2367| m2367_8(int) = Phi : from 2:m2370_3, from 3:m2372_3 +# 2367| r2367_9(glval) = VariableAddress[#return] : +# 2367| v2367_10(void) = ReturnValue : &:r2367_9, m2367_8 +# 2367| v2367_11(void) = AliasedUse : ~m2367_7 +# 2367| v2367_12(void) = ExitFunction : + +# 2370| Block 2 +# 2370| r2370_1(glval) = VariableAddress[#return] : +# 2370| r2370_2(int) = Constant[1] : +# 2370| m2370_3(int) = Store[#return] : &:r2370_1, r2370_2 +# 2373| r2373_1(glval) = VariableAddress[s] : +# 2373| r2373_2(glval) = FunctionAddress[~String] : +# 2373| v2373_3(void) = Call[~String] : func:r2373_2, this:r2373_1 +# 2373| m2373_4(unknown) = ^CallSideEffect : ~m2368_6 +# 2373| m2373_5(unknown) = Chi : total:m2368_6, partial:m2373_4 +# 2373| v2373_6(void) = ^IndirectReadSideEffect[-1] : &:r2373_1, m2368_8 +# 2373| m2373_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_1 +# 2373| m2373_8(String) = Chi : total:m2368_8, partial:m2373_7 +#-----| Goto -> Block 1 + +# 2372| Block 3 +# 2372| r2372_1(glval) = VariableAddress[#return] : +# 2372| r2372_2(int) = Constant[0] : +# 2372| m2372_3(int) = Store[#return] : &:r2372_1, r2372_2 +# 2373| r2373_9(glval) = VariableAddress[s] : +# 2373| r2373_10(glval) = FunctionAddress[~String] : +# 2373| v2373_11(void) = Call[~String] : func:r2373_10, this:r2373_9 +# 2373| m2373_12(unknown) = ^CallSideEffect : ~m2368_6 +# 2373| m2373_13(unknown) = Chi : total:m2368_6, partial:m2373_12 +# 2373| v2373_14(void) = ^IndirectReadSideEffect[-1] : &:r2373_9, m2368_8 +# 2373| m2373_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_9 +# 2373| m2373_16(String) = Chi : total:m2368_8, partial:m2373_15 +#-----| Goto -> Block 1 + +# 2375| void VoidReturnDestructors() +# 2375| Block 0 +# 2375| v2375_1(void) = EnterFunction : +# 2375| m2375_2(unknown) = AliasedDefinition : +# 2375| m2375_3(unknown) = InitializeNonLocal : +# 2375| m2375_4(unknown) = Chi : total:m2375_2, partial:m2375_3 +# 2376| r2376_1(glval) = VariableAddress[s] : +# 2376| m2376_2(String) = Uninitialized[s] : &:r2376_1 +# 2376| r2376_3(glval) = FunctionAddress[String] : +# 2376| v2376_4(void) = Call[String] : func:r2376_3, this:r2376_1 +# 2376| m2376_5(unknown) = ^CallSideEffect : ~m2375_4 +# 2376| m2376_6(unknown) = Chi : total:m2375_4, partial:m2376_5 +# 2376| m2376_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 +# 2376| m2376_8(String) = Chi : total:m2376_2, partial:m2376_7 +# 2377| r2377_1(glval) = FunctionAddress[VoidFunc] : +# 2377| v2377_2(void) = Call[VoidFunc] : func:r2377_1 +# 2377| m2377_3(unknown) = ^CallSideEffect : ~m2376_6 +# 2377| m2377_4(unknown) = Chi : total:m2376_6, partial:m2377_3 +# 2377| v2377_5(void) = NoOp : +# 2378| r2378_1(glval) = VariableAddress[s] : +# 2378| r2378_2(glval) = FunctionAddress[~String] : +# 2378| v2378_3(void) = Call[~String] : func:r2378_2, this:r2378_1 +# 2378| m2378_4(unknown) = ^CallSideEffect : ~m2377_4 +# 2378| m2378_5(unknown) = Chi : total:m2377_4, partial:m2378_4 +# 2378| v2378_6(void) = ^IndirectReadSideEffect[-1] : &:r2378_1, m2376_8 +# 2378| m2378_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2378_1 +# 2378| m2378_8(String) = Chi : total:m2376_8, partial:m2378_7 +# 2375| v2375_5(void) = ReturnVoid : +# 2375| v2375_6(void) = AliasedUse : ~m2378_5 +# 2375| v2375_7(void) = ExitFunction : + +# 2388| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| Block 0 +# 2388| v2388_1(void) = EnterFunction : +# 2388| m2388_2(unknown) = AliasedDefinition : +# 2388| m2388_3(unknown) = InitializeNonLocal : +# 2388| m2388_4(unknown) = Chi : total:m2388_2, partial:m2388_3 +# 2390| r2390_1(glval<..:: *>) = VariableAddress[#return] : +# 2390| r2390_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2390| m2390_3(..:: *) = Store[#return] : &:r2390_1, r2390_2 +# 2388| r2388_5(glval<..:: *>) = VariableAddress[#return] : +# 2388| v2388_6(void) = ReturnValue : &:r2388_5, m2390_3 +# 2388| v2388_7(void) = AliasedUse : m2388_3 +# 2388| v2388_8(void) = ExitFunction : + +# 2395| int small_operation_should_not_be_constant_folded() +# 2395| Block 0 +# 2395| v2395_1(void) = EnterFunction : +# 2395| m2395_2(unknown) = AliasedDefinition : +# 2395| m2395_3(unknown) = InitializeNonLocal : +# 2395| m2395_4(unknown) = Chi : total:m2395_2, partial:m2395_3 +# 2396| r2396_1(glval) = VariableAddress[#return] : +# 2396| r2396_2(int) = Constant[1] : +# 2396| r2396_3(int) = Constant[2] : +# 2396| r2396_4(int) = BitXor : r2396_2, r2396_3 +# 2396| m2396_5(int) = Store[#return] : &:r2396_1, r2396_4 +# 2395| r2395_5(glval) = VariableAddress[#return] : +# 2395| v2395_6(void) = ReturnValue : &:r2395_5, m2396_5 +# 2395| v2395_7(void) = AliasedUse : m2395_3 +# 2395| v2395_8(void) = ExitFunction : + +# 2406| int large_operation_should_be_constant_folded() +# 2406| Block 0 +# 2406| v2406_1(void) = EnterFunction : +# 2406| m2406_2(unknown) = AliasedDefinition : +# 2406| m2406_3(unknown) = InitializeNonLocal : +# 2406| m2406_4(unknown) = Chi : total:m2406_2, partial:m2406_3 +# 2407| r2407_1(glval) = VariableAddress[#return] : +# 2407| r2407_2(int) = Constant[0] : +# 2407| m2407_3(int) = Store[#return] : &:r2407_1, r2407_2 +# 2406| r2406_5(glval) = VariableAddress[#return] : +# 2406| v2406_6(void) = ReturnValue : &:r2406_5, m2407_3 +# 2406| v2406_7(void) = AliasedUse : m2406_3 +# 2406| v2406_8(void) = ExitFunction : + +# 2410| void initialization_with_temp_destructor() +# 2410| Block 0 +# 2410| v2410_1(void) = EnterFunction : +# 2410| m2410_2(unknown) = AliasedDefinition : +# 2410| m2410_3(unknown) = InitializeNonLocal : +# 2410| m2410_4(unknown) = Chi : total:m2410_2, partial:m2410_3 # 2411| r2411_1(glval) = VariableAddress[x] : -# 2411| r2411_2(glval) = VariableAddress[#temp2411:21] : -# 2411| m2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2 +# 2411| r2411_2(glval) = VariableAddress[#temp2411:18] : +# 2411| m2411_3(ClassWithDestructor) = Uninitialized[#temp2411:18] : &:r2411_2 # 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : # 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 -# 2411| m2411_6(unknown) = ^CallSideEffect : ~m2406_13 -# 2411| m2411_7(unknown) = Chi : total:m2406_13, partial:m2411_6 +# 2411| m2411_6(unknown) = ^CallSideEffect : ~m2410_4 +# 2411| m2411_7(unknown) = Chi : total:m2410_4, partial:m2411_6 # 2411| m2411_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2 # 2411| m2411_9(ClassWithDestructor) = Chi : total:m2411_3, partial:m2411_8 # 2411| r2411_10(glval) = FunctionAddress[get_x] : @@ -15410,137 +15319,269 @@ ir.cpp: # 2411| m2411_17(char) = Store[x] : &:r2411_1, r2411_11 # 2411| r2411_18(glval) = VariableAddress[x] : # 2411| r2411_19(char) = Load[x] : &:r2411_18, m2411_17 -# 2411| r2411_20(int) = Convert : r2411_19 -# 2411| v2411_21(void) = Switch : r2411_20 +# 2411| r2411_20(char) = Constant[0] : +# 2411| r2411_21(bool) = CompareNE : r2411_19, r2411_20 +# 2411| r2411_22(bool) = CopyValue : r2411_21 +# 2411| v2411_23(void) = ConditionalBranch : r2411_22 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2412| Block 1 +# 2412| r2412_1(glval) = VariableAddress[x] : +# 2412| r2412_2(char) = Load[x] : &:r2412_1, m2411_17 +# 2412| r2412_3(char) = Constant[1] : +# 2412| r2412_4(char) = Add : r2412_2, r2412_3 +# 2412| m2412_5(char) = Store[x] : &:r2412_1, r2412_4 +#-----| Goto -> Block 2 + +# 2414| Block 2 +# 2414| r2414_1(glval) = VariableAddress[x] : +# 2414| r2414_2(glval) = VariableAddress[#temp2414:18] : +# 2414| m2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 +# 2414| r2414_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2414| v2414_5(void) = Call[ClassWithDestructor] : func:r2414_4, this:r2414_2 +# 2414| m2414_6(unknown) = ^CallSideEffect : ~m2411_13 +# 2414| m2414_7(unknown) = Chi : total:m2411_13, partial:m2414_6 +# 2414| m2414_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| m2414_9(ClassWithDestructor) = Chi : total:m2414_3, partial:m2414_8 +# 2414| r2414_10(glval) = FunctionAddress[get_x] : +# 2414| r2414_11(char) = Call[get_x] : func:r2414_10, this:r2414_2 +# 2414| m2414_12(unknown) = ^CallSideEffect : ~m2414_7 +# 2414| m2414_13(unknown) = Chi : total:m2414_7, partial:m2414_12 +# 2414| v2414_14(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, m2414_9 +# 2414| m2414_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| m2414_16(ClassWithDestructor) = Chi : total:m2414_9, partial:m2414_15 +# 2414| m2414_17(char) = Store[x] : &:r2414_1, r2414_11 +# 2414| r2414_18(glval) = VariableAddress[x] : +# 2414| r2414_19(char) = Load[x] : &:r2414_18, m2414_17 +# 2414| r2414_20(char) = Constant[0] : +# 2414| r2414_21(bool) = CompareNE : r2414_19, r2414_20 +# 2414| v2414_22(void) = ConditionalBranch : r2414_21 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2415| Block 3 +# 2415| r2415_1(glval) = VariableAddress[x] : +# 2415| r2415_2(char) = Load[x] : &:r2415_1, m2414_17 +# 2415| r2415_3(char) = Constant[1] : +# 2415| r2415_4(char) = Add : r2415_2, r2415_3 +# 2415| m2415_5(char) = Store[x] : &:r2415_1, r2415_4 +#-----| Goto -> Block 4 + +# 2417| Block 4 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(glval) = VariableAddress[#temp2417:28] : +# 2417| m2417_3(ClassWithDestructor) = Uninitialized[#temp2417:28] : &:r2417_2 +# 2417| r2417_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2417| v2417_5(void) = Call[ClassWithDestructor] : func:r2417_4, this:r2417_2 +# 2417| m2417_6(unknown) = ^CallSideEffect : ~m2414_13 +# 2417| m2417_7(unknown) = Chi : total:m2414_13, partial:m2417_6 +# 2417| m2417_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| m2417_9(ClassWithDestructor) = Chi : total:m2417_3, partial:m2417_8 +# 2417| r2417_10(glval) = FunctionAddress[get_x] : +# 2417| r2417_11(char) = Call[get_x] : func:r2417_10, this:r2417_2 +# 2417| m2417_12(unknown) = ^CallSideEffect : ~m2417_7 +# 2417| m2417_13(unknown) = Chi : total:m2417_7, partial:m2417_12 +# 2417| v2417_14(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, m2417_9 +# 2417| m2417_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| m2417_16(ClassWithDestructor) = Chi : total:m2417_9, partial:m2417_15 +# 2417| m2417_17(char) = Store[x] : &:r2417_1, r2417_11 +# 2417| r2417_18(bool) = Constant[1] : +# 2417| v2417_19(void) = ConditionalBranch : r2417_18 +#-----| False -> Block 13 +#-----| True -> Block 5 + +# 2418| Block 5 +# 2418| r2418_1(glval) = VariableAddress[x] : +# 2418| r2418_2(char) = Load[x] : &:r2418_1, m2417_17 +# 2418| r2418_3(char) = Constant[1] : +# 2418| r2418_4(char) = Add : r2418_2, r2418_3 +# 2418| m2418_5(char) = Store[x] : &:r2418_1, r2418_4 +# 2420| r2420_1(glval) = VariableAddress[x] : +# 2420| r2420_2(glval) = VariableAddress[#temp2420:21] : +# 2420| m2420_3(ClassWithDestructor) = Uninitialized[#temp2420:21] : &:r2420_2 +# 2420| r2420_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2420| v2420_5(void) = Call[ClassWithDestructor] : func:r2420_4, this:r2420_2 +# 2420| m2420_6(unknown) = ^CallSideEffect : ~m2417_13 +# 2420| m2420_7(unknown) = Chi : total:m2417_13, partial:m2420_6 +# 2420| m2420_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| m2420_9(ClassWithDestructor) = Chi : total:m2420_3, partial:m2420_8 +# 2420| r2420_10(glval) = FunctionAddress[get_x] : +# 2420| r2420_11(char) = Call[get_x] : func:r2420_10, this:r2420_2 +# 2420| m2420_12(unknown) = ^CallSideEffect : ~m2420_7 +# 2420| m2420_13(unknown) = Chi : total:m2420_7, partial:m2420_12 +# 2420| v2420_14(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, m2420_9 +# 2420| m2420_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| m2420_16(ClassWithDestructor) = Chi : total:m2420_9, partial:m2420_15 +# 2420| m2420_17(char) = Store[x] : &:r2420_1, r2420_11 +# 2420| r2420_18(glval) = VariableAddress[x] : +# 2420| r2420_19(char) = Load[x] : &:r2420_18, m2420_17 +# 2420| r2420_20(int) = Convert : r2420_19 +# 2420| r2420_21(int) = CopyValue : r2420_20 +# 2420| v2420_22(void) = Switch : r2420_21 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 + +# 2421| Block 6 +# 2421| v2421_1(void) = NoOp : +# 2422| r2422_1(glval) = VariableAddress[x] : +# 2422| r2422_2(char) = Load[x] : &:r2422_1, m2420_17 +# 2422| r2422_3(char) = Constant[1] : +# 2422| r2422_4(char) = Add : r2422_2, r2422_3 +# 2422| m2422_5(char) = Store[x] : &:r2422_1, r2422_4 +#-----| Goto -> Block 7 + +# 2425| Block 7 +# 2425| r2425_1(glval) = VariableAddress[x] : +# 2425| r2425_2(glval) = VariableAddress[#temp2425:21] : +# 2425| m2425_3(ClassWithDestructor) = Uninitialized[#temp2425:21] : &:r2425_2 +# 2425| r2425_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2425| v2425_5(void) = Call[ClassWithDestructor] : func:r2425_4, this:r2425_2 +# 2425| m2425_6(unknown) = ^CallSideEffect : ~m2420_13 +# 2425| m2425_7(unknown) = Chi : total:m2420_13, partial:m2425_6 +# 2425| m2425_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| m2425_9(ClassWithDestructor) = Chi : total:m2425_3, partial:m2425_8 +# 2425| r2425_10(glval) = FunctionAddress[get_x] : +# 2425| r2425_11(char) = Call[get_x] : func:r2425_10, this:r2425_2 +# 2425| m2425_12(unknown) = ^CallSideEffect : ~m2425_7 +# 2425| m2425_13(unknown) = Chi : total:m2425_7, partial:m2425_12 +# 2425| v2425_14(void) = ^IndirectReadSideEffect[-1] : &:r2425_2, m2425_9 +# 2425| m2425_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| m2425_16(ClassWithDestructor) = Chi : total:m2425_9, partial:m2425_15 +# 2425| m2425_17(char) = Store[x] : &:r2425_1, r2425_11 +# 2425| r2425_18(glval) = VariableAddress[x] : +# 2425| r2425_19(char) = Load[x] : &:r2425_18, m2425_17 +# 2425| r2425_20(int) = Convert : r2425_19 +# 2425| v2425_21(void) = Switch : r2425_20 #-----| Case[97] -> Block 8 #-----| Default -> Block 9 -# 2412| Block 8 -# 2412| v2412_1(void) = NoOp : -# 2413| r2413_1(glval) = VariableAddress[x] : -# 2413| r2413_2(char) = Load[x] : &:r2413_1, m2411_17 -# 2413| r2413_3(char) = Constant[1] : -# 2413| r2413_4(char) = Add : r2413_2, r2413_3 -# 2413| m2413_5(char) = Store[x] : &:r2413_1, r2413_4 +# 2426| Block 8 +# 2426| v2426_1(void) = NoOp : +# 2427| r2427_1(glval) = VariableAddress[x] : +# 2427| r2427_2(char) = Load[x] : &:r2427_1, m2425_17 +# 2427| r2427_3(char) = Constant[1] : +# 2427| r2427_4(char) = Add : r2427_2, r2427_3 +# 2427| m2427_5(char) = Store[x] : &:r2427_1, r2427_4 #-----| Goto -> Block 9 -# 2416| Block 9 -# 2416| r2416_1(glval) = VariableAddress[x] : -# 2416| r2416_2(glval) = VariableAddress[#temp2416:18] : -# 2416| m2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2 -# 2416| r2416_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2 -# 2416| m2416_6(unknown) = ^CallSideEffect : ~m2411_13 -# 2416| m2416_7(unknown) = Chi : total:m2411_13, partial:m2416_6 -# 2416| m2416_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 -# 2416| m2416_9(ClassWithDestructor) = Chi : total:m2416_3, partial:m2416_8 -# 2416| r2416_10(glval) = FunctionAddress[get_x] : -# 2416| r2416_11(char) = Call[get_x] : func:r2416_10, this:r2416_2 -# 2416| m2416_12(unknown) = ^CallSideEffect : ~m2416_7 -# 2416| m2416_13(unknown) = Chi : total:m2416_7, partial:m2416_12 -# 2416| v2416_14(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, m2416_9 -# 2416| m2416_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 -# 2416| m2416_16(ClassWithDestructor) = Chi : total:m2416_9, partial:m2416_15 -# 2416| m2416_17(char) = Store[x] : &:r2416_1, r2416_11 -# 2416| r2416_18(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_19(glval>) = VariableAddress[#temp2416:58] : -# 2416| m2416_20(vector) = Uninitialized[#temp2416:58] : &:r2416_19 -# 2416| r2416_21(glval) = FunctionAddress[vector] : -# 2416| r2416_22(glval) = VariableAddress[x] : -# 2416| r2416_23(char) = Load[x] : &:r2416_22, m2416_17 -# 2416| v2416_24(void) = Call[vector] : func:r2416_21, this:r2416_19, 0:r2416_23 -# 2416| m2416_25(unknown) = ^CallSideEffect : ~m2416_13 -# 2416| m2416_26(unknown) = Chi : total:m2416_13, partial:m2416_25 -# 2416| m2416_27(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2416_19 -# 2416| m2416_28(vector) = Chi : total:m2416_20, partial:m2416_27 -# 2416| r2416_29(vector &) = CopyValue : r2416_19 -# 2416| m2416_30(vector &&) = Store[(__range)] : &:r2416_18, r2416_29 -# 2416| r2416_31(glval>) = VariableAddress[(__begin)] : -# 2416| r2416_32(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_33(vector &&) = Load[(__range)] : &:r2416_32, m2416_30 -#-----| r0_1(glval>) = CopyValue : r2416_33 +# 2430| Block 9 +# 2430| r2430_1(glval) = VariableAddress[x] : +# 2430| r2430_2(glval) = VariableAddress[#temp2430:18] : +# 2430| m2430_3(ClassWithDestructor) = Uninitialized[#temp2430:18] : &:r2430_2 +# 2430| r2430_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2430| v2430_5(void) = Call[ClassWithDestructor] : func:r2430_4, this:r2430_2 +# 2430| m2430_6(unknown) = ^CallSideEffect : ~m2425_13 +# 2430| m2430_7(unknown) = Chi : total:m2425_13, partial:m2430_6 +# 2430| m2430_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| m2430_9(ClassWithDestructor) = Chi : total:m2430_3, partial:m2430_8 +# 2430| r2430_10(glval) = FunctionAddress[get_x] : +# 2430| r2430_11(char) = Call[get_x] : func:r2430_10, this:r2430_2 +# 2430| m2430_12(unknown) = ^CallSideEffect : ~m2430_7 +# 2430| m2430_13(unknown) = Chi : total:m2430_7, partial:m2430_12 +# 2430| v2430_14(void) = ^IndirectReadSideEffect[-1] : &:r2430_2, m2430_9 +# 2430| m2430_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| m2430_16(ClassWithDestructor) = Chi : total:m2430_9, partial:m2430_15 +# 2430| m2430_17(char) = Store[x] : &:r2430_1, r2430_11 +# 2430| r2430_18(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_19(glval>) = VariableAddress[#temp2430:58] : +# 2430| m2430_20(vector) = Uninitialized[#temp2430:58] : &:r2430_19 +# 2430| r2430_21(glval) = FunctionAddress[vector] : +# 2430| r2430_22(glval) = VariableAddress[x] : +# 2430| r2430_23(char) = Load[x] : &:r2430_22, m2430_17 +# 2430| v2430_24(void) = Call[vector] : func:r2430_21, this:r2430_19, 0:r2430_23 +# 2430| m2430_25(unknown) = ^CallSideEffect : ~m2430_13 +# 2430| m2430_26(unknown) = Chi : total:m2430_13, partial:m2430_25 +# 2430| m2430_27(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2430_19 +# 2430| m2430_28(vector) = Chi : total:m2430_20, partial:m2430_27 +# 2430| r2430_29(vector &) = CopyValue : r2430_19 +# 2430| m2430_30(vector &&) = Store[(__range)] : &:r2430_18, r2430_29 +# 2430| r2430_31(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_32(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_33(vector &&) = Load[(__range)] : &:r2430_32, m2430_30 +#-----| r0_1(glval>) = CopyValue : r2430_33 #-----| r0_2(glval>) = Convert : r0_1 -# 2416| r2416_34(glval) = FunctionAddress[begin] : -# 2416| r2416_35(iterator) = Call[begin] : func:r2416_34, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2416_28 -# 2416| m2416_36(iterator) = Store[(__begin)] : &:r2416_31, r2416_35 -# 2416| r2416_37(glval>) = VariableAddress[(__end)] : -# 2416| r2416_38(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_39(vector &&) = Load[(__range)] : &:r2416_38, m2416_30 -#-----| r0_4(glval>) = CopyValue : r2416_39 +# 2430| r2430_34(glval) = FunctionAddress[begin] : +# 2430| r2430_35(iterator) = Call[begin] : func:r2430_34, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2430_28 +# 2430| m2430_36(iterator) = Store[(__begin)] : &:r2430_31, r2430_35 +# 2430| r2430_37(glval>) = VariableAddress[(__end)] : +# 2430| r2430_38(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_39(vector &&) = Load[(__range)] : &:r2430_38, m2430_30 +#-----| r0_4(glval>) = CopyValue : r2430_39 #-----| r0_5(glval>) = Convert : r0_4 -# 2416| r2416_40(glval) = FunctionAddress[end] : -# 2416| r2416_41(iterator) = Call[end] : func:r2416_40, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2416_28 -# 2416| m2416_42(iterator) = Store[(__end)] : &:r2416_37, r2416_41 +# 2430| r2430_40(glval) = FunctionAddress[end] : +# 2430| r2430_41(iterator) = Call[end] : func:r2430_40, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2430_28 +# 2430| m2430_42(iterator) = Store[(__end)] : &:r2430_37, r2430_41 #-----| Goto -> Block 10 -# 2416| Block 10 -# 2416| m2416_43(iterator) = Phi : from 9:m2416_36, from 11:m2416_73 -# 2416| m2416_44(unknown) = Phi : from 9:~m2416_26, from 11:~m2416_70 -# 2416| r2416_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2416_45 -# 2416| r2416_46(glval) = FunctionAddress[operator!=] : +# 2430| Block 10 +# 2430| m2430_43(iterator) = Phi : from 9:m2430_36, from 11:m2430_73 +# 2430| m2430_44(unknown) = Phi : from 9:~m2430_26, from 11:~m2430_70 +# 2430| r2430_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2430_45 +# 2430| r2430_46(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2416| r2416_47(glval) = FunctionAddress[iterator] : -# 2416| r2416_48(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2416_48 +# 2430| r2430_47(glval) = FunctionAddress[iterator] : +# 2430| r2430_48(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2430_48 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2416| v2416_49(void) = Call[iterator] : func:r2416_47, this:r0_8, 0:r0_11 -# 2416| m2416_50(unknown) = ^CallSideEffect : ~m2416_44 -# 2416| m2416_51(unknown) = Chi : total:m2416_44, partial:m2416_50 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2416_42 -# 2416| m2416_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2416| m2416_53(iterator) = Chi : total:m0_9, partial:m2416_52 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2416_53 -# 2416| r2416_54(bool) = Call[operator!=] : func:r2416_46, this:r0_7, 0:r0_13 -# 2416| m2416_55(unknown) = ^CallSideEffect : ~m2416_51 -# 2416| m2416_56(unknown) = Chi : total:m2416_51, partial:m2416_55 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2416_43 -# 2416| v2416_57(void) = ConditionalBranch : r2416_54 +# 2430| v2430_49(void) = Call[iterator] : func:r2430_47, this:r0_8, 0:r0_11 +# 2430| m2430_50(unknown) = ^CallSideEffect : ~m2430_44 +# 2430| m2430_51(unknown) = Chi : total:m2430_44, partial:m2430_50 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2430_42 +# 2430| m2430_52(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2430| m2430_53(iterator) = Chi : total:m0_9, partial:m2430_52 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2430_53 +# 2430| r2430_54(bool) = Call[operator!=] : func:r2430_46, this:r0_7, 0:r0_13 +# 2430| m2430_55(unknown) = ^CallSideEffect : ~m2430_51 +# 2430| m2430_56(unknown) = Chi : total:m2430_51, partial:m2430_55 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2430_43 +# 2430| v2430_57(void) = ConditionalBranch : r2430_54 #-----| False -> Block 12 #-----| True -> Block 11 -# 2416| Block 11 -# 2416| r2416_58(glval) = VariableAddress[y] : -# 2416| r2416_59(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2416_59 -# 2416| r2416_60(glval) = FunctionAddress[operator*] : -# 2416| r2416_61(char &) = Call[operator*] : func:r2416_60, this:r0_15 -# 2416| m2416_62(unknown) = ^CallSideEffect : ~m2416_56 -# 2416| m2416_63(unknown) = Chi : total:m2416_56, partial:m2416_62 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2416_43 -# 2416| r2416_64(char) = Load[?] : &:r2416_61, ~m2416_63 -# 2416| m2416_65(char) = Store[y] : &:r2416_58, r2416_64 -# 2417| r2417_1(glval) = VariableAddress[x] : -# 2417| r2417_2(char) = Load[x] : &:r2417_1, m2416_17 -# 2417| r2417_3(int) = Convert : r2417_2 -# 2417| r2417_4(glval) = VariableAddress[y] : -# 2417| r2417_5(char) = Load[y] : &:r2417_4, m2416_65 -# 2417| r2417_6(int) = Convert : r2417_5 -# 2417| r2417_7(int) = Add : r2417_6, r2417_3 -# 2417| r2417_8(char) = Convert : r2417_7 -# 2417| m2417_9(char) = Store[y] : &:r2417_4, r2417_8 -# 2416| r2416_66(glval>) = VariableAddress[(__begin)] : -# 2416| r2416_67(glval) = FunctionAddress[operator++] : -# 2416| r2416_68(iterator &) = Call[operator++] : func:r2416_67, this:r2416_66 -# 2416| m2416_69(unknown) = ^CallSideEffect : ~m2416_63 -# 2416| m2416_70(unknown) = Chi : total:m2416_63, partial:m2416_69 -# 2416| v2416_71(void) = ^IndirectReadSideEffect[-1] : &:r2416_66, m2416_43 -# 2416| m2416_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2416_66 -# 2416| m2416_73(iterator) = Chi : total:m2416_43, partial:m2416_72 -# 2416| r2416_74(glval>) = CopyValue : r2416_68 +# 2430| Block 11 +# 2430| r2430_58(glval) = VariableAddress[y] : +# 2430| r2430_59(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_59 +# 2430| r2430_60(glval) = FunctionAddress[operator*] : +# 2430| r2430_61(char &) = Call[operator*] : func:r2430_60, this:r0_15 +# 2430| m2430_62(unknown) = ^CallSideEffect : ~m2430_56 +# 2430| m2430_63(unknown) = Chi : total:m2430_56, partial:m2430_62 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2430_43 +# 2430| r2430_64(char) = Load[?] : &:r2430_61, ~m2430_63 +# 2430| m2430_65(char) = Store[y] : &:r2430_58, r2430_64 +# 2431| r2431_1(glval) = VariableAddress[x] : +# 2431| r2431_2(char) = Load[x] : &:r2431_1, m2430_17 +# 2431| r2431_3(int) = Convert : r2431_2 +# 2431| r2431_4(glval) = VariableAddress[y] : +# 2431| r2431_5(char) = Load[y] : &:r2431_4, m2430_65 +# 2431| r2431_6(int) = Convert : r2431_5 +# 2431| r2431_7(int) = Add : r2431_6, r2431_3 +# 2431| r2431_8(char) = Convert : r2431_7 +# 2431| m2431_9(char) = Store[y] : &:r2431_4, r2431_8 +# 2430| r2430_66(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_67(glval) = FunctionAddress[operator++] : +# 2430| r2430_68(iterator &) = Call[operator++] : func:r2430_67, this:r2430_66 +# 2430| m2430_69(unknown) = ^CallSideEffect : ~m2430_63 +# 2430| m2430_70(unknown) = Chi : total:m2430_63, partial:m2430_69 +# 2430| v2430_71(void) = ^IndirectReadSideEffect[-1] : &:r2430_66, m2430_43 +# 2430| m2430_72(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_66 +# 2430| m2430_73(iterator) = Chi : total:m2430_43, partial:m2430_72 +# 2430| r2430_74(glval>) = CopyValue : r2430_68 #-----| Goto (back edge) -> Block 10 -# 2418| Block 12 -# 2418| v2418_1(void) = NoOp : -# 2396| v2396_5(void) = ReturnVoid : -# 2396| v2396_6(void) = AliasedUse : ~m2416_56 -# 2396| v2396_7(void) = ExitFunction : +# 2432| Block 12 +# 2432| v2432_1(void) = NoOp : +# 2410| v2410_5(void) = ReturnVoid : +# 2410| v2410_6(void) = AliasedUse : ~m2430_56 +# 2410| v2410_7(void) = ExitFunction : -# 2396| Block 13 -# 2396| v2396_8(void) = Unreached : +# 2410| Block 13 +# 2410| v2410_8(void) = Unreached : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 67327ddc846..2d476b11fd4 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1933,6 +1933,20 @@ namespace missing_declaration_entries { Bar2 b; b.two_missing_variable_declaration_entries(); } + + template struct Bar3 { + + int two_more_missing_variable_declaration_entries() { + extern int g; + int z(float); + return g; + } + }; + + void test3() { + Bar3 b; + b.two_more_missing_variable_declaration_entries(); + } } template T global_template = 42; diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 80ec181a219..a112a769876 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1346,9 +1346,9 @@ | file://:0:0:0:0 | ChiTotal | total:m1765_19 | | file://:0:0:0:0 | ChiTotal | total:m1883_8 | | file://:0:0:0:0 | ChiTotal | total:m1888_8 | -| file://:0:0:0:0 | ChiTotal | total:m2222_6 | -| file://:0:0:0:0 | ChiTotal | total:m2226_4 | -| file://:0:0:0:0 | ChiTotal | total:m2233_6 | +| file://:0:0:0:0 | ChiTotal | total:m2236_6 | +| file://:0:0:0:0 | ChiTotal | total:m2240_4 | +| file://:0:0:0:0 | ChiTotal | total:m2247_6 | | file://:0:0:0:0 | Left | r0_2 | | file://:0:0:0:0 | Left | r0_4 | | file://:0:0:0:0 | Left | r0_7 | @@ -1389,13 +1389,13 @@ | file://:0:0:0:0 | Load | m1883_6 | | file://:0:0:0:0 | Load | m1883_6 | | file://:0:0:0:0 | Load | m1888_6 | -| file://:0:0:0:0 | Load | m2062_6 | -| file://:0:0:0:0 | Load | m2201_40 | -| file://:0:0:0:0 | Load | m2204_40 | -| file://:0:0:0:0 | Load | m2210_36 | +| file://:0:0:0:0 | Load | m2076_6 | | file://:0:0:0:0 | Load | m2215_40 | -| file://:0:0:0:0 | Load | m2293_46 | -| file://:0:0:0:0 | Load | m2416_53 | +| file://:0:0:0:0 | Load | m2218_40 | +| file://:0:0:0:0 | Load | m2224_36 | +| file://:0:0:0:0 | Load | m2229_40 | +| file://:0:0:0:0 | Load | m2307_46 | +| file://:0:0:0:0 | Load | m2430_53 | | file://:0:0:0:0 | Load | ~m0_4 | | file://:0:0:0:0 | Load | ~m1493_6 | | file://:0:0:0:0 | Load | ~m1761_10 | @@ -1425,30 +1425,30 @@ | file://:0:0:0:0 | SideEffect | m1127_19 | | file://:0:0:0:0 | SideEffect | m1133_19 | | file://:0:0:0:0 | SideEffect | m1133_19 | -| file://:0:0:0:0 | SideEffect | m2201_13 | -| file://:0:0:0:0 | SideEffect | m2201_13 | -| file://:0:0:0:0 | SideEffect | m2201_30 | -| file://:0:0:0:0 | SideEffect | m2201_30 | -| file://:0:0:0:0 | SideEffect | m2204_13 | -| file://:0:0:0:0 | SideEffect | m2204_13 | -| file://:0:0:0:0 | SideEffect | m2204_30 | -| file://:0:0:0:0 | SideEffect | m2204_30 | -| file://:0:0:0:0 | SideEffect | m2210_9 | -| file://:0:0:0:0 | SideEffect | m2210_9 | -| file://:0:0:0:0 | SideEffect | m2210_26 | -| file://:0:0:0:0 | SideEffect | m2210_26 | | file://:0:0:0:0 | SideEffect | m2215_13 | | file://:0:0:0:0 | SideEffect | m2215_13 | | file://:0:0:0:0 | SideEffect | m2215_30 | | file://:0:0:0:0 | SideEffect | m2215_30 | -| file://:0:0:0:0 | SideEffect | m2293_21 | -| file://:0:0:0:0 | SideEffect | m2293_21 | -| file://:0:0:0:0 | SideEffect | m2293_36 | -| file://:0:0:0:0 | SideEffect | m2293_36 | -| file://:0:0:0:0 | SideEffect | m2416_28 | -| file://:0:0:0:0 | SideEffect | m2416_28 | -| file://:0:0:0:0 | SideEffect | m2416_43 | -| file://:0:0:0:0 | SideEffect | m2416_43 | +| file://:0:0:0:0 | SideEffect | m2218_13 | +| file://:0:0:0:0 | SideEffect | m2218_13 | +| file://:0:0:0:0 | SideEffect | m2218_30 | +| file://:0:0:0:0 | SideEffect | m2218_30 | +| file://:0:0:0:0 | SideEffect | m2224_9 | +| file://:0:0:0:0 | SideEffect | m2224_9 | +| file://:0:0:0:0 | SideEffect | m2224_26 | +| file://:0:0:0:0 | SideEffect | m2224_26 | +| file://:0:0:0:0 | SideEffect | m2229_13 | +| file://:0:0:0:0 | SideEffect | m2229_13 | +| file://:0:0:0:0 | SideEffect | m2229_30 | +| file://:0:0:0:0 | SideEffect | m2229_30 | +| file://:0:0:0:0 | SideEffect | m2307_21 | +| file://:0:0:0:0 | SideEffect | m2307_21 | +| file://:0:0:0:0 | SideEffect | m2307_36 | +| file://:0:0:0:0 | SideEffect | m2307_36 | +| file://:0:0:0:0 | SideEffect | m2430_28 | +| file://:0:0:0:0 | SideEffect | m2430_28 | +| file://:0:0:0:0 | SideEffect | m2430_43 | +| file://:0:0:0:0 | SideEffect | m2430_43 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -1467,15 +1467,15 @@ | file://:0:0:0:0 | SideEffect | ~m1289_4 | | file://:0:0:0:0 | SideEffect | ~m1496_6 | | file://:0:0:0:0 | SideEffect | ~m1888_8 | -| file://:0:0:0:0 | SideEffect | ~m2201_29 | -| file://:0:0:0:0 | SideEffect | ~m2204_29 | -| file://:0:0:0:0 | SideEffect | ~m2210_25 | | file://:0:0:0:0 | SideEffect | ~m2215_29 | -| file://:0:0:0:0 | SideEffect | ~m2222_6 | -| file://:0:0:0:0 | SideEffect | ~m2226_4 | -| file://:0:0:0:0 | SideEffect | ~m2233_6 | -| file://:0:0:0:0 | SideEffect | ~m2293_35 | -| file://:0:0:0:0 | SideEffect | ~m2416_42 | +| file://:0:0:0:0 | SideEffect | ~m2218_29 | +| file://:0:0:0:0 | SideEffect | ~m2224_25 | +| file://:0:0:0:0 | SideEffect | ~m2229_29 | +| file://:0:0:0:0 | SideEffect | ~m2236_6 | +| file://:0:0:0:0 | SideEffect | ~m2240_4 | +| file://:0:0:0:0 | SideEffect | ~m2247_6 | +| file://:0:0:0:0 | SideEffect | ~m2307_35 | +| file://:0:0:0:0 | SideEffect | ~m2430_42 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -9809,1683 +9809,1408 @@ | ir.cpp:1934:11:1934:50 | ChiPartial | partial:m1934_4 | | ir.cpp:1934:11:1934:50 | ChiTotal | total:m1932_4 | | ir.cpp:1934:11:1934:50 | SideEffect | ~m1932_4 | -| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | -| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | -| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | -| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | -| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | -| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | -| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | -| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | -| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | -| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | -| ir.cpp:1940:5:1940:28 | Address | &:r1940_5 | -| ir.cpp:1940:5:1940:28 | ChiPartial | partial:m1940_3 | -| ir.cpp:1940:5:1940:28 | ChiTotal | total:m1940_2 | -| ir.cpp:1940:5:1940:28 | Load | m1943_8 | -| ir.cpp:1940:5:1940:28 | SideEffect | m1940_3 | -| ir.cpp:1941:9:1941:17 | Address | &:r1941_1 | -| ir.cpp:1941:21:1941:40 | Address | &:r1941_2 | -| ir.cpp:1941:21:1941:40 | Load | ~m1940_3 | -| ir.cpp:1941:21:1941:40 | StoreValue | r1941_3 | -| ir.cpp:1942:10:1942:19 | Address | &:r1942_1 | -| ir.cpp:1942:23:1942:43 | Address | &:r1942_2 | -| ir.cpp:1942:23:1942:43 | Load | ~m1940_3 | -| ir.cpp:1942:23:1942:43 | StoreValue | r1942_3 | -| ir.cpp:1943:5:1943:39 | Address | &:r1943_1 | -| ir.cpp:1943:12:1943:20 | Address | &:r1943_2 | -| ir.cpp:1943:12:1943:20 | Left | r1943_3 | -| ir.cpp:1943:12:1943:20 | Load | m1941_4 | -| ir.cpp:1943:12:1943:38 | StoreValue | r1943_7 | -| ir.cpp:1943:24:1943:38 | Right | r1943_6 | -| ir.cpp:1943:29:1943:38 | Address | &:r1943_4 | -| ir.cpp:1943:29:1943:38 | Load | m1942_4 | -| ir.cpp:1943:29:1943:38 | Unary | r1943_5 | -| ir.cpp:1948:5:1948:16 | Address | &:r1948_7 | -| ir.cpp:1948:5:1948:16 | ChiPartial | partial:m1948_3 | -| ir.cpp:1948:5:1948:16 | ChiTotal | total:m1948_2 | -| ir.cpp:1948:5:1948:16 | Load | m1950_4 | -| ir.cpp:1948:5:1948:16 | SideEffect | m1948_3 | -| ir.cpp:1948:22:1948:22 | Address | &:r1948_5 | -| ir.cpp:1949:9:1949:9 | Address | &:r1949_1 | -| ir.cpp:1949:9:1949:9 | Left | r1949_2 | -| ir.cpp:1949:9:1949:9 | Load | m1948_6 | -| ir.cpp:1949:9:1949:14 | Condition | r1949_4 | -| ir.cpp:1949:13:1949:14 | Right | r1949_3 | -| ir.cpp:1950:9:1950:17 | Address | &:r1950_1 | -| ir.cpp:1950:16:1950:16 | Address | &:r1950_2 | -| ir.cpp:1950:16:1950:16 | Load | m1948_6 | -| ir.cpp:1950:16:1950:16 | StoreValue | r1950_3 | -| ir.cpp:1952:9:1952:20 | CallTarget | func:r1952_1 | -| ir.cpp:1952:9:1952:20 | ChiPartial | partial:m1952_3 | -| ir.cpp:1952:9:1952:20 | ChiTotal | total:m1948_4 | -| ir.cpp:1952:9:1952:20 | SideEffect | ~m1948_4 | -| ir.cpp:1956:5:1956:17 | Address | &:r1956_8 | -| ir.cpp:1956:5:1956:17 | ChiPartial | partial:m1956_3 | -| ir.cpp:1956:5:1956:17 | ChiTotal | total:m1956_2 | -| ir.cpp:1956:5:1956:17 | Load | m1960_4 | -| ir.cpp:1956:5:1956:17 | SideEffect | m1956_3 | -| ir.cpp:1956:23:1956:23 | Address | &:r1956_5 | -| ir.cpp:1957:9:1957:9 | Address | &:r1957_1 | -| ir.cpp:1957:9:1957:9 | Left | r1957_2 | -| ir.cpp:1957:9:1957:9 | Load | m1956_6 | -| ir.cpp:1957:9:1957:14 | Condition | r1957_4 | -| ir.cpp:1957:13:1957:14 | Right | r1957_3 | -| ir.cpp:1958:9:1958:20 | CallTarget | func:r1958_1 | -| ir.cpp:1958:9:1958:20 | ChiPartial | partial:m1958_3 | -| ir.cpp:1958:9:1958:20 | ChiTotal | total:m1956_4 | -| ir.cpp:1958:9:1958:20 | SideEffect | ~m1956_4 | -| ir.cpp:1960:5:1960:13 | Address | &:r1960_1 | -| ir.cpp:1960:12:1960:12 | Address | &:r1960_2 | -| ir.cpp:1960:12:1960:12 | Load | m1956_6 | -| ir.cpp:1960:12:1960:12 | StoreValue | r1960_3 | -| ir.cpp:1963:5:1963:19 | Address | &:r1963_7 | -| ir.cpp:1963:5:1963:19 | ChiPartial | partial:m1963_3 | -| ir.cpp:1963:5:1963:19 | ChiTotal | total:m1963_2 | -| ir.cpp:1963:5:1963:19 | Load | m1964_4 | -| ir.cpp:1963:5:1963:19 | SideEffect | m1963_3 | -| ir.cpp:1963:25:1963:25 | Address | &:r1963_5 | -| ir.cpp:1964:5:1964:13 | Address | &:r1964_1 | -| ir.cpp:1964:12:1964:12 | Address | &:r1964_2 | -| ir.cpp:1964:12:1964:12 | Load | m1963_6 | -| ir.cpp:1964:12:1964:12 | StoreValue | r1964_3 | -| ir.cpp:1967:6:1967:43 | ChiPartial | partial:m1967_3 | -| ir.cpp:1967:6:1967:43 | ChiTotal | total:m1967_2 | -| ir.cpp:1967:6:1967:43 | SideEffect | ~m1975_6 | -| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | -| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | -| ir.cpp:1968:7:1968:7 | Arg(this) | this:r1968_1 | -| ir.cpp:1968:7:1968:7 | CallTarget | func:r1968_3 | -| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_5 | -| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_7 | -| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1967_4 | -| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1968_2 | -| ir.cpp:1968:7:1968:7 | SideEffect | ~m1967_4 | -| ir.cpp:1969:9:1969:9 | Address | &:r1969_1 | -| ir.cpp:1970:5:1970:5 | Address | &:r1970_7 | -| ir.cpp:1970:11:1970:30 | CallTarget | func:r1970_2 | -| ir.cpp:1970:11:1970:30 | ChiPartial | partial:m1970_5 | -| ir.cpp:1970:11:1970:30 | ChiTotal | total:m1968_6 | -| ir.cpp:1970:11:1970:30 | SideEffect | ~m1968_6 | -| ir.cpp:1970:11:1970:30 | StoreValue | r1970_4 | -| ir.cpp:1970:32:1970:33 | Arg(0) | 0:r1970_3 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_5 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_5 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_7 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_7 | +| ir.cpp:1939:13:1939:13 | Address | &:r1939_10 | +| ir.cpp:1939:13:1939:13 | ChiPartial | partial:m1939_3 | +| ir.cpp:1939:13:1939:13 | ChiTotal | total:m1939_2 | +| ir.cpp:1939:13:1939:13 | Load | m1939_6 | +| ir.cpp:1939:13:1939:13 | Load | m1942_4 | +| ir.cpp:1939:13:1939:13 | SideEffect | m1939_3 | +| ir.cpp:1939:13:1939:13 | SideEffect | m1939_8 | +| ir.cpp:1942:13:1942:21 | Address | &:r1942_1 | +| ir.cpp:1942:20:1942:20 | Address | &:r1942_2 | +| ir.cpp:1942:20:1942:20 | Load | ~m1939_3 | +| ir.cpp:1942:20:1942:20 | StoreValue | r1942_3 | +| ir.cpp:1946:10:1946:14 | ChiPartial | partial:m1946_3 | +| ir.cpp:1946:10:1946:14 | ChiTotal | total:m1946_2 | +| ir.cpp:1946:10:1946:14 | SideEffect | ~m1948_5 | +| ir.cpp:1947:19:1947:19 | Address | &:r1947_1 | +| ir.cpp:1948:9:1948:9 | Address | &:r1948_1 | +| ir.cpp:1948:9:1948:9 | Address | &:r1948_1 | +| ir.cpp:1948:9:1948:9 | Arg(this) | this:r1948_1 | +| ir.cpp:1948:9:1948:9 | ChiPartial | partial:m1948_7 | +| ir.cpp:1948:9:1948:9 | ChiTotal | total:m1947_2 | +| ir.cpp:1948:9:1948:9 | SideEffect | m1947_2 | +| ir.cpp:1948:11:1948:55 | CallTarget | func:r1948_2 | +| ir.cpp:1948:11:1948:55 | ChiPartial | partial:m1948_4 | +| ir.cpp:1948:11:1948:55 | ChiTotal | total:m1946_4 | +| ir.cpp:1948:11:1948:55 | SideEffect | ~m1946_4 | +| ir.cpp:1952:24:1952:24 | Address | &:r1952_3 | +| ir.cpp:1952:24:1952:24 | Address | &:r1952_3 | +| ir.cpp:1952:24:1952:24 | SideEffect | ~m1952_6 | +| ir.cpp:1952:24:1952:24 | SideEffect | ~m1952_6 | +| ir.cpp:1952:42:1952:43 | ChiPartial | partial:m1952_5 | +| ir.cpp:1952:42:1952:43 | ChiPartial | partial:m1952_5 | +| ir.cpp:1952:42:1952:43 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:42:1952:43 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:42:1952:43 | StoreValue | r1952_4 | +| ir.cpp:1952:42:1952:43 | StoreValue | r1952_4 | +| ir.cpp:1954:5:1954:28 | Address | &:r1954_5 | +| ir.cpp:1954:5:1954:28 | ChiPartial | partial:m1954_3 | +| ir.cpp:1954:5:1954:28 | ChiTotal | total:m1954_2 | +| ir.cpp:1954:5:1954:28 | Load | m1957_8 | +| ir.cpp:1954:5:1954:28 | SideEffect | m1954_3 | +| ir.cpp:1955:9:1955:17 | Address | &:r1955_1 | +| ir.cpp:1955:21:1955:40 | Address | &:r1955_2 | +| ir.cpp:1955:21:1955:40 | Load | ~m1954_3 | +| ir.cpp:1955:21:1955:40 | StoreValue | r1955_3 | +| ir.cpp:1956:10:1956:19 | Address | &:r1956_1 | +| ir.cpp:1956:23:1956:43 | Address | &:r1956_2 | +| ir.cpp:1956:23:1956:43 | Load | ~m1954_3 | +| ir.cpp:1956:23:1956:43 | StoreValue | r1956_3 | +| ir.cpp:1957:5:1957:39 | Address | &:r1957_1 | +| ir.cpp:1957:12:1957:20 | Address | &:r1957_2 | +| ir.cpp:1957:12:1957:20 | Left | r1957_3 | +| ir.cpp:1957:12:1957:20 | Load | m1955_4 | +| ir.cpp:1957:12:1957:38 | StoreValue | r1957_7 | +| ir.cpp:1957:24:1957:38 | Right | r1957_6 | +| ir.cpp:1957:29:1957:38 | Address | &:r1957_4 | +| ir.cpp:1957:29:1957:38 | Load | m1956_4 | +| ir.cpp:1957:29:1957:38 | Unary | r1957_5 | +| ir.cpp:1962:5:1962:16 | Address | &:r1962_7 | +| ir.cpp:1962:5:1962:16 | ChiPartial | partial:m1962_3 | +| ir.cpp:1962:5:1962:16 | ChiTotal | total:m1962_2 | +| ir.cpp:1962:5:1962:16 | Load | m1964_4 | +| ir.cpp:1962:5:1962:16 | SideEffect | m1962_3 | +| ir.cpp:1962:22:1962:22 | Address | &:r1962_5 | +| ir.cpp:1963:9:1963:9 | Address | &:r1963_1 | +| ir.cpp:1963:9:1963:9 | Left | r1963_2 | +| ir.cpp:1963:9:1963:9 | Load | m1962_6 | +| ir.cpp:1963:9:1963:14 | Condition | r1963_4 | +| ir.cpp:1963:13:1963:14 | Right | r1963_3 | +| ir.cpp:1964:9:1964:17 | Address | &:r1964_1 | +| ir.cpp:1964:16:1964:16 | Address | &:r1964_2 | +| ir.cpp:1964:16:1964:16 | Load | m1962_6 | +| ir.cpp:1964:16:1964:16 | StoreValue | r1964_3 | +| ir.cpp:1966:9:1966:20 | CallTarget | func:r1966_1 | +| ir.cpp:1966:9:1966:20 | ChiPartial | partial:m1966_3 | +| ir.cpp:1966:9:1966:20 | ChiTotal | total:m1962_4 | +| ir.cpp:1966:9:1966:20 | SideEffect | ~m1962_4 | +| ir.cpp:1970:5:1970:17 | Address | &:r1970_8 | +| ir.cpp:1970:5:1970:17 | ChiPartial | partial:m1970_3 | +| ir.cpp:1970:5:1970:17 | ChiTotal | total:m1970_2 | +| ir.cpp:1970:5:1970:17 | Load | m1974_4 | +| ir.cpp:1970:5:1970:17 | SideEffect | m1970_3 | +| ir.cpp:1970:23:1970:23 | Address | &:r1970_5 | | ir.cpp:1971:9:1971:9 | Address | &:r1971_1 | -| ir.cpp:1972:5:1972:5 | Address | &:r1972_6 | -| ir.cpp:1972:9:1972:31 | CallTarget | func:r1972_1 | -| ir.cpp:1972:9:1972:31 | ChiPartial | partial:m1972_4 | -| ir.cpp:1972:9:1972:31 | ChiTotal | total:m1970_6 | -| ir.cpp:1972:9:1972:31 | SideEffect | ~m1970_6 | -| ir.cpp:1972:9:1972:31 | StoreValue | r1972_3 | -| ir.cpp:1972:33:1972:34 | Arg(0) | 0:r1972_2 | -| ir.cpp:1973:9:1973:9 | Address | &:r1973_1 | -| ir.cpp:1974:5:1974:5 | Address | &:r1974_6 | -| ir.cpp:1974:9:1974:23 | CallTarget | func:r1974_1 | -| ir.cpp:1974:9:1974:23 | ChiPartial | partial:m1974_4 | -| ir.cpp:1974:9:1974:23 | ChiTotal | total:m1972_5 | -| ir.cpp:1974:9:1974:23 | SideEffect | ~m1972_5 | -| ir.cpp:1974:9:1974:23 | StoreValue | r1974_3 | -| ir.cpp:1974:25:1974:26 | Arg(0) | 0:r1974_2 | -| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | -| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | -| ir.cpp:1975:1:1975:1 | Arg(this) | this:r1975_2 | -| ir.cpp:1975:1:1975:1 | CallTarget | func:r1975_3 | -| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_5 | -| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_8 | -| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1968_8 | -| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1974_5 | -| ir.cpp:1975:1:1975:1 | SideEffect | m1968_8 | -| ir.cpp:1975:1:1975:1 | SideEffect | ~m1974_5 | -| ir.cpp:1977:6:1977:23 | ChiPartial | partial:m1977_3 | -| ir.cpp:1977:6:1977:23 | ChiTotal | total:m1977_2 | -| ir.cpp:1977:6:1977:23 | SideEffect | m1977_3 | -| ir.cpp:1978:7:1978:7 | Address | &:r1978_1 | -| ir.cpp:1978:10:1978:10 | Address | &:r1978_3 | -| ir.cpp:1979:3:1979:3 | Address | &:r1979_5 | -| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | -| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | -| ir.cpp:1979:7:1979:12 | Load | m1979_3 | -| ir.cpp:1979:7:1979:12 | StoreValue | r1979_4 | -| ir.cpp:1979:11:1979:12 | StoreValue | r1979_1 | -| ir.cpp:1982:6:1982:38 | ChiPartial | partial:m1982_3 | -| ir.cpp:1982:6:1982:38 | ChiTotal | total:m1982_2 | -| ir.cpp:1982:6:1982:38 | SideEffect | m1982_3 | -| ir.cpp:1983:7:1983:7 | Address | &:r1983_1 | -| ir.cpp:1983:10:1983:10 | Address | &:r1983_3 | -| ir.cpp:1983:13:1983:14 | StoreValue | r1983_4 | -| ir.cpp:1984:3:1984:3 | Address | &:r1984_7 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | -| ir.cpp:1984:8:1984:8 | Left | r1984_3 | -| ir.cpp:1984:8:1984:8 | Load | m1983_5 | -| ir.cpp:1984:8:1984:14 | Load | m1984_5 | -| ir.cpp:1984:8:1984:14 | StoreValue | r1984_4 | -| ir.cpp:1984:8:1984:14 | StoreValue | r1984_6 | -| ir.cpp:1984:13:1984:14 | Right | r1984_1 | -| ir.cpp:1991:15:1991:43 | Address | &:r1991_5 | -| ir.cpp:1991:15:1991:43 | ChiPartial | partial:m1991_3 | -| ir.cpp:1991:15:1991:43 | ChiTotal | total:m1991_2 | -| ir.cpp:1991:15:1991:43 | Load | m1992_4 | -| ir.cpp:1991:15:1991:43 | SideEffect | m1991_3 | -| ir.cpp:1992:9:1992:17 | Address | &:r1992_1 | -| ir.cpp:1992:16:1992:16 | StoreValue | r1992_3 | -| ir.cpp:1992:16:1992:16 | Unary | r1992_2 | -| ir.cpp:1994:14:1994:39 | Address | &:r1994_5 | -| ir.cpp:1994:14:1994:39 | ChiPartial | partial:m1994_3 | -| ir.cpp:1994:14:1994:39 | ChiTotal | total:m1994_2 | -| ir.cpp:1994:14:1994:39 | Load | m1995_4 | -| ir.cpp:1994:14:1994:39 | SideEffect | m1994_3 | -| ir.cpp:1995:9:1995:17 | Address | &:r1995_1 | -| ir.cpp:1995:16:1995:16 | Address | &:r1995_2 | -| ir.cpp:1995:16:1995:16 | Load | ~m1994_3 | -| ir.cpp:1995:16:1995:16 | StoreValue | r1995_3 | -| ir.cpp:1999:6:1999:55 | ChiPartial | partial:m1999_3 | -| ir.cpp:1999:6:1999:55 | ChiTotal | total:m1999_2 | -| ir.cpp:1999:6:1999:55 | SideEffect | ~m2014_4 | -| ir.cpp:2000:7:2000:7 | Address | &:r2000_1 | -| ir.cpp:2002:7:2002:35 | CallTarget | func:r2002_2 | -| ir.cpp:2002:7:2002:35 | ChiPartial | partial:m2002_4 | -| ir.cpp:2002:7:2002:35 | ChiTotal | total:m1999_4 | -| ir.cpp:2002:7:2002:35 | SideEffect | ~m1999_4 | -| ir.cpp:2002:7:2002:35 | Unary | r2002_3 | -| ir.cpp:2003:5:2003:36 | CallTarget | func:r2003_1 | -| ir.cpp:2003:5:2003:36 | ChiPartial | partial:m2003_3 | -| ir.cpp:2003:5:2003:36 | ChiTotal | total:m2002_5 | -| ir.cpp:2003:5:2003:36 | SideEffect | ~m2002_5 | -| ir.cpp:2003:5:2003:36 | Unary | r2003_2 | -| ir.cpp:2004:7:2004:32 | CallTarget | func:r2004_2 | -| ir.cpp:2004:7:2004:32 | ChiPartial | partial:m2004_4 | -| ir.cpp:2004:7:2004:32 | ChiTotal | total:m2003_4 | -| ir.cpp:2004:7:2004:32 | SideEffect | ~m2003_4 | -| ir.cpp:2005:5:2005:33 | CallTarget | func:r2005_1 | -| ir.cpp:2005:5:2005:33 | ChiPartial | partial:m2005_3 | -| ir.cpp:2005:5:2005:33 | ChiTotal | total:m2004_5 | -| ir.cpp:2005:5:2005:33 | SideEffect | ~m2004_5 | -| ir.cpp:2007:7:2007:7 | Address | &:r2007_1 | -| ir.cpp:2008:5:2008:5 | Address | &:r2008_7 | -| ir.cpp:2008:11:2008:39 | Address | &:r2008_3 | -| ir.cpp:2008:11:2008:39 | CallTarget | func:r2008_2 | -| ir.cpp:2008:11:2008:39 | ChiPartial | partial:m2008_4 | -| ir.cpp:2008:11:2008:39 | ChiTotal | total:m2005_4 | -| ir.cpp:2008:11:2008:39 | SideEffect | ~m2005_4 | -| ir.cpp:2008:40:2008:42 | Load | ~m2008_5 | -| ir.cpp:2008:40:2008:42 | StoreValue | r2008_6 | -| ir.cpp:2009:7:2009:7 | Address | &:r2009_1 | -| ir.cpp:2010:5:2010:5 | Address | &:r2010_6 | -| ir.cpp:2010:9:2010:40 | Address | &:r2010_2 | -| ir.cpp:2010:9:2010:40 | CallTarget | func:r2010_1 | -| ir.cpp:2010:9:2010:40 | ChiPartial | partial:m2010_3 | -| ir.cpp:2010:9:2010:40 | ChiTotal | total:m2008_5 | -| ir.cpp:2010:9:2010:40 | SideEffect | ~m2008_5 | -| ir.cpp:2010:41:2010:43 | Load | ~m2010_4 | -| ir.cpp:2010:41:2010:43 | StoreValue | r2010_5 | -| ir.cpp:2011:7:2011:7 | Address | &:r2011_1 | -| ir.cpp:2012:5:2012:5 | Address | &:r2012_6 | -| ir.cpp:2012:11:2012:36 | CallTarget | func:r2012_2 | -| ir.cpp:2012:11:2012:36 | ChiPartial | partial:m2012_4 | -| ir.cpp:2012:11:2012:36 | ChiTotal | total:m2010_4 | -| ir.cpp:2012:11:2012:36 | SideEffect | ~m2010_4 | -| ir.cpp:2012:11:2012:36 | StoreValue | r2012_3 | -| ir.cpp:2013:7:2013:7 | Address | &:r2013_1 | -| ir.cpp:2014:5:2014:5 | Address | &:r2014_5 | -| ir.cpp:2014:9:2014:37 | CallTarget | func:r2014_1 | -| ir.cpp:2014:9:2014:37 | ChiPartial | partial:m2014_3 | -| ir.cpp:2014:9:2014:37 | ChiTotal | total:m2012_5 | -| ir.cpp:2014:9:2014:37 | SideEffect | ~m2012_5 | -| ir.cpp:2014:9:2014:37 | StoreValue | r2014_2 | -| ir.cpp:2017:6:2017:18 | ChiPartial | partial:m2017_3 | -| ir.cpp:2017:6:2017:18 | ChiTotal | total:m2017_2 | -| ir.cpp:2017:6:2017:18 | SideEffect | m2017_3 | -| ir.cpp:2018:18:2018:18 | Address | &:r2018_1 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Load | m2018_2 | -| ir.cpp:2028:6:2028:24 | ChiPartial | partial:m2028_3 | -| ir.cpp:2028:6:2028:24 | ChiTotal | total:m2028_2 | -| ir.cpp:2028:6:2028:24 | SideEffect | ~m2036_5 | -| ir.cpp:2029:12:2029:12 | Address | &:r2029_1 | -| ir.cpp:2031:5:2031:19 | ChiPartial | partial:m2031_7 | -| ir.cpp:2031:5:2031:19 | ChiTotal | total:m2031_5 | -| ir.cpp:2031:7:2031:12 | CallTarget | func:r2031_2 | -| ir.cpp:2031:7:2031:12 | ChiPartial | partial:m2031_4 | -| ir.cpp:2031:7:2031:12 | ChiTotal | total:m2028_4 | -| ir.cpp:2031:7:2031:12 | SideEffect | ~m2028_4 | -| ir.cpp:2031:7:2031:12 | Unary | r2031_3 | -| ir.cpp:2031:13:2031:16 | Address | &:r2031_6 | -| ir.cpp:2032:5:2032:19 | ChiPartial | partial:m2032_7 | -| ir.cpp:2032:5:2032:19 | ChiTotal | total:m2032_5 | -| ir.cpp:2032:7:2032:12 | CallTarget | func:r2032_2 | -| ir.cpp:2032:7:2032:12 | ChiPartial | partial:m2032_4 | -| ir.cpp:2032:7:2032:12 | ChiTotal | total:m2031_8 | -| ir.cpp:2032:7:2032:12 | SideEffect | ~m2031_8 | -| ir.cpp:2032:7:2032:12 | Unary | r2032_3 | -| ir.cpp:2032:13:2032:16 | Address | &:r2032_6 | -| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | -| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | -| ir.cpp:2033:7:2033:13 | CallTarget | func:r2033_3 | -| ir.cpp:2033:7:2033:13 | ChiPartial | partial:m2033_5 | -| ir.cpp:2033:7:2033:13 | ChiTotal | total:m2032_8 | -| ir.cpp:2033:7:2033:13 | SideEffect | ~m2032_8 | -| ir.cpp:2033:7:2033:13 | StoreValue | r2033_4 | -| ir.cpp:2034:5:2034:18 | CallTarget | func:r2034_1 | -| ir.cpp:2034:5:2034:18 | ChiPartial | partial:m2034_3 | -| ir.cpp:2034:5:2034:18 | ChiTotal | total:m2033_6 | -| ir.cpp:2034:5:2034:18 | SideEffect | ~m2033_6 | -| ir.cpp:2034:5:2034:18 | Unary | r2034_2 | -| ir.cpp:2034:5:2034:25 | ChiPartial | partial:m2034_6 | -| ir.cpp:2034:5:2034:25 | ChiTotal | total:m2034_4 | -| ir.cpp:2034:19:2034:22 | Address | &:r2034_5 | -| ir.cpp:2035:5:2035:18 | CallTarget | func:r2035_1 | -| ir.cpp:2035:5:2035:18 | ChiPartial | partial:m2035_3 | -| ir.cpp:2035:5:2035:18 | ChiTotal | total:m2034_7 | -| ir.cpp:2035:5:2035:18 | SideEffect | ~m2034_7 | -| ir.cpp:2035:5:2035:18 | Unary | r2035_2 | -| ir.cpp:2035:5:2035:25 | ChiPartial | partial:m2035_6 | -| ir.cpp:2035:5:2035:25 | ChiTotal | total:m2035_4 | -| ir.cpp:2035:19:2035:22 | Address | &:r2035_5 | -| ir.cpp:2036:5:2036:19 | CallTarget | func:r2036_2 | -| ir.cpp:2036:5:2036:19 | ChiPartial | partial:m2036_4 | -| ir.cpp:2036:5:2036:19 | ChiTotal | total:m2035_7 | -| ir.cpp:2036:5:2036:19 | SideEffect | ~m2035_7 | -| ir.cpp:2036:5:2036:19 | StoreValue | r2036_3 | -| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | -| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | -| ir.cpp:2039:6:2039:21 | ChiPartial | partial:m2039_3 | -| ir.cpp:2039:6:2039:21 | ChiTotal | total:m2039_2 | -| ir.cpp:2039:6:2039:21 | SideEffect | ~m2043_6 | -| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | -| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | -| ir.cpp:2040:7:2040:7 | Arg(this) | this:r2040_1 | -| ir.cpp:2040:7:2040:7 | CallTarget | func:r2040_3 | -| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_5 | -| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_7 | -| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2039_4 | -| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2040_2 | -| ir.cpp:2040:7:2040:7 | SideEffect | ~m2039_4 | -| ir.cpp:2041:11:2041:13 | Address | &:r2041_1 | -| ir.cpp:2041:23:2041:45 | StoreValue | r2041_2 | -| ir.cpp:2042:5:2042:7 | Address | &:r2042_3 | -| ir.cpp:2042:13:2042:32 | StoreValue | r2042_2 | -| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | -| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | -| ir.cpp:2043:1:2043:1 | Arg(this) | this:r2043_2 | -| ir.cpp:2043:1:2043:1 | CallTarget | func:r2043_3 | -| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_5 | -| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_8 | -| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_6 | -| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_8 | -| ir.cpp:2043:1:2043:1 | SideEffect | m2040_8 | -| ir.cpp:2043:1:2043:1 | SideEffect | ~m2040_6 | -| ir.cpp:2045:6:2045:19 | ChiPartial | partial:m2045_3 | -| ir.cpp:2045:6:2045:19 | ChiTotal | total:m2045_2 | -| ir.cpp:2045:6:2045:19 | SideEffect | ~m2049_9 | -| ir.cpp:2045:26:2045:26 | Address | &:r2045_5 | -| ir.cpp:2045:33:2045:33 | Address | &:r2045_7 | -| ir.cpp:2045:40:2045:40 | Address | &:r2045_9 | -| ir.cpp:2045:47:2045:47 | Address | &:r2045_11 | -| ir.cpp:2046:5:2046:5 | Address | &:r2046_7 | -| ir.cpp:2046:9:2046:9 | Address | &:r2046_1 | -| ir.cpp:2046:9:2046:9 | Condition | r2046_2 | -| ir.cpp:2046:9:2046:9 | Load | m2045_6 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_5 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_11 | -| ir.cpp:2046:9:2046:17 | Address | &:r2046_15 | -| ir.cpp:2046:9:2046:17 | Load | m2046_4 | -| ir.cpp:2046:9:2046:17 | Phi | from 2:m2046_12 | -| ir.cpp:2046:9:2046:17 | Phi | from 3:m2046_16 | -| ir.cpp:2046:9:2046:17 | StoreValue | r2046_6 | -| ir.cpp:2046:13:2046:13 | Address | &:r2046_9 | -| ir.cpp:2046:13:2046:13 | Load | m2045_8 | -| ir.cpp:2046:13:2046:13 | StoreValue | r2046_10 | -| ir.cpp:2046:17:2046:17 | Address | &:r2046_13 | -| ir.cpp:2046:17:2046:17 | Load | m2045_10 | -| ir.cpp:2046:17:2046:17 | StoreValue | r2046_14 | -| ir.cpp:2047:5:2047:5 | Address | &:r2047_7 | -| ir.cpp:2047:9:2047:9 | Address | &:r2047_1 | -| ir.cpp:2047:9:2047:9 | Condition | r2047_2 | -| ir.cpp:2047:9:2047:9 | Load | m2045_6 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_5 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_11 | -| ir.cpp:2047:9:2047:17 | Address | &:r2047_14 | -| ir.cpp:2047:9:2047:17 | Load | m2047_4 | -| ir.cpp:2047:9:2047:17 | Phi | from 5:m2047_12 | -| ir.cpp:2047:9:2047:17 | Phi | from 6:m2047_15 | -| ir.cpp:2047:9:2047:17 | StoreValue | r2047_6 | -| ir.cpp:2047:13:2047:13 | Address | &:r2047_9 | -| ir.cpp:2047:13:2047:13 | Load | m2045_8 | -| ir.cpp:2047:13:2047:13 | StoreValue | r2047_10 | -| ir.cpp:2047:17:2047:17 | StoreValue | r2047_13 | -| ir.cpp:2048:5:2048:5 | Address | &:r2048_7 | -| ir.cpp:2048:9:2048:9 | Address | &:r2048_1 | -| ir.cpp:2048:9:2048:9 | Condition | r2048_2 | -| ir.cpp:2048:9:2048:9 | Load | m2045_6 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_5 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_10 | -| ir.cpp:2048:9:2048:17 | Address | &:r2048_13 | -| ir.cpp:2048:9:2048:17 | Load | m2048_4 | -| ir.cpp:2048:9:2048:17 | Phi | from 8:m2048_11 | -| ir.cpp:2048:9:2048:17 | Phi | from 9:m2048_14 | -| ir.cpp:2048:9:2048:17 | StoreValue | r2048_6 | -| ir.cpp:2048:13:2048:13 | StoreValue | r2048_9 | -| ir.cpp:2048:17:2048:17 | StoreValue | r2048_12 | -| ir.cpp:2049:5:2049:19 | ChiPartial | partial:m2049_8 | -| ir.cpp:2049:5:2049:19 | ChiTotal | total:m2045_4 | -| ir.cpp:2049:6:2049:6 | Address | &:r2049_2 | -| ir.cpp:2049:6:2049:6 | Condition | r2049_3 | -| ir.cpp:2049:6:2049:6 | Load | m2045_6 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_6 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_7 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_11 | -| ir.cpp:2049:6:2049:14 | Address | &:r2049_14 | -| ir.cpp:2049:6:2049:14 | Load | m2049_5 | -| ir.cpp:2049:6:2049:14 | Phi | from 11:m2049_12 | -| ir.cpp:2049:6:2049:14 | Phi | from 12:m2049_15 | -| ir.cpp:2049:10:2049:10 | StoreValue | r2049_10 | -| ir.cpp:2049:14:2049:14 | StoreValue | r2049_13 | -| ir.cpp:2049:19:2049:19 | StoreValue | r2049_1 | -| ir.cpp:2055:6:2055:22 | ChiPartial | partial:m2055_3 | -| ir.cpp:2055:6:2055:22 | ChiTotal | total:m2055_2 | -| ir.cpp:2055:6:2055:22 | SideEffect | m2055_3 | -| ir.cpp:2055:29:2055:29 | Address | &:r2055_5 | -| ir.cpp:2055:46:2055:46 | Address | &:r2055_7 | -| ir.cpp:2055:63:2055:63 | Address | &:r2055_9 | -| ir.cpp:2055:80:2055:80 | Address | &:r2055_11 | -| ir.cpp:2056:5:2056:5 | Address | &:r2056_7 | -| ir.cpp:2056:9:2056:9 | Address | &:r2056_1 | -| ir.cpp:2056:9:2056:9 | Condition | r2056_2 | -| ir.cpp:2056:9:2056:9 | Load | m2055_6 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_5 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_11 | -| ir.cpp:2056:9:2056:17 | Address | &:r2056_15 | -| ir.cpp:2056:9:2056:17 | Load | m2056_4 | -| ir.cpp:2056:9:2056:17 | Phi | from 2:m2056_12 | -| ir.cpp:2056:9:2056:17 | Phi | from 3:m2056_16 | -| ir.cpp:2056:9:2056:17 | StoreValue | r2056_6 | -| ir.cpp:2056:13:2056:13 | Address | &:r2056_9 | -| ir.cpp:2056:13:2056:13 | Load | m2055_8 | -| ir.cpp:2056:13:2056:13 | StoreValue | r2056_10 | -| ir.cpp:2056:17:2056:17 | Address | &:r2056_13 | -| ir.cpp:2056:17:2056:17 | Load | m2055_10 | -| ir.cpp:2056:17:2056:17 | StoreValue | r2056_14 | -| ir.cpp:2057:5:2057:5 | Address | &:r2057_10 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_2 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_6 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_17 | -| ir.cpp:2057:9:2057:9 | Address | &:r2057_23 | -| ir.cpp:2057:9:2057:9 | Condition | r2057_3 | -| ir.cpp:2057:9:2057:9 | Load | m2055_6 | -| ir.cpp:2057:9:2057:9 | Load | m2057_5 | -| ir.cpp:2057:9:2057:9 | Phi | from 5:m2057_18 | -| ir.cpp:2057:9:2057:9 | Phi | from 6:m2057_24 | -| ir.cpp:2057:9:2057:9 | StoreValue | r2057_7 | -| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | -| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | -| ir.cpp:2057:9:2057:31 | Load | m2057_8 | -| ir.cpp:2057:9:2057:31 | StoreValue | r2057_9 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | -| ir.cpp:2057:13:2057:13 | Address | &:r2057_13 | -| ir.cpp:2057:13:2057:13 | Load | m2055_8 | -| ir.cpp:2057:13:2057:13 | Load | m2057_15 | -| ir.cpp:2057:13:2057:13 | StoreValue | r2057_14 | -| ir.cpp:2057:13:2057:13 | StoreValue | r2057_16 | -| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | -| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | -| ir.cpp:2057:17:2057:31 | Load | m2057_21 | -| ir.cpp:2057:17:2057:31 | StoreValue | r2057_20 | -| ir.cpp:2057:17:2057:31 | StoreValue | r2057_22 | -| ir.cpp:2058:5:2058:5 | Address | &:r2058_10 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_2 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_6 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_16 | -| ir.cpp:2058:9:2058:9 | Address | &:r2058_22 | -| ir.cpp:2058:9:2058:9 | Condition | r2058_3 | -| ir.cpp:2058:9:2058:9 | Load | m2055_6 | -| ir.cpp:2058:9:2058:9 | Load | m2058_5 | -| ir.cpp:2058:9:2058:9 | Phi | from 8:m2058_17 | -| ir.cpp:2058:9:2058:9 | Phi | from 9:m2058_23 | -| ir.cpp:2058:9:2058:9 | StoreValue | r2058_7 | -| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | -| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | -| ir.cpp:2058:9:2058:45 | Load | m2058_8 | -| ir.cpp:2058:9:2058:45 | StoreValue | r2058_9 | -| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | -| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | -| ir.cpp:2058:13:2058:27 | Load | m2058_14 | -| ir.cpp:2058:13:2058:27 | StoreValue | r2058_13 | -| ir.cpp:2058:13:2058:27 | StoreValue | r2058_15 | -| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | -| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | -| ir.cpp:2058:31:2058:45 | Load | m2058_20 | -| ir.cpp:2058:31:2058:45 | StoreValue | r2058_19 | -| ir.cpp:2058:31:2058:45 | StoreValue | r2058_21 | -| ir.cpp:2059:6:2059:6 | Address | &:r2059_11 | -| ir.cpp:2059:6:2059:6 | Unary | r2059_11 | -| ir.cpp:2059:6:2059:18 | Address | &:r2059_13 | -| ir.cpp:2059:10:2059:10 | Address | &:r2059_5 | -| ir.cpp:2059:10:2059:10 | Condition | r2059_6 | -| ir.cpp:2059:10:2059:10 | Load | m2055_6 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_9 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_17 | -| ir.cpp:2059:10:2059:18 | Address | &:r2059_21 | -| ir.cpp:2059:10:2059:18 | Load | m2059_8 | -| ir.cpp:2059:10:2059:18 | Phi | from 11:m2059_18 | -| ir.cpp:2059:10:2059:18 | Phi | from 12:m2059_22 | -| ir.cpp:2059:10:2059:18 | StoreValue | r2059_10 | -| ir.cpp:2059:14:2059:14 | Address | &:r2059_15 | -| ir.cpp:2059:14:2059:14 | Load | m2055_8 | -| ir.cpp:2059:14:2059:14 | StoreValue | r2059_16 | -| ir.cpp:2059:18:2059:18 | Address | &:r2059_19 | -| ir.cpp:2059:18:2059:18 | Load | m2055_10 | -| ir.cpp:2059:18:2059:18 | StoreValue | r2059_20 | -| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | -| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | -| ir.cpp:2059:23:2059:37 | Load | m2059_3 | -| ir.cpp:2059:23:2059:37 | StoreValue | r2059_2 | -| ir.cpp:2059:23:2059:37 | StoreValue | r2059_4 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | -| ir.cpp:2062:8:2062:8 | Address | &:r2062_10 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | -| ir.cpp:2062:8:2062:8 | Load | m0_10 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | Load | m2062_6 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | -| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | -| ir.cpp:2063:13:2063:29 | ChiPartial | partial:m2063_3 | -| ir.cpp:2063:13:2063:29 | ChiTotal | total:m2063_2 | -| ir.cpp:2063:13:2063:29 | Load | m2063_6 | -| ir.cpp:2063:13:2063:29 | SideEffect | m2063_3 | -| ir.cpp:2063:13:2063:29 | SideEffect | m2063_8 | -| ir.cpp:2066:6:2066:25 | ChiPartial | partial:m2066_3 | -| ir.cpp:2066:6:2066:25 | ChiTotal | total:m2066_2 | -| ir.cpp:2066:6:2066:25 | SideEffect | ~m2070_32 | -| ir.cpp:2066:32:2066:32 | Address | &:r2066_5 | -| ir.cpp:2066:52:2066:52 | Address | &:r2066_7 | -| ir.cpp:2066:72:2066:72 | Address | &:r2066_9 | -| ir.cpp:2066:92:2066:92 | Address | &:r2066_11 | -| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | -| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | -| ir.cpp:2067:5:2067:5 | Arg(this) | this:r2067_1 | -| ir.cpp:2067:5:2067:5 | ChiPartial | partial:m2067_16 | -| ir.cpp:2067:5:2067:5 | ChiTotal | total:m2066_12 | -| ir.cpp:2067:5:2067:5 | SideEffect | m2066_12 | -| ir.cpp:2067:7:2067:7 | CallTarget | func:r2067_2 | -| ir.cpp:2067:7:2067:7 | ChiPartial | partial:m2067_12 | -| ir.cpp:2067:7:2067:7 | ChiTotal | total:m2066_4 | -| ir.cpp:2067:7:2067:7 | SideEffect | ~m2066_4 | -| ir.cpp:2067:7:2067:7 | Unary | r2067_11 | -| ir.cpp:2067:9:2067:9 | Address | &:r2067_3 | -| ir.cpp:2067:9:2067:9 | Condition | r2067_4 | -| ir.cpp:2067:9:2067:9 | Load | m2066_6 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_7 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_10 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_20 | -| ir.cpp:2067:9:2067:17 | Address | &:r2067_23 | -| ir.cpp:2067:9:2067:17 | Arg(0) | 0:r2067_10 | -| ir.cpp:2067:9:2067:17 | Load | m2067_6 | -| ir.cpp:2067:9:2067:17 | Phi | from 2:m2067_21 | -| ir.cpp:2067:9:2067:17 | Phi | from 3:m2067_24 | -| ir.cpp:2067:9:2067:17 | SideEffect | ~m2067_13 | -| ir.cpp:2067:9:2067:17 | Unary | r2067_8 | -| ir.cpp:2067:9:2067:17 | Unary | r2067_9 | -| ir.cpp:2067:13:2067:13 | StoreValue | r2067_19 | -| ir.cpp:2067:17:2067:17 | StoreValue | r2067_22 | -| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | -| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | -| ir.cpp:2068:5:2068:5 | Arg(this) | this:r2068_1 | -| ir.cpp:2068:5:2068:5 | ChiPartial | partial:m2068_19 | -| ir.cpp:2068:5:2068:5 | ChiTotal | total:m2067_17 | -| ir.cpp:2068:5:2068:5 | SideEffect | m2067_17 | -| ir.cpp:2068:7:2068:7 | CallTarget | func:r2068_2 | -| ir.cpp:2068:7:2068:7 | ChiPartial | partial:m2068_15 | -| ir.cpp:2068:7:2068:7 | ChiTotal | total:m2068_7 | -| ir.cpp:2068:7:2068:7 | SideEffect | ~m2068_7 | -| ir.cpp:2068:7:2068:7 | Unary | r2068_14 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_4 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_9 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_35 | -| ir.cpp:2068:9:2068:9 | Address | &:r2068_46 | -| ir.cpp:2068:9:2068:9 | Condition | r2068_5 | -| ir.cpp:2068:9:2068:9 | Load | m2066_6 | -| ir.cpp:2068:9:2068:9 | Load | m2068_8 | -| ir.cpp:2068:9:2068:9 | Phi | from 5:m2068_36 | -| ir.cpp:2068:9:2068:9 | Phi | from 5:~m2068_30 | -| ir.cpp:2068:9:2068:9 | Phi | from 6:m2068_47 | -| ir.cpp:2068:9:2068:9 | Phi | from 6:~m2068_42 | -| ir.cpp:2068:9:2068:9 | StoreValue | r2068_10 | -| ir.cpp:2068:9:2068:34 | Address | &:r2068_3 | -| ir.cpp:2068:9:2068:34 | Address | &:r2068_13 | -| ir.cpp:2068:9:2068:34 | Arg(0) | 0:r2068_13 | -| ir.cpp:2068:9:2068:34 | SideEffect | ~m2068_11 | -| ir.cpp:2068:9:2068:34 | Unary | r2068_3 | -| ir.cpp:2068:9:2068:34 | Unary | r2068_12 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | -| ir.cpp:2068:13:2068:13 | Address | &:r2068_27 | -| ir.cpp:2068:13:2068:13 | Arg(0) | 0:r2068_27 | -| ir.cpp:2068:13:2068:13 | Arg(this) | this:r2068_22 | -| ir.cpp:2068:13:2068:13 | CallTarget | func:r2068_24 | -| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_29 | -| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_32 | -| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2067_13 | -| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2068_23 | -| ir.cpp:2068:13:2068:13 | Load | m2068_33 | -| ir.cpp:2068:13:2068:13 | SideEffect | ~m2066_8 | -| ir.cpp:2068:13:2068:13 | SideEffect | ~m2067_13 | -| ir.cpp:2068:13:2068:13 | StoreValue | r2068_34 | -| ir.cpp:2068:13:2068:13 | Unary | r2068_25 | -| ir.cpp:2068:13:2068:13 | Unary | r2068_26 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | -| ir.cpp:2068:17:2068:34 | Arg(this) | this:r2068_37 | -| ir.cpp:2068:17:2068:34 | CallTarget | func:r2068_39 | -| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_41 | -| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_43 | -| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2067_13 | -| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2068_38 | -| ir.cpp:2068:17:2068:34 | Load | m2068_44 | -| ir.cpp:2068:17:2068:34 | SideEffect | ~m2067_13 | -| ir.cpp:2068:17:2068:34 | StoreValue | r2068_45 | -| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | -| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | -| ir.cpp:2069:5:2069:5 | Arg(this) | this:r2069_1 | -| ir.cpp:2069:5:2069:5 | ChiPartial | partial:m2069_19 | -| ir.cpp:2069:5:2069:5 | ChiTotal | total:m2068_20 | -| ir.cpp:2069:5:2069:5 | SideEffect | m2068_20 | -| ir.cpp:2069:7:2069:7 | CallTarget | func:r2069_2 | -| ir.cpp:2069:7:2069:7 | ChiPartial | partial:m2069_15 | -| ir.cpp:2069:7:2069:7 | ChiTotal | total:m2069_7 | -| ir.cpp:2069:7:2069:7 | SideEffect | ~m2069_7 | -| ir.cpp:2069:7:2069:7 | Unary | r2069_14 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_4 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_9 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_31 | -| ir.cpp:2069:9:2069:9 | Address | &:r2069_42 | -| ir.cpp:2069:9:2069:9 | Condition | r2069_5 | -| ir.cpp:2069:9:2069:9 | Load | m2066_6 | -| ir.cpp:2069:9:2069:9 | Load | m2069_8 | -| ir.cpp:2069:9:2069:9 | Phi | from 8:m2069_32 | -| ir.cpp:2069:9:2069:9 | Phi | from 8:~m2069_27 | -| ir.cpp:2069:9:2069:9 | Phi | from 9:m2069_43 | -| ir.cpp:2069:9:2069:9 | Phi | from 9:~m2069_38 | -| ir.cpp:2069:9:2069:9 | StoreValue | r2069_10 | -| ir.cpp:2069:9:2069:51 | Address | &:r2069_3 | -| ir.cpp:2069:9:2069:51 | Address | &:r2069_13 | -| ir.cpp:2069:9:2069:51 | Arg(0) | 0:r2069_13 | -| ir.cpp:2069:9:2069:51 | SideEffect | ~m2069_11 | -| ir.cpp:2069:9:2069:51 | Unary | r2069_3 | -| ir.cpp:2069:9:2069:51 | Unary | r2069_12 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | -| ir.cpp:2069:13:2069:30 | Arg(this) | this:r2069_22 | -| ir.cpp:2069:13:2069:30 | CallTarget | func:r2069_24 | -| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_26 | -| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_28 | -| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2068_16 | -| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2069_23 | -| ir.cpp:2069:13:2069:30 | Load | m2069_29 | -| ir.cpp:2069:13:2069:30 | SideEffect | ~m2068_16 | -| ir.cpp:2069:13:2069:30 | StoreValue | r2069_30 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | -| ir.cpp:2069:34:2069:51 | Arg(this) | this:r2069_33 | -| ir.cpp:2069:34:2069:51 | CallTarget | func:r2069_35 | -| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_37 | -| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_39 | -| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2068_16 | -| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2069_34 | -| ir.cpp:2069:34:2069:51 | Load | m2069_40 | -| ir.cpp:2069:34:2069:51 | SideEffect | ~m2068_16 | -| ir.cpp:2069:34:2069:51 | StoreValue | r2069_41 | -| ir.cpp:2070:5:2070:19 | ChiPartial | partial:m2070_35 | -| ir.cpp:2070:5:2070:19 | ChiTotal | total:m2070_17 | -| ir.cpp:2070:5:2070:19 | SideEffect | m2070_17 | -| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | -| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | -| ir.cpp:2070:6:2070:6 | Arg(this) | this:r2070_1 | -| ir.cpp:2070:6:2070:6 | ChiPartial | partial:m2070_16 | -| ir.cpp:2070:6:2070:6 | ChiTotal | total:m2069_20 | -| ir.cpp:2070:6:2070:6 | SideEffect | m2069_20 | -| ir.cpp:2070:8:2070:8 | CallTarget | func:r2070_2 | -| ir.cpp:2070:8:2070:8 | ChiPartial | partial:m2070_12 | -| ir.cpp:2070:8:2070:8 | ChiTotal | total:m2069_16 | -| ir.cpp:2070:8:2070:8 | SideEffect | ~m2069_16 | -| ir.cpp:2070:8:2070:8 | Unary | r2070_11 | -| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | -| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | -| ir.cpp:2070:8:2070:19 | Arg(this) | this:r2070_18 | -| ir.cpp:2070:10:2070:10 | Address | &:r2070_3 | -| ir.cpp:2070:10:2070:10 | Condition | r2070_4 | -| ir.cpp:2070:10:2070:10 | Load | m2066_6 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_7 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_10 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_39 | -| ir.cpp:2070:10:2070:18 | Address | &:r2070_42 | -| ir.cpp:2070:10:2070:18 | Arg(0) | 0:r2070_10 | -| ir.cpp:2070:10:2070:18 | Load | m2070_6 | -| ir.cpp:2070:10:2070:18 | Phi | from 11:m2070_40 | -| ir.cpp:2070:10:2070:18 | Phi | from 12:m2070_43 | -| ir.cpp:2070:10:2070:18 | SideEffect | ~m2070_13 | -| ir.cpp:2070:10:2070:18 | Unary | r2070_8 | -| ir.cpp:2070:10:2070:18 | Unary | r2070_9 | -| ir.cpp:2070:14:2070:14 | StoreValue | r2070_38 | -| ir.cpp:2070:18:2070:18 | StoreValue | r2070_41 | -| ir.cpp:2070:21:2070:21 | CallTarget | func:r2070_19 | -| ir.cpp:2070:21:2070:21 | ChiPartial | partial:m2070_31 | -| ir.cpp:2070:21:2070:21 | ChiTotal | total:m2070_25 | -| ir.cpp:2070:21:2070:21 | SideEffect | ~m2070_25 | -| ir.cpp:2070:21:2070:21 | Unary | r2070_30 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | -| ir.cpp:2070:23:2070:40 | Address | &:r2070_29 | -| ir.cpp:2070:23:2070:40 | Arg(0) | 0:r2070_29 | -| ir.cpp:2070:23:2070:40 | Arg(this) | this:r2070_20 | -| ir.cpp:2070:23:2070:40 | CallTarget | func:r2070_22 | -| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_24 | -| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_26 | -| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_13 | -| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_21 | -| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_13 | -| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_27 | -| ir.cpp:2070:23:2070:40 | Unary | r2070_20 | -| ir.cpp:2070:23:2070:40 | Unary | r2070_28 | -| ir.cpp:2075:14:2075:22 | Address | &:r2075_7 | -| ir.cpp:2075:14:2075:22 | ChiPartial | partial:m2075_3 | -| ir.cpp:2075:14:2075:22 | ChiTotal | total:m2075_2 | -| ir.cpp:2075:14:2075:22 | Load | m2080_2 | -| ir.cpp:2075:14:2075:22 | SideEffect | ~m2077_6 | -| ir.cpp:2075:37:2075:37 | Address | &:r2075_5 | -| ir.cpp:2076:16:2076:16 | Address | &:r2076_1 | -| ir.cpp:2077:3:2077:3 | Address | &:r2077_10 | -| ir.cpp:2077:7:2077:7 | Address | &:r2077_1 | -| ir.cpp:2077:7:2077:7 | Left | r2077_2 | -| ir.cpp:2077:7:2077:7 | Load | m2075_6 | -| ir.cpp:2077:7:2077:13 | Condition | r2077_4 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_8 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_12 | -| ir.cpp:2077:7:2079:28 | Address | &:r2077_14 | -| ir.cpp:2077:7:2079:28 | Load | m2077_7 | -| ir.cpp:2077:7:2079:28 | Phi | from 2:m2077_13 | -| ir.cpp:2077:7:2079:28 | Phi | from 2:~m2078_6 | -| ir.cpp:2077:7:2079:28 | Phi | from 3:m2077_15 | -| ir.cpp:2077:7:2079:28 | Phi | from 3:~m2079_6 | -| ir.cpp:2077:7:2079:28 | StoreValue | r2077_9 | -| ir.cpp:2077:11:2077:13 | Right | r2077_3 | -| ir.cpp:2078:6:2078:20 | CallTarget | func:r2078_1 | -| ir.cpp:2078:6:2078:20 | ChiPartial | partial:m2078_5 | -| ir.cpp:2078:6:2078:20 | ChiTotal | total:m2075_4 | -| ir.cpp:2078:6:2078:20 | SideEffect | ~m2075_4 | -| ir.cpp:2078:6:2078:26 | StoreValue | r2078_9 | -| ir.cpp:2078:22:2078:22 | Address | &:r2078_2 | -| ir.cpp:2078:22:2078:22 | Arg(0) | 0:r2078_3 | -| ir.cpp:2078:22:2078:22 | Load | m2075_6 | -| ir.cpp:2078:26:2078:26 | Address | &:r2078_7 | -| ir.cpp:2078:26:2078:26 | Load | m2075_6 | -| ir.cpp:2078:26:2078:26 | Unary | r2078_8 | -| ir.cpp:2079:5:2079:28 | StoreValue | r2079_9 | -| ir.cpp:2079:6:2079:20 | CallTarget | func:r2079_1 | -| ir.cpp:2079:6:2079:20 | ChiPartial | partial:m2079_5 | -| ir.cpp:2079:6:2079:20 | ChiTotal | total:m2075_4 | -| ir.cpp:2079:6:2079:20 | SideEffect | ~m2075_4 | -| ir.cpp:2079:6:2079:27 | Unary | r2079_8 | -| ir.cpp:2079:22:2079:22 | Address | &:r2079_2 | -| ir.cpp:2079:22:2079:22 | Arg(0) | 0:r2079_3 | -| ir.cpp:2079:22:2079:22 | Load | m2075_6 | -| ir.cpp:2079:26:2079:27 | Unary | r2079_7 | -| ir.cpp:2080:1:2080:1 | Address | &:r2080_1 | -| ir.cpp:2082:6:2082:17 | ChiPartial | partial:m2082_3 | -| ir.cpp:2082:6:2082:17 | ChiTotal | total:m2082_2 | -| ir.cpp:2082:6:2082:17 | SideEffect | ~m2085_6 | -| ir.cpp:2083:8:2083:8 | Address | &:r2083_1 | -| ir.cpp:2083:12:2083:18 | Address | &:r2083_4 | -| ir.cpp:2083:12:2083:18 | Arg(0) | 0:r2083_3 | -| ir.cpp:2083:12:2083:18 | CallTarget | func:r2083_2 | -| ir.cpp:2083:12:2083:18 | ChiPartial | partial:m2083_5 | -| ir.cpp:2083:12:2083:18 | ChiTotal | total:m2082_4 | -| ir.cpp:2083:12:2083:18 | SideEffect | ~m2082_4 | -| ir.cpp:2083:12:2083:18 | StoreValue | r2083_8 | -| ir.cpp:2083:12:2083:18 | Unary | r2083_4 | -| ir.cpp:2084:3:2084:4 | Address | &:r2084_4 | -| ir.cpp:2084:3:2084:8 | ChiPartial | partial:m2084_5 | -| ir.cpp:2084:3:2084:8 | ChiTotal | total:m2083_7 | -| ir.cpp:2084:4:2084:4 | Address | &:r2084_2 | -| ir.cpp:2084:4:2084:4 | Load | m2083_9 | -| ir.cpp:2084:4:2084:4 | Unary | r2084_3 | -| ir.cpp:2084:8:2084:8 | StoreValue | r2084_1 | -| ir.cpp:2085:3:2085:10 | CallTarget | func:r2085_1 | -| ir.cpp:2085:3:2085:10 | ChiPartial | partial:m2085_5 | -| ir.cpp:2085:3:2085:10 | ChiTotal | total:m2083_6 | -| ir.cpp:2085:3:2085:10 | SideEffect | ~m2083_6 | -| ir.cpp:2085:10:2085:10 | Address | &:r2085_2 | -| ir.cpp:2085:10:2085:10 | Arg(0) | 0:r2085_3 | -| ir.cpp:2085:10:2085:10 | Load | m2083_9 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | -| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | -| ir.cpp:2088:7:2088:7 | ChiPartial | partial:m2088_3 | -| ir.cpp:2088:7:2088:7 | ChiTotal | total:m2088_2 | -| ir.cpp:2088:7:2088:7 | Load | m2088_6 | -| ir.cpp:2088:7:2088:7 | SideEffect | m2088_3 | -| ir.cpp:2088:7:2088:7 | SideEffect | m2088_8 | -| ir.cpp:2090:10:2090:24 | ChiPartial | partial:m2090_3 | -| ir.cpp:2090:10:2090:24 | ChiTotal | total:m2090_2 | -| ir.cpp:2090:10:2090:24 | SideEffect | m2090_3 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | -| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | -| ir.cpp:2090:32:2090:32 | Load | m2090_6 | -| ir.cpp:2090:32:2090:32 | SideEffect | m2090_8 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | -| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | -| ir.cpp:2092:13:2092:18 | ChiPartial | partial:m2092_3 | -| ir.cpp:2092:13:2092:18 | ChiTotal | total:m2092_2 | -| ir.cpp:2092:13:2092:18 | Load | m2092_6 | -| ir.cpp:2092:13:2092:18 | SideEffect | m2092_3 | -| ir.cpp:2092:13:2092:18 | SideEffect | m2092_8 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | -| ir.cpp:2095:7:2095:7 | Address | &:r2095_9 | -| ir.cpp:2095:7:2095:7 | Arg(this) | this:r2095_9 | -| ir.cpp:2095:7:2095:7 | CallTarget | func:r2095_10 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_3 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_12 | -| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_14 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_2 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_4 | -| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_8 | -| ir.cpp:2095:7:2095:7 | Load | m2095_6 | -| ir.cpp:2095:7:2095:7 | SideEffect | m2095_15 | -| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_4 | -| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_13 | -| ir.cpp:2095:7:2095:7 | Unary | m2095_6 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | -| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | -| ir.cpp:2098:5:2098:13 | ChiPartial | partial:m2098_3 | -| ir.cpp:2098:5:2098:13 | ChiTotal | total:m2098_2 | -| ir.cpp:2098:5:2098:13 | Load | m2098_6 | -| ir.cpp:2098:5:2098:13 | SideEffect | m2098_8 | -| ir.cpp:2098:5:2098:13 | SideEffect | ~m2098_14 | -| ir.cpp:2098:5:2098:13 | Unary | m2098_6 | -| ir.cpp:2098:18:2098:18 | Arg(this) | this:r2098_10 | -| ir.cpp:2098:18:2098:18 | CallTarget | func:r2098_11 | -| ir.cpp:2098:18:2098:18 | ChiPartial | partial:m2098_13 | -| ir.cpp:2098:18:2098:18 | ChiTotal | total:m2098_4 | -| ir.cpp:2098:18:2098:18 | SideEffect | ~m2098_4 | -| ir.cpp:2100:10:2100:24 | ChiPartial | partial:m2100_3 | -| ir.cpp:2100:10:2100:24 | ChiTotal | total:m2100_2 | -| ir.cpp:2100:10:2100:24 | SideEffect | m2100_3 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | -| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | -| ir.cpp:2100:32:2100:32 | Load | m2100_6 | -| ir.cpp:2100:32:2100:32 | SideEffect | m2100_8 | -| ir.cpp:2105:5:2105:18 | Address | &:r2105_5 | -| ir.cpp:2105:5:2105:18 | ChiPartial | partial:m2105_3 | -| ir.cpp:2105:5:2105:18 | ChiTotal | total:m2105_2 | -| ir.cpp:2105:5:2105:18 | Load | m2115_2 | -| ir.cpp:2105:5:2105:18 | SideEffect | ~m2114_14 | -| ir.cpp:2107:12:2107:13 | Address | &:r2107_1 | -| ir.cpp:2107:17:2107:27 | Address | &:r2107_4 | -| ir.cpp:2107:17:2107:27 | Address | &:r2107_8 | -| ir.cpp:2107:17:2107:27 | Arg(0) | 0:r2107_3 | -| ir.cpp:2107:17:2107:27 | Arg(this) | this:r2107_8 | -| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_2 | -| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_9 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_5 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_11 | -| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_13 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2105_4 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_6 | -| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_7 | -| ir.cpp:2107:17:2107:27 | SideEffect | ~m2105_4 | -| ir.cpp:2107:17:2107:27 | SideEffect | ~m2107_6 | -| ir.cpp:2107:17:2107:27 | StoreValue | r2107_8 | -| ir.cpp:2107:17:2107:27 | Unary | r2107_4 | -| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_3 | -| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_10 | -| ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_5 | -| ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_13 | -| ir.cpp:2108:5:2108:13 | ChiTotal | total:m2107_12 | -| ir.cpp:2108:5:2108:13 | ChiTotal | total:m2108_6 | -| ir.cpp:2108:5:2108:13 | SideEffect | ~m2107_12 | -| ir.cpp:2108:5:2108:13 | SideEffect | ~m2108_6 | -| ir.cpp:2108:12:2108:13 | Address | &:r2108_1 | -| ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | -| ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | -| ir.cpp:2108:12:2108:13 | Arg(0) | 0:r2108_11 | -| ir.cpp:2108:12:2108:13 | ChiPartial | partial:m2108_8 | -| ir.cpp:2108:12:2108:13 | ChiTotal | total:m2107_14 | -| ir.cpp:2108:12:2108:13 | Load | m2107_15 | -| ir.cpp:2108:12:2108:13 | SideEffect | ~m2107_14 | -| ir.cpp:2108:12:2108:13 | Unary | r2108_1 | -| ir.cpp:2110:12:2110:13 | Address | &:r2110_1 | -| ir.cpp:2110:17:2110:30 | Address | &:r2110_4 | -| ir.cpp:2110:17:2110:30 | Address | &:r2110_8 | -| ir.cpp:2110:17:2110:30 | Arg(0) | 0:r2110_3 | -| ir.cpp:2110:17:2110:30 | Arg(this) | this:r2110_8 | -| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_2 | -| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_9 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_5 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_11 | -| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_13 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2108_14 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_6 | -| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_7 | -| ir.cpp:2110:17:2110:30 | SideEffect | ~m2108_14 | -| ir.cpp:2110:17:2110:30 | SideEffect | ~m2110_6 | -| ir.cpp:2110:17:2110:30 | StoreValue | r2110_15 | -| ir.cpp:2110:17:2110:30 | Unary | r2110_4 | -| ir.cpp:2110:17:2110:30 | Unary | r2110_8 | -| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_3 | -| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_10 | -| ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_5 | -| ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_13 | -| ir.cpp:2111:5:2111:13 | ChiTotal | total:m2110_12 | -| ir.cpp:2111:5:2111:13 | ChiTotal | total:m2111_6 | -| ir.cpp:2111:5:2111:13 | SideEffect | ~m2110_12 | -| ir.cpp:2111:5:2111:13 | SideEffect | ~m2111_6 | -| ir.cpp:2111:12:2111:13 | Address | &:r2111_1 | -| ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | -| ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | -| ir.cpp:2111:12:2111:13 | Arg(0) | 0:r2111_11 | -| ir.cpp:2111:12:2111:13 | ChiPartial | partial:m2111_8 | -| ir.cpp:2111:12:2111:13 | ChiTotal | total:m2110_14 | -| ir.cpp:2111:12:2111:13 | Load | m2110_16 | -| ir.cpp:2111:12:2111:13 | SideEffect | ~m2110_14 | -| ir.cpp:2111:12:2111:13 | Unary | r2111_1 | -| ir.cpp:2113:15:2113:15 | Address | &:r2113_1 | -| ir.cpp:2113:19:2113:32 | Address | &:r2113_4 | -| ir.cpp:2113:19:2113:32 | Address | &:r2113_8 | -| ir.cpp:2113:19:2113:32 | Arg(0) | 0:r2113_3 | -| ir.cpp:2113:19:2113:32 | Arg(this) | this:r2113_8 | -| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_2 | -| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_9 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_5 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_11 | -| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_13 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2111_14 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_6 | -| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_7 | -| ir.cpp:2113:19:2113:32 | SideEffect | ~m2111_14 | -| ir.cpp:2113:19:2113:32 | SideEffect | ~m2113_6 | -| ir.cpp:2113:19:2113:32 | StoreValue | r2113_8 | -| ir.cpp:2113:19:2113:32 | Unary | r2113_4 | -| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_3 | -| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_10 | -| ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_5 | -| ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_13 | -| ir.cpp:2114:5:2114:12 | ChiTotal | total:m2113_12 | -| ir.cpp:2114:5:2114:12 | ChiTotal | total:m2114_6 | -| ir.cpp:2114:5:2114:12 | SideEffect | ~m2113_12 | -| ir.cpp:2114:5:2114:12 | SideEffect | ~m2114_6 | -| ir.cpp:2114:12:2114:12 | Address | &:r2114_1 | -| ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | -| ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | -| ir.cpp:2114:12:2114:12 | Arg(0) | 0:r2114_11 | -| ir.cpp:2114:12:2114:12 | ChiPartial | partial:m2114_8 | -| ir.cpp:2114:12:2114:12 | ChiTotal | total:m2113_14 | -| ir.cpp:2114:12:2114:12 | Load | m2113_15 | -| ir.cpp:2114:12:2114:12 | SideEffect | ~m2113_14 | -| ir.cpp:2114:12:2114:12 | Unary | r2114_1 | -| ir.cpp:2115:1:2115:1 | Address | &:r2115_1 | -| ir.cpp:2119:6:2119:26 | ChiPartial | partial:m2119_3 | -| ir.cpp:2119:6:2119:26 | ChiTotal | total:m2119_2 | -| ir.cpp:2119:6:2119:26 | SideEffect | ~m2121_5 | -| ir.cpp:2120:13:2120:13 | Address | &:r2120_1 | -| ir.cpp:2120:16:2120:19 | StoreValue | r2120_2 | -| ir.cpp:2121:3:2121:27 | CallTarget | func:r2121_1 | -| ir.cpp:2121:3:2121:27 | ChiPartial | partial:m2121_4 | -| ir.cpp:2121:3:2121:27 | ChiTotal | total:m2119_4 | -| ir.cpp:2121:3:2121:27 | SideEffect | ~m2119_4 | -| ir.cpp:2121:29:2121:29 | Arg(0) | 0:r2121_2 | -| ir.cpp:2126:5:2126:11 | Address | &:r2126_6 | -| ir.cpp:2126:5:2126:11 | ChiPartial | partial:m2126_3 | -| ir.cpp:2126:5:2126:11 | ChiTotal | total:m2126_2 | -| ir.cpp:2126:5:2126:11 | Load | m2131_4 | -| ir.cpp:2126:5:2126:11 | SideEffect | ~m2130_4 | -| ir.cpp:2127:9:2127:9 | Address | &:r2127_1 | -| ir.cpp:2127:13:2127:15 | CallTarget | func:r2127_2 | -| ir.cpp:2127:13:2127:15 | ChiPartial | partial:m2127_6 | -| ir.cpp:2127:13:2127:15 | ChiTotal | total:m2126_4 | -| ir.cpp:2127:13:2127:15 | SideEffect | ~m2126_4 | -| ir.cpp:2127:13:2127:15 | StoreValue | r2127_5 | -| ir.cpp:2127:17:2127:17 | Arg(0) | 0:r2127_3 | -| ir.cpp:2127:19:2127:19 | Arg(1) | 1:r2127_4 | -| ir.cpp:2128:9:2128:9 | Address | &:r2128_1 | -| ir.cpp:2128:9:2128:9 | Left | r2128_2 | -| ir.cpp:2128:9:2128:9 | Load | m2127_8 | -| ir.cpp:2128:9:2128:14 | Condition | r2128_4 | -| ir.cpp:2128:14:2128:14 | Right | r2128_3 | -| ir.cpp:2129:9:2129:12 | CallTarget | func:r2129_1 | -| ir.cpp:2129:9:2129:12 | ChiPartial | partial:m2129_4 | -| ir.cpp:2129:9:2129:12 | ChiTotal | total:m2127_7 | -| ir.cpp:2129:9:2129:12 | SideEffect | ~m2127_7 | -| ir.cpp:2129:14:2129:14 | Arg(0) | 0:r2129_2 | -| ir.cpp:2130:5:2130:12 | CallTarget | func:r2130_1 | -| ir.cpp:2130:5:2130:12 | ChiPartial | partial:m2130_3 | -| ir.cpp:2130:5:2130:12 | ChiTotal | total:m2127_7 | -| ir.cpp:2130:5:2130:12 | SideEffect | ~m2127_7 | -| ir.cpp:2131:5:2131:13 | Address | &:r2131_1 | -| ir.cpp:2131:12:2131:12 | Address | &:r2131_2 | -| ir.cpp:2131:12:2131:12 | Load | m2127_8 | -| ir.cpp:2131:12:2131:12 | StoreValue | r2131_3 | -| ir.cpp:2134:6:2134:17 | ChiPartial | partial:m2134_3 | -| ir.cpp:2134:6:2134:17 | ChiTotal | total:m2134_2 | -| ir.cpp:2135:5:2135:12 | CallTarget | func:r2135_1 | -| ir.cpp:2135:5:2135:12 | ChiPartial | partial:m2135_3 | -| ir.cpp:2135:5:2135:12 | ChiTotal | total:m2134_4 | -| ir.cpp:2135:5:2135:12 | SideEffect | ~m2134_4 | -| ir.cpp:2136:5:2136:8 | CallTarget | func:r2136_1 | -| ir.cpp:2136:5:2136:8 | ChiPartial | partial:m2136_4 | -| ir.cpp:2136:5:2136:8 | ChiTotal | total:m2135_4 | -| ir.cpp:2136:5:2136:8 | SideEffect | ~m2135_4 | -| ir.cpp:2136:10:2136:10 | Arg(0) | 0:r2136_2 | -| ir.cpp:2139:5:2139:16 | Address | &:r2139_6 | -| ir.cpp:2139:5:2139:16 | ChiPartial | partial:m2139_3 | -| ir.cpp:2139:5:2139:16 | ChiTotal | total:m2139_2 | -| ir.cpp:2139:5:2139:16 | Load | m2144_4 | -| ir.cpp:2139:5:2139:16 | SideEffect | ~m2143_4 | -| ir.cpp:2140:9:2140:9 | Address | &:r2140_1 | -| ir.cpp:2140:13:2140:15 | CallTarget | func:r2140_2 | -| ir.cpp:2140:13:2140:15 | ChiPartial | partial:m2140_6 | -| ir.cpp:2140:13:2140:15 | ChiTotal | total:m2139_4 | -| ir.cpp:2140:13:2140:15 | SideEffect | ~m2139_4 | -| ir.cpp:2140:13:2140:15 | StoreValue | r2140_5 | -| ir.cpp:2140:17:2140:17 | Arg(0) | 0:r2140_3 | -| ir.cpp:2140:19:2140:19 | Arg(1) | 1:r2140_4 | +| ir.cpp:1971:9:1971:9 | Left | r1971_2 | +| ir.cpp:1971:9:1971:9 | Load | m1970_6 | +| ir.cpp:1971:9:1971:14 | Condition | r1971_4 | +| ir.cpp:1971:13:1971:14 | Right | r1971_3 | +| ir.cpp:1972:9:1972:20 | CallTarget | func:r1972_1 | +| ir.cpp:1972:9:1972:20 | ChiPartial | partial:m1972_3 | +| ir.cpp:1972:9:1972:20 | ChiTotal | total:m1970_4 | +| ir.cpp:1972:9:1972:20 | SideEffect | ~m1970_4 | +| ir.cpp:1974:5:1974:13 | Address | &:r1974_1 | +| ir.cpp:1974:12:1974:12 | Address | &:r1974_2 | +| ir.cpp:1974:12:1974:12 | Load | m1970_6 | +| ir.cpp:1974:12:1974:12 | StoreValue | r1974_3 | +| ir.cpp:1977:5:1977:19 | Address | &:r1977_7 | +| ir.cpp:1977:5:1977:19 | ChiPartial | partial:m1977_3 | +| ir.cpp:1977:5:1977:19 | ChiTotal | total:m1977_2 | +| ir.cpp:1977:5:1977:19 | Load | m1978_4 | +| ir.cpp:1977:5:1977:19 | SideEffect | m1977_3 | +| ir.cpp:1977:25:1977:25 | Address | &:r1977_5 | +| ir.cpp:1978:5:1978:13 | Address | &:r1978_1 | +| ir.cpp:1978:12:1978:12 | Address | &:r1978_2 | +| ir.cpp:1978:12:1978:12 | Load | m1977_6 | +| ir.cpp:1978:12:1978:12 | StoreValue | r1978_3 | +| ir.cpp:1981:6:1981:43 | ChiPartial | partial:m1981_3 | +| ir.cpp:1981:6:1981:43 | ChiTotal | total:m1981_2 | +| ir.cpp:1981:6:1981:43 | SideEffect | ~m1989_6 | +| ir.cpp:1982:7:1982:7 | Address | &:r1982_1 | +| ir.cpp:1982:7:1982:7 | Address | &:r1982_1 | +| ir.cpp:1982:7:1982:7 | Arg(this) | this:r1982_1 | +| ir.cpp:1982:7:1982:7 | CallTarget | func:r1982_3 | +| ir.cpp:1982:7:1982:7 | ChiPartial | partial:m1982_5 | +| ir.cpp:1982:7:1982:7 | ChiPartial | partial:m1982_7 | +| ir.cpp:1982:7:1982:7 | ChiTotal | total:m1981_4 | +| ir.cpp:1982:7:1982:7 | ChiTotal | total:m1982_2 | +| ir.cpp:1982:7:1982:7 | SideEffect | ~m1981_4 | +| ir.cpp:1983:9:1983:9 | Address | &:r1983_1 | +| ir.cpp:1984:5:1984:5 | Address | &:r1984_7 | +| ir.cpp:1984:11:1984:30 | CallTarget | func:r1984_2 | +| ir.cpp:1984:11:1984:30 | ChiPartial | partial:m1984_5 | +| ir.cpp:1984:11:1984:30 | ChiTotal | total:m1982_6 | +| ir.cpp:1984:11:1984:30 | SideEffect | ~m1982_6 | +| ir.cpp:1984:11:1984:30 | StoreValue | r1984_4 | +| ir.cpp:1984:32:1984:33 | Arg(0) | 0:r1984_3 | +| ir.cpp:1985:9:1985:9 | Address | &:r1985_1 | +| ir.cpp:1986:5:1986:5 | Address | &:r1986_6 | +| ir.cpp:1986:9:1986:31 | CallTarget | func:r1986_1 | +| ir.cpp:1986:9:1986:31 | ChiPartial | partial:m1986_4 | +| ir.cpp:1986:9:1986:31 | ChiTotal | total:m1984_6 | +| ir.cpp:1986:9:1986:31 | SideEffect | ~m1984_6 | +| ir.cpp:1986:9:1986:31 | StoreValue | r1986_3 | +| ir.cpp:1986:33:1986:34 | Arg(0) | 0:r1986_2 | +| ir.cpp:1987:9:1987:9 | Address | &:r1987_1 | +| ir.cpp:1988:5:1988:5 | Address | &:r1988_6 | +| ir.cpp:1988:9:1988:23 | CallTarget | func:r1988_1 | +| ir.cpp:1988:9:1988:23 | ChiPartial | partial:m1988_4 | +| ir.cpp:1988:9:1988:23 | ChiTotal | total:m1986_5 | +| ir.cpp:1988:9:1988:23 | SideEffect | ~m1986_5 | +| ir.cpp:1988:9:1988:23 | StoreValue | r1988_3 | +| ir.cpp:1988:25:1988:26 | Arg(0) | 0:r1988_2 | +| ir.cpp:1989:1:1989:1 | Address | &:r1989_2 | +| ir.cpp:1989:1:1989:1 | Address | &:r1989_2 | +| ir.cpp:1989:1:1989:1 | Arg(this) | this:r1989_2 | +| ir.cpp:1989:1:1989:1 | CallTarget | func:r1989_3 | +| ir.cpp:1989:1:1989:1 | ChiPartial | partial:m1989_5 | +| ir.cpp:1989:1:1989:1 | ChiPartial | partial:m1989_8 | +| ir.cpp:1989:1:1989:1 | ChiTotal | total:m1982_8 | +| ir.cpp:1989:1:1989:1 | ChiTotal | total:m1988_5 | +| ir.cpp:1989:1:1989:1 | SideEffect | m1982_8 | +| ir.cpp:1989:1:1989:1 | SideEffect | ~m1988_5 | +| ir.cpp:1991:6:1991:23 | ChiPartial | partial:m1991_3 | +| ir.cpp:1991:6:1991:23 | ChiTotal | total:m1991_2 | +| ir.cpp:1991:6:1991:23 | SideEffect | m1991_3 | +| ir.cpp:1992:7:1992:7 | Address | &:r1992_1 | +| ir.cpp:1992:10:1992:10 | Address | &:r1992_3 | +| ir.cpp:1993:3:1993:3 | Address | &:r1993_5 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_2 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_2 | +| ir.cpp:1993:7:1993:12 | Load | m1993_3 | +| ir.cpp:1993:7:1993:12 | StoreValue | r1993_4 | +| ir.cpp:1993:11:1993:12 | StoreValue | r1993_1 | +| ir.cpp:1996:6:1996:38 | ChiPartial | partial:m1996_3 | +| ir.cpp:1996:6:1996:38 | ChiTotal | total:m1996_2 | +| ir.cpp:1996:6:1996:38 | SideEffect | m1996_3 | +| ir.cpp:1997:7:1997:7 | Address | &:r1997_1 | +| ir.cpp:1997:10:1997:10 | Address | &:r1997_3 | +| ir.cpp:1997:13:1997:14 | StoreValue | r1997_4 | +| ir.cpp:1998:3:1998:3 | Address | &:r1998_7 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Address | &:r1998_2 | +| ir.cpp:1998:8:1998:8 | Left | r1998_3 | +| ir.cpp:1998:8:1998:8 | Load | m1997_5 | +| ir.cpp:1998:8:1998:14 | Load | m1998_5 | +| ir.cpp:1998:8:1998:14 | StoreValue | r1998_4 | +| ir.cpp:1998:8:1998:14 | StoreValue | r1998_6 | +| ir.cpp:1998:13:1998:14 | Right | r1998_1 | +| ir.cpp:2005:15:2005:43 | Address | &:r2005_5 | +| ir.cpp:2005:15:2005:43 | ChiPartial | partial:m2005_3 | +| ir.cpp:2005:15:2005:43 | ChiTotal | total:m2005_2 | +| ir.cpp:2005:15:2005:43 | Load | m2006_4 | +| ir.cpp:2005:15:2005:43 | SideEffect | m2005_3 | +| ir.cpp:2006:9:2006:17 | Address | &:r2006_1 | +| ir.cpp:2006:16:2006:16 | StoreValue | r2006_3 | +| ir.cpp:2006:16:2006:16 | Unary | r2006_2 | +| ir.cpp:2008:14:2008:39 | Address | &:r2008_5 | +| ir.cpp:2008:14:2008:39 | ChiPartial | partial:m2008_3 | +| ir.cpp:2008:14:2008:39 | ChiTotal | total:m2008_2 | +| ir.cpp:2008:14:2008:39 | Load | m2009_4 | +| ir.cpp:2008:14:2008:39 | SideEffect | m2008_3 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_1 | +| ir.cpp:2009:16:2009:16 | Address | &:r2009_2 | +| ir.cpp:2009:16:2009:16 | Load | ~m2008_3 | +| ir.cpp:2009:16:2009:16 | StoreValue | r2009_3 | +| ir.cpp:2013:6:2013:55 | ChiPartial | partial:m2013_3 | +| ir.cpp:2013:6:2013:55 | ChiTotal | total:m2013_2 | +| ir.cpp:2013:6:2013:55 | SideEffect | ~m2028_4 | +| ir.cpp:2014:7:2014:7 | Address | &:r2014_1 | +| ir.cpp:2016:7:2016:35 | CallTarget | func:r2016_2 | +| ir.cpp:2016:7:2016:35 | ChiPartial | partial:m2016_4 | +| ir.cpp:2016:7:2016:35 | ChiTotal | total:m2013_4 | +| ir.cpp:2016:7:2016:35 | SideEffect | ~m2013_4 | +| ir.cpp:2016:7:2016:35 | Unary | r2016_3 | +| ir.cpp:2017:5:2017:36 | CallTarget | func:r2017_1 | +| ir.cpp:2017:5:2017:36 | ChiPartial | partial:m2017_3 | +| ir.cpp:2017:5:2017:36 | ChiTotal | total:m2016_5 | +| ir.cpp:2017:5:2017:36 | SideEffect | ~m2016_5 | +| ir.cpp:2017:5:2017:36 | Unary | r2017_2 | +| ir.cpp:2018:7:2018:32 | CallTarget | func:r2018_2 | +| ir.cpp:2018:7:2018:32 | ChiPartial | partial:m2018_4 | +| ir.cpp:2018:7:2018:32 | ChiTotal | total:m2017_4 | +| ir.cpp:2018:7:2018:32 | SideEffect | ~m2017_4 | +| ir.cpp:2019:5:2019:33 | CallTarget | func:r2019_1 | +| ir.cpp:2019:5:2019:33 | ChiPartial | partial:m2019_3 | +| ir.cpp:2019:5:2019:33 | ChiTotal | total:m2018_5 | +| ir.cpp:2019:5:2019:33 | SideEffect | ~m2018_5 | +| ir.cpp:2021:7:2021:7 | Address | &:r2021_1 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_7 | +| ir.cpp:2022:11:2022:39 | Address | &:r2022_3 | +| ir.cpp:2022:11:2022:39 | CallTarget | func:r2022_2 | +| ir.cpp:2022:11:2022:39 | ChiPartial | partial:m2022_4 | +| ir.cpp:2022:11:2022:39 | ChiTotal | total:m2019_4 | +| ir.cpp:2022:11:2022:39 | SideEffect | ~m2019_4 | +| ir.cpp:2022:40:2022:42 | Load | ~m2022_5 | +| ir.cpp:2022:40:2022:42 | StoreValue | r2022_6 | +| ir.cpp:2023:7:2023:7 | Address | &:r2023_1 | +| ir.cpp:2024:5:2024:5 | Address | &:r2024_6 | +| ir.cpp:2024:9:2024:40 | Address | &:r2024_2 | +| ir.cpp:2024:9:2024:40 | CallTarget | func:r2024_1 | +| ir.cpp:2024:9:2024:40 | ChiPartial | partial:m2024_3 | +| ir.cpp:2024:9:2024:40 | ChiTotal | total:m2022_5 | +| ir.cpp:2024:9:2024:40 | SideEffect | ~m2022_5 | +| ir.cpp:2024:41:2024:43 | Load | ~m2024_4 | +| ir.cpp:2024:41:2024:43 | StoreValue | r2024_5 | +| ir.cpp:2025:7:2025:7 | Address | &:r2025_1 | +| ir.cpp:2026:5:2026:5 | Address | &:r2026_6 | +| ir.cpp:2026:11:2026:36 | CallTarget | func:r2026_2 | +| ir.cpp:2026:11:2026:36 | ChiPartial | partial:m2026_4 | +| ir.cpp:2026:11:2026:36 | ChiTotal | total:m2024_4 | +| ir.cpp:2026:11:2026:36 | SideEffect | ~m2024_4 | +| ir.cpp:2026:11:2026:36 | StoreValue | r2026_3 | +| ir.cpp:2027:7:2027:7 | Address | &:r2027_1 | +| ir.cpp:2028:5:2028:5 | Address | &:r2028_5 | +| ir.cpp:2028:9:2028:37 | CallTarget | func:r2028_1 | +| ir.cpp:2028:9:2028:37 | ChiPartial | partial:m2028_3 | +| ir.cpp:2028:9:2028:37 | ChiTotal | total:m2026_5 | +| ir.cpp:2028:9:2028:37 | SideEffect | ~m2026_5 | +| ir.cpp:2028:9:2028:37 | StoreValue | r2028_2 | +| ir.cpp:2031:6:2031:18 | ChiPartial | partial:m2031_3 | +| ir.cpp:2031:6:2031:18 | ChiTotal | total:m2031_2 | +| ir.cpp:2031:6:2031:18 | SideEffect | m2031_3 | +| ir.cpp:2032:18:2032:18 | Address | &:r2032_1 | +| ir.cpp:2033:5:2033:5 | Address | &:r2033_1 | +| ir.cpp:2033:5:2033:5 | Load | m2032_2 | +| ir.cpp:2042:6:2042:24 | ChiPartial | partial:m2042_3 | +| ir.cpp:2042:6:2042:24 | ChiTotal | total:m2042_2 | +| ir.cpp:2042:6:2042:24 | SideEffect | ~m2050_5 | +| ir.cpp:2043:12:2043:12 | Address | &:r2043_1 | +| ir.cpp:2045:5:2045:19 | ChiPartial | partial:m2045_7 | +| ir.cpp:2045:5:2045:19 | ChiTotal | total:m2045_5 | +| ir.cpp:2045:7:2045:12 | CallTarget | func:r2045_2 | +| ir.cpp:2045:7:2045:12 | ChiPartial | partial:m2045_4 | +| ir.cpp:2045:7:2045:12 | ChiTotal | total:m2042_4 | +| ir.cpp:2045:7:2045:12 | SideEffect | ~m2042_4 | +| ir.cpp:2045:7:2045:12 | Unary | r2045_3 | +| ir.cpp:2045:13:2045:16 | Address | &:r2045_6 | +| ir.cpp:2046:5:2046:19 | ChiPartial | partial:m2046_7 | +| ir.cpp:2046:5:2046:19 | ChiTotal | total:m2046_5 | +| ir.cpp:2046:7:2046:12 | CallTarget | func:r2046_2 | +| ir.cpp:2046:7:2046:12 | ChiPartial | partial:m2046_4 | +| ir.cpp:2046:7:2046:12 | ChiTotal | total:m2045_8 | +| ir.cpp:2046:7:2046:12 | SideEffect | ~m2045_8 | +| ir.cpp:2046:7:2046:12 | Unary | r2046_3 | +| ir.cpp:2046:13:2046:16 | Address | &:r2046_6 | +| ir.cpp:2047:5:2047:15 | Address | &:r2047_1 | +| ir.cpp:2047:5:2047:15 | Address | &:r2047_1 | +| ir.cpp:2047:7:2047:13 | CallTarget | func:r2047_3 | +| ir.cpp:2047:7:2047:13 | ChiPartial | partial:m2047_5 | +| ir.cpp:2047:7:2047:13 | ChiTotal | total:m2046_8 | +| ir.cpp:2047:7:2047:13 | SideEffect | ~m2046_8 | +| ir.cpp:2047:7:2047:13 | StoreValue | r2047_4 | +| ir.cpp:2048:5:2048:18 | CallTarget | func:r2048_1 | +| ir.cpp:2048:5:2048:18 | ChiPartial | partial:m2048_3 | +| ir.cpp:2048:5:2048:18 | ChiTotal | total:m2047_6 | +| ir.cpp:2048:5:2048:18 | SideEffect | ~m2047_6 | +| ir.cpp:2048:5:2048:18 | Unary | r2048_2 | +| ir.cpp:2048:5:2048:25 | ChiPartial | partial:m2048_6 | +| ir.cpp:2048:5:2048:25 | ChiTotal | total:m2048_4 | +| ir.cpp:2048:19:2048:22 | Address | &:r2048_5 | +| ir.cpp:2049:5:2049:18 | CallTarget | func:r2049_1 | +| ir.cpp:2049:5:2049:18 | ChiPartial | partial:m2049_3 | +| ir.cpp:2049:5:2049:18 | ChiTotal | total:m2048_7 | +| ir.cpp:2049:5:2049:18 | SideEffect | ~m2048_7 | +| ir.cpp:2049:5:2049:18 | Unary | r2049_2 | +| ir.cpp:2049:5:2049:25 | ChiPartial | partial:m2049_6 | +| ir.cpp:2049:5:2049:25 | ChiTotal | total:m2049_4 | +| ir.cpp:2049:19:2049:22 | Address | &:r2049_5 | +| ir.cpp:2050:5:2050:19 | CallTarget | func:r2050_2 | +| ir.cpp:2050:5:2050:19 | ChiPartial | partial:m2050_4 | +| ir.cpp:2050:5:2050:19 | ChiTotal | total:m2049_7 | +| ir.cpp:2050:5:2050:19 | SideEffect | ~m2049_7 | +| ir.cpp:2050:5:2050:19 | StoreValue | r2050_3 | +| ir.cpp:2050:5:2050:21 | Address | &:r2050_1 | +| ir.cpp:2050:5:2050:21 | Address | &:r2050_1 | +| ir.cpp:2053:6:2053:21 | ChiPartial | partial:m2053_3 | +| ir.cpp:2053:6:2053:21 | ChiTotal | total:m2053_2 | +| ir.cpp:2053:6:2053:21 | SideEffect | ~m2057_6 | +| ir.cpp:2054:7:2054:7 | Address | &:r2054_1 | +| ir.cpp:2054:7:2054:7 | Address | &:r2054_1 | +| ir.cpp:2054:7:2054:7 | Arg(this) | this:r2054_1 | +| ir.cpp:2054:7:2054:7 | CallTarget | func:r2054_3 | +| ir.cpp:2054:7:2054:7 | ChiPartial | partial:m2054_5 | +| ir.cpp:2054:7:2054:7 | ChiPartial | partial:m2054_7 | +| ir.cpp:2054:7:2054:7 | ChiTotal | total:m2053_4 | +| ir.cpp:2054:7:2054:7 | ChiTotal | total:m2054_2 | +| ir.cpp:2054:7:2054:7 | SideEffect | ~m2053_4 | +| ir.cpp:2055:11:2055:13 | Address | &:r2055_1 | +| ir.cpp:2055:23:2055:45 | StoreValue | r2055_2 | +| ir.cpp:2056:5:2056:7 | Address | &:r2056_3 | +| ir.cpp:2056:13:2056:32 | StoreValue | r2056_2 | +| ir.cpp:2057:1:2057:1 | Address | &:r2057_2 | +| ir.cpp:2057:1:2057:1 | Address | &:r2057_2 | +| ir.cpp:2057:1:2057:1 | Arg(this) | this:r2057_2 | +| ir.cpp:2057:1:2057:1 | CallTarget | func:r2057_3 | +| ir.cpp:2057:1:2057:1 | ChiPartial | partial:m2057_5 | +| ir.cpp:2057:1:2057:1 | ChiPartial | partial:m2057_8 | +| ir.cpp:2057:1:2057:1 | ChiTotal | total:m2054_6 | +| ir.cpp:2057:1:2057:1 | ChiTotal | total:m2054_8 | +| ir.cpp:2057:1:2057:1 | SideEffect | m2054_8 | +| ir.cpp:2057:1:2057:1 | SideEffect | ~m2054_6 | +| ir.cpp:2059:6:2059:19 | ChiPartial | partial:m2059_3 | +| ir.cpp:2059:6:2059:19 | ChiTotal | total:m2059_2 | +| ir.cpp:2059:6:2059:19 | SideEffect | ~m2063_9 | +| ir.cpp:2059:26:2059:26 | Address | &:r2059_5 | +| ir.cpp:2059:33:2059:33 | Address | &:r2059_7 | +| ir.cpp:2059:40:2059:40 | Address | &:r2059_9 | +| ir.cpp:2059:47:2059:47 | Address | &:r2059_11 | +| ir.cpp:2060:5:2060:5 | Address | &:r2060_7 | +| ir.cpp:2060:9:2060:9 | Address | &:r2060_1 | +| ir.cpp:2060:9:2060:9 | Condition | r2060_2 | +| ir.cpp:2060:9:2060:9 | Load | m2059_6 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_5 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_11 | +| ir.cpp:2060:9:2060:17 | Address | &:r2060_15 | +| ir.cpp:2060:9:2060:17 | Load | m2060_4 | +| ir.cpp:2060:9:2060:17 | Phi | from 2:m2060_12 | +| ir.cpp:2060:9:2060:17 | Phi | from 3:m2060_16 | +| ir.cpp:2060:9:2060:17 | StoreValue | r2060_6 | +| ir.cpp:2060:13:2060:13 | Address | &:r2060_9 | +| ir.cpp:2060:13:2060:13 | Load | m2059_8 | +| ir.cpp:2060:13:2060:13 | StoreValue | r2060_10 | +| ir.cpp:2060:17:2060:17 | Address | &:r2060_13 | +| ir.cpp:2060:17:2060:17 | Load | m2059_10 | +| ir.cpp:2060:17:2060:17 | StoreValue | r2060_14 | +| ir.cpp:2061:5:2061:5 | Address | &:r2061_7 | +| ir.cpp:2061:9:2061:9 | Address | &:r2061_1 | +| ir.cpp:2061:9:2061:9 | Condition | r2061_2 | +| ir.cpp:2061:9:2061:9 | Load | m2059_6 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_5 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_11 | +| ir.cpp:2061:9:2061:17 | Address | &:r2061_14 | +| ir.cpp:2061:9:2061:17 | Load | m2061_4 | +| ir.cpp:2061:9:2061:17 | Phi | from 5:m2061_12 | +| ir.cpp:2061:9:2061:17 | Phi | from 6:m2061_15 | +| ir.cpp:2061:9:2061:17 | StoreValue | r2061_6 | +| ir.cpp:2061:13:2061:13 | Address | &:r2061_9 | +| ir.cpp:2061:13:2061:13 | Load | m2059_8 | +| ir.cpp:2061:13:2061:13 | StoreValue | r2061_10 | +| ir.cpp:2061:17:2061:17 | StoreValue | r2061_13 | +| ir.cpp:2062:5:2062:5 | Address | &:r2062_7 | +| ir.cpp:2062:9:2062:9 | Address | &:r2062_1 | +| ir.cpp:2062:9:2062:9 | Condition | r2062_2 | +| ir.cpp:2062:9:2062:9 | Load | m2059_6 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_5 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_10 | +| ir.cpp:2062:9:2062:17 | Address | &:r2062_13 | +| ir.cpp:2062:9:2062:17 | Load | m2062_4 | +| ir.cpp:2062:9:2062:17 | Phi | from 8:m2062_11 | +| ir.cpp:2062:9:2062:17 | Phi | from 9:m2062_14 | +| ir.cpp:2062:9:2062:17 | StoreValue | r2062_6 | +| ir.cpp:2062:13:2062:13 | StoreValue | r2062_9 | +| ir.cpp:2062:17:2062:17 | StoreValue | r2062_12 | +| ir.cpp:2063:5:2063:19 | ChiPartial | partial:m2063_8 | +| ir.cpp:2063:5:2063:19 | ChiTotal | total:m2059_4 | +| ir.cpp:2063:6:2063:6 | Address | &:r2063_2 | +| ir.cpp:2063:6:2063:6 | Condition | r2063_3 | +| ir.cpp:2063:6:2063:6 | Load | m2059_6 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_6 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_7 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_11 | +| ir.cpp:2063:6:2063:14 | Address | &:r2063_14 | +| ir.cpp:2063:6:2063:14 | Load | m2063_5 | +| ir.cpp:2063:6:2063:14 | Phi | from 11:m2063_12 | +| ir.cpp:2063:6:2063:14 | Phi | from 12:m2063_15 | +| ir.cpp:2063:10:2063:10 | StoreValue | r2063_10 | +| ir.cpp:2063:14:2063:14 | StoreValue | r2063_13 | +| ir.cpp:2063:19:2063:19 | StoreValue | r2063_1 | +| ir.cpp:2069:6:2069:22 | ChiPartial | partial:m2069_3 | +| ir.cpp:2069:6:2069:22 | ChiTotal | total:m2069_2 | +| ir.cpp:2069:6:2069:22 | SideEffect | m2069_3 | +| ir.cpp:2069:29:2069:29 | Address | &:r2069_5 | +| ir.cpp:2069:46:2069:46 | Address | &:r2069_7 | +| ir.cpp:2069:63:2069:63 | Address | &:r2069_9 | +| ir.cpp:2069:80:2069:80 | Address | &:r2069_11 | +| ir.cpp:2070:5:2070:5 | Address | &:r2070_7 | +| ir.cpp:2070:9:2070:9 | Address | &:r2070_1 | +| ir.cpp:2070:9:2070:9 | Condition | r2070_2 | +| ir.cpp:2070:9:2070:9 | Load | m2069_6 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_5 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_11 | +| ir.cpp:2070:9:2070:17 | Address | &:r2070_15 | +| ir.cpp:2070:9:2070:17 | Load | m2070_4 | +| ir.cpp:2070:9:2070:17 | Phi | from 2:m2070_12 | +| ir.cpp:2070:9:2070:17 | Phi | from 3:m2070_16 | +| ir.cpp:2070:9:2070:17 | StoreValue | r2070_6 | +| ir.cpp:2070:13:2070:13 | Address | &:r2070_9 | +| ir.cpp:2070:13:2070:13 | Load | m2069_8 | +| ir.cpp:2070:13:2070:13 | StoreValue | r2070_10 | +| ir.cpp:2070:17:2070:17 | Address | &:r2070_13 | +| ir.cpp:2070:17:2070:17 | Load | m2069_10 | +| ir.cpp:2070:17:2070:17 | StoreValue | r2070_14 | +| ir.cpp:2071:5:2071:5 | Address | &:r2071_10 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_2 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_6 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_17 | +| ir.cpp:2071:9:2071:9 | Address | &:r2071_23 | +| ir.cpp:2071:9:2071:9 | Condition | r2071_3 | +| ir.cpp:2071:9:2071:9 | Load | m2069_6 | +| ir.cpp:2071:9:2071:9 | Load | m2071_5 | +| ir.cpp:2071:9:2071:9 | Phi | from 5:m2071_18 | +| ir.cpp:2071:9:2071:9 | Phi | from 6:m2071_24 | +| ir.cpp:2071:9:2071:9 | StoreValue | r2071_7 | +| ir.cpp:2071:9:2071:31 | Address | &:r2071_1 | +| ir.cpp:2071:9:2071:31 | Address | &:r2071_1 | +| ir.cpp:2071:9:2071:31 | Load | m2071_8 | +| ir.cpp:2071:9:2071:31 | StoreValue | r2071_9 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_12 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_12 | +| ir.cpp:2071:13:2071:13 | Address | &:r2071_13 | +| ir.cpp:2071:13:2071:13 | Load | m2069_8 | +| ir.cpp:2071:13:2071:13 | Load | m2071_15 | +| ir.cpp:2071:13:2071:13 | StoreValue | r2071_14 | +| ir.cpp:2071:13:2071:13 | StoreValue | r2071_16 | +| ir.cpp:2071:17:2071:31 | Address | &:r2071_19 | +| ir.cpp:2071:17:2071:31 | Address | &:r2071_19 | +| ir.cpp:2071:17:2071:31 | Load | m2071_21 | +| ir.cpp:2071:17:2071:31 | StoreValue | r2071_20 | +| ir.cpp:2071:17:2071:31 | StoreValue | r2071_22 | +| ir.cpp:2072:5:2072:5 | Address | &:r2072_10 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_2 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_6 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_16 | +| ir.cpp:2072:9:2072:9 | Address | &:r2072_22 | +| ir.cpp:2072:9:2072:9 | Condition | r2072_3 | +| ir.cpp:2072:9:2072:9 | Load | m2069_6 | +| ir.cpp:2072:9:2072:9 | Load | m2072_5 | +| ir.cpp:2072:9:2072:9 | Phi | from 8:m2072_17 | +| ir.cpp:2072:9:2072:9 | Phi | from 9:m2072_23 | +| ir.cpp:2072:9:2072:9 | StoreValue | r2072_7 | +| ir.cpp:2072:9:2072:45 | Address | &:r2072_1 | +| ir.cpp:2072:9:2072:45 | Address | &:r2072_1 | +| ir.cpp:2072:9:2072:45 | Load | m2072_8 | +| ir.cpp:2072:9:2072:45 | StoreValue | r2072_9 | +| ir.cpp:2072:13:2072:27 | Address | &:r2072_12 | +| ir.cpp:2072:13:2072:27 | Address | &:r2072_12 | +| ir.cpp:2072:13:2072:27 | Load | m2072_14 | +| ir.cpp:2072:13:2072:27 | StoreValue | r2072_13 | +| ir.cpp:2072:13:2072:27 | StoreValue | r2072_15 | +| ir.cpp:2072:31:2072:45 | Address | &:r2072_18 | +| ir.cpp:2072:31:2072:45 | Address | &:r2072_18 | +| ir.cpp:2072:31:2072:45 | Load | m2072_20 | +| ir.cpp:2072:31:2072:45 | StoreValue | r2072_19 | +| ir.cpp:2072:31:2072:45 | StoreValue | r2072_21 | +| ir.cpp:2073:6:2073:6 | Address | &:r2073_11 | +| ir.cpp:2073:6:2073:6 | Unary | r2073_11 | +| ir.cpp:2073:6:2073:18 | Address | &:r2073_13 | +| ir.cpp:2073:10:2073:10 | Address | &:r2073_5 | +| ir.cpp:2073:10:2073:10 | Condition | r2073_6 | +| ir.cpp:2073:10:2073:10 | Load | m2069_6 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_9 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_17 | +| ir.cpp:2073:10:2073:18 | Address | &:r2073_21 | +| ir.cpp:2073:10:2073:18 | Load | m2073_8 | +| ir.cpp:2073:10:2073:18 | Phi | from 11:m2073_18 | +| ir.cpp:2073:10:2073:18 | Phi | from 12:m2073_22 | +| ir.cpp:2073:10:2073:18 | StoreValue | r2073_10 | +| ir.cpp:2073:14:2073:14 | Address | &:r2073_15 | +| ir.cpp:2073:14:2073:14 | Load | m2069_8 | +| ir.cpp:2073:14:2073:14 | StoreValue | r2073_16 | +| ir.cpp:2073:18:2073:18 | Address | &:r2073_19 | +| ir.cpp:2073:18:2073:18 | Load | m2069_10 | +| ir.cpp:2073:18:2073:18 | StoreValue | r2073_20 | +| ir.cpp:2073:23:2073:37 | Address | &:r2073_1 | +| ir.cpp:2073:23:2073:37 | Address | &:r2073_1 | +| ir.cpp:2073:23:2073:37 | Load | m2073_3 | +| ir.cpp:2073:23:2073:37 | StoreValue | r2073_2 | +| ir.cpp:2073:23:2073:37 | StoreValue | r2073_4 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_5 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_7 | +| ir.cpp:2076:8:2076:8 | Address | &:r2076_10 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiPartial | partial:m2076_3 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | ChiTotal | total:m2076_2 | +| ir.cpp:2076:8:2076:8 | Load | m0_10 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | Load | m2076_6 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_3 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2076:8:2076:8 | SideEffect | m2076_8 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_5 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_5 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_7 | +| ir.cpp:2077:13:2077:29 | Address | &:r2077_7 | +| ir.cpp:2077:13:2077:29 | ChiPartial | partial:m2077_3 | +| ir.cpp:2077:13:2077:29 | ChiTotal | total:m2077_2 | +| ir.cpp:2077:13:2077:29 | Load | m2077_6 | +| ir.cpp:2077:13:2077:29 | SideEffect | m2077_3 | +| ir.cpp:2077:13:2077:29 | SideEffect | m2077_8 | +| ir.cpp:2080:6:2080:25 | ChiPartial | partial:m2080_3 | +| ir.cpp:2080:6:2080:25 | ChiTotal | total:m2080_2 | +| ir.cpp:2080:6:2080:25 | SideEffect | ~m2084_32 | +| ir.cpp:2080:32:2080:32 | Address | &:r2080_5 | +| ir.cpp:2080:52:2080:52 | Address | &:r2080_7 | +| ir.cpp:2080:72:2080:72 | Address | &:r2080_9 | +| ir.cpp:2080:92:2080:92 | Address | &:r2080_11 | +| ir.cpp:2081:5:2081:5 | Address | &:r2081_1 | +| ir.cpp:2081:5:2081:5 | Address | &:r2081_1 | +| ir.cpp:2081:5:2081:5 | Arg(this) | this:r2081_1 | +| ir.cpp:2081:5:2081:5 | ChiPartial | partial:m2081_16 | +| ir.cpp:2081:5:2081:5 | ChiTotal | total:m2080_12 | +| ir.cpp:2081:5:2081:5 | SideEffect | m2080_12 | +| ir.cpp:2081:7:2081:7 | CallTarget | func:r2081_2 | +| ir.cpp:2081:7:2081:7 | ChiPartial | partial:m2081_12 | +| ir.cpp:2081:7:2081:7 | ChiTotal | total:m2080_4 | +| ir.cpp:2081:7:2081:7 | SideEffect | ~m2080_4 | +| ir.cpp:2081:7:2081:7 | Unary | r2081_11 | +| ir.cpp:2081:9:2081:9 | Address | &:r2081_3 | +| ir.cpp:2081:9:2081:9 | Condition | r2081_4 | +| ir.cpp:2081:9:2081:9 | Load | m2080_6 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_7 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_10 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_20 | +| ir.cpp:2081:9:2081:17 | Address | &:r2081_23 | +| ir.cpp:2081:9:2081:17 | Arg(0) | 0:r2081_10 | +| ir.cpp:2081:9:2081:17 | Load | m2081_6 | +| ir.cpp:2081:9:2081:17 | Phi | from 2:m2081_21 | +| ir.cpp:2081:9:2081:17 | Phi | from 3:m2081_24 | +| ir.cpp:2081:9:2081:17 | SideEffect | ~m2081_13 | +| ir.cpp:2081:9:2081:17 | Unary | r2081_8 | +| ir.cpp:2081:9:2081:17 | Unary | r2081_9 | +| ir.cpp:2081:13:2081:13 | StoreValue | r2081_19 | +| ir.cpp:2081:17:2081:17 | StoreValue | r2081_22 | +| ir.cpp:2082:5:2082:5 | Address | &:r2082_1 | +| ir.cpp:2082:5:2082:5 | Address | &:r2082_1 | +| ir.cpp:2082:5:2082:5 | Arg(this) | this:r2082_1 | +| ir.cpp:2082:5:2082:5 | ChiPartial | partial:m2082_19 | +| ir.cpp:2082:5:2082:5 | ChiTotal | total:m2081_17 | +| ir.cpp:2082:5:2082:5 | SideEffect | m2081_17 | +| ir.cpp:2082:7:2082:7 | CallTarget | func:r2082_2 | +| ir.cpp:2082:7:2082:7 | ChiPartial | partial:m2082_15 | +| ir.cpp:2082:7:2082:7 | ChiTotal | total:m2082_7 | +| ir.cpp:2082:7:2082:7 | SideEffect | ~m2082_7 | +| ir.cpp:2082:7:2082:7 | Unary | r2082_14 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_4 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_9 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_35 | +| ir.cpp:2082:9:2082:9 | Address | &:r2082_46 | +| ir.cpp:2082:9:2082:9 | Condition | r2082_5 | +| ir.cpp:2082:9:2082:9 | Load | m2080_6 | +| ir.cpp:2082:9:2082:9 | Load | m2082_8 | +| ir.cpp:2082:9:2082:9 | Phi | from 5:m2082_36 | +| ir.cpp:2082:9:2082:9 | Phi | from 5:~m2082_30 | +| ir.cpp:2082:9:2082:9 | Phi | from 6:m2082_47 | +| ir.cpp:2082:9:2082:9 | Phi | from 6:~m2082_42 | +| ir.cpp:2082:9:2082:9 | StoreValue | r2082_10 | +| ir.cpp:2082:9:2082:34 | Address | &:r2082_3 | +| ir.cpp:2082:9:2082:34 | Address | &:r2082_13 | +| ir.cpp:2082:9:2082:34 | Arg(0) | 0:r2082_13 | +| ir.cpp:2082:9:2082:34 | SideEffect | ~m2082_11 | +| ir.cpp:2082:9:2082:34 | Unary | r2082_3 | +| ir.cpp:2082:9:2082:34 | Unary | r2082_12 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_22 | +| ir.cpp:2082:13:2082:13 | Address | &:r2082_27 | +| ir.cpp:2082:13:2082:13 | Arg(0) | 0:r2082_27 | +| ir.cpp:2082:13:2082:13 | Arg(this) | this:r2082_22 | +| ir.cpp:2082:13:2082:13 | CallTarget | func:r2082_24 | +| ir.cpp:2082:13:2082:13 | ChiPartial | partial:m2082_29 | +| ir.cpp:2082:13:2082:13 | ChiPartial | partial:m2082_32 | +| ir.cpp:2082:13:2082:13 | ChiTotal | total:m2081_13 | +| ir.cpp:2082:13:2082:13 | ChiTotal | total:m2082_23 | +| ir.cpp:2082:13:2082:13 | Load | m2082_33 | +| ir.cpp:2082:13:2082:13 | SideEffect | ~m2080_8 | +| ir.cpp:2082:13:2082:13 | SideEffect | ~m2081_13 | +| ir.cpp:2082:13:2082:13 | StoreValue | r2082_34 | +| ir.cpp:2082:13:2082:13 | Unary | r2082_25 | +| ir.cpp:2082:13:2082:13 | Unary | r2082_26 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Address | &:r2082_37 | +| ir.cpp:2082:17:2082:34 | Arg(this) | this:r2082_37 | +| ir.cpp:2082:17:2082:34 | CallTarget | func:r2082_39 | +| ir.cpp:2082:17:2082:34 | ChiPartial | partial:m2082_41 | +| ir.cpp:2082:17:2082:34 | ChiPartial | partial:m2082_43 | +| ir.cpp:2082:17:2082:34 | ChiTotal | total:m2081_13 | +| ir.cpp:2082:17:2082:34 | ChiTotal | total:m2082_38 | +| ir.cpp:2082:17:2082:34 | Load | m2082_44 | +| ir.cpp:2082:17:2082:34 | SideEffect | ~m2081_13 | +| ir.cpp:2082:17:2082:34 | StoreValue | r2082_45 | +| ir.cpp:2083:5:2083:5 | Address | &:r2083_1 | +| ir.cpp:2083:5:2083:5 | Address | &:r2083_1 | +| ir.cpp:2083:5:2083:5 | Arg(this) | this:r2083_1 | +| ir.cpp:2083:5:2083:5 | ChiPartial | partial:m2083_19 | +| ir.cpp:2083:5:2083:5 | ChiTotal | total:m2082_20 | +| ir.cpp:2083:5:2083:5 | SideEffect | m2082_20 | +| ir.cpp:2083:7:2083:7 | CallTarget | func:r2083_2 | +| ir.cpp:2083:7:2083:7 | ChiPartial | partial:m2083_15 | +| ir.cpp:2083:7:2083:7 | ChiTotal | total:m2083_7 | +| ir.cpp:2083:7:2083:7 | SideEffect | ~m2083_7 | +| ir.cpp:2083:7:2083:7 | Unary | r2083_14 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_4 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_9 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_31 | +| ir.cpp:2083:9:2083:9 | Address | &:r2083_42 | +| ir.cpp:2083:9:2083:9 | Condition | r2083_5 | +| ir.cpp:2083:9:2083:9 | Load | m2080_6 | +| ir.cpp:2083:9:2083:9 | Load | m2083_8 | +| ir.cpp:2083:9:2083:9 | Phi | from 8:m2083_32 | +| ir.cpp:2083:9:2083:9 | Phi | from 8:~m2083_27 | +| ir.cpp:2083:9:2083:9 | Phi | from 9:m2083_43 | +| ir.cpp:2083:9:2083:9 | Phi | from 9:~m2083_38 | +| ir.cpp:2083:9:2083:9 | StoreValue | r2083_10 | +| ir.cpp:2083:9:2083:51 | Address | &:r2083_3 | +| ir.cpp:2083:9:2083:51 | Address | &:r2083_13 | +| ir.cpp:2083:9:2083:51 | Arg(0) | 0:r2083_13 | +| ir.cpp:2083:9:2083:51 | SideEffect | ~m2083_11 | +| ir.cpp:2083:9:2083:51 | Unary | r2083_3 | +| ir.cpp:2083:9:2083:51 | Unary | r2083_12 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Address | &:r2083_22 | +| ir.cpp:2083:13:2083:30 | Arg(this) | this:r2083_22 | +| ir.cpp:2083:13:2083:30 | CallTarget | func:r2083_24 | +| ir.cpp:2083:13:2083:30 | ChiPartial | partial:m2083_26 | +| ir.cpp:2083:13:2083:30 | ChiPartial | partial:m2083_28 | +| ir.cpp:2083:13:2083:30 | ChiTotal | total:m2082_16 | +| ir.cpp:2083:13:2083:30 | ChiTotal | total:m2083_23 | +| ir.cpp:2083:13:2083:30 | Load | m2083_29 | +| ir.cpp:2083:13:2083:30 | SideEffect | ~m2082_16 | +| ir.cpp:2083:13:2083:30 | StoreValue | r2083_30 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Address | &:r2083_33 | +| ir.cpp:2083:34:2083:51 | Arg(this) | this:r2083_33 | +| ir.cpp:2083:34:2083:51 | CallTarget | func:r2083_35 | +| ir.cpp:2083:34:2083:51 | ChiPartial | partial:m2083_37 | +| ir.cpp:2083:34:2083:51 | ChiPartial | partial:m2083_39 | +| ir.cpp:2083:34:2083:51 | ChiTotal | total:m2082_16 | +| ir.cpp:2083:34:2083:51 | ChiTotal | total:m2083_34 | +| ir.cpp:2083:34:2083:51 | Load | m2083_40 | +| ir.cpp:2083:34:2083:51 | SideEffect | ~m2082_16 | +| ir.cpp:2083:34:2083:51 | StoreValue | r2083_41 | +| ir.cpp:2084:5:2084:19 | ChiPartial | partial:m2084_35 | +| ir.cpp:2084:5:2084:19 | ChiTotal | total:m2084_17 | +| ir.cpp:2084:5:2084:19 | SideEffect | m2084_17 | +| ir.cpp:2084:6:2084:6 | Address | &:r2084_1 | +| ir.cpp:2084:6:2084:6 | Address | &:r2084_1 | +| ir.cpp:2084:6:2084:6 | Arg(this) | this:r2084_1 | +| ir.cpp:2084:6:2084:6 | ChiPartial | partial:m2084_16 | +| ir.cpp:2084:6:2084:6 | ChiTotal | total:m2083_20 | +| ir.cpp:2084:6:2084:6 | SideEffect | m2083_20 | +| ir.cpp:2084:8:2084:8 | CallTarget | func:r2084_2 | +| ir.cpp:2084:8:2084:8 | ChiPartial | partial:m2084_12 | +| ir.cpp:2084:8:2084:8 | ChiTotal | total:m2083_16 | +| ir.cpp:2084:8:2084:8 | SideEffect | ~m2083_16 | +| ir.cpp:2084:8:2084:8 | Unary | r2084_11 | +| ir.cpp:2084:8:2084:19 | Address | &:r2084_18 | +| ir.cpp:2084:8:2084:19 | Address | &:r2084_18 | +| ir.cpp:2084:8:2084:19 | Arg(this) | this:r2084_18 | +| ir.cpp:2084:10:2084:10 | Address | &:r2084_3 | +| ir.cpp:2084:10:2084:10 | Condition | r2084_4 | +| ir.cpp:2084:10:2084:10 | Load | m2080_6 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_7 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_10 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_39 | +| ir.cpp:2084:10:2084:18 | Address | &:r2084_42 | +| ir.cpp:2084:10:2084:18 | Arg(0) | 0:r2084_10 | +| ir.cpp:2084:10:2084:18 | Load | m2084_6 | +| ir.cpp:2084:10:2084:18 | Phi | from 11:m2084_40 | +| ir.cpp:2084:10:2084:18 | Phi | from 12:m2084_43 | +| ir.cpp:2084:10:2084:18 | SideEffect | ~m2084_13 | +| ir.cpp:2084:10:2084:18 | Unary | r2084_8 | +| ir.cpp:2084:10:2084:18 | Unary | r2084_9 | +| ir.cpp:2084:14:2084:14 | StoreValue | r2084_38 | +| ir.cpp:2084:18:2084:18 | StoreValue | r2084_41 | +| ir.cpp:2084:21:2084:21 | CallTarget | func:r2084_19 | +| ir.cpp:2084:21:2084:21 | ChiPartial | partial:m2084_31 | +| ir.cpp:2084:21:2084:21 | ChiTotal | total:m2084_25 | +| ir.cpp:2084:21:2084:21 | SideEffect | ~m2084_25 | +| ir.cpp:2084:21:2084:21 | Unary | r2084_30 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_20 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_20 | +| ir.cpp:2084:23:2084:40 | Address | &:r2084_29 | +| ir.cpp:2084:23:2084:40 | Arg(0) | 0:r2084_29 | +| ir.cpp:2084:23:2084:40 | Arg(this) | this:r2084_20 | +| ir.cpp:2084:23:2084:40 | CallTarget | func:r2084_22 | +| ir.cpp:2084:23:2084:40 | ChiPartial | partial:m2084_24 | +| ir.cpp:2084:23:2084:40 | ChiPartial | partial:m2084_26 | +| ir.cpp:2084:23:2084:40 | ChiTotal | total:m2084_13 | +| ir.cpp:2084:23:2084:40 | ChiTotal | total:m2084_21 | +| ir.cpp:2084:23:2084:40 | SideEffect | ~m2084_13 | +| ir.cpp:2084:23:2084:40 | SideEffect | ~m2084_27 | +| ir.cpp:2084:23:2084:40 | Unary | r2084_20 | +| ir.cpp:2084:23:2084:40 | Unary | r2084_28 | +| ir.cpp:2089:14:2089:22 | Address | &:r2089_7 | +| ir.cpp:2089:14:2089:22 | ChiPartial | partial:m2089_3 | +| ir.cpp:2089:14:2089:22 | ChiTotal | total:m2089_2 | +| ir.cpp:2089:14:2089:22 | Load | m2094_2 | +| ir.cpp:2089:14:2089:22 | SideEffect | ~m2091_6 | +| ir.cpp:2089:37:2089:37 | Address | &:r2089_5 | +| ir.cpp:2090:16:2090:16 | Address | &:r2090_1 | +| ir.cpp:2091:3:2091:3 | Address | &:r2091_10 | +| ir.cpp:2091:7:2091:7 | Address | &:r2091_1 | +| ir.cpp:2091:7:2091:7 | Left | r2091_2 | +| ir.cpp:2091:7:2091:7 | Load | m2089_6 | +| ir.cpp:2091:7:2091:13 | Condition | r2091_4 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_8 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_12 | +| ir.cpp:2091:7:2093:28 | Address | &:r2091_14 | +| ir.cpp:2091:7:2093:28 | Load | m2091_7 | +| ir.cpp:2091:7:2093:28 | Phi | from 2:m2091_13 | +| ir.cpp:2091:7:2093:28 | Phi | from 2:~m2092_6 | +| ir.cpp:2091:7:2093:28 | Phi | from 3:m2091_15 | +| ir.cpp:2091:7:2093:28 | Phi | from 3:~m2093_6 | +| ir.cpp:2091:7:2093:28 | StoreValue | r2091_9 | +| ir.cpp:2091:11:2091:13 | Right | r2091_3 | +| ir.cpp:2092:6:2092:20 | CallTarget | func:r2092_1 | +| ir.cpp:2092:6:2092:20 | ChiPartial | partial:m2092_5 | +| ir.cpp:2092:6:2092:20 | ChiTotal | total:m2089_4 | +| ir.cpp:2092:6:2092:20 | SideEffect | ~m2089_4 | +| ir.cpp:2092:6:2092:26 | StoreValue | r2092_9 | +| ir.cpp:2092:22:2092:22 | Address | &:r2092_2 | +| ir.cpp:2092:22:2092:22 | Arg(0) | 0:r2092_3 | +| ir.cpp:2092:22:2092:22 | Load | m2089_6 | +| ir.cpp:2092:26:2092:26 | Address | &:r2092_7 | +| ir.cpp:2092:26:2092:26 | Load | m2089_6 | +| ir.cpp:2092:26:2092:26 | Unary | r2092_8 | +| ir.cpp:2093:5:2093:28 | StoreValue | r2093_9 | +| ir.cpp:2093:6:2093:20 | CallTarget | func:r2093_1 | +| ir.cpp:2093:6:2093:20 | ChiPartial | partial:m2093_5 | +| ir.cpp:2093:6:2093:20 | ChiTotal | total:m2089_4 | +| ir.cpp:2093:6:2093:20 | SideEffect | ~m2089_4 | +| ir.cpp:2093:6:2093:27 | Unary | r2093_8 | +| ir.cpp:2093:22:2093:22 | Address | &:r2093_2 | +| ir.cpp:2093:22:2093:22 | Arg(0) | 0:r2093_3 | +| ir.cpp:2093:22:2093:22 | Load | m2089_6 | +| ir.cpp:2093:26:2093:27 | Unary | r2093_7 | +| ir.cpp:2094:1:2094:1 | Address | &:r2094_1 | +| ir.cpp:2096:6:2096:17 | ChiPartial | partial:m2096_3 | +| ir.cpp:2096:6:2096:17 | ChiTotal | total:m2096_2 | +| ir.cpp:2096:6:2096:17 | SideEffect | ~m2099_6 | +| ir.cpp:2097:8:2097:8 | Address | &:r2097_1 | +| ir.cpp:2097:12:2097:18 | Address | &:r2097_4 | +| ir.cpp:2097:12:2097:18 | Arg(0) | 0:r2097_3 | +| ir.cpp:2097:12:2097:18 | CallTarget | func:r2097_2 | +| ir.cpp:2097:12:2097:18 | ChiPartial | partial:m2097_5 | +| ir.cpp:2097:12:2097:18 | ChiTotal | total:m2096_4 | +| ir.cpp:2097:12:2097:18 | SideEffect | ~m2096_4 | +| ir.cpp:2097:12:2097:18 | StoreValue | r2097_8 | +| ir.cpp:2097:12:2097:18 | Unary | r2097_4 | +| ir.cpp:2098:3:2098:4 | Address | &:r2098_4 | +| ir.cpp:2098:3:2098:8 | ChiPartial | partial:m2098_5 | +| ir.cpp:2098:3:2098:8 | ChiTotal | total:m2097_7 | +| ir.cpp:2098:4:2098:4 | Address | &:r2098_2 | +| ir.cpp:2098:4:2098:4 | Load | m2097_9 | +| ir.cpp:2098:4:2098:4 | Unary | r2098_3 | +| ir.cpp:2098:8:2098:8 | StoreValue | r2098_1 | +| ir.cpp:2099:3:2099:10 | CallTarget | func:r2099_1 | +| ir.cpp:2099:3:2099:10 | ChiPartial | partial:m2099_5 | +| ir.cpp:2099:3:2099:10 | ChiTotal | total:m2097_6 | +| ir.cpp:2099:3:2099:10 | SideEffect | ~m2097_6 | +| ir.cpp:2099:10:2099:10 | Address | &:r2099_2 | +| ir.cpp:2099:10:2099:10 | Arg(0) | 0:r2099_3 | +| ir.cpp:2099:10:2099:10 | Load | m2097_9 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_5 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_5 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_7 | +| ir.cpp:2102:7:2102:7 | Address | &:r2102_7 | +| ir.cpp:2102:7:2102:7 | ChiPartial | partial:m2102_3 | +| ir.cpp:2102:7:2102:7 | ChiTotal | total:m2102_2 | +| ir.cpp:2102:7:2102:7 | Load | m2102_6 | +| ir.cpp:2102:7:2102:7 | SideEffect | m2102_3 | +| ir.cpp:2102:7:2102:7 | SideEffect | m2102_8 | +| ir.cpp:2104:10:2104:24 | ChiPartial | partial:m2104_3 | +| ir.cpp:2104:10:2104:24 | ChiTotal | total:m2104_2 | +| ir.cpp:2104:10:2104:24 | SideEffect | m2104_3 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_5 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_5 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_7 | +| ir.cpp:2104:32:2104:32 | Address | &:r2104_7 | +| ir.cpp:2104:32:2104:32 | Load | m2104_6 | +| ir.cpp:2104:32:2104:32 | SideEffect | m2104_8 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_5 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_5 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_7 | +| ir.cpp:2106:13:2106:18 | Address | &:r2106_7 | +| ir.cpp:2106:13:2106:18 | ChiPartial | partial:m2106_3 | +| ir.cpp:2106:13:2106:18 | ChiTotal | total:m2106_2 | +| ir.cpp:2106:13:2106:18 | Load | m2106_6 | +| ir.cpp:2106:13:2106:18 | SideEffect | m2106_3 | +| ir.cpp:2106:13:2106:18 | SideEffect | m2106_8 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_5 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_5 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_7 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_7 | +| ir.cpp:2109:7:2109:7 | Address | &:r2109_9 | +| ir.cpp:2109:7:2109:7 | Arg(this) | this:r2109_9 | +| ir.cpp:2109:7:2109:7 | CallTarget | func:r2109_10 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_3 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_12 | +| ir.cpp:2109:7:2109:7 | ChiPartial | partial:m2109_14 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_2 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_4 | +| ir.cpp:2109:7:2109:7 | ChiTotal | total:m2109_8 | +| ir.cpp:2109:7:2109:7 | Load | m2109_6 | +| ir.cpp:2109:7:2109:7 | SideEffect | m2109_15 | +| ir.cpp:2109:7:2109:7 | SideEffect | ~m2109_4 | +| ir.cpp:2109:7:2109:7 | SideEffect | ~m2109_13 | +| ir.cpp:2109:7:2109:7 | Unary | m2109_6 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_5 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_5 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_7 | +| ir.cpp:2112:5:2112:13 | Address | &:r2112_7 | +| ir.cpp:2112:5:2112:13 | ChiPartial | partial:m2112_3 | +| ir.cpp:2112:5:2112:13 | ChiTotal | total:m2112_2 | +| ir.cpp:2112:5:2112:13 | Load | m2112_6 | +| ir.cpp:2112:5:2112:13 | SideEffect | m2112_8 | +| ir.cpp:2112:5:2112:13 | SideEffect | ~m2112_14 | +| ir.cpp:2112:5:2112:13 | Unary | m2112_6 | +| ir.cpp:2112:18:2112:18 | Arg(this) | this:r2112_10 | +| ir.cpp:2112:18:2112:18 | CallTarget | func:r2112_11 | +| ir.cpp:2112:18:2112:18 | ChiPartial | partial:m2112_13 | +| ir.cpp:2112:18:2112:18 | ChiTotal | total:m2112_4 | +| ir.cpp:2112:18:2112:18 | SideEffect | ~m2112_4 | +| ir.cpp:2114:10:2114:24 | ChiPartial | partial:m2114_3 | +| ir.cpp:2114:10:2114:24 | ChiTotal | total:m2114_2 | +| ir.cpp:2114:10:2114:24 | SideEffect | m2114_3 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_5 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_5 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_7 | +| ir.cpp:2114:32:2114:32 | Address | &:r2114_7 | +| ir.cpp:2114:32:2114:32 | Load | m2114_6 | +| ir.cpp:2114:32:2114:32 | SideEffect | m2114_8 | +| ir.cpp:2119:5:2119:18 | Address | &:r2119_5 | +| ir.cpp:2119:5:2119:18 | ChiPartial | partial:m2119_3 | +| ir.cpp:2119:5:2119:18 | ChiTotal | total:m2119_2 | +| ir.cpp:2119:5:2119:18 | Load | m2129_2 | +| ir.cpp:2119:5:2119:18 | SideEffect | ~m2128_14 | +| ir.cpp:2121:12:2121:13 | Address | &:r2121_1 | +| ir.cpp:2121:17:2121:27 | Address | &:r2121_4 | +| ir.cpp:2121:17:2121:27 | Address | &:r2121_8 | +| ir.cpp:2121:17:2121:27 | Arg(0) | 0:r2121_3 | +| ir.cpp:2121:17:2121:27 | Arg(this) | this:r2121_8 | +| ir.cpp:2121:17:2121:27 | CallTarget | func:r2121_2 | +| ir.cpp:2121:17:2121:27 | CallTarget | func:r2121_9 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_5 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_11 | +| ir.cpp:2121:17:2121:27 | ChiPartial | partial:m2121_13 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2119_4 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2121_6 | +| ir.cpp:2121:17:2121:27 | ChiTotal | total:m2121_7 | +| ir.cpp:2121:17:2121:27 | SideEffect | ~m2119_4 | +| ir.cpp:2121:17:2121:27 | SideEffect | ~m2121_6 | +| ir.cpp:2121:17:2121:27 | StoreValue | r2121_8 | +| ir.cpp:2121:17:2121:27 | Unary | r2121_4 | +| ir.cpp:2122:5:2122:13 | CallTarget | func:r2122_3 | +| ir.cpp:2122:5:2122:13 | CallTarget | func:r2122_10 | +| ir.cpp:2122:5:2122:13 | ChiPartial | partial:m2122_5 | +| ir.cpp:2122:5:2122:13 | ChiPartial | partial:m2122_13 | +| ir.cpp:2122:5:2122:13 | ChiTotal | total:m2121_12 | +| ir.cpp:2122:5:2122:13 | ChiTotal | total:m2122_6 | +| ir.cpp:2122:5:2122:13 | SideEffect | ~m2121_12 | +| ir.cpp:2122:5:2122:13 | SideEffect | ~m2122_6 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_1 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_2 | +| ir.cpp:2122:12:2122:13 | Address | &:r2122_2 | +| ir.cpp:2122:12:2122:13 | Arg(0) | 0:r2122_11 | +| ir.cpp:2122:12:2122:13 | ChiPartial | partial:m2122_8 | +| ir.cpp:2122:12:2122:13 | ChiTotal | total:m2121_14 | +| ir.cpp:2122:12:2122:13 | Load | m2121_15 | +| ir.cpp:2122:12:2122:13 | SideEffect | ~m2121_14 | +| ir.cpp:2122:12:2122:13 | Unary | r2122_1 | +| ir.cpp:2124:12:2124:13 | Address | &:r2124_1 | +| ir.cpp:2124:17:2124:30 | Address | &:r2124_4 | +| ir.cpp:2124:17:2124:30 | Address | &:r2124_8 | +| ir.cpp:2124:17:2124:30 | Arg(0) | 0:r2124_3 | +| ir.cpp:2124:17:2124:30 | Arg(this) | this:r2124_8 | +| ir.cpp:2124:17:2124:30 | CallTarget | func:r2124_2 | +| ir.cpp:2124:17:2124:30 | CallTarget | func:r2124_9 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_5 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_11 | +| ir.cpp:2124:17:2124:30 | ChiPartial | partial:m2124_13 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2122_14 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2124_6 | +| ir.cpp:2124:17:2124:30 | ChiTotal | total:m2124_7 | +| ir.cpp:2124:17:2124:30 | SideEffect | ~m2122_14 | +| ir.cpp:2124:17:2124:30 | SideEffect | ~m2124_6 | +| ir.cpp:2124:17:2124:30 | StoreValue | r2124_15 | +| ir.cpp:2124:17:2124:30 | Unary | r2124_4 | +| ir.cpp:2124:17:2124:30 | Unary | r2124_8 | +| ir.cpp:2125:5:2125:13 | CallTarget | func:r2125_3 | +| ir.cpp:2125:5:2125:13 | CallTarget | func:r2125_10 | +| ir.cpp:2125:5:2125:13 | ChiPartial | partial:m2125_5 | +| ir.cpp:2125:5:2125:13 | ChiPartial | partial:m2125_13 | +| ir.cpp:2125:5:2125:13 | ChiTotal | total:m2124_12 | +| ir.cpp:2125:5:2125:13 | ChiTotal | total:m2125_6 | +| ir.cpp:2125:5:2125:13 | SideEffect | ~m2124_12 | +| ir.cpp:2125:5:2125:13 | SideEffect | ~m2125_6 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_1 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_2 | +| ir.cpp:2125:12:2125:13 | Address | &:r2125_2 | +| ir.cpp:2125:12:2125:13 | Arg(0) | 0:r2125_11 | +| ir.cpp:2125:12:2125:13 | ChiPartial | partial:m2125_8 | +| ir.cpp:2125:12:2125:13 | ChiTotal | total:m2124_14 | +| ir.cpp:2125:12:2125:13 | Load | m2124_16 | +| ir.cpp:2125:12:2125:13 | SideEffect | ~m2124_14 | +| ir.cpp:2125:12:2125:13 | Unary | r2125_1 | +| ir.cpp:2127:15:2127:15 | Address | &:r2127_1 | +| ir.cpp:2127:19:2127:32 | Address | &:r2127_4 | +| ir.cpp:2127:19:2127:32 | Address | &:r2127_8 | +| ir.cpp:2127:19:2127:32 | Arg(0) | 0:r2127_3 | +| ir.cpp:2127:19:2127:32 | Arg(this) | this:r2127_8 | +| ir.cpp:2127:19:2127:32 | CallTarget | func:r2127_2 | +| ir.cpp:2127:19:2127:32 | CallTarget | func:r2127_9 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_5 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_11 | +| ir.cpp:2127:19:2127:32 | ChiPartial | partial:m2127_13 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2125_14 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2127_6 | +| ir.cpp:2127:19:2127:32 | ChiTotal | total:m2127_7 | +| ir.cpp:2127:19:2127:32 | SideEffect | ~m2125_14 | +| ir.cpp:2127:19:2127:32 | SideEffect | ~m2127_6 | +| ir.cpp:2127:19:2127:32 | StoreValue | r2127_8 | +| ir.cpp:2127:19:2127:32 | Unary | r2127_4 | +| ir.cpp:2128:5:2128:12 | CallTarget | func:r2128_3 | +| ir.cpp:2128:5:2128:12 | CallTarget | func:r2128_10 | +| ir.cpp:2128:5:2128:12 | ChiPartial | partial:m2128_5 | +| ir.cpp:2128:5:2128:12 | ChiPartial | partial:m2128_13 | +| ir.cpp:2128:5:2128:12 | ChiTotal | total:m2127_12 | +| ir.cpp:2128:5:2128:12 | ChiTotal | total:m2128_6 | +| ir.cpp:2128:5:2128:12 | SideEffect | ~m2127_12 | +| ir.cpp:2128:5:2128:12 | SideEffect | ~m2128_6 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_1 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_2 | +| ir.cpp:2128:12:2128:12 | Address | &:r2128_2 | +| ir.cpp:2128:12:2128:12 | Arg(0) | 0:r2128_11 | +| ir.cpp:2128:12:2128:12 | ChiPartial | partial:m2128_8 | +| ir.cpp:2128:12:2128:12 | ChiTotal | total:m2127_14 | +| ir.cpp:2128:12:2128:12 | Load | m2127_15 | +| ir.cpp:2128:12:2128:12 | SideEffect | ~m2127_14 | +| ir.cpp:2128:12:2128:12 | Unary | r2128_1 | +| ir.cpp:2129:1:2129:1 | Address | &:r2129_1 | +| ir.cpp:2133:6:2133:26 | ChiPartial | partial:m2133_3 | +| ir.cpp:2133:6:2133:26 | ChiTotal | total:m2133_2 | +| ir.cpp:2133:6:2133:26 | SideEffect | ~m2135_5 | +| ir.cpp:2134:13:2134:13 | Address | &:r2134_1 | +| ir.cpp:2134:16:2134:19 | StoreValue | r2134_2 | +| ir.cpp:2135:3:2135:27 | CallTarget | func:r2135_1 | +| ir.cpp:2135:3:2135:27 | ChiPartial | partial:m2135_4 | +| ir.cpp:2135:3:2135:27 | ChiTotal | total:m2133_4 | +| ir.cpp:2135:3:2135:27 | SideEffect | ~m2133_4 | +| ir.cpp:2135:29:2135:29 | Arg(0) | 0:r2135_2 | +| ir.cpp:2140:5:2140:11 | Address | &:r2140_6 | +| ir.cpp:2140:5:2140:11 | ChiPartial | partial:m2140_3 | +| ir.cpp:2140:5:2140:11 | ChiTotal | total:m2140_2 | +| ir.cpp:2140:5:2140:11 | Load | m2145_4 | +| ir.cpp:2140:5:2140:11 | SideEffect | ~m2144_4 | | ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | -| ir.cpp:2141:9:2141:9 | Left | r2141_2 | -| ir.cpp:2141:9:2141:9 | Load | m2140_8 | -| ir.cpp:2141:9:2141:14 | Condition | r2141_4 | -| ir.cpp:2141:14:2141:14 | Right | r2141_3 | -| ir.cpp:2142:9:2142:20 | CallTarget | func:r2142_1 | -| ir.cpp:2143:5:2143:12 | CallTarget | func:r2143_1 | -| ir.cpp:2143:5:2143:12 | ChiPartial | partial:m2143_3 | -| ir.cpp:2143:5:2143:12 | ChiTotal | total:m2140_7 | -| ir.cpp:2143:5:2143:12 | SideEffect | ~m2140_7 | -| ir.cpp:2144:5:2144:13 | Address | &:r2144_1 | -| ir.cpp:2144:12:2144:12 | Address | &:r2144_2 | -| ir.cpp:2144:12:2144:12 | Load | m2140_8 | -| ir.cpp:2144:12:2144:12 | StoreValue | r2144_3 | -| ir.cpp:2147:6:2147:24 | ChiPartial | partial:m2147_3 | -| ir.cpp:2147:6:2147:24 | ChiTotal | total:m2147_2 | -| ir.cpp:2147:6:2147:24 | SideEffect | ~m2153_8 | -| ir.cpp:2147:33:2147:33 | Address | &:r2147_5 | -| ir.cpp:2148:3:2148:12 | Address | &:r2148_6 | -| ir.cpp:2148:3:2148:12 | Arg(0) | 0:r2148_5 | -| ir.cpp:2148:3:2148:12 | CallTarget | func:r2148_1 | -| ir.cpp:2148:3:2148:12 | ChiPartial | partial:m2148_7 | -| ir.cpp:2148:3:2148:12 | ChiTotal | total:m2147_4 | -| ir.cpp:2148:3:2148:12 | Right | r2148_4 | -| ir.cpp:2148:3:2148:12 | SideEffect | ~m2147_4 | -| ir.cpp:2148:3:2148:12 | Unary | r2148_6 | -| ir.cpp:2148:11:2148:11 | Address | &:r2148_2 | -| ir.cpp:2148:11:2148:11 | Left | r2148_3 | -| ir.cpp:2148:11:2148:11 | Load | m2147_6 | -| ir.cpp:2149:3:2149:18 | Address | &:r2149_7 | -| ir.cpp:2149:3:2149:18 | Arg(0) | 0:r2149_5 | -| ir.cpp:2149:3:2149:18 | CallTarget | func:r2149_1 | -| ir.cpp:2149:3:2149:18 | ChiPartial | partial:m2149_8 | -| ir.cpp:2149:3:2149:18 | ChiTotal | total:m2148_8 | -| ir.cpp:2149:3:2149:18 | Right | r2149_4 | -| ir.cpp:2149:3:2149:18 | SideEffect | ~m2148_8 | -| ir.cpp:2149:3:2149:18 | Unary | r2149_7 | -| ir.cpp:2149:7:2149:10 | Arg(1) | 1:r2149_6 | -| ir.cpp:2149:17:2149:17 | Address | &:r2149_2 | -| ir.cpp:2149:17:2149:17 | Left | r2149_3 | -| ir.cpp:2149:17:2149:17 | Load | m2147_6 | -| ir.cpp:2150:3:2150:15 | Address | &:r2150_6 | -| ir.cpp:2150:3:2150:15 | Arg(0) | 0:r2150_5 | -| ir.cpp:2150:3:2150:15 | CallTarget | func:r2150_1 | -| ir.cpp:2150:3:2150:15 | ChiPartial | partial:m2150_7 | -| ir.cpp:2150:3:2150:15 | ChiTotal | total:m2149_9 | -| ir.cpp:2150:3:2150:15 | Right | r2150_4 | -| ir.cpp:2150:3:2150:15 | SideEffect | ~m2149_9 | -| ir.cpp:2150:3:2150:15 | Unary | r2150_6 | -| ir.cpp:2150:14:2150:14 | Address | &:r2150_2 | -| ir.cpp:2150:14:2150:14 | Left | r2150_3 | -| ir.cpp:2150:14:2150:14 | Load | m2147_6 | -| ir.cpp:2151:3:2151:20 | Address | &:r2151_7 | -| ir.cpp:2151:3:2151:20 | Arg(0) | 0:r2151_5 | -| ir.cpp:2151:3:2151:20 | CallTarget | func:r2151_1 | -| ir.cpp:2151:3:2151:20 | ChiPartial | partial:m2151_8 | -| ir.cpp:2151:3:2151:20 | ChiTotal | total:m2150_8 | -| ir.cpp:2151:3:2151:20 | Right | r2151_4 | -| ir.cpp:2151:3:2151:20 | SideEffect | ~m2150_8 | -| ir.cpp:2151:3:2151:20 | Unary | r2151_7 | -| ir.cpp:2151:19:2151:19 | Address | &:r2151_2 | -| ir.cpp:2151:19:2151:19 | Left | r2151_3 | -| ir.cpp:2151:19:2151:19 | Load | m2147_6 | -| ir.cpp:2151:21:2151:21 | Arg(1) | 1:r2151_6 | -| ir.cpp:2152:3:2152:36 | Address | &:r2152_6 | -| ir.cpp:2152:3:2152:36 | Arg(0) | 0:r2152_5 | -| ir.cpp:2152:3:2152:36 | CallTarget | func:r2152_1 | -| ir.cpp:2152:3:2152:36 | ChiPartial | partial:m2152_7 | -| ir.cpp:2152:3:2152:36 | ChiTotal | total:m2151_9 | -| ir.cpp:2152:3:2152:36 | Right | r2152_4 | -| ir.cpp:2152:3:2152:36 | SideEffect | ~m2151_9 | -| ir.cpp:2152:3:2152:36 | Unary | r2152_6 | -| ir.cpp:2152:35:2152:35 | Address | &:r2152_2 | -| ir.cpp:2152:35:2152:35 | Left | r2152_3 | -| ir.cpp:2152:35:2152:35 | Load | m2147_6 | -| ir.cpp:2153:3:2153:24 | Address | &:r2153_6 | -| ir.cpp:2153:3:2153:24 | Arg(0) | 0:r2153_5 | -| ir.cpp:2153:3:2153:24 | CallTarget | func:r2153_1 | -| ir.cpp:2153:3:2153:24 | ChiPartial | partial:m2153_7 | -| ir.cpp:2153:3:2153:24 | ChiTotal | total:m2152_8 | -| ir.cpp:2153:3:2153:24 | Right | r2153_4 | -| ir.cpp:2153:3:2153:24 | SideEffect | ~m2152_8 | -| ir.cpp:2153:3:2153:24 | Unary | r2153_6 | -| ir.cpp:2153:11:2153:11 | Address | &:r2153_2 | -| ir.cpp:2153:11:2153:11 | Left | r2153_3 | -| ir.cpp:2153:11:2153:11 | Load | m2147_6 | -| ir.cpp:2158:7:2158:17 | Address | &:r2158_10 | -| ir.cpp:2158:7:2158:17 | ChiPartial | partial:m2158_3 | -| ir.cpp:2158:7:2158:17 | ChiTotal | total:m2158_2 | -| ir.cpp:2158:7:2158:17 | Load | m2161_4 | -| ir.cpp:2158:7:2158:17 | SideEffect | m2158_3 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | -| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | -| ir.cpp:2158:25:2158:25 | Load | m2158_6 | -| ir.cpp:2158:25:2158:25 | SideEffect | m2158_8 | -| ir.cpp:2159:9:2159:11 | Address | &:r2159_1 | -| ir.cpp:2160:10:2160:10 | Address | &:r2160_1 | -| ir.cpp:2160:14:2160:19 | CallTarget | func:r2160_2 | -| ir.cpp:2160:14:2160:19 | StoreValue | r2160_8 | -| ir.cpp:2160:21:2160:21 | Address | &:r2160_3 | -| ir.cpp:2160:21:2160:21 | Address | &:r2160_5 | -| ir.cpp:2160:21:2160:21 | Arg(0) | 0:r2160_5 | -| ir.cpp:2160:21:2160:21 | Load | m2158_6 | -| ir.cpp:2160:21:2160:21 | SideEffect | ~m2158_8 | -| ir.cpp:2160:21:2160:21 | Unary | r2160_4 | -| ir.cpp:2160:24:2160:27 | Address | &:r2160_7 | -| ir.cpp:2160:24:2160:27 | Arg(1) | 1:r2160_7 | -| ir.cpp:2160:24:2160:27 | ChiPartial | partial:m2160_10 | -| ir.cpp:2160:24:2160:27 | ChiTotal | total:m2159_2 | -| ir.cpp:2160:25:2160:27 | Unary | r2160_6 | -| ir.cpp:2161:3:2161:13 | Address | &:r2161_1 | -| ir.cpp:2161:10:2161:12 | Address | &:r2161_2 | -| ir.cpp:2161:10:2161:12 | Load | m2160_11 | -| ir.cpp:2161:10:2161:12 | StoreValue | r2161_3 | -| ir.cpp:2168:6:2168:39 | ChiPartial | partial:m2168_3 | -| ir.cpp:2168:6:2168:39 | ChiTotal | total:m2168_2 | -| ir.cpp:2168:6:2168:39 | SideEffect | ~m2169_8 | -| ir.cpp:2169:6:2169:42 | Address | &:r2169_1 | -| ir.cpp:2169:6:2169:42 | Condition | r2169_12 | -| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | -| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | -| ir.cpp:2169:22:2169:22 | Arg(this) | this:r2169_4 | -| ir.cpp:2169:22:2169:22 | CallTarget | func:r2169_5 | -| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_7 | -| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_10 | -| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2168_4 | -| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2169_3 | -| ir.cpp:2169:22:2169:22 | SideEffect | m2169_3 | -| ir.cpp:2169:22:2169:22 | SideEffect | ~m2168_4 | -| ir.cpp:2169:22:2169:22 | Unary | r2169_6 | -| ir.cpp:2169:25:2169:42 | StoreValue | r2169_2 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_9 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_10 | -| ir.cpp:2172:7:2172:7 | Address | &:r2172_13 | -| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_3 | -| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_15 | -| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_2 | -| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_8 | -| ir.cpp:2172:7:2172:7 | Load | m0_2 | -| ir.cpp:2172:7:2172:7 | Load | m2172_6 | -| ir.cpp:2172:7:2172:7 | Load | ~m0_4 | -| ir.cpp:2172:7:2172:7 | SideEffect | m2172_3 | -| ir.cpp:2172:7:2172:7 | SideEffect | m2172_16 | -| ir.cpp:2172:7:2172:7 | StoreValue | r2172_14 | -| ir.cpp:2172:7:2172:7 | Unary | m2172_6 | -| ir.cpp:2172:7:2172:7 | Unary | r2172_11 | -| ir.cpp:2172:7:2172:7 | Unary | r2172_12 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | -| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | -| ir.cpp:2175:5:2175:23 | ChiPartial | partial:m2175_3 | -| ir.cpp:2175:5:2175:23 | ChiTotal | total:m2175_2 | -| ir.cpp:2175:5:2175:23 | Load | m2175_6 | -| ir.cpp:2175:5:2175:23 | SideEffect | m2175_20 | -| ir.cpp:2175:5:2175:23 | SideEffect | ~m2175_13 | -| ir.cpp:2175:29:2175:29 | Address | &:r2175_16 | -| ir.cpp:2175:29:2175:29 | Address | &:r2175_18 | -| ir.cpp:2175:29:2175:29 | Load | m2175_6 | -| ir.cpp:2175:29:2175:29 | Unary | r2175_17 | -| ir.cpp:2175:29:2175:40 | ChiPartial | partial:m2175_19 | -| ir.cpp:2175:29:2175:40 | ChiTotal | total:m2175_8 | -| ir.cpp:2175:33:2175:40 | Address | &:r2175_11 | -| ir.cpp:2175:33:2175:40 | Arg(0) | 0:r2175_10 | -| ir.cpp:2175:33:2175:40 | CallTarget | func:r2175_9 | -| ir.cpp:2175:33:2175:40 | ChiPartial | partial:m2175_12 | -| ir.cpp:2175:33:2175:40 | ChiTotal | total:m2175_4 | -| ir.cpp:2175:33:2175:40 | SideEffect | ~m2175_4 | -| ir.cpp:2175:33:2175:40 | StoreValue | r2175_15 | -| ir.cpp:2175:33:2175:40 | Unary | r2175_11 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | -| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | -| ir.cpp:2176:5:2176:24 | ChiPartial | partial:m2176_3 | -| ir.cpp:2176:5:2176:24 | ChiTotal | total:m2176_2 | -| ir.cpp:2176:5:2176:24 | Load | m2176_6 | -| ir.cpp:2176:5:2176:24 | SideEffect | m2176_8 | -| ir.cpp:2176:5:2176:24 | SideEffect | ~m2176_16 | -| ir.cpp:2176:30:2176:37 | CallTarget | func:r2176_9 | -| ir.cpp:2176:30:2176:37 | ChiPartial | partial:m2176_15 | -| ir.cpp:2176:30:2176:37 | ChiTotal | total:m2176_4 | -| ir.cpp:2176:30:2176:37 | SideEffect | ~m2176_4 | -| ir.cpp:2176:37:2176:37 | Address | &:r2176_10 | -| ir.cpp:2176:37:2176:37 | Address | &:r2176_12 | -| ir.cpp:2176:37:2176:37 | Arg(0) | 0:r2176_13 | -| ir.cpp:2176:37:2176:37 | Load | m2176_6 | -| ir.cpp:2176:37:2176:37 | Load | ~m2176_8 | -| ir.cpp:2176:37:2176:37 | Unary | r2176_11 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | -| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | -| ir.cpp:2178:10:2178:14 | ChiPartial | partial:m2178_3 | -| ir.cpp:2178:10:2178:14 | ChiTotal | total:m2178_2 | -| ir.cpp:2178:10:2178:14 | Load | m2178_6 | -| ir.cpp:2178:10:2178:14 | SideEffect | m2178_8 | -| ir.cpp:2178:10:2178:14 | SideEffect | ~m2178_19 | -| ir.cpp:2178:21:2178:21 | Address | &:r2178_9 | -| ir.cpp:2178:26:2178:27 | Address | &:r2178_17 | -| ir.cpp:2178:26:2178:31 | ChiPartial | partial:m2178_18 | -| ir.cpp:2178:26:2178:31 | ChiTotal | total:m2178_4 | -| ir.cpp:2178:27:2178:27 | Address | &:r2178_13 | -| ir.cpp:2178:27:2178:27 | Address | &:r2178_15 | -| ir.cpp:2178:27:2178:27 | Load | m2178_6 | -| ir.cpp:2178:27:2178:27 | Load | ~m2178_8 | -| ir.cpp:2178:27:2178:27 | Unary | r2178_14 | -| ir.cpp:2178:27:2178:27 | Unary | r2178_16 | -| ir.cpp:2178:31:2178:31 | Address | &:r2178_11 | -| ir.cpp:2178:31:2178:31 | Load | m2178_10 | -| ir.cpp:2178:31:2178:31 | StoreValue | r2178_12 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | -| ir.cpp:2179:10:2179:14 | Address | &:r2179_17 | -| ir.cpp:2179:10:2179:14 | ChiPartial | partial:m2179_3 | -| ir.cpp:2179:10:2179:14 | ChiTotal | total:m2179_2 | -| ir.cpp:2179:10:2179:14 | Load | m2179_6 | -| ir.cpp:2179:10:2179:14 | Load | m2179_15 | -| ir.cpp:2179:10:2179:14 | SideEffect | m2179_3 | -| ir.cpp:2179:10:2179:14 | SideEffect | m2179_8 | -| ir.cpp:2179:20:2179:29 | Address | &:r2179_9 | -| ir.cpp:2179:27:2179:28 | Load | ~m2179_4 | -| ir.cpp:2179:27:2179:28 | StoreValue | r2179_14 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_10 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_12 | -| ir.cpp:2179:28:2179:28 | Address | &:r2179_13 | -| ir.cpp:2179:28:2179:28 | Load | m2179_6 | -| ir.cpp:2179:28:2179:28 | Load | ~m2179_8 | -| ir.cpp:2179:28:2179:28 | Unary | r2179_11 | -| ir.cpp:2182:16:2182:50 | Address | &:r2182_3 | -| ir.cpp:2182:16:2182:50 | SideEffect | ~m2182_6 | -| ir.cpp:2182:54:2182:57 | ChiPartial | partial:m2182_5 | -| ir.cpp:2182:54:2182:57 | ChiTotal | total:m2182_2 | -| ir.cpp:2182:54:2182:57 | StoreValue | r2182_4 | -| ir.cpp:2184:6:2184:35 | ChiPartial | partial:m2184_3 | -| ir.cpp:2184:6:2184:35 | ChiTotal | total:m2184_2 | -| ir.cpp:2184:6:2184:35 | Phi | from 13:~m2219_5 | -| ir.cpp:2184:6:2184:35 | Phi | from 19:~m2219_13 | -| ir.cpp:2184:6:2184:35 | Phi | from 23:~m2219_22 | -| ir.cpp:2184:6:2184:35 | SideEffect | ~m2184_9 | -| ir.cpp:2184:42:2184:42 | Address | &:r2184_5 | -| ir.cpp:2184:50:2184:50 | Address | &:r2184_7 | -| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | -| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | -| ir.cpp:2185:29:2185:29 | Arg(this) | this:r2185_1 | -| ir.cpp:2185:29:2185:29 | CallTarget | func:r2185_3 | -| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_5 | -| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_7 | -| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2184_4 | -| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2185_2 | -| ir.cpp:2185:29:2185:29 | SideEffect | ~m2184_4 | -| ir.cpp:2185:32:2185:32 | Address | &:r2185_9 | -| ir.cpp:2185:32:2185:32 | Condition | r2185_10 | -| ir.cpp:2185:32:2185:32 | Load | m2184_6 | -| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | -| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | -| ir.cpp:2186:9:2186:9 | Arg(this) | this:r2186_1 | -| ir.cpp:2186:9:2186:9 | ChiPartial | partial:m2186_8 | -| ir.cpp:2186:9:2186:9 | ChiTotal | total:m2185_8 | -| ir.cpp:2186:9:2186:9 | SideEffect | m2185_8 | -| ir.cpp:2186:11:2186:15 | CallTarget | func:r2186_2 | -| ir.cpp:2186:11:2186:15 | ChiPartial | partial:m2186_5 | -| ir.cpp:2186:11:2186:15 | ChiTotal | total:m2185_6 | -| ir.cpp:2186:11:2186:15 | SideEffect | ~m2185_6 | -| ir.cpp:2186:17:2186:19 | Arg(0) | 0:r2186_3 | -| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | -| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | -| ir.cpp:2186:21:2186:21 | Arg(this) | this:r2186_10 | -| ir.cpp:2186:21:2186:21 | CallTarget | func:r2186_11 | -| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_13 | -| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_16 | -| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_6 | -| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_9 | -| ir.cpp:2186:21:2186:21 | SideEffect | m2186_9 | -| ir.cpp:2186:21:2186:21 | SideEffect | ~m2186_6 | -| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | -| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | -| ir.cpp:2188:39:2188:39 | Arg(this) | this:r2188_2 | -| ir.cpp:2188:39:2188:39 | CallTarget | func:r2188_4 | -| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_6 | -| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_8 | -| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_1 | -| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_3 | -| ir.cpp:2188:39:2188:39 | Phi | from 0:~m2185_6 | -| ir.cpp:2188:39:2188:39 | Phi | from 2:~m2186_14 | -| ir.cpp:2188:39:2188:39 | SideEffect | ~m2188_1 | -| ir.cpp:2188:42:2188:76 | Condition | r2188_10 | -| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | -| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | -| ir.cpp:2189:9:2189:9 | Arg(this) | this:r2189_1 | -| ir.cpp:2189:9:2189:9 | ChiPartial | partial:m2189_8 | -| ir.cpp:2189:9:2189:9 | ChiTotal | total:m2188_9 | -| ir.cpp:2189:9:2189:9 | SideEffect | m2188_9 | -| ir.cpp:2189:11:2189:15 | CallTarget | func:r2189_2 | -| ir.cpp:2189:11:2189:15 | ChiPartial | partial:m2189_5 | -| ir.cpp:2189:11:2189:15 | ChiTotal | total:m2188_7 | -| ir.cpp:2189:11:2189:15 | SideEffect | ~m2188_7 | -| ir.cpp:2189:17:2189:19 | Arg(0) | 0:r2189_3 | -| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | -| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | -| ir.cpp:2191:32:2191:32 | Arg(this) | this:r2191_1 | -| ir.cpp:2191:32:2191:32 | CallTarget | func:r2191_3 | -| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_5 | -| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_7 | -| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2189_6 | -| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2191_2 | -| ir.cpp:2191:32:2191:32 | SideEffect | ~m2189_6 | -| ir.cpp:2191:35:2191:35 | Address | &:r2191_9 | -| ir.cpp:2191:35:2191:35 | Condition | r2191_11 | -| ir.cpp:2191:35:2191:35 | Load | m2184_8 | -| ir.cpp:2191:35:2191:35 | Unary | r2191_10 | -| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | -| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | -| ir.cpp:2193:11:2193:11 | Arg(this) | this:r2193_1 | -| ir.cpp:2193:11:2193:11 | ChiPartial | partial:m2193_8 | -| ir.cpp:2193:11:2193:11 | ChiTotal | total:m2191_8 | -| ir.cpp:2193:11:2193:11 | SideEffect | m2191_8 | -| ir.cpp:2193:13:2193:17 | CallTarget | func:r2193_2 | -| ir.cpp:2193:13:2193:17 | ChiPartial | partial:m2193_5 | -| ir.cpp:2193:13:2193:17 | ChiTotal | total:m2191_6 | -| ir.cpp:2193:13:2193:17 | SideEffect | ~m2191_6 | -| ir.cpp:2193:19:2193:21 | Arg(0) | 0:r2193_3 | -| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | -| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | -| ir.cpp:2196:11:2196:11 | Arg(this) | this:r2196_1 | -| ir.cpp:2196:11:2196:11 | ChiPartial | partial:m2196_8 | -| ir.cpp:2196:11:2196:11 | ChiTotal | total:m2191_8 | -| ir.cpp:2196:11:2196:11 | SideEffect | m2191_8 | -| ir.cpp:2196:13:2196:17 | CallTarget | func:r2196_2 | -| ir.cpp:2196:13:2196:17 | ChiPartial | partial:m2196_5 | -| ir.cpp:2196:13:2196:17 | ChiTotal | total:m2191_6 | -| ir.cpp:2196:13:2196:17 | SideEffect | ~m2191_6 | -| ir.cpp:2196:19:2196:21 | Arg(0) | 0:r2196_3 | -| ir.cpp:2198:5:2198:5 | Phi | from 5:~m2193_6 | -| ir.cpp:2198:5:2198:5 | Phi | from 6:~m2196_6 | -| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | -| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | -| ir.cpp:2200:25:2200:25 | Arg(this) | this:r2200_1 | -| ir.cpp:2200:25:2200:25 | CallTarget | func:r2200_3 | -| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_5 | -| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_7 | -| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2198_1 | -| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2200_2 | -| ir.cpp:2200:25:2200:25 | SideEffect | ~m2198_1 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_14 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_18 | -| ir.cpp:2201:5:2201:5 | Address | &:r2201_24 | -| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | -| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | -| ir.cpp:2201:42:2201:43 | Arg(this) | this:r2201_1 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | -| ir.cpp:2201:45:2201:45 | Address | &:r2201_5 | -| ir.cpp:2201:45:2201:45 | Arg(0) | 0:r2201_8 | -| ir.cpp:2201:45:2201:45 | Load | m2200_8 | -| ir.cpp:2201:45:2201:45 | Load | m2201_7 | -| ir.cpp:2201:45:2201:45 | StoreValue | r2201_6 | -| ir.cpp:2201:45:2201:46 | CallTarget | func:r2201_3 | -| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_10 | -| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_12 | -| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2200_6 | -| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2201_2 | -| ir.cpp:2201:45:2201:46 | SideEffect | ~m2200_6 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_45 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | -| ir.cpp:2201:69:2201:69 | Arg(this) | this:r2201_53 | -| ir.cpp:2201:69:2201:69 | CallTarget | func:r2201_54 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_56 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_59 | -| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_6 | -| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_9 | -| ir.cpp:2201:69:2201:69 | SideEffect | m2202_9 | -| ir.cpp:2201:69:2201:69 | SideEffect | ~m2202_6 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_19 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_25 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_48 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_2 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_5 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_7 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_8 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_15 | -| ir.cpp:2201:73:2201:73 | Arg(this) | this:r2201_61 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_21 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_27 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_33 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_34 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_47 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_62 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_37 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_39 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_42 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_49 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_64 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_67 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m0_9 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_30 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_31 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_38 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_43 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_57 | -| ir.cpp:2201:73:2201:73 | Condition | r2201_41 | -| ir.cpp:2201:73:2201:73 | Load | m2201_17 | -| ir.cpp:2201:73:2201:73 | Load | m2201_17 | -| ir.cpp:2201:73:2201:73 | Phi | from 7:m2201_23 | -| ir.cpp:2201:73:2201:73 | Phi | from 7:~m2201_11 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:m2201_68 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:~m2201_65 | -| ir.cpp:2201:73:2201:73 | SideEffect | m2201_30 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_31 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_38 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_43 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_57 | -| ir.cpp:2201:73:2201:73 | StoreValue | r2201_22 | -| ir.cpp:2201:73:2201:73 | StoreValue | r2201_28 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_20 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_26 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_32 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_35 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_46 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_63 | -| ir.cpp:2201:73:2201:74 | StoreValue | r2201_16 | -| ir.cpp:2201:73:2201:74 | Unary | r2201_15 | -| ir.cpp:2201:73:2201:75 | Load | ~m2201_50 | -| ir.cpp:2201:73:2201:75 | StoreValue | r2201_51 | -| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | -| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | -| ir.cpp:2202:7:2202:7 | Arg(this) | this:r2202_1 | -| ir.cpp:2202:7:2202:7 | ChiPartial | partial:m2202_8 | -| ir.cpp:2202:7:2202:7 | ChiTotal | total:m2201_52 | -| ir.cpp:2202:7:2202:7 | SideEffect | m2201_52 | -| ir.cpp:2202:9:2202:13 | CallTarget | func:r2202_2 | -| ir.cpp:2202:9:2202:13 | ChiPartial | partial:m2202_5 | -| ir.cpp:2202:9:2202:13 | ChiTotal | total:m2201_50 | -| ir.cpp:2202:9:2202:13 | SideEffect | ~m2201_50 | -| ir.cpp:2202:15:2202:17 | Arg(0) | 0:r2202_3 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_14 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_18 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_24 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | -| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_1 | -| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_61 | -| ir.cpp:2204:42:2204:43 | CallTarget | func:r2204_62 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_64 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_67 | -| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_13 | -| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_57 | -| ir.cpp:2204:42:2204:43 | SideEffect | m2204_13 | -| ir.cpp:2204:42:2204:43 | SideEffect | ~m2204_57 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | -| ir.cpp:2204:45:2204:45 | Address | &:r2204_5 | -| ir.cpp:2204:45:2204:45 | Arg(0) | 0:r2204_8 | -| ir.cpp:2204:45:2204:45 | Load | m2200_8 | -| ir.cpp:2204:45:2204:45 | Load | m2204_7 | -| ir.cpp:2204:45:2204:45 | StoreValue | r2204_6 | -| ir.cpp:2204:45:2204:46 | CallTarget | func:r2204_3 | -| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_10 | -| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_12 | -| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2201_43 | -| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2204_2 | -| ir.cpp:2204:45:2204:46 | SideEffect | ~m2201_43 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_45 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_53 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_69 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_54 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_70 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_56 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_59 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_72 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_75 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | -| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | -| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | -| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_19 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_25 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_48 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_18 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_21 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_23 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_24 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_31 | -| ir.cpp:2204:73:2204:73 | Arg(this) | this:r2204_77 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_21 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_27 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_33 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_34 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_47 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_78 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_37 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_39 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_42 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_49 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_80 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_83 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m0_25 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_30 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_31 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_38 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_43 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_73 | -| ir.cpp:2204:73:2204:73 | Condition | r2204_41 | -| ir.cpp:2204:73:2204:73 | Load | m2204_17 | -| ir.cpp:2204:73:2204:73 | Load | m2204_17 | -| ir.cpp:2204:73:2204:73 | Phi | from 10:m2204_23 | -| ir.cpp:2204:73:2204:73 | Phi | from 10:~m2204_11 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:m2204_84 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:~m2204_81 | -| ir.cpp:2204:73:2204:73 | SideEffect | m2204_30 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_31 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_38 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_43 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_73 | -| ir.cpp:2204:73:2204:73 | StoreValue | r2204_22 | -| ir.cpp:2204:73:2204:73 | StoreValue | r2204_28 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_20 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_26 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_32 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_35 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_46 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_79 | -| ir.cpp:2204:73:2204:74 | StoreValue | r2204_16 | -| ir.cpp:2204:73:2204:74 | Unary | r2204_15 | -| ir.cpp:2204:73:2204:75 | Load | ~m2204_50 | -| ir.cpp:2204:73:2204:75 | StoreValue | r2204_51 | -| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | -| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | -| ir.cpp:2205:7:2205:7 | Arg(this) | this:r2205_1 | -| ir.cpp:2205:7:2205:7 | ChiPartial | partial:m2205_8 | -| ir.cpp:2205:7:2205:7 | ChiTotal | total:m2204_52 | -| ir.cpp:2205:7:2205:7 | SideEffect | m2204_52 | -| ir.cpp:2205:9:2205:13 | CallTarget | func:r2205_2 | -| ir.cpp:2205:9:2205:13 | ChiPartial | partial:m2205_5 | -| ir.cpp:2205:9:2205:13 | ChiTotal | total:m2204_50 | -| ir.cpp:2205:9:2205:13 | SideEffect | ~m2204_50 | -| ir.cpp:2205:15:2205:17 | Arg(0) | 0:r2205_3 | -| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | -| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | -| ir.cpp:2206:11:2206:11 | Arg(this) | this:r2206_1 | -| ir.cpp:2206:11:2206:11 | ChiPartial | partial:m2206_7 | -| ir.cpp:2206:11:2206:11 | ChiTotal | total:m2205_9 | -| ir.cpp:2206:11:2206:11 | SideEffect | m2205_9 | -| ir.cpp:2206:11:2206:19 | Left | r2206_9 | -| ir.cpp:2206:11:2206:26 | Condition | r2206_11 | -| ir.cpp:2206:13:2206:17 | CallTarget | func:r2206_2 | -| ir.cpp:2206:13:2206:17 | ChiPartial | partial:m2206_4 | -| ir.cpp:2206:13:2206:17 | ChiTotal | total:m2205_6 | -| ir.cpp:2206:13:2206:17 | SideEffect | ~m2205_6 | -| ir.cpp:2206:13:2206:17 | Unary | r2206_3 | -| ir.cpp:2206:24:2206:26 | Right | r2206_10 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_10 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_14 | -| ir.cpp:2210:5:2210:5 | Address | &:r2210_20 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | -| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_1 | -| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_58 | -| ir.cpp:2210:26:2210:27 | CallTarget | func:r2210_59 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_61 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_64 | -| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_9 | -| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_55 | -| ir.cpp:2210:26:2210:27 | SideEffect | m2210_9 | -| ir.cpp:2210:26:2210:27 | SideEffect | ~m2210_55 | -| ir.cpp:2210:29:2210:29 | Arg(0) | 0:r2210_4 | -| ir.cpp:2210:29:2210:30 | CallTarget | func:r2210_3 | -| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_6 | -| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_8 | -| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2204_43 | -| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2210_2 | -| ir.cpp:2210:29:2210:30 | SideEffect | ~m2204_43 | -| ir.cpp:2210:37:2210:37 | Address | &:r2210_50 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_15 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_21 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_53 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_34 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_37 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_39 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_40 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_47 | -| ir.cpp:2210:41:2210:41 | Arg(this) | this:r2210_41 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_17 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_23 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_29 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_30 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_42 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_52 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_33 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_35 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_38 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_44 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_47 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_54 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m0_41 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_26 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_27 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_34 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_39 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_55 | -| ir.cpp:2210:41:2210:41 | Condition | r2210_37 | -| ir.cpp:2210:41:2210:41 | Load | m2210_13 | -| ir.cpp:2210:41:2210:41 | Load | m2210_13 | -| ir.cpp:2210:41:2210:41 | Phi | from 15:m2210_19 | -| ir.cpp:2210:41:2210:41 | Phi | from 15:~m2210_7 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:m2210_48 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:~m2210_45 | -| ir.cpp:2210:41:2210:41 | SideEffect | m2210_26 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_27 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_34 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_39 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_55 | -| ir.cpp:2210:41:2210:41 | StoreValue | r2210_18 | -| ir.cpp:2210:41:2210:41 | StoreValue | r2210_24 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_16 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_22 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_28 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_31 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_43 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_51 | -| ir.cpp:2210:41:2210:42 | StoreValue | r2210_12 | -| ir.cpp:2210:41:2210:42 | Unary | r2210_11 | -| ir.cpp:2210:41:2210:43 | Load | ~m2210_55 | -| ir.cpp:2210:41:2210:43 | StoreValue | r2210_56 | -| ir.cpp:2211:11:2211:11 | Address | &:r2211_1 | -| ir.cpp:2211:11:2211:11 | Left | r2211_2 | -| ir.cpp:2211:11:2211:11 | Load | m2210_57 | -| ir.cpp:2211:11:2211:16 | Condition | r2211_4 | -| ir.cpp:2211:16:2211:16 | Right | r2211_3 | +| ir.cpp:2141:13:2141:15 | CallTarget | func:r2141_2 | +| ir.cpp:2141:13:2141:15 | ChiPartial | partial:m2141_6 | +| ir.cpp:2141:13:2141:15 | ChiTotal | total:m2140_4 | +| ir.cpp:2141:13:2141:15 | SideEffect | ~m2140_4 | +| ir.cpp:2141:13:2141:15 | StoreValue | r2141_5 | +| ir.cpp:2141:17:2141:17 | Arg(0) | 0:r2141_3 | +| ir.cpp:2141:19:2141:19 | Arg(1) | 1:r2141_4 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Left | r2142_2 | +| ir.cpp:2142:9:2142:9 | Load | m2141_8 | +| ir.cpp:2142:9:2142:14 | Condition | r2142_4 | +| ir.cpp:2142:14:2142:14 | Right | r2142_3 | +| ir.cpp:2143:9:2143:12 | CallTarget | func:r2143_1 | +| ir.cpp:2143:9:2143:12 | ChiPartial | partial:m2143_4 | +| ir.cpp:2143:9:2143:12 | ChiTotal | total:m2141_7 | +| ir.cpp:2143:9:2143:12 | SideEffect | ~m2141_7 | +| ir.cpp:2143:14:2143:14 | Arg(0) | 0:r2143_2 | +| ir.cpp:2144:5:2144:12 | CallTarget | func:r2144_1 | +| ir.cpp:2144:5:2144:12 | ChiPartial | partial:m2144_3 | +| ir.cpp:2144:5:2144:12 | ChiTotal | total:m2141_7 | +| ir.cpp:2144:5:2144:12 | SideEffect | ~m2141_7 | +| ir.cpp:2145:5:2145:13 | Address | &:r2145_1 | +| ir.cpp:2145:12:2145:12 | Address | &:r2145_2 | +| ir.cpp:2145:12:2145:12 | Load | m2141_8 | +| ir.cpp:2145:12:2145:12 | StoreValue | r2145_3 | +| ir.cpp:2148:6:2148:17 | ChiPartial | partial:m2148_3 | +| ir.cpp:2148:6:2148:17 | ChiTotal | total:m2148_2 | +| ir.cpp:2149:5:2149:12 | CallTarget | func:r2149_1 | +| ir.cpp:2149:5:2149:12 | ChiPartial | partial:m2149_3 | +| ir.cpp:2149:5:2149:12 | ChiTotal | total:m2148_4 | +| ir.cpp:2149:5:2149:12 | SideEffect | ~m2148_4 | +| ir.cpp:2150:5:2150:8 | CallTarget | func:r2150_1 | +| ir.cpp:2150:5:2150:8 | ChiPartial | partial:m2150_4 | +| ir.cpp:2150:5:2150:8 | ChiTotal | total:m2149_4 | +| ir.cpp:2150:5:2150:8 | SideEffect | ~m2149_4 | +| ir.cpp:2150:10:2150:10 | Arg(0) | 0:r2150_2 | +| ir.cpp:2153:5:2153:16 | Address | &:r2153_6 | +| ir.cpp:2153:5:2153:16 | ChiPartial | partial:m2153_3 | +| ir.cpp:2153:5:2153:16 | ChiTotal | total:m2153_2 | +| ir.cpp:2153:5:2153:16 | Load | m2158_4 | +| ir.cpp:2153:5:2153:16 | SideEffect | ~m2157_4 | +| ir.cpp:2154:9:2154:9 | Address | &:r2154_1 | +| ir.cpp:2154:13:2154:15 | CallTarget | func:r2154_2 | +| ir.cpp:2154:13:2154:15 | ChiPartial | partial:m2154_6 | +| ir.cpp:2154:13:2154:15 | ChiTotal | total:m2153_4 | +| ir.cpp:2154:13:2154:15 | SideEffect | ~m2153_4 | +| ir.cpp:2154:13:2154:15 | StoreValue | r2154_5 | +| ir.cpp:2154:17:2154:17 | Arg(0) | 0:r2154_3 | +| ir.cpp:2154:19:2154:19 | Arg(1) | 1:r2154_4 | +| ir.cpp:2155:9:2155:9 | Address | &:r2155_1 | +| ir.cpp:2155:9:2155:9 | Left | r2155_2 | +| ir.cpp:2155:9:2155:9 | Load | m2154_8 | +| ir.cpp:2155:9:2155:14 | Condition | r2155_4 | +| ir.cpp:2155:14:2155:14 | Right | r2155_3 | +| ir.cpp:2156:9:2156:20 | CallTarget | func:r2156_1 | +| ir.cpp:2157:5:2157:12 | CallTarget | func:r2157_1 | +| ir.cpp:2157:5:2157:12 | ChiPartial | partial:m2157_3 | +| ir.cpp:2157:5:2157:12 | ChiTotal | total:m2154_7 | +| ir.cpp:2157:5:2157:12 | SideEffect | ~m2154_7 | +| ir.cpp:2158:5:2158:13 | Address | &:r2158_1 | +| ir.cpp:2158:12:2158:12 | Address | &:r2158_2 | +| ir.cpp:2158:12:2158:12 | Load | m2154_8 | +| ir.cpp:2158:12:2158:12 | StoreValue | r2158_3 | +| ir.cpp:2161:6:2161:24 | ChiPartial | partial:m2161_3 | +| ir.cpp:2161:6:2161:24 | ChiTotal | total:m2161_2 | +| ir.cpp:2161:6:2161:24 | SideEffect | ~m2167_8 | +| ir.cpp:2161:33:2161:33 | Address | &:r2161_5 | +| ir.cpp:2162:3:2162:12 | Address | &:r2162_6 | +| ir.cpp:2162:3:2162:12 | Arg(0) | 0:r2162_5 | +| ir.cpp:2162:3:2162:12 | CallTarget | func:r2162_1 | +| ir.cpp:2162:3:2162:12 | ChiPartial | partial:m2162_7 | +| ir.cpp:2162:3:2162:12 | ChiTotal | total:m2161_4 | +| ir.cpp:2162:3:2162:12 | Right | r2162_4 | +| ir.cpp:2162:3:2162:12 | SideEffect | ~m2161_4 | +| ir.cpp:2162:3:2162:12 | Unary | r2162_6 | +| ir.cpp:2162:11:2162:11 | Address | &:r2162_2 | +| ir.cpp:2162:11:2162:11 | Left | r2162_3 | +| ir.cpp:2162:11:2162:11 | Load | m2161_6 | +| ir.cpp:2163:3:2163:18 | Address | &:r2163_7 | +| ir.cpp:2163:3:2163:18 | Arg(0) | 0:r2163_5 | +| ir.cpp:2163:3:2163:18 | CallTarget | func:r2163_1 | +| ir.cpp:2163:3:2163:18 | ChiPartial | partial:m2163_8 | +| ir.cpp:2163:3:2163:18 | ChiTotal | total:m2162_8 | +| ir.cpp:2163:3:2163:18 | Right | r2163_4 | +| ir.cpp:2163:3:2163:18 | SideEffect | ~m2162_8 | +| ir.cpp:2163:3:2163:18 | Unary | r2163_7 | +| ir.cpp:2163:7:2163:10 | Arg(1) | 1:r2163_6 | +| ir.cpp:2163:17:2163:17 | Address | &:r2163_2 | +| ir.cpp:2163:17:2163:17 | Left | r2163_3 | +| ir.cpp:2163:17:2163:17 | Load | m2161_6 | +| ir.cpp:2164:3:2164:15 | Address | &:r2164_6 | +| ir.cpp:2164:3:2164:15 | Arg(0) | 0:r2164_5 | +| ir.cpp:2164:3:2164:15 | CallTarget | func:r2164_1 | +| ir.cpp:2164:3:2164:15 | ChiPartial | partial:m2164_7 | +| ir.cpp:2164:3:2164:15 | ChiTotal | total:m2163_9 | +| ir.cpp:2164:3:2164:15 | Right | r2164_4 | +| ir.cpp:2164:3:2164:15 | SideEffect | ~m2163_9 | +| ir.cpp:2164:3:2164:15 | Unary | r2164_6 | +| ir.cpp:2164:14:2164:14 | Address | &:r2164_2 | +| ir.cpp:2164:14:2164:14 | Left | r2164_3 | +| ir.cpp:2164:14:2164:14 | Load | m2161_6 | +| ir.cpp:2165:3:2165:20 | Address | &:r2165_7 | +| ir.cpp:2165:3:2165:20 | Arg(0) | 0:r2165_5 | +| ir.cpp:2165:3:2165:20 | CallTarget | func:r2165_1 | +| ir.cpp:2165:3:2165:20 | ChiPartial | partial:m2165_8 | +| ir.cpp:2165:3:2165:20 | ChiTotal | total:m2164_8 | +| ir.cpp:2165:3:2165:20 | Right | r2165_4 | +| ir.cpp:2165:3:2165:20 | SideEffect | ~m2164_8 | +| ir.cpp:2165:3:2165:20 | Unary | r2165_7 | +| ir.cpp:2165:19:2165:19 | Address | &:r2165_2 | +| ir.cpp:2165:19:2165:19 | Left | r2165_3 | +| ir.cpp:2165:19:2165:19 | Load | m2161_6 | +| ir.cpp:2165:21:2165:21 | Arg(1) | 1:r2165_6 | +| ir.cpp:2166:3:2166:36 | Address | &:r2166_6 | +| ir.cpp:2166:3:2166:36 | Arg(0) | 0:r2166_5 | +| ir.cpp:2166:3:2166:36 | CallTarget | func:r2166_1 | +| ir.cpp:2166:3:2166:36 | ChiPartial | partial:m2166_7 | +| ir.cpp:2166:3:2166:36 | ChiTotal | total:m2165_9 | +| ir.cpp:2166:3:2166:36 | Right | r2166_4 | +| ir.cpp:2166:3:2166:36 | SideEffect | ~m2165_9 | +| ir.cpp:2166:3:2166:36 | Unary | r2166_6 | +| ir.cpp:2166:35:2166:35 | Address | &:r2166_2 | +| ir.cpp:2166:35:2166:35 | Left | r2166_3 | +| ir.cpp:2166:35:2166:35 | Load | m2161_6 | +| ir.cpp:2167:3:2167:24 | Address | &:r2167_6 | +| ir.cpp:2167:3:2167:24 | Arg(0) | 0:r2167_5 | +| ir.cpp:2167:3:2167:24 | CallTarget | func:r2167_1 | +| ir.cpp:2167:3:2167:24 | ChiPartial | partial:m2167_7 | +| ir.cpp:2167:3:2167:24 | ChiTotal | total:m2166_8 | +| ir.cpp:2167:3:2167:24 | Right | r2167_4 | +| ir.cpp:2167:3:2167:24 | SideEffect | ~m2166_8 | +| ir.cpp:2167:3:2167:24 | Unary | r2167_6 | +| ir.cpp:2167:11:2167:11 | Address | &:r2167_2 | +| ir.cpp:2167:11:2167:11 | Left | r2167_3 | +| ir.cpp:2167:11:2167:11 | Load | m2161_6 | +| ir.cpp:2172:7:2172:17 | Address | &:r2172_10 | +| ir.cpp:2172:7:2172:17 | ChiPartial | partial:m2172_3 | +| ir.cpp:2172:7:2172:17 | ChiTotal | total:m2172_2 | +| ir.cpp:2172:7:2172:17 | Load | m2175_4 | +| ir.cpp:2172:7:2172:17 | SideEffect | m2172_3 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_5 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_5 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_7 | +| ir.cpp:2172:25:2172:25 | Address | &:r2172_7 | +| ir.cpp:2172:25:2172:25 | Load | m2172_6 | +| ir.cpp:2172:25:2172:25 | SideEffect | m2172_8 | +| ir.cpp:2173:9:2173:11 | Address | &:r2173_1 | +| ir.cpp:2174:10:2174:10 | Address | &:r2174_1 | +| ir.cpp:2174:14:2174:19 | CallTarget | func:r2174_2 | +| ir.cpp:2174:14:2174:19 | StoreValue | r2174_8 | +| ir.cpp:2174:21:2174:21 | Address | &:r2174_3 | +| ir.cpp:2174:21:2174:21 | Address | &:r2174_5 | +| ir.cpp:2174:21:2174:21 | Arg(0) | 0:r2174_5 | +| ir.cpp:2174:21:2174:21 | Load | m2172_6 | +| ir.cpp:2174:21:2174:21 | SideEffect | ~m2172_8 | +| ir.cpp:2174:21:2174:21 | Unary | r2174_4 | +| ir.cpp:2174:24:2174:27 | Address | &:r2174_7 | +| ir.cpp:2174:24:2174:27 | Arg(1) | 1:r2174_7 | +| ir.cpp:2174:24:2174:27 | ChiPartial | partial:m2174_10 | +| ir.cpp:2174:24:2174:27 | ChiTotal | total:m2173_2 | +| ir.cpp:2174:25:2174:27 | Unary | r2174_6 | +| ir.cpp:2175:3:2175:13 | Address | &:r2175_1 | +| ir.cpp:2175:10:2175:12 | Address | &:r2175_2 | +| ir.cpp:2175:10:2175:12 | Load | m2174_11 | +| ir.cpp:2175:10:2175:12 | StoreValue | r2175_3 | +| ir.cpp:2182:6:2182:39 | ChiPartial | partial:m2182_3 | +| ir.cpp:2182:6:2182:39 | ChiTotal | total:m2182_2 | +| ir.cpp:2182:6:2182:39 | SideEffect | ~m2183_8 | +| ir.cpp:2183:6:2183:42 | Address | &:r2183_1 | +| ir.cpp:2183:6:2183:42 | Condition | r2183_12 | +| ir.cpp:2183:22:2183:22 | Address | &:r2183_4 | +| ir.cpp:2183:22:2183:22 | Address | &:r2183_4 | +| ir.cpp:2183:22:2183:22 | Arg(this) | this:r2183_4 | +| ir.cpp:2183:22:2183:22 | CallTarget | func:r2183_5 | +| ir.cpp:2183:22:2183:22 | ChiPartial | partial:m2183_7 | +| ir.cpp:2183:22:2183:22 | ChiPartial | partial:m2183_10 | +| ir.cpp:2183:22:2183:22 | ChiTotal | total:m2182_4 | +| ir.cpp:2183:22:2183:22 | ChiTotal | total:m2183_3 | +| ir.cpp:2183:22:2183:22 | SideEffect | m2183_3 | +| ir.cpp:2183:22:2183:22 | SideEffect | ~m2182_4 | +| ir.cpp:2183:22:2183:22 | Unary | r2183_6 | +| ir.cpp:2183:25:2183:42 | StoreValue | r2183_2 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_5 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_5 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_7 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_7 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_9 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_10 | +| ir.cpp:2186:7:2186:7 | Address | &:r2186_13 | +| ir.cpp:2186:7:2186:7 | ChiPartial | partial:m2186_3 | +| ir.cpp:2186:7:2186:7 | ChiPartial | partial:m2186_15 | +| ir.cpp:2186:7:2186:7 | ChiTotal | total:m2186_2 | +| ir.cpp:2186:7:2186:7 | ChiTotal | total:m2186_8 | +| ir.cpp:2186:7:2186:7 | Load | m0_2 | +| ir.cpp:2186:7:2186:7 | Load | m2186_6 | +| ir.cpp:2186:7:2186:7 | Load | ~m0_4 | +| ir.cpp:2186:7:2186:7 | SideEffect | m2186_3 | +| ir.cpp:2186:7:2186:7 | SideEffect | m2186_16 | +| ir.cpp:2186:7:2186:7 | StoreValue | r2186_14 | +| ir.cpp:2186:7:2186:7 | Unary | m2186_6 | +| ir.cpp:2186:7:2186:7 | Unary | r2186_11 | +| ir.cpp:2186:7:2186:7 | Unary | r2186_12 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_5 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_5 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_7 | +| ir.cpp:2189:5:2189:23 | Address | &:r2189_7 | +| ir.cpp:2189:5:2189:23 | ChiPartial | partial:m2189_3 | +| ir.cpp:2189:5:2189:23 | ChiTotal | total:m2189_2 | +| ir.cpp:2189:5:2189:23 | Load | m2189_6 | +| ir.cpp:2189:5:2189:23 | SideEffect | m2189_20 | +| ir.cpp:2189:5:2189:23 | SideEffect | ~m2189_13 | +| ir.cpp:2189:29:2189:29 | Address | &:r2189_16 | +| ir.cpp:2189:29:2189:29 | Address | &:r2189_18 | +| ir.cpp:2189:29:2189:29 | Load | m2189_6 | +| ir.cpp:2189:29:2189:29 | Unary | r2189_17 | +| ir.cpp:2189:29:2189:40 | ChiPartial | partial:m2189_19 | +| ir.cpp:2189:29:2189:40 | ChiTotal | total:m2189_8 | +| ir.cpp:2189:33:2189:40 | Address | &:r2189_11 | +| ir.cpp:2189:33:2189:40 | Arg(0) | 0:r2189_10 | +| ir.cpp:2189:33:2189:40 | CallTarget | func:r2189_9 | +| ir.cpp:2189:33:2189:40 | ChiPartial | partial:m2189_12 | +| ir.cpp:2189:33:2189:40 | ChiTotal | total:m2189_4 | +| ir.cpp:2189:33:2189:40 | SideEffect | ~m2189_4 | +| ir.cpp:2189:33:2189:40 | StoreValue | r2189_15 | +| ir.cpp:2189:33:2189:40 | Unary | r2189_11 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_5 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_5 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_7 | +| ir.cpp:2190:5:2190:24 | Address | &:r2190_7 | +| ir.cpp:2190:5:2190:24 | ChiPartial | partial:m2190_3 | +| ir.cpp:2190:5:2190:24 | ChiTotal | total:m2190_2 | +| ir.cpp:2190:5:2190:24 | Load | m2190_6 | +| ir.cpp:2190:5:2190:24 | SideEffect | m2190_8 | +| ir.cpp:2190:5:2190:24 | SideEffect | ~m2190_16 | +| ir.cpp:2190:30:2190:37 | CallTarget | func:r2190_9 | +| ir.cpp:2190:30:2190:37 | ChiPartial | partial:m2190_15 | +| ir.cpp:2190:30:2190:37 | ChiTotal | total:m2190_4 | +| ir.cpp:2190:30:2190:37 | SideEffect | ~m2190_4 | +| ir.cpp:2190:37:2190:37 | Address | &:r2190_10 | +| ir.cpp:2190:37:2190:37 | Address | &:r2190_12 | +| ir.cpp:2190:37:2190:37 | Arg(0) | 0:r2190_13 | +| ir.cpp:2190:37:2190:37 | Load | m2190_6 | +| ir.cpp:2190:37:2190:37 | Load | ~m2190_8 | +| ir.cpp:2190:37:2190:37 | Unary | r2190_11 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_5 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_5 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_7 | +| ir.cpp:2192:10:2192:14 | Address | &:r2192_7 | +| ir.cpp:2192:10:2192:14 | ChiPartial | partial:m2192_3 | +| ir.cpp:2192:10:2192:14 | ChiTotal | total:m2192_2 | +| ir.cpp:2192:10:2192:14 | Load | m2192_6 | +| ir.cpp:2192:10:2192:14 | SideEffect | m2192_8 | +| ir.cpp:2192:10:2192:14 | SideEffect | ~m2192_19 | +| ir.cpp:2192:21:2192:21 | Address | &:r2192_9 | +| ir.cpp:2192:26:2192:27 | Address | &:r2192_17 | +| ir.cpp:2192:26:2192:31 | ChiPartial | partial:m2192_18 | +| ir.cpp:2192:26:2192:31 | ChiTotal | total:m2192_4 | +| ir.cpp:2192:27:2192:27 | Address | &:r2192_13 | +| ir.cpp:2192:27:2192:27 | Address | &:r2192_15 | +| ir.cpp:2192:27:2192:27 | Load | m2192_6 | +| ir.cpp:2192:27:2192:27 | Load | ~m2192_8 | +| ir.cpp:2192:27:2192:27 | Unary | r2192_14 | +| ir.cpp:2192:27:2192:27 | Unary | r2192_16 | +| ir.cpp:2192:31:2192:31 | Address | &:r2192_11 | +| ir.cpp:2192:31:2192:31 | Load | m2192_10 | +| ir.cpp:2192:31:2192:31 | StoreValue | r2192_12 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_5 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_5 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_7 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_7 | +| ir.cpp:2193:10:2193:14 | Address | &:r2193_17 | +| ir.cpp:2193:10:2193:14 | ChiPartial | partial:m2193_3 | +| ir.cpp:2193:10:2193:14 | ChiTotal | total:m2193_2 | +| ir.cpp:2193:10:2193:14 | Load | m2193_6 | +| ir.cpp:2193:10:2193:14 | Load | m2193_15 | +| ir.cpp:2193:10:2193:14 | SideEffect | m2193_3 | +| ir.cpp:2193:10:2193:14 | SideEffect | m2193_8 | +| ir.cpp:2193:20:2193:29 | Address | &:r2193_9 | +| ir.cpp:2193:27:2193:28 | Load | ~m2193_4 | +| ir.cpp:2193:27:2193:28 | StoreValue | r2193_14 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_10 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_12 | +| ir.cpp:2193:28:2193:28 | Address | &:r2193_13 | +| ir.cpp:2193:28:2193:28 | Load | m2193_6 | +| ir.cpp:2193:28:2193:28 | Load | ~m2193_8 | +| ir.cpp:2193:28:2193:28 | Unary | r2193_11 | +| ir.cpp:2196:16:2196:50 | Address | &:r2196_3 | +| ir.cpp:2196:16:2196:50 | SideEffect | ~m2196_6 | +| ir.cpp:2196:54:2196:57 | ChiPartial | partial:m2196_5 | +| ir.cpp:2196:54:2196:57 | ChiTotal | total:m2196_2 | +| ir.cpp:2196:54:2196:57 | StoreValue | r2196_4 | +| ir.cpp:2198:6:2198:35 | ChiPartial | partial:m2198_3 | +| ir.cpp:2198:6:2198:35 | ChiTotal | total:m2198_2 | +| ir.cpp:2198:6:2198:35 | Phi | from 13:~m2233_5 | +| ir.cpp:2198:6:2198:35 | Phi | from 19:~m2233_13 | +| ir.cpp:2198:6:2198:35 | Phi | from 23:~m2233_22 | +| ir.cpp:2198:6:2198:35 | SideEffect | ~m2198_9 | +| ir.cpp:2198:42:2198:42 | Address | &:r2198_5 | +| ir.cpp:2198:50:2198:50 | Address | &:r2198_7 | +| ir.cpp:2199:29:2199:29 | Address | &:r2199_1 | +| ir.cpp:2199:29:2199:29 | Address | &:r2199_1 | +| ir.cpp:2199:29:2199:29 | Arg(this) | this:r2199_1 | +| ir.cpp:2199:29:2199:29 | CallTarget | func:r2199_3 | +| ir.cpp:2199:29:2199:29 | ChiPartial | partial:m2199_5 | +| ir.cpp:2199:29:2199:29 | ChiPartial | partial:m2199_7 | +| ir.cpp:2199:29:2199:29 | ChiTotal | total:m2198_4 | +| ir.cpp:2199:29:2199:29 | ChiTotal | total:m2199_2 | +| ir.cpp:2199:29:2199:29 | SideEffect | ~m2198_4 | +| ir.cpp:2199:32:2199:32 | Address | &:r2199_9 | +| ir.cpp:2199:32:2199:32 | Condition | r2199_10 | +| ir.cpp:2199:32:2199:32 | Load | m2198_6 | +| ir.cpp:2200:9:2200:9 | Address | &:r2200_1 | +| ir.cpp:2200:9:2200:9 | Address | &:r2200_1 | +| ir.cpp:2200:9:2200:9 | Arg(this) | this:r2200_1 | +| ir.cpp:2200:9:2200:9 | ChiPartial | partial:m2200_8 | +| ir.cpp:2200:9:2200:9 | ChiTotal | total:m2199_8 | +| ir.cpp:2200:9:2200:9 | SideEffect | m2199_8 | +| ir.cpp:2200:11:2200:15 | CallTarget | func:r2200_2 | +| ir.cpp:2200:11:2200:15 | ChiPartial | partial:m2200_5 | +| ir.cpp:2200:11:2200:15 | ChiTotal | total:m2199_6 | +| ir.cpp:2200:11:2200:15 | SideEffect | ~m2199_6 | +| ir.cpp:2200:17:2200:19 | Arg(0) | 0:r2200_3 | +| ir.cpp:2200:21:2200:21 | Address | &:r2200_10 | +| ir.cpp:2200:21:2200:21 | Address | &:r2200_10 | +| ir.cpp:2200:21:2200:21 | Arg(this) | this:r2200_10 | +| ir.cpp:2200:21:2200:21 | CallTarget | func:r2200_11 | +| ir.cpp:2200:21:2200:21 | ChiPartial | partial:m2200_13 | +| ir.cpp:2200:21:2200:21 | ChiPartial | partial:m2200_16 | +| ir.cpp:2200:21:2200:21 | ChiTotal | total:m2200_6 | +| ir.cpp:2200:21:2200:21 | ChiTotal | total:m2200_9 | +| ir.cpp:2200:21:2200:21 | SideEffect | m2200_9 | +| ir.cpp:2200:21:2200:21 | SideEffect | ~m2200_6 | +| ir.cpp:2202:39:2202:39 | Address | &:r2202_2 | +| ir.cpp:2202:39:2202:39 | Address | &:r2202_2 | +| ir.cpp:2202:39:2202:39 | Arg(this) | this:r2202_2 | +| ir.cpp:2202:39:2202:39 | CallTarget | func:r2202_4 | +| ir.cpp:2202:39:2202:39 | ChiPartial | partial:m2202_6 | +| ir.cpp:2202:39:2202:39 | ChiPartial | partial:m2202_8 | +| ir.cpp:2202:39:2202:39 | ChiTotal | total:m2202_1 | +| ir.cpp:2202:39:2202:39 | ChiTotal | total:m2202_3 | +| ir.cpp:2202:39:2202:39 | Phi | from 0:~m2199_6 | +| ir.cpp:2202:39:2202:39 | Phi | from 2:~m2200_14 | +| ir.cpp:2202:39:2202:39 | SideEffect | ~m2202_1 | +| ir.cpp:2202:42:2202:76 | Condition | r2202_10 | +| ir.cpp:2203:9:2203:9 | Address | &:r2203_1 | +| ir.cpp:2203:9:2203:9 | Address | &:r2203_1 | +| ir.cpp:2203:9:2203:9 | Arg(this) | this:r2203_1 | +| ir.cpp:2203:9:2203:9 | ChiPartial | partial:m2203_8 | +| ir.cpp:2203:9:2203:9 | ChiTotal | total:m2202_9 | +| ir.cpp:2203:9:2203:9 | SideEffect | m2202_9 | +| ir.cpp:2203:11:2203:15 | CallTarget | func:r2203_2 | +| ir.cpp:2203:11:2203:15 | ChiPartial | partial:m2203_5 | +| ir.cpp:2203:11:2203:15 | ChiTotal | total:m2202_7 | +| ir.cpp:2203:11:2203:15 | SideEffect | ~m2202_7 | +| ir.cpp:2203:17:2203:19 | Arg(0) | 0:r2203_3 | +| ir.cpp:2205:32:2205:32 | Address | &:r2205_1 | +| ir.cpp:2205:32:2205:32 | Address | &:r2205_1 | +| ir.cpp:2205:32:2205:32 | Arg(this) | this:r2205_1 | +| ir.cpp:2205:32:2205:32 | CallTarget | func:r2205_3 | +| ir.cpp:2205:32:2205:32 | ChiPartial | partial:m2205_5 | +| ir.cpp:2205:32:2205:32 | ChiPartial | partial:m2205_7 | +| ir.cpp:2205:32:2205:32 | ChiTotal | total:m2203_6 | +| ir.cpp:2205:32:2205:32 | ChiTotal | total:m2205_2 | +| ir.cpp:2205:32:2205:32 | SideEffect | ~m2203_6 | +| ir.cpp:2205:35:2205:35 | Address | &:r2205_9 | +| ir.cpp:2205:35:2205:35 | Condition | r2205_11 | +| ir.cpp:2205:35:2205:35 | Load | m2198_8 | +| ir.cpp:2205:35:2205:35 | Unary | r2205_10 | +| ir.cpp:2207:11:2207:11 | Address | &:r2207_1 | +| ir.cpp:2207:11:2207:11 | Address | &:r2207_1 | +| ir.cpp:2207:11:2207:11 | Arg(this) | this:r2207_1 | +| ir.cpp:2207:11:2207:11 | ChiPartial | partial:m2207_8 | +| ir.cpp:2207:11:2207:11 | ChiTotal | total:m2205_8 | +| ir.cpp:2207:11:2207:11 | SideEffect | m2205_8 | +| ir.cpp:2207:13:2207:17 | CallTarget | func:r2207_2 | +| ir.cpp:2207:13:2207:17 | ChiPartial | partial:m2207_5 | +| ir.cpp:2207:13:2207:17 | ChiTotal | total:m2205_6 | +| ir.cpp:2207:13:2207:17 | SideEffect | ~m2205_6 | +| ir.cpp:2207:19:2207:21 | Arg(0) | 0:r2207_3 | +| ir.cpp:2210:11:2210:11 | Address | &:r2210_1 | +| ir.cpp:2210:11:2210:11 | Address | &:r2210_1 | +| ir.cpp:2210:11:2210:11 | Arg(this) | this:r2210_1 | +| ir.cpp:2210:11:2210:11 | ChiPartial | partial:m2210_8 | +| ir.cpp:2210:11:2210:11 | ChiTotal | total:m2205_8 | +| ir.cpp:2210:11:2210:11 | SideEffect | m2205_8 | +| ir.cpp:2210:13:2210:17 | CallTarget | func:r2210_2 | +| ir.cpp:2210:13:2210:17 | ChiPartial | partial:m2210_5 | +| ir.cpp:2210:13:2210:17 | ChiTotal | total:m2205_6 | +| ir.cpp:2210:13:2210:17 | SideEffect | ~m2205_6 | +| ir.cpp:2210:19:2210:21 | Arg(0) | 0:r2210_3 | +| ir.cpp:2212:5:2212:5 | Phi | from 5:~m2207_6 | +| ir.cpp:2212:5:2212:5 | Phi | from 6:~m2210_6 | +| ir.cpp:2214:25:2214:25 | Address | &:r2214_1 | +| ir.cpp:2214:25:2214:25 | Address | &:r2214_1 | +| ir.cpp:2214:25:2214:25 | Arg(this) | this:r2214_1 | +| ir.cpp:2214:25:2214:25 | CallTarget | func:r2214_3 | +| ir.cpp:2214:25:2214:25 | ChiPartial | partial:m2214_5 | +| ir.cpp:2214:25:2214:25 | ChiPartial | partial:m2214_7 | +| ir.cpp:2214:25:2214:25 | ChiTotal | total:m2212_1 | +| ir.cpp:2214:25:2214:25 | ChiTotal | total:m2214_2 | +| ir.cpp:2214:25:2214:25 | SideEffect | ~m2212_1 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_14 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_18 | | ir.cpp:2215:5:2215:5 | Address | &:r2215_24 | @@ -11496,15 +11221,15 @@ | ir.cpp:2215:45:2215:45 | Address | &:r2215_4 | | ir.cpp:2215:45:2215:45 | Address | &:r2215_5 | | ir.cpp:2215:45:2215:45 | Arg(0) | 0:r2215_8 | -| ir.cpp:2215:45:2215:45 | Load | m2200_8 | +| ir.cpp:2215:45:2215:45 | Load | m2214_8 | | ir.cpp:2215:45:2215:45 | Load | m2215_7 | | ir.cpp:2215:45:2215:45 | StoreValue | r2215_6 | | ir.cpp:2215:45:2215:46 | CallTarget | func:r2215_3 | | ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_10 | | ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_12 | -| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2210_39 | +| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2214_6 | | ir.cpp:2215:45:2215:46 | ChiTotal | total:m2215_2 | -| ir.cpp:2215:45:2215:46 | SideEffect | ~m2210_39 | +| ir.cpp:2215:45:2215:46 | SideEffect | ~m2214_6 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_45 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | | ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | @@ -11512,20 +11237,20 @@ | ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_54 | | ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_56 | | ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_59 | -| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2215_52 | -| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2218_13 | -| ir.cpp:2215:69:2215:69 | SideEffect | m2215_52 | -| ir.cpp:2215:69:2215:69 | SideEffect | ~m2218_13 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_6 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2216_9 | +| ir.cpp:2215:69:2215:69 | SideEffect | m2216_9 | +| ir.cpp:2215:69:2215:69 | SideEffect | ~m2216_6 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_19 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_25 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_48 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | | ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_50 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_53 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_55 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_56 | -| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_63 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_2 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_5 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_7 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_8 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_15 | | ir.cpp:2215:73:2215:73 | Arg(this) | this:r2215_61 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_21 | | ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_27 | @@ -11539,7 +11264,7 @@ | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_49 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_64 | | ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_67 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_57 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_9 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_30 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_31 | | ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_38 | @@ -11548,10 +11273,10 @@ | ir.cpp:2215:73:2215:73 | Condition | r2215_41 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | | ir.cpp:2215:73:2215:73 | Load | m2215_17 | -| ir.cpp:2215:73:2215:73 | Phi | from 20:m2215_23 | -| ir.cpp:2215:73:2215:73 | Phi | from 20:~m2215_11 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:m2215_68 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:~m2215_65 | +| ir.cpp:2215:73:2215:73 | Phi | from 7:m2215_23 | +| ir.cpp:2215:73:2215:73 | Phi | from 7:~m2215_11 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:m2215_68 | +| ir.cpp:2215:73:2215:73 | Phi | from 9:~m2215_65 | | ir.cpp:2215:73:2215:73 | SideEffect | m2215_30 | | ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_31 | | ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_38 | @@ -11569,688 +11294,749 @@ | ir.cpp:2215:73:2215:74 | Unary | r2215_15 | | ir.cpp:2215:73:2215:75 | Load | ~m2215_50 | | ir.cpp:2215:73:2215:75 | StoreValue | r2215_51 | -| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:27:2216:28 | Arg(this) | this:r2216_1 | -| ir.cpp:2216:27:2216:28 | CallTarget | func:r2216_3 | -| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_5 | -| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_7 | -| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2215_50 | -| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2216_2 | -| ir.cpp:2216:27:2216:28 | SideEffect | ~m2215_50 | -| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | -| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | -| ir.cpp:2217:27:2217:28 | Arg(this) | this:r2217_1 | -| ir.cpp:2217:27:2217:28 | CallTarget | func:r2217_3 | -| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_5 | -| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_7 | -| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2216_6 | -| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2217_2 | -| ir.cpp:2217:27:2217:28 | SideEffect | ~m2216_6 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | -| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | -| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_1 | -| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_9 | -| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_2 | -| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_10 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_4 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_7 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_12 | -| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_15 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2216_8 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_6 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_8 | -| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2218_5 | -| ir.cpp:2218:5:2218:5 | SideEffect | m2216_8 | -| ir.cpp:2218:5:2218:5 | SideEffect | m2217_8 | -| ir.cpp:2218:5:2218:5 | SideEffect | ~m2217_6 | -| ir.cpp:2218:5:2218:5 | SideEffect | ~m2218_5 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | -| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_1 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_9 | -| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_18 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_2 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_10 | -| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_19 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_4 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_7 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_12 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_15 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_21 | -| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_24 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2204_65 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2210_62 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2215_43 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2204_65 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2210_62 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2215_43 | -| ir.cpp:2221:6:2221:38 | ChiPartial | partial:m2221_3 | -| ir.cpp:2221:6:2221:38 | ChiTotal | total:m2221_2 | -| ir.cpp:2221:6:2221:38 | SideEffect | ~m2224_7 | -| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | -| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | -| ir.cpp:2222:25:2222:25 | Arg(this) | this:r2222_1 | -| ir.cpp:2222:25:2222:25 | CallTarget | func:r2222_3 | -| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_5 | -| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_7 | -| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2221_4 | -| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2222_2 | -| ir.cpp:2222:25:2222:25 | SideEffect | ~m2221_4 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | -| ir.cpp:2223:32:2223:32 | Address | &:r2223_4 | -| ir.cpp:2223:32:2223:32 | Arg(this) | this:r2223_4 | -| ir.cpp:2223:32:2223:32 | ChiPartial | partial:m2223_6 | -| ir.cpp:2223:32:2223:32 | ChiTotal | total:m0_6 | -| ir.cpp:2223:32:2223:32 | Condition | r2223_2 | -| ir.cpp:2223:32:2223:32 | Load | ~m2222_6 | -| ir.cpp:2223:32:2223:32 | StoreValue | r2223_5 | -| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | -| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | -| ir.cpp:2224:1:2224:1 | Arg(this) | this:r2224_3 | -| ir.cpp:2224:1:2224:1 | CallTarget | func:r2224_4 | -| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_6 | -| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_9 | -| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2222_8 | -| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2224_1 | -| ir.cpp:2224:1:2224:1 | Phi | from 0:~m2222_6 | -| ir.cpp:2224:1:2224:1 | Phi | from 1:~m2223_7 | -| ir.cpp:2224:1:2224:1 | SideEffect | m2222_8 | -| ir.cpp:2224:1:2224:1 | SideEffect | ~m2224_1 | -| ir.cpp:2226:6:2226:38 | ChiPartial | partial:m2226_3 | -| ir.cpp:2226:6:2226:38 | ChiTotal | total:m2226_2 | -| ir.cpp:2226:6:2226:38 | SideEffect | ~m2229_6 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | -| ir.cpp:2227:32:2227:32 | Address | &:r2227_4 | -| ir.cpp:2227:32:2227:32 | Arg(this) | this:r2227_4 | -| ir.cpp:2227:32:2227:32 | ChiPartial | partial:m2227_6 | -| ir.cpp:2227:32:2227:32 | ChiTotal | total:m0_6 | -| ir.cpp:2227:32:2227:32 | Condition | r2227_2 | -| ir.cpp:2227:32:2227:32 | Load | ~m2226_3 | -| ir.cpp:2227:32:2227:32 | StoreValue | r2227_5 | -| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | -| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | -| ir.cpp:2228:25:2228:25 | Arg(this) | this:r2228_2 | -| ir.cpp:2228:25:2228:25 | CallTarget | func:r2228_4 | -| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_6 | -| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_8 | -| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_1 | -| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_3 | -| ir.cpp:2228:25:2228:25 | Phi | from 0:~m2226_4 | -| ir.cpp:2228:25:2228:25 | Phi | from 1:~m2227_7 | -| ir.cpp:2228:25:2228:25 | SideEffect | ~m2228_1 | -| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | -| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | -| ir.cpp:2229:1:2229:1 | Arg(this) | this:r2229_2 | -| ir.cpp:2229:1:2229:1 | CallTarget | func:r2229_3 | -| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_5 | -| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_8 | -| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_7 | -| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_9 | -| ir.cpp:2229:1:2229:1 | SideEffect | m2228_9 | -| ir.cpp:2229:1:2229:1 | SideEffect | ~m2228_7 | -| ir.cpp:2231:6:2231:38 | ChiPartial | partial:m2231_3 | -| ir.cpp:2231:6:2231:38 | ChiTotal | total:m2231_2 | -| ir.cpp:2231:6:2231:38 | SideEffect | ~m2235_15 | -| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | -| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | -| ir.cpp:2232:25:2232:25 | Arg(this) | this:r2232_1 | -| ir.cpp:2232:25:2232:25 | CallTarget | func:r2232_3 | -| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_5 | -| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_7 | -| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2231_4 | -| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2232_2 | -| ir.cpp:2232:25:2232:25 | SideEffect | ~m2231_4 | -| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | -| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | -| ir.cpp:2233:25:2233:25 | Arg(this) | this:r2233_1 | -| ir.cpp:2233:25:2233:25 | CallTarget | func:r2233_3 | -| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_5 | -| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_7 | -| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2232_6 | -| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2233_2 | -| ir.cpp:2233:25:2233:25 | SideEffect | ~m2232_6 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | -| ir.cpp:2234:32:2234:32 | Address | &:r2234_4 | -| ir.cpp:2234:32:2234:32 | Arg(this) | this:r2234_4 | -| ir.cpp:2234:32:2234:32 | ChiPartial | partial:m2234_6 | -| ir.cpp:2234:32:2234:32 | ChiTotal | total:m0_6 | -| ir.cpp:2234:32:2234:32 | Condition | r2234_2 | -| ir.cpp:2234:32:2234:32 | Load | ~m2233_6 | -| ir.cpp:2234:32:2234:32 | StoreValue | r2234_5 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | -| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | -| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_3 | -| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_11 | -| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_4 | -| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_12 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_6 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_9 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_14 | -| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_17 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2232_8 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2233_8 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_1 | -| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_7 | -| ir.cpp:2235:1:2235:1 | Phi | from 0:~m2233_6 | -| ir.cpp:2235:1:2235:1 | Phi | from 1:~m2234_7 | -| ir.cpp:2235:1:2235:1 | SideEffect | m2232_8 | -| ir.cpp:2235:1:2235:1 | SideEffect | m2233_8 | -| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_1 | -| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_7 | -| ir.cpp:2237:28:2237:55 | Address | &:r2237_3 | -| ir.cpp:2237:28:2237:55 | Arg(this) | this:r2237_3 | -| ir.cpp:2237:28:2237:55 | CallTarget | func:r2237_4 | -| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_6 | -| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_8 | -| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_2 | -| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_7 | -| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_2 | -| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_9 | -| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | -| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | -| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | -| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | -| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | -| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | -| ir.cpp:2241:8:2241:8 | Load | m2241_14 | -| ir.cpp:2241:8:2241:8 | Load | m2241_14 | -| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | -| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | -| ir.cpp:2241:15:2241:15 | Load | m2241_6 | -| ir.cpp:2241:15:2241:15 | Load | m2241_6 | -| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | -| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | -| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | -| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | -| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | -| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | -| ir.cpp:2241:27:2241:27 | Load | m2241_6 | -| ir.cpp:2241:27:2241:27 | Load | m2241_6 | -| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | -| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | -| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | -| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | -| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | -| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | -| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | -| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_8 | -| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_16 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | -| ir.cpp:2244:29:2244:29 | Load | m2244_6 | -| ir.cpp:2244:29:2244:29 | Load | m2244_6 | -| ir.cpp:2244:29:2244:29 | SideEffect | m2245_11 | -| ir.cpp:2244:29:2244:29 | SideEffect | m2245_19 | -| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | -| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | -| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | -| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | -| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | -| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | -| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | -| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | -| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | -| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | -| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | -| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | -| ir.cpp:2245:12:2245:15 | ChiPartial | partial:m2245_18 | -| ir.cpp:2245:12:2245:15 | ChiTotal | total:m2245_11 | -| ir.cpp:2245:12:2245:15 | SideEffect | ~m2245_11 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | -| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | -| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | -| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | -| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | -| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | -| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | -| ir.cpp:2245:13:2245:13 | Load | m2244_6 | -| ir.cpp:2245:13:2245:13 | Load | m2244_6 | -| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | -| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | -| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | -| ir.cpp:2245:16:2245:17 | CallTarget | func:r2245_13 | -| ir.cpp:2245:16:2245:17 | ChiPartial | partial:m2245_15 | -| ir.cpp:2245:16:2245:17 | ChiTotal | total:m2245_8 | -| ir.cpp:2245:16:2245:17 | SideEffect | ~m2245_8 | -| ir.cpp:2248:10:2248:36 | ChiPartial | partial:m2248_3 | -| ir.cpp:2248:10:2248:36 | ChiTotal | total:m2248_2 | -| ir.cpp:2248:10:2248:36 | SideEffect | ~m2251_6 | -| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | -| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | -| ir.cpp:2249:29:2249:29 | Arg(this) | this:r2249_1 | -| ir.cpp:2249:29:2249:29 | CallTarget | func:r2249_3 | -| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_5 | -| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_7 | -| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2248_4 | -| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2249_2 | -| ir.cpp:2249:29:2249:29 | SideEffect | ~m2248_4 | -| ir.cpp:2250:9:2250:23 | CallTarget | func:r2250_1 | -| ir.cpp:2250:9:2250:23 | ChiPartial | partial:m2250_5 | -| ir.cpp:2250:9:2250:23 | ChiTotal | total:m2249_6 | -| ir.cpp:2250:9:2250:23 | SideEffect | ~m2249_6 | -| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | -| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | -| ir.cpp:2250:25:2250:25 | Arg(0) | 0:r2250_3 | -| ir.cpp:2250:25:2250:25 | ChiPartial | partial:m2250_8 | -| ir.cpp:2250:25:2250:25 | ChiTotal | total:m2249_8 | -| ir.cpp:2250:25:2250:25 | SideEffect | ~m2249_8 | -| ir.cpp:2250:25:2250:25 | Unary | r2250_2 | -| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | -| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | -| ir.cpp:2251:5:2251:5 | Arg(this) | this:r2251_2 | -| ir.cpp:2251:5:2251:5 | CallTarget | func:r2251_3 | -| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_5 | -| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_8 | -| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_6 | -| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_9 | -| ir.cpp:2251:5:2251:5 | SideEffect | m2250_9 | -| ir.cpp:2251:5:2251:5 | SideEffect | ~m2250_6 | -| ir.cpp:2253:10:2253:32 | ChiPartial | partial:m2253_3 | -| ir.cpp:2253:10:2253:32 | ChiTotal | total:m2253_2 | -| ir.cpp:2253:10:2253:32 | SideEffect | ~m2255_6 | -| ir.cpp:2254:13:2254:13 | Address | &:r2254_1 | -| ir.cpp:2255:9:2255:23 | CallTarget | func:r2255_1 | -| ir.cpp:2255:9:2255:23 | ChiPartial | partial:m2255_5 | -| ir.cpp:2255:9:2255:23 | ChiTotal | total:m2253_4 | -| ir.cpp:2255:9:2255:23 | SideEffect | ~m2253_4 | -| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | -| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | -| ir.cpp:2255:25:2255:25 | Arg(0) | 0:r2255_3 | -| ir.cpp:2255:25:2255:25 | ChiPartial | partial:m2255_8 | -| ir.cpp:2255:25:2255:25 | ChiTotal | total:m2254_2 | -| ir.cpp:2255:25:2255:25 | SideEffect | ~m2254_2 | -| ir.cpp:2255:25:2255:25 | Unary | r2255_2 | -| ir.cpp:2259:6:2259:24 | ChiPartial | partial:m2259_3 | -| ir.cpp:2259:6:2259:24 | ChiTotal | total:m2259_2 | -| ir.cpp:2259:6:2259:24 | Phi | from 2:~m2259_10 | -| ir.cpp:2259:6:2259:24 | Phi | from 6:~m2268_8 | -| ir.cpp:2259:6:2259:24 | Phi | from 9:~m2261_6 | -| ir.cpp:2259:6:2259:24 | Phi | from 10:~m2275_1 | -| ir.cpp:2259:6:2259:24 | SideEffect | ~m2259_7 | -| ir.cpp:2259:31:2259:31 | Address | &:r2259_5 | -| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | -| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | -| ir.cpp:2261:12:2261:12 | Arg(this) | this:r2261_1 | -| ir.cpp:2261:12:2261:12 | CallTarget | func:r2261_3 | -| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_5 | -| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_7 | -| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2259_4 | -| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2261_2 | -| ir.cpp:2261:12:2261:12 | SideEffect | ~m2259_4 | -| ir.cpp:2262:9:2262:9 | Address | &:r2262_1 | -| ir.cpp:2262:9:2262:9 | Condition | r2262_2 | -| ir.cpp:2262:9:2262:9 | Load | m2259_6 | -| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | -| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | -| ir.cpp:2263:7:2263:28 | Load | m2263_4 | -| ir.cpp:2263:13:2263:28 | StoreValue | r2263_3 | -| ir.cpp:2263:13:2263:28 | Unary | r2263_2 | -| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | -| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | -| ir.cpp:2265:12:2265:13 | Arg(this) | this:r2265_1 | -| ir.cpp:2265:12:2265:13 | CallTarget | func:r2265_3 | -| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_5 | -| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_7 | -| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2261_6 | -| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2265_2 | -| ir.cpp:2265:12:2265:13 | SideEffect | ~m2261_6 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | -| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | -| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_1 | -| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_9 | -| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_2 | -| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_10 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_4 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_7 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_12 | -| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_15 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2261_8 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_6 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_8 | -| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2266_5 | -| ir.cpp:2266:3:2266:3 | SideEffect | m2261_8 | -| ir.cpp:2266:3:2266:3 | SideEffect | m2265_8 | -| ir.cpp:2266:3:2266:3 | SideEffect | ~m2265_6 | -| ir.cpp:2266:3:2266:3 | SideEffect | ~m2266_5 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | -| ir.cpp:2267:22:2267:22 | Address | &:r2267_4 | -| ir.cpp:2267:22:2267:22 | Load | m2267_3 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | -| ir.cpp:2268:5:2268:19 | Arg(this) | this:r2268_1 | -| ir.cpp:2268:5:2268:19 | CallTarget | func:r2268_3 | -| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_7 | -| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_10 | -| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2261_6 | -| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2268_2 | -| ir.cpp:2268:5:2268:19 | Load | m2268_11 | -| ir.cpp:2268:5:2268:19 | SideEffect | ~m2261_6 | -| ir.cpp:2268:18:2268:18 | Address | &:r2268_4 | -| ir.cpp:2268:18:2268:18 | Address | &:r2268_5 | -| ir.cpp:2268:18:2268:18 | Arg(0) | 0:r2268_5 | -| ir.cpp:2268:18:2268:18 | Load | m2267_3 | -| ir.cpp:2268:18:2268:18 | SideEffect | ~m2267_5 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | -| ir.cpp:2270:24:2270:24 | Address | &:r2270_4 | -| ir.cpp:2270:24:2270:24 | Load | m2270_3 | -| ir.cpp:2275:1:2275:1 | Phi | from 4:~m2266_13 | -| ir.cpp:2275:1:2275:1 | Phi | from 8:~m2261_6 | -| ir.cpp:2277:6:2277:18 | ChiPartial | partial:m2277_3 | -| ir.cpp:2277:6:2277:18 | ChiTotal | total:m2277_2 | -| ir.cpp:2277:6:2277:18 | SideEffect | ~m2285_14 | -| ir.cpp:2277:25:2277:25 | Address | &:r2277_5 | -| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | -| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | -| ir.cpp:2278:12:2278:13 | Arg(this) | this:r2278_1 | -| ir.cpp:2278:12:2278:13 | CallTarget | func:r2278_3 | -| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_5 | -| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_7 | -| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2277_4 | -| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2278_2 | -| ir.cpp:2278:12:2278:13 | SideEffect | ~m2277_4 | -| ir.cpp:2279:8:2279:8 | Address | &:r2279_1 | -| ir.cpp:2279:8:2279:8 | Condition | r2279_2 | -| ir.cpp:2279:8:2279:8 | Load | m2277_6 | -| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:17 | Arg(this) | this:r2280_1 | -| ir.cpp:2280:16:2280:17 | CallTarget | func:r2280_3 | -| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_5 | -| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_7 | -| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2278_6 | -| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2280_2 | -| ir.cpp:2280:16:2280:17 | SideEffect | ~m2278_6 | -| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | -| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | -| ir.cpp:2281:5:2281:5 | Arg(this) | this:r2281_1 | -| ir.cpp:2281:5:2281:5 | CallTarget | func:r2281_2 | -| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_4 | -| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_7 | -| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_6 | -| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_8 | -| ir.cpp:2281:5:2281:5 | SideEffect | m2280_8 | -| ir.cpp:2281:5:2281:5 | SideEffect | ~m2280_6 | -| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | -| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | -| ir.cpp:2282:16:2282:17 | Arg(this) | this:r2282_1 | -| ir.cpp:2282:16:2282:17 | CallTarget | func:r2282_3 | -| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_5 | -| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_7 | -| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2278_6 | -| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2282_2 | -| ir.cpp:2282:16:2282:17 | SideEffect | ~m2278_6 | -| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | -| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | -| ir.cpp:2283:5:2283:5 | Arg(this) | this:r2283_1 | -| ir.cpp:2283:5:2283:5 | CallTarget | func:r2283_2 | -| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_4 | -| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_7 | -| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_6 | -| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_8 | -| ir.cpp:2283:5:2283:5 | SideEffect | m2282_8 | -| ir.cpp:2283:5:2283:5 | SideEffect | ~m2282_6 | -| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | -| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | -| ir.cpp:2284:12:2284:13 | Arg(this) | this:r2284_2 | -| ir.cpp:2284:12:2284:13 | CallTarget | func:r2284_4 | -| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_6 | -| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_8 | -| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_1 | -| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_3 | -| ir.cpp:2284:12:2284:13 | Phi | from 1:~m2281_5 | -| ir.cpp:2284:12:2284:13 | Phi | from 2:~m2283_5 | -| ir.cpp:2284:12:2284:13 | SideEffect | ~m2284_1 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | -| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | -| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_2 | -| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_10 | -| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_3 | -| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_11 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_5 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_8 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_13 | -| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_16 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2278_8 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_7 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_9 | -| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2285_6 | -| ir.cpp:2285:1:2285:1 | SideEffect | m2278_8 | -| ir.cpp:2285:1:2285:1 | SideEffect | m2284_9 | -| ir.cpp:2285:1:2285:1 | SideEffect | ~m2284_7 | -| ir.cpp:2285:1:2285:1 | SideEffect | ~m2285_6 | -| ir.cpp:2287:6:2287:19 | ChiPartial | partial:m2287_3 | -| ir.cpp:2287:6:2287:19 | ChiTotal | total:m2287_2 | -| ir.cpp:2287:6:2287:19 | SideEffect | ~m2297_54 | -| ir.cpp:2288:10:2288:10 | Address | &:r2288_1 | -| ir.cpp:2288:13:2288:16 | StoreValue | r2288_2 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | -| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | -| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_1 | -| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_31 | -| ir.cpp:2289:16:2289:16 | CallTarget | func:r2289_32 | -| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_34 | -| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_37 | -| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_12 | -| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_13 | -| ir.cpp:2289:16:2289:16 | SideEffect | m2289_12 | -| ir.cpp:2289:16:2289:16 | SideEffect | ~m2289_13 | -| ir.cpp:2289:18:2289:24 | Address | &:r2289_5 | -| ir.cpp:2289:18:2289:24 | Arg(0) | 0:r2289_5 | -| ir.cpp:2289:18:2289:24 | SideEffect | ~m2287_3 | -| ir.cpp:2289:18:2289:24 | Unary | r2289_4 | -| ir.cpp:2289:18:2289:25 | CallTarget | func:r2289_3 | -| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_7 | -| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_10 | -| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2287_4 | -| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2289_2 | -| ir.cpp:2289:18:2289:25 | SideEffect | ~m2287_4 | -| ir.cpp:2289:28:2289:28 | Address | &:r2289_15 | -| ir.cpp:2289:28:2289:28 | Left | r2289_17 | -| ir.cpp:2289:28:2289:28 | Load | m2289_14 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:m2288_3 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:m2289_11 | -| ir.cpp:2289:28:2289:28 | Phi | from 0:~m2289_8 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_28 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_30 | -| ir.cpp:2289:28:2289:28 | Phi | from 2:~m2289_25 | -| ir.cpp:2289:28:2289:28 | Unary | r2289_16 | -| ir.cpp:2289:28:2289:33 | Condition | r2289_19 | -| ir.cpp:2289:33:2289:33 | Right | r2289_18 | -| ir.cpp:2289:36:2289:36 | Address | &:r2289_29 | -| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | -| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | -| ir.cpp:2289:40:2289:40 | Arg(this) | this:r2289_21 | -| ir.cpp:2289:40:2289:40 | ChiPartial | partial:m2289_27 | -| ir.cpp:2289:40:2289:40 | ChiTotal | total:m2289_12 | -| ir.cpp:2289:40:2289:40 | SideEffect | m2289_12 | -| ir.cpp:2289:42:2289:49 | CallTarget | func:r2289_22 | -| ir.cpp:2289:42:2289:49 | ChiPartial | partial:m2289_24 | -| ir.cpp:2289:42:2289:49 | ChiTotal | total:m2291_5 | -| ir.cpp:2289:42:2289:49 | SideEffect | ~m2291_5 | -| ir.cpp:2289:42:2289:49 | StoreValue | r2289_23 | -| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | -| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | -| ir.cpp:2290:16:2290:17 | Arg(this) | this:r2290_1 | -| ir.cpp:2290:16:2290:17 | CallTarget | func:r2290_3 | -| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_5 | -| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_7 | -| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2289_13 | -| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2290_2 | -| ir.cpp:2290:16:2290:17 | SideEffect | ~m2289_13 | -| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | -| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | -| ir.cpp:2291:5:2291:5 | Arg(this) | this:r2291_1 | -| ir.cpp:2291:5:2291:5 | CallTarget | func:r2291_2 | -| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_4 | -| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_7 | -| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_6 | -| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_8 | -| ir.cpp:2291:5:2291:5 | SideEffect | m2290_8 | -| ir.cpp:2291:5:2291:5 | SideEffect | ~m2290_6 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_1 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_24 | -| ir.cpp:2293:5:2293:5 | Address | &:r2293_30 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_51 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_68 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_53 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_69 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_63 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_66 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_71 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_74 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_52 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_58 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_67 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2295_5 | -| ir.cpp:2293:16:2293:16 | SideEffect | m2293_67 | -| ir.cpp:2293:16:2293:16 | SideEffect | ~m2293_58 | -| ir.cpp:2293:16:2293:16 | SideEffect | ~m2295_5 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_25 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_31 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_2 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_5 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_7 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_8 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_15 | -| ir.cpp:2293:20:2293:20 | Arg(this) | this:r2293_76 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_27 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_33 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_39 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_40 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_55 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_77 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_43 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_45 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_48 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_57 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_79 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_82 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m0_9 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_36 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_37 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_44 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_49 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_72 | -| ir.cpp:2293:20:2293:20 | Condition | r2293_47 | -| ir.cpp:2293:20:2293:20 | Load | m2293_23 | -| ir.cpp:2293:20:2293:20 | Load | m2293_23 | -| ir.cpp:2293:20:2293:20 | Phi | from 3:m2293_29 | -| ir.cpp:2293:20:2293:20 | Phi | from 3:~m2293_19 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:m2293_83 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:~m2293_80 | -| ir.cpp:2293:20:2293:20 | SideEffect | m2293_36 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_37 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_44 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_49 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_72 | -| ir.cpp:2293:20:2293:20 | StoreValue | r2293_28 | -| ir.cpp:2293:20:2293:20 | StoreValue | r2293_34 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_26 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_32 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_38 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_41 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_54 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_56 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_78 | -| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | -| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | -| ir.cpp:2293:20:2293:55 | Arg(this) | this:r2293_2 | -| ir.cpp:2293:20:2293:55 | CallTarget | func:r2293_4 | -| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_18 | -| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_20 | -| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_3 | -| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_12 | -| ir.cpp:2293:20:2293:55 | SideEffect | ~m2293_12 | -| ir.cpp:2293:20:2293:55 | StoreValue | r2293_22 | -| ir.cpp:2293:20:2293:55 | Unary | r2293_2 | -| ir.cpp:2293:20:2293:56 | Address | &:r2293_61 | -| ir.cpp:2293:20:2293:56 | Arg(0) | 0:r2293_61 | -| ir.cpp:2293:20:2293:56 | SideEffect | ~m2293_64 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_59 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_60 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | -| ir.cpp:2293:40:2293:54 | Arg(0) | 0:r2293_16 | -| ir.cpp:2293:40:2293:54 | Arg(this) | this:r2293_5 | -| ir.cpp:2293:40:2293:54 | CallTarget | func:r2293_7 | -| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_11 | -| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_14 | -| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2289_35 | -| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2293_6 | -| ir.cpp:2293:40:2293:54 | Load | m2293_15 | -| ir.cpp:2293:40:2293:54 | SideEffect | ~m2289_35 | -| ir.cpp:2293:47:2293:53 | Address | &:r2293_9 | -| ir.cpp:2293:47:2293:53 | Arg(0) | 0:r2293_9 | -| ir.cpp:2293:47:2293:53 | SideEffect | ~m2287_3 | -| ir.cpp:2293:47:2293:53 | Unary | r2293_8 | +| ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | +| ir.cpp:2216:7:2216:7 | Address | &:r2216_1 | +| ir.cpp:2216:7:2216:7 | Arg(this) | this:r2216_1 | +| ir.cpp:2216:7:2216:7 | ChiPartial | partial:m2216_8 | +| ir.cpp:2216:7:2216:7 | ChiTotal | total:m2215_52 | +| ir.cpp:2216:7:2216:7 | SideEffect | m2215_52 | +| ir.cpp:2216:9:2216:13 | CallTarget | func:r2216_2 | +| ir.cpp:2216:9:2216:13 | ChiPartial | partial:m2216_5 | +| ir.cpp:2216:9:2216:13 | ChiTotal | total:m2215_50 | +| ir.cpp:2216:9:2216:13 | SideEffect | ~m2215_50 | +| ir.cpp:2216:15:2216:17 | Arg(0) | 0:r2216_3 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_14 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_18 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_24 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_1 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | +| ir.cpp:2218:42:2218:43 | Address | &:r2218_61 | +| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_1 | +| ir.cpp:2218:42:2218:43 | Arg(this) | this:r2218_61 | +| ir.cpp:2218:42:2218:43 | CallTarget | func:r2218_62 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_64 | +| ir.cpp:2218:42:2218:43 | ChiPartial | partial:m2218_67 | +| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_13 | +| ir.cpp:2218:42:2218:43 | ChiTotal | total:m2218_57 | +| ir.cpp:2218:42:2218:43 | SideEffect | m2218_13 | +| ir.cpp:2218:42:2218:43 | SideEffect | ~m2218_57 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_4 | +| ir.cpp:2218:45:2218:45 | Address | &:r2218_5 | +| ir.cpp:2218:45:2218:45 | Arg(0) | 0:r2218_8 | +| ir.cpp:2218:45:2218:45 | Load | m2214_8 | +| ir.cpp:2218:45:2218:45 | Load | m2218_7 | +| ir.cpp:2218:45:2218:45 | StoreValue | r2218_6 | +| ir.cpp:2218:45:2218:46 | CallTarget | func:r2218_3 | +| ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_10 | +| ir.cpp:2218:45:2218:46 | ChiPartial | partial:m2218_12 | +| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2215_43 | +| ir.cpp:2218:45:2218:46 | ChiTotal | total:m2218_2 | +| ir.cpp:2218:45:2218:46 | SideEffect | ~m2215_43 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_45 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_53 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | +| ir.cpp:2218:69:2218:69 | Address | &:r2218_69 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_53 | +| ir.cpp:2218:69:2218:69 | Arg(this) | this:r2218_69 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_54 | +| ir.cpp:2218:69:2218:69 | CallTarget | func:r2218_70 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_56 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_59 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_72 | +| ir.cpp:2218:69:2218:69 | ChiPartial | partial:m2218_75 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_5 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_8 | +| ir.cpp:2218:69:2218:69 | ChiTotal | total:m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | m2220_8 | +| ir.cpp:2218:69:2218:69 | SideEffect | ~m2220_5 | +| ir.cpp:2218:69:2218:69 | SideEffect | ~m2220_5 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_19 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_25 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_48 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | +| ir.cpp:2218:73:2218:73 | Address | &:r2218_77 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_18 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_21 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_23 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_24 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r0_31 | +| ir.cpp:2218:73:2218:73 | Arg(this) | this:r2218_77 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_21 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_27 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_33 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_34 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_47 | +| ir.cpp:2218:73:2218:73 | CallTarget | func:r2218_78 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_37 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_39 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_42 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_49 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_80 | +| ir.cpp:2218:73:2218:73 | ChiPartial | partial:m2218_83 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m0_25 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_30 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_31 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_38 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_43 | +| ir.cpp:2218:73:2218:73 | ChiTotal | total:m2218_73 | +| ir.cpp:2218:73:2218:73 | Condition | r2218_41 | +| ir.cpp:2218:73:2218:73 | Load | m2218_17 | +| ir.cpp:2218:73:2218:73 | Load | m2218_17 | +| ir.cpp:2218:73:2218:73 | Phi | from 10:m2218_23 | +| ir.cpp:2218:73:2218:73 | Phi | from 10:~m2218_11 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:m2218_84 | +| ir.cpp:2218:73:2218:73 | Phi | from 14:~m2218_81 | +| ir.cpp:2218:73:2218:73 | SideEffect | m2218_30 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_31 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_38 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_43 | +| ir.cpp:2218:73:2218:73 | SideEffect | ~m2218_73 | +| ir.cpp:2218:73:2218:73 | StoreValue | r2218_22 | +| ir.cpp:2218:73:2218:73 | StoreValue | r2218_28 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_20 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_26 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_32 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_35 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_46 | +| ir.cpp:2218:73:2218:73 | Unary | r2218_79 | +| ir.cpp:2218:73:2218:74 | StoreValue | r2218_16 | +| ir.cpp:2218:73:2218:74 | Unary | r2218_15 | +| ir.cpp:2218:73:2218:75 | Load | ~m2218_50 | +| ir.cpp:2218:73:2218:75 | StoreValue | r2218_51 | +| ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | +| ir.cpp:2219:7:2219:7 | Address | &:r2219_1 | +| ir.cpp:2219:7:2219:7 | Arg(this) | this:r2219_1 | +| ir.cpp:2219:7:2219:7 | ChiPartial | partial:m2219_8 | +| ir.cpp:2219:7:2219:7 | ChiTotal | total:m2218_52 | +| ir.cpp:2219:7:2219:7 | SideEffect | m2218_52 | +| ir.cpp:2219:9:2219:13 | CallTarget | func:r2219_2 | +| ir.cpp:2219:9:2219:13 | ChiPartial | partial:m2219_5 | +| ir.cpp:2219:9:2219:13 | ChiTotal | total:m2218_50 | +| ir.cpp:2219:9:2219:13 | SideEffect | ~m2218_50 | +| ir.cpp:2219:15:2219:17 | Arg(0) | 0:r2219_3 | +| ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | +| ir.cpp:2220:11:2220:11 | Address | &:r2220_1 | +| ir.cpp:2220:11:2220:11 | Arg(this) | this:r2220_1 | +| ir.cpp:2220:11:2220:11 | ChiPartial | partial:m2220_7 | +| ir.cpp:2220:11:2220:11 | ChiTotal | total:m2219_9 | +| ir.cpp:2220:11:2220:11 | SideEffect | m2219_9 | +| ir.cpp:2220:11:2220:19 | Left | r2220_9 | +| ir.cpp:2220:11:2220:26 | Condition | r2220_11 | +| ir.cpp:2220:13:2220:17 | CallTarget | func:r2220_2 | +| ir.cpp:2220:13:2220:17 | ChiPartial | partial:m2220_4 | +| ir.cpp:2220:13:2220:17 | ChiTotal | total:m2219_6 | +| ir.cpp:2220:13:2220:17 | SideEffect | ~m2219_6 | +| ir.cpp:2220:13:2220:17 | Unary | r2220_3 | +| ir.cpp:2220:24:2220:26 | Right | r2220_10 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_10 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_14 | +| ir.cpp:2224:5:2224:5 | Address | &:r2224_20 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_1 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | +| ir.cpp:2224:26:2224:27 | Address | &:r2224_58 | +| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_1 | +| ir.cpp:2224:26:2224:27 | Arg(this) | this:r2224_58 | +| ir.cpp:2224:26:2224:27 | CallTarget | func:r2224_59 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_61 | +| ir.cpp:2224:26:2224:27 | ChiPartial | partial:m2224_64 | +| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_9 | +| ir.cpp:2224:26:2224:27 | ChiTotal | total:m2224_55 | +| ir.cpp:2224:26:2224:27 | SideEffect | m2224_9 | +| ir.cpp:2224:26:2224:27 | SideEffect | ~m2224_55 | +| ir.cpp:2224:29:2224:29 | Arg(0) | 0:r2224_4 | +| ir.cpp:2224:29:2224:30 | CallTarget | func:r2224_3 | +| ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_6 | +| ir.cpp:2224:29:2224:30 | ChiPartial | partial:m2224_8 | +| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2218_43 | +| ir.cpp:2224:29:2224:30 | ChiTotal | total:m2224_2 | +| ir.cpp:2224:29:2224:30 | SideEffect | ~m2218_43 | +| ir.cpp:2224:37:2224:37 | Address | &:r2224_50 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_15 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_21 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_41 | +| ir.cpp:2224:41:2224:41 | Address | &:r2224_53 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_34 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_37 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_39 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_40 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r0_47 | +| ir.cpp:2224:41:2224:41 | Arg(this) | this:r2224_41 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_17 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_23 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_29 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_30 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_42 | +| ir.cpp:2224:41:2224:41 | CallTarget | func:r2224_52 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_33 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_35 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_38 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_44 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_47 | +| ir.cpp:2224:41:2224:41 | ChiPartial | partial:m2224_54 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m0_41 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_26 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_27 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_34 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_39 | +| ir.cpp:2224:41:2224:41 | ChiTotal | total:m2224_55 | +| ir.cpp:2224:41:2224:41 | Condition | r2224_37 | +| ir.cpp:2224:41:2224:41 | Load | m2224_13 | +| ir.cpp:2224:41:2224:41 | Load | m2224_13 | +| ir.cpp:2224:41:2224:41 | Phi | from 15:m2224_19 | +| ir.cpp:2224:41:2224:41 | Phi | from 15:~m2224_7 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:m2224_48 | +| ir.cpp:2224:41:2224:41 | Phi | from 17:~m2224_45 | +| ir.cpp:2224:41:2224:41 | SideEffect | m2224_26 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_27 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_34 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_39 | +| ir.cpp:2224:41:2224:41 | SideEffect | ~m2224_55 | +| ir.cpp:2224:41:2224:41 | StoreValue | r2224_18 | +| ir.cpp:2224:41:2224:41 | StoreValue | r2224_24 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_16 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_22 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_28 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_31 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_43 | +| ir.cpp:2224:41:2224:41 | Unary | r2224_51 | +| ir.cpp:2224:41:2224:42 | StoreValue | r2224_12 | +| ir.cpp:2224:41:2224:42 | Unary | r2224_11 | +| ir.cpp:2224:41:2224:43 | Load | ~m2224_55 | +| ir.cpp:2224:41:2224:43 | StoreValue | r2224_56 | +| ir.cpp:2225:11:2225:11 | Address | &:r2225_1 | +| ir.cpp:2225:11:2225:11 | Left | r2225_2 | +| ir.cpp:2225:11:2225:11 | Load | m2224_57 | +| ir.cpp:2225:11:2225:16 | Condition | r2225_4 | +| ir.cpp:2225:16:2225:16 | Right | r2225_3 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_14 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_18 | +| ir.cpp:2229:5:2229:5 | Address | &:r2229_24 | +| ir.cpp:2229:42:2229:43 | Address | &:r2229_1 | +| ir.cpp:2229:42:2229:43 | Address | &:r2229_1 | +| ir.cpp:2229:42:2229:43 | Arg(this) | this:r2229_1 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_4 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_4 | +| ir.cpp:2229:45:2229:45 | Address | &:r2229_5 | +| ir.cpp:2229:45:2229:45 | Arg(0) | 0:r2229_8 | +| ir.cpp:2229:45:2229:45 | Load | m2214_8 | +| ir.cpp:2229:45:2229:45 | Load | m2229_7 | +| ir.cpp:2229:45:2229:45 | StoreValue | r2229_6 | +| ir.cpp:2229:45:2229:46 | CallTarget | func:r2229_3 | +| ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_10 | +| ir.cpp:2229:45:2229:46 | ChiPartial | partial:m2229_12 | +| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2224_39 | +| ir.cpp:2229:45:2229:46 | ChiTotal | total:m2229_2 | +| ir.cpp:2229:45:2229:46 | SideEffect | ~m2224_39 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_45 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | +| ir.cpp:2229:69:2229:69 | Address | &:r2229_53 | +| ir.cpp:2229:69:2229:69 | Arg(this) | this:r2229_53 | +| ir.cpp:2229:69:2229:69 | CallTarget | func:r2229_54 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_56 | +| ir.cpp:2229:69:2229:69 | ChiPartial | partial:m2229_59 | +| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2229_52 | +| ir.cpp:2229:69:2229:69 | ChiTotal | total:m2232_13 | +| ir.cpp:2229:69:2229:69 | SideEffect | m2229_52 | +| ir.cpp:2229:69:2229:69 | SideEffect | ~m2232_13 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_19 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_25 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_48 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | +| ir.cpp:2229:73:2229:73 | Address | &:r2229_61 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_50 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_53 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_55 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_56 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r0_63 | +| ir.cpp:2229:73:2229:73 | Arg(this) | this:r2229_61 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_21 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_27 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_33 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_34 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_47 | +| ir.cpp:2229:73:2229:73 | CallTarget | func:r2229_62 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_37 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_39 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_42 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_49 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_64 | +| ir.cpp:2229:73:2229:73 | ChiPartial | partial:m2229_67 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m0_57 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_30 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_31 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_38 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_43 | +| ir.cpp:2229:73:2229:73 | ChiTotal | total:m2229_57 | +| ir.cpp:2229:73:2229:73 | Condition | r2229_41 | +| ir.cpp:2229:73:2229:73 | Load | m2229_17 | +| ir.cpp:2229:73:2229:73 | Load | m2229_17 | +| ir.cpp:2229:73:2229:73 | Phi | from 20:m2229_23 | +| ir.cpp:2229:73:2229:73 | Phi | from 20:~m2229_11 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:m2229_68 | +| ir.cpp:2229:73:2229:73 | Phi | from 22:~m2229_65 | +| ir.cpp:2229:73:2229:73 | SideEffect | m2229_30 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_31 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_38 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_43 | +| ir.cpp:2229:73:2229:73 | SideEffect | ~m2229_57 | +| ir.cpp:2229:73:2229:73 | StoreValue | r2229_22 | +| ir.cpp:2229:73:2229:73 | StoreValue | r2229_28 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_20 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_26 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_32 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_35 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_46 | +| ir.cpp:2229:73:2229:73 | Unary | r2229_63 | +| ir.cpp:2229:73:2229:74 | StoreValue | r2229_16 | +| ir.cpp:2229:73:2229:74 | Unary | r2229_15 | +| ir.cpp:2229:73:2229:75 | Load | ~m2229_50 | +| ir.cpp:2229:73:2229:75 | StoreValue | r2229_51 | +| ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | +| ir.cpp:2230:27:2230:28 | Address | &:r2230_1 | +| ir.cpp:2230:27:2230:28 | Arg(this) | this:r2230_1 | +| ir.cpp:2230:27:2230:28 | CallTarget | func:r2230_3 | +| ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_5 | +| ir.cpp:2230:27:2230:28 | ChiPartial | partial:m2230_7 | +| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2229_50 | +| ir.cpp:2230:27:2230:28 | ChiTotal | total:m2230_2 | +| ir.cpp:2230:27:2230:28 | SideEffect | ~m2229_50 | +| ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | +| ir.cpp:2231:27:2231:28 | Address | &:r2231_1 | +| ir.cpp:2231:27:2231:28 | Arg(this) | this:r2231_1 | +| ir.cpp:2231:27:2231:28 | CallTarget | func:r2231_3 | +| ir.cpp:2231:27:2231:28 | ChiPartial | partial:m2231_5 | +| ir.cpp:2231:27:2231:28 | ChiPartial | partial:m2231_7 | +| ir.cpp:2231:27:2231:28 | ChiTotal | total:m2230_6 | +| ir.cpp:2231:27:2231:28 | ChiTotal | total:m2231_2 | +| ir.cpp:2231:27:2231:28 | SideEffect | ~m2230_6 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_1 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_1 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_9 | +| ir.cpp:2232:5:2232:5 | Address | &:r2232_9 | +| ir.cpp:2232:5:2232:5 | Arg(this) | this:r2232_1 | +| ir.cpp:2232:5:2232:5 | Arg(this) | this:r2232_9 | +| ir.cpp:2232:5:2232:5 | CallTarget | func:r2232_2 | +| ir.cpp:2232:5:2232:5 | CallTarget | func:r2232_10 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_4 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_7 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_12 | +| ir.cpp:2232:5:2232:5 | ChiPartial | partial:m2232_15 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2230_8 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2231_6 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2231_8 | +| ir.cpp:2232:5:2232:5 | ChiTotal | total:m2232_5 | +| ir.cpp:2232:5:2232:5 | SideEffect | m2230_8 | +| ir.cpp:2232:5:2232:5 | SideEffect | m2231_8 | +| ir.cpp:2232:5:2232:5 | SideEffect | ~m2231_6 | +| ir.cpp:2232:5:2232:5 | SideEffect | ~m2232_5 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_1 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_1 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_9 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_9 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_18 | +| ir.cpp:2233:1:2233:1 | Address | &:r2233_18 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_1 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_9 | +| ir.cpp:2233:1:2233:1 | Arg(this) | this:r2233_18 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_2 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_10 | +| ir.cpp:2233:1:2233:1 | CallTarget | func:r2233_19 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_4 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_7 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_12 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_15 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_21 | +| ir.cpp:2233:1:2233:1 | ChiPartial | partial:m2233_24 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2214_8 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2218_65 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2224_62 | +| ir.cpp:2233:1:2233:1 | ChiTotal | total:m2229_43 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | m2214_8 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2218_65 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2224_62 | +| ir.cpp:2233:1:2233:1 | SideEffect | ~m2229_43 | +| ir.cpp:2235:6:2235:38 | ChiPartial | partial:m2235_3 | +| ir.cpp:2235:6:2235:38 | ChiTotal | total:m2235_2 | +| ir.cpp:2235:6:2235:38 | SideEffect | ~m2238_7 | +| ir.cpp:2236:25:2236:25 | Address | &:r2236_1 | +| ir.cpp:2236:25:2236:25 | Address | &:r2236_1 | +| ir.cpp:2236:25:2236:25 | Arg(this) | this:r2236_1 | +| ir.cpp:2236:25:2236:25 | CallTarget | func:r2236_3 | +| ir.cpp:2236:25:2236:25 | ChiPartial | partial:m2236_5 | +| ir.cpp:2236:25:2236:25 | ChiPartial | partial:m2236_7 | +| ir.cpp:2236:25:2236:25 | ChiTotal | total:m2235_4 | +| ir.cpp:2236:25:2236:25 | ChiTotal | total:m2236_2 | +| ir.cpp:2236:25:2236:25 | SideEffect | ~m2235_4 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_1 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_1 | +| ir.cpp:2237:32:2237:32 | Address | &:r2237_4 | +| ir.cpp:2237:32:2237:32 | Arg(this) | this:r2237_4 | +| ir.cpp:2237:32:2237:32 | ChiPartial | partial:m2237_6 | +| ir.cpp:2237:32:2237:32 | ChiTotal | total:m0_6 | +| ir.cpp:2237:32:2237:32 | Condition | r2237_2 | +| ir.cpp:2237:32:2237:32 | Load | ~m2236_6 | +| ir.cpp:2237:32:2237:32 | StoreValue | r2237_5 | +| ir.cpp:2238:1:2238:1 | Address | &:r2238_3 | +| ir.cpp:2238:1:2238:1 | Address | &:r2238_3 | +| ir.cpp:2238:1:2238:1 | Arg(this) | this:r2238_3 | +| ir.cpp:2238:1:2238:1 | CallTarget | func:r2238_4 | +| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_6 | +| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_9 | +| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2236_8 | +| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2238_1 | +| ir.cpp:2238:1:2238:1 | Phi | from 0:~m2236_6 | +| ir.cpp:2238:1:2238:1 | Phi | from 1:~m2237_7 | +| ir.cpp:2238:1:2238:1 | SideEffect | m2236_8 | +| ir.cpp:2238:1:2238:1 | SideEffect | ~m2238_1 | +| ir.cpp:2240:6:2240:38 | ChiPartial | partial:m2240_3 | +| ir.cpp:2240:6:2240:38 | ChiTotal | total:m2240_2 | +| ir.cpp:2240:6:2240:38 | SideEffect | ~m2243_6 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_1 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_1 | +| ir.cpp:2241:32:2241:32 | Address | &:r2241_4 | +| ir.cpp:2241:32:2241:32 | Arg(this) | this:r2241_4 | +| ir.cpp:2241:32:2241:32 | ChiPartial | partial:m2241_6 | +| ir.cpp:2241:32:2241:32 | ChiTotal | total:m0_6 | +| ir.cpp:2241:32:2241:32 | Condition | r2241_2 | +| ir.cpp:2241:32:2241:32 | Load | ~m2240_3 | +| ir.cpp:2241:32:2241:32 | StoreValue | r2241_5 | +| ir.cpp:2242:25:2242:25 | Address | &:r2242_2 | +| ir.cpp:2242:25:2242:25 | Address | &:r2242_2 | +| ir.cpp:2242:25:2242:25 | Arg(this) | this:r2242_2 | +| ir.cpp:2242:25:2242:25 | CallTarget | func:r2242_4 | +| ir.cpp:2242:25:2242:25 | ChiPartial | partial:m2242_6 | +| ir.cpp:2242:25:2242:25 | ChiPartial | partial:m2242_8 | +| ir.cpp:2242:25:2242:25 | ChiTotal | total:m2242_1 | +| ir.cpp:2242:25:2242:25 | ChiTotal | total:m2242_3 | +| ir.cpp:2242:25:2242:25 | Phi | from 0:~m2240_4 | +| ir.cpp:2242:25:2242:25 | Phi | from 1:~m2241_7 | +| ir.cpp:2242:25:2242:25 | SideEffect | ~m2242_1 | +| ir.cpp:2243:1:2243:1 | Address | &:r2243_2 | +| ir.cpp:2243:1:2243:1 | Address | &:r2243_2 | +| ir.cpp:2243:1:2243:1 | Arg(this) | this:r2243_2 | +| ir.cpp:2243:1:2243:1 | CallTarget | func:r2243_3 | +| ir.cpp:2243:1:2243:1 | ChiPartial | partial:m2243_5 | +| ir.cpp:2243:1:2243:1 | ChiPartial | partial:m2243_8 | +| ir.cpp:2243:1:2243:1 | ChiTotal | total:m2242_7 | +| ir.cpp:2243:1:2243:1 | ChiTotal | total:m2242_9 | +| ir.cpp:2243:1:2243:1 | SideEffect | m2242_9 | +| ir.cpp:2243:1:2243:1 | SideEffect | ~m2242_7 | +| ir.cpp:2245:6:2245:38 | ChiPartial | partial:m2245_3 | +| ir.cpp:2245:6:2245:38 | ChiTotal | total:m2245_2 | +| ir.cpp:2245:6:2245:38 | SideEffect | ~m2249_15 | +| ir.cpp:2246:25:2246:25 | Address | &:r2246_1 | +| ir.cpp:2246:25:2246:25 | Address | &:r2246_1 | +| ir.cpp:2246:25:2246:25 | Arg(this) | this:r2246_1 | +| ir.cpp:2246:25:2246:25 | CallTarget | func:r2246_3 | +| ir.cpp:2246:25:2246:25 | ChiPartial | partial:m2246_5 | +| ir.cpp:2246:25:2246:25 | ChiPartial | partial:m2246_7 | +| ir.cpp:2246:25:2246:25 | ChiTotal | total:m2245_4 | +| ir.cpp:2246:25:2246:25 | ChiTotal | total:m2246_2 | +| ir.cpp:2246:25:2246:25 | SideEffect | ~m2245_4 | +| ir.cpp:2247:25:2247:25 | Address | &:r2247_1 | +| ir.cpp:2247:25:2247:25 | Address | &:r2247_1 | +| ir.cpp:2247:25:2247:25 | Arg(this) | this:r2247_1 | +| ir.cpp:2247:25:2247:25 | CallTarget | func:r2247_3 | +| ir.cpp:2247:25:2247:25 | ChiPartial | partial:m2247_5 | +| ir.cpp:2247:25:2247:25 | ChiPartial | partial:m2247_7 | +| ir.cpp:2247:25:2247:25 | ChiTotal | total:m2246_6 | +| ir.cpp:2247:25:2247:25 | ChiTotal | total:m2247_2 | +| ir.cpp:2247:25:2247:25 | SideEffect | ~m2246_6 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_1 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_1 | +| ir.cpp:2248:32:2248:32 | Address | &:r2248_4 | +| ir.cpp:2248:32:2248:32 | Arg(this) | this:r2248_4 | +| ir.cpp:2248:32:2248:32 | ChiPartial | partial:m2248_6 | +| ir.cpp:2248:32:2248:32 | ChiTotal | total:m0_6 | +| ir.cpp:2248:32:2248:32 | Condition | r2248_2 | +| ir.cpp:2248:32:2248:32 | Load | ~m2247_6 | +| ir.cpp:2248:32:2248:32 | StoreValue | r2248_5 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_3 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_3 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_11 | +| ir.cpp:2249:1:2249:1 | Address | &:r2249_11 | +| ir.cpp:2249:1:2249:1 | Arg(this) | this:r2249_3 | +| ir.cpp:2249:1:2249:1 | Arg(this) | this:r2249_11 | +| ir.cpp:2249:1:2249:1 | CallTarget | func:r2249_4 | +| ir.cpp:2249:1:2249:1 | CallTarget | func:r2249_12 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_6 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_9 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_14 | +| ir.cpp:2249:1:2249:1 | ChiPartial | partial:m2249_17 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2246_8 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2247_8 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2249_1 | +| ir.cpp:2249:1:2249:1 | ChiTotal | total:m2249_7 | +| ir.cpp:2249:1:2249:1 | Phi | from 0:~m2247_6 | +| ir.cpp:2249:1:2249:1 | Phi | from 1:~m2248_7 | +| ir.cpp:2249:1:2249:1 | SideEffect | m2246_8 | +| ir.cpp:2249:1:2249:1 | SideEffect | m2247_8 | +| ir.cpp:2249:1:2249:1 | SideEffect | ~m2249_1 | +| ir.cpp:2249:1:2249:1 | SideEffect | ~m2249_7 | +| ir.cpp:2251:28:2251:55 | Address | &:r2251_3 | +| ir.cpp:2251:28:2251:55 | Arg(this) | this:r2251_3 | +| ir.cpp:2251:28:2251:55 | CallTarget | func:r2251_4 | +| ir.cpp:2251:28:2251:55 | ChiPartial | partial:m2251_6 | +| ir.cpp:2251:28:2251:55 | ChiPartial | partial:m2251_8 | +| ir.cpp:2251:28:2251:55 | ChiTotal | total:m2251_2 | +| ir.cpp:2251:28:2251:55 | ChiTotal | total:m2251_7 | +| ir.cpp:2251:28:2251:55 | SideEffect | ~m2251_2 | +| ir.cpp:2251:28:2251:55 | SideEffect | ~m2251_9 | +| ir.cpp:2255:8:2255:8 | Address | &:r2255_16 | +| ir.cpp:2255:8:2255:8 | Address | &:r2255_16 | +| ir.cpp:2255:8:2255:8 | ChiPartial | partial:m2255_3 | +| ir.cpp:2255:8:2255:8 | ChiPartial | partial:m2255_3 | +| ir.cpp:2255:8:2255:8 | ChiTotal | total:m2255_2 | +| ir.cpp:2255:8:2255:8 | ChiTotal | total:m2255_2 | +| ir.cpp:2255:8:2255:8 | Load | m2255_14 | +| ir.cpp:2255:8:2255:8 | Load | m2255_14 | +| ir.cpp:2255:8:2255:8 | SideEffect | m2255_3 | +| ir.cpp:2255:8:2255:8 | SideEffect | m2255_3 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_5 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Address | &:r2255_7 | +| ir.cpp:2255:15:2255:15 | Load | m2255_6 | +| ir.cpp:2255:15:2255:15 | Load | m2255_6 | +| ir.cpp:2255:15:2255:15 | SideEffect | m2255_8 | +| ir.cpp:2255:15:2255:15 | SideEffect | m2255_8 | +| ir.cpp:2255:20:2255:28 | Address | &:r2255_9 | +| ir.cpp:2255:20:2255:28 | Address | &:r2255_9 | +| ir.cpp:2255:27:2255:27 | Address | &:r2255_10 | +| ir.cpp:2255:27:2255:27 | Address | &:r2255_10 | +| ir.cpp:2255:27:2255:27 | Load | m2255_6 | +| ir.cpp:2255:27:2255:27 | Load | m2255_6 | +| ir.cpp:2255:27:2255:27 | StoreValue | r2255_13 | +| ir.cpp:2255:27:2255:27 | StoreValue | r2255_13 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_11 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_11 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_12 | +| ir.cpp:2255:27:2255:27 | Unary | r2255_12 | +| ir.cpp:2258:10:2258:10 | ChiPartial | partial:m2258_3 | +| ir.cpp:2258:10:2258:10 | ChiPartial | partial:m2258_3 | +| ir.cpp:2258:10:2258:10 | ChiTotal | total:m2258_2 | +| ir.cpp:2258:10:2258:10 | ChiTotal | total:m2258_2 | +| ir.cpp:2258:10:2258:10 | SideEffect | ~m2259_8 | +| ir.cpp:2258:10:2258:10 | SideEffect | ~m2259_16 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_5 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Address | &:r2258_7 | +| ir.cpp:2258:29:2258:29 | Load | m2258_6 | +| ir.cpp:2258:29:2258:29 | Load | m2258_6 | +| ir.cpp:2258:29:2258:29 | SideEffect | m2259_11 | +| ir.cpp:2258:29:2258:29 | SideEffect | m2259_19 | +| ir.cpp:2259:9:2259:11 | CallTarget | func:r2259_1 | +| ir.cpp:2259:9:2259:11 | CallTarget | func:r2259_1 | +| ir.cpp:2259:9:2259:11 | ChiPartial | partial:m2259_7 | +| ir.cpp:2259:9:2259:11 | ChiPartial | partial:m2259_7 | +| ir.cpp:2259:9:2259:11 | ChiTotal | total:m2258_4 | +| ir.cpp:2259:9:2259:11 | ChiTotal | total:m2258_4 | +| ir.cpp:2259:9:2259:11 | SideEffect | ~m2258_4 | +| ir.cpp:2259:9:2259:11 | SideEffect | ~m2258_4 | +| ir.cpp:2259:9:2259:11 | Unary | r2259_6 | +| ir.cpp:2259:9:2259:11 | Unary | r2259_6 | +| ir.cpp:2259:12:2259:15 | Address | &:r2259_12 | +| ir.cpp:2259:12:2259:15 | Address | &:r2259_12 | +| ir.cpp:2259:12:2259:15 | ChiPartial | partial:m2259_18 | +| ir.cpp:2259:12:2259:15 | ChiTotal | total:m2259_11 | +| ir.cpp:2259:12:2259:15 | SideEffect | ~m2259_11 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_2 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_2 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Address | &:r2259_5 | +| ir.cpp:2259:13:2259:13 | Arg(0) | 0:r2259_5 | +| ir.cpp:2259:13:2259:13 | Arg(0) | 0:r2259_5 | +| ir.cpp:2259:13:2259:13 | ChiPartial | partial:m2259_10 | +| ir.cpp:2259:13:2259:13 | ChiPartial | partial:m2259_10 | +| ir.cpp:2259:13:2259:13 | ChiTotal | total:m2258_8 | +| ir.cpp:2259:13:2259:13 | ChiTotal | total:m2258_8 | +| ir.cpp:2259:13:2259:13 | Load | m2258_6 | +| ir.cpp:2259:13:2259:13 | Load | m2258_6 | +| ir.cpp:2259:13:2259:13 | SideEffect | ~m2258_8 | +| ir.cpp:2259:13:2259:13 | SideEffect | ~m2258_8 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_3 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_3 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_4 | +| ir.cpp:2259:13:2259:13 | Unary | r2259_4 | +| ir.cpp:2259:16:2259:17 | CallTarget | func:r2259_13 | +| ir.cpp:2259:16:2259:17 | ChiPartial | partial:m2259_15 | +| ir.cpp:2259:16:2259:17 | ChiTotal | total:m2259_8 | +| ir.cpp:2259:16:2259:17 | SideEffect | ~m2259_8 | +| ir.cpp:2262:10:2262:36 | ChiPartial | partial:m2262_3 | +| ir.cpp:2262:10:2262:36 | ChiTotal | total:m2262_2 | +| ir.cpp:2262:10:2262:36 | SideEffect | ~m2265_6 | +| ir.cpp:2263:29:2263:29 | Address | &:r2263_1 | +| ir.cpp:2263:29:2263:29 | Address | &:r2263_1 | +| ir.cpp:2263:29:2263:29 | Arg(this) | this:r2263_1 | +| ir.cpp:2263:29:2263:29 | CallTarget | func:r2263_3 | +| ir.cpp:2263:29:2263:29 | ChiPartial | partial:m2263_5 | +| ir.cpp:2263:29:2263:29 | ChiPartial | partial:m2263_7 | +| ir.cpp:2263:29:2263:29 | ChiTotal | total:m2262_4 | +| ir.cpp:2263:29:2263:29 | ChiTotal | total:m2263_2 | +| ir.cpp:2263:29:2263:29 | SideEffect | ~m2262_4 | +| ir.cpp:2264:9:2264:23 | CallTarget | func:r2264_1 | +| ir.cpp:2264:9:2264:23 | ChiPartial | partial:m2264_5 | +| ir.cpp:2264:9:2264:23 | ChiTotal | total:m2263_6 | +| ir.cpp:2264:9:2264:23 | SideEffect | ~m2263_6 | +| ir.cpp:2264:25:2264:25 | Address | &:r2264_3 | +| ir.cpp:2264:25:2264:25 | Address | &:r2264_3 | +| ir.cpp:2264:25:2264:25 | Arg(0) | 0:r2264_3 | +| ir.cpp:2264:25:2264:25 | ChiPartial | partial:m2264_8 | +| ir.cpp:2264:25:2264:25 | ChiTotal | total:m2263_8 | +| ir.cpp:2264:25:2264:25 | SideEffect | ~m2263_8 | +| ir.cpp:2264:25:2264:25 | Unary | r2264_2 | +| ir.cpp:2265:5:2265:5 | Address | &:r2265_2 | +| ir.cpp:2265:5:2265:5 | Address | &:r2265_2 | +| ir.cpp:2265:5:2265:5 | Arg(this) | this:r2265_2 | +| ir.cpp:2265:5:2265:5 | CallTarget | func:r2265_3 | +| ir.cpp:2265:5:2265:5 | ChiPartial | partial:m2265_5 | +| ir.cpp:2265:5:2265:5 | ChiPartial | partial:m2265_8 | +| ir.cpp:2265:5:2265:5 | ChiTotal | total:m2264_6 | +| ir.cpp:2265:5:2265:5 | ChiTotal | total:m2264_9 | +| ir.cpp:2265:5:2265:5 | SideEffect | m2264_9 | +| ir.cpp:2265:5:2265:5 | SideEffect | ~m2264_6 | +| ir.cpp:2267:10:2267:32 | ChiPartial | partial:m2267_3 | +| ir.cpp:2267:10:2267:32 | ChiTotal | total:m2267_2 | +| ir.cpp:2267:10:2267:32 | SideEffect | ~m2269_6 | +| ir.cpp:2268:13:2268:13 | Address | &:r2268_1 | +| ir.cpp:2269:9:2269:23 | CallTarget | func:r2269_1 | +| ir.cpp:2269:9:2269:23 | ChiPartial | partial:m2269_5 | +| ir.cpp:2269:9:2269:23 | ChiTotal | total:m2267_4 | +| ir.cpp:2269:9:2269:23 | SideEffect | ~m2267_4 | +| ir.cpp:2269:25:2269:25 | Address | &:r2269_3 | +| ir.cpp:2269:25:2269:25 | Address | &:r2269_3 | +| ir.cpp:2269:25:2269:25 | Arg(0) | 0:r2269_3 | +| ir.cpp:2269:25:2269:25 | ChiPartial | partial:m2269_8 | +| ir.cpp:2269:25:2269:25 | ChiTotal | total:m2268_2 | +| ir.cpp:2269:25:2269:25 | SideEffect | ~m2268_2 | +| ir.cpp:2269:25:2269:25 | Unary | r2269_2 | +| ir.cpp:2273:6:2273:24 | ChiPartial | partial:m2273_3 | +| ir.cpp:2273:6:2273:24 | ChiTotal | total:m2273_2 | +| ir.cpp:2273:6:2273:24 | Phi | from 2:~m2273_10 | +| ir.cpp:2273:6:2273:24 | Phi | from 6:~m2282_8 | +| ir.cpp:2273:6:2273:24 | Phi | from 9:~m2275_6 | +| ir.cpp:2273:6:2273:24 | Phi | from 10:~m2289_1 | +| ir.cpp:2273:6:2273:24 | SideEffect | ~m2273_7 | +| ir.cpp:2273:31:2273:31 | Address | &:r2273_5 | +| ir.cpp:2275:12:2275:12 | Address | &:r2275_1 | +| ir.cpp:2275:12:2275:12 | Address | &:r2275_1 | +| ir.cpp:2275:12:2275:12 | Arg(this) | this:r2275_1 | +| ir.cpp:2275:12:2275:12 | CallTarget | func:r2275_3 | +| ir.cpp:2275:12:2275:12 | ChiPartial | partial:m2275_5 | +| ir.cpp:2275:12:2275:12 | ChiPartial | partial:m2275_7 | +| ir.cpp:2275:12:2275:12 | ChiTotal | total:m2273_4 | +| ir.cpp:2275:12:2275:12 | ChiTotal | total:m2275_2 | +| ir.cpp:2275:12:2275:12 | SideEffect | ~m2273_4 | +| ir.cpp:2276:9:2276:9 | Address | &:r2276_1 | +| ir.cpp:2276:9:2276:9 | Condition | r2276_2 | +| ir.cpp:2276:9:2276:9 | Load | m2273_6 | +| ir.cpp:2277:7:2277:28 | Address | &:r2277_1 | +| ir.cpp:2277:7:2277:28 | Address | &:r2277_1 | +| ir.cpp:2277:7:2277:28 | Load | m2277_4 | +| ir.cpp:2277:13:2277:28 | StoreValue | r2277_3 | +| ir.cpp:2277:13:2277:28 | Unary | r2277_2 | +| ir.cpp:2279:12:2279:13 | Address | &:r2279_1 | +| ir.cpp:2279:12:2279:13 | Address | &:r2279_1 | +| ir.cpp:2279:12:2279:13 | Arg(this) | this:r2279_1 | +| ir.cpp:2279:12:2279:13 | CallTarget | func:r2279_3 | +| ir.cpp:2279:12:2279:13 | ChiPartial | partial:m2279_5 | +| ir.cpp:2279:12:2279:13 | ChiPartial | partial:m2279_7 | +| ir.cpp:2279:12:2279:13 | ChiTotal | total:m2275_6 | +| ir.cpp:2279:12:2279:13 | ChiTotal | total:m2279_2 | +| ir.cpp:2279:12:2279:13 | SideEffect | ~m2275_6 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_1 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_1 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_9 | +| ir.cpp:2280:3:2280:3 | Address | &:r2280_9 | +| ir.cpp:2280:3:2280:3 | Arg(this) | this:r2280_1 | +| ir.cpp:2280:3:2280:3 | Arg(this) | this:r2280_9 | +| ir.cpp:2280:3:2280:3 | CallTarget | func:r2280_2 | +| ir.cpp:2280:3:2280:3 | CallTarget | func:r2280_10 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_4 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_7 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_12 | +| ir.cpp:2280:3:2280:3 | ChiPartial | partial:m2280_15 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2275_8 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2279_6 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2279_8 | +| ir.cpp:2280:3:2280:3 | ChiTotal | total:m2280_5 | +| ir.cpp:2280:3:2280:3 | SideEffect | m2275_8 | +| ir.cpp:2280:3:2280:3 | SideEffect | m2279_8 | +| ir.cpp:2280:3:2280:3 | SideEffect | ~m2279_6 | +| ir.cpp:2280:3:2280:3 | SideEffect | ~m2280_5 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_2 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_2 | +| ir.cpp:2281:22:2281:22 | Address | &:r2281_4 | +| ir.cpp:2281:22:2281:22 | Load | m2281_3 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Address | &:r2282_1 | +| ir.cpp:2282:5:2282:19 | Arg(this) | this:r2282_1 | +| ir.cpp:2282:5:2282:19 | CallTarget | func:r2282_3 | +| ir.cpp:2282:5:2282:19 | ChiPartial | partial:m2282_7 | +| ir.cpp:2282:5:2282:19 | ChiPartial | partial:m2282_10 | +| ir.cpp:2282:5:2282:19 | ChiTotal | total:m2275_6 | +| ir.cpp:2282:5:2282:19 | ChiTotal | total:m2282_2 | +| ir.cpp:2282:5:2282:19 | Load | m2282_11 | +| ir.cpp:2282:5:2282:19 | SideEffect | ~m2275_6 | +| ir.cpp:2282:18:2282:18 | Address | &:r2282_4 | +| ir.cpp:2282:18:2282:18 | Address | &:r2282_5 | +| ir.cpp:2282:18:2282:18 | Arg(0) | 0:r2282_5 | +| ir.cpp:2282:18:2282:18 | Load | m2281_3 | +| ir.cpp:2282:18:2282:18 | SideEffect | ~m2281_5 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_2 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_2 | +| ir.cpp:2284:24:2284:24 | Address | &:r2284_4 | +| ir.cpp:2284:24:2284:24 | Load | m2284_3 | +| ir.cpp:2289:1:2289:1 | Phi | from 4:~m2280_13 | +| ir.cpp:2289:1:2289:1 | Phi | from 8:~m2275_6 | +| ir.cpp:2291:6:2291:18 | ChiPartial | partial:m2291_3 | +| ir.cpp:2291:6:2291:18 | ChiTotal | total:m2291_2 | +| ir.cpp:2291:6:2291:18 | SideEffect | ~m2299_14 | +| ir.cpp:2291:25:2291:25 | Address | &:r2291_5 | +| ir.cpp:2292:12:2292:13 | Address | &:r2292_1 | +| ir.cpp:2292:12:2292:13 | Address | &:r2292_1 | +| ir.cpp:2292:12:2292:13 | Arg(this) | this:r2292_1 | +| ir.cpp:2292:12:2292:13 | CallTarget | func:r2292_3 | +| ir.cpp:2292:12:2292:13 | ChiPartial | partial:m2292_5 | +| ir.cpp:2292:12:2292:13 | ChiPartial | partial:m2292_7 | +| ir.cpp:2292:12:2292:13 | ChiTotal | total:m2291_4 | +| ir.cpp:2292:12:2292:13 | ChiTotal | total:m2292_2 | +| ir.cpp:2292:12:2292:13 | SideEffect | ~m2291_4 | +| ir.cpp:2293:8:2293:8 | Address | &:r2293_1 | +| ir.cpp:2293:8:2293:8 | Condition | r2293_2 | +| ir.cpp:2293:8:2293:8 | Load | m2291_6 | | ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | | ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | | ir.cpp:2294:16:2294:17 | Arg(this) | this:r2294_1 | | ir.cpp:2294:16:2294:17 | CallTarget | func:r2294_3 | | ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_5 | | ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_7 | -| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2293_64 | +| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2292_6 | | ir.cpp:2294:16:2294:17 | ChiTotal | total:m2294_2 | -| ir.cpp:2294:16:2294:17 | SideEffect | ~m2293_64 | +| ir.cpp:2294:16:2294:17 | SideEffect | ~m2292_6 | | ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | | ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | | ir.cpp:2295:5:2295:5 | Arg(this) | this:r2295_1 | @@ -12261,684 +12047,927 @@ | ir.cpp:2295:5:2295:5 | ChiTotal | total:m2294_8 | | ir.cpp:2295:5:2295:5 | SideEffect | m2294_8 | | ir.cpp:2295:5:2295:5 | SideEffect | ~m2294_6 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | -| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | -| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_1 | -| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_50 | -| ir.cpp:2297:16:2297:16 | CallTarget | func:r2297_51 | -| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_53 | -| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_56 | -| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_23 | -| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_46 | -| ir.cpp:2297:16:2297:16 | SideEffect | m2297_23 | -| ir.cpp:2297:16:2297:16 | SideEffect | ~m2297_46 | -| ir.cpp:2297:18:2297:24 | Address | &:r2297_5 | -| ir.cpp:2297:18:2297:24 | Arg(0) | 0:r2297_5 | -| ir.cpp:2297:18:2297:24 | SideEffect | ~m2287_3 | -| ir.cpp:2297:18:2297:24 | Unary | r2297_4 | -| ir.cpp:2297:18:2297:25 | CallTarget | func:r2297_3 | -| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_7 | -| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_10 | -| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2293_49 | -| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2297_2 | -| ir.cpp:2297:18:2297:25 | SideEffect | ~m2293_49 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | -| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | -| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_12 | -| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_42 | -| ir.cpp:2297:28:2297:29 | CallTarget | func:r2297_43 | -| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_45 | -| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_48 | -| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_22 | -| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_24 | -| ir.cpp:2297:28:2297:29 | SideEffect | m2297_22 | -| ir.cpp:2297:28:2297:29 | SideEffect | ~m2297_24 | -| ir.cpp:2297:31:2297:37 | Address | &:r2297_16 | -| ir.cpp:2297:31:2297:37 | Arg(0) | 0:r2297_16 | -| ir.cpp:2297:31:2297:37 | SideEffect | ~m2287_3 | -| ir.cpp:2297:31:2297:37 | Unary | r2297_15 | -| ir.cpp:2297:31:2297:38 | CallTarget | func:r2297_14 | -| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_18 | -| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_21 | -| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_8 | -| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_13 | -| ir.cpp:2297:31:2297:38 | SideEffect | ~m2297_8 | -| ir.cpp:2297:41:2297:41 | Address | &:r2297_26 | -| ir.cpp:2297:41:2297:41 | Left | r2297_28 | -| ir.cpp:2297:41:2297:41 | Load | m2297_25 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:m2289_14 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:m2297_11 | -| ir.cpp:2297:41:2297:41 | Phi | from 6:~m2297_19 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_39 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_41 | -| ir.cpp:2297:41:2297:41 | Phi | from 8:~m2297_36 | -| ir.cpp:2297:41:2297:41 | Unary | r2297_27 | -| ir.cpp:2297:41:2297:46 | Condition | r2297_30 | -| ir.cpp:2297:46:2297:46 | Right | r2297_29 | -| ir.cpp:2297:49:2297:49 | Address | &:r2297_40 | -| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | -| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | -| ir.cpp:2297:53:2297:53 | Arg(this) | this:r2297_32 | -| ir.cpp:2297:53:2297:53 | ChiPartial | partial:m2297_38 | -| ir.cpp:2297:53:2297:53 | ChiTotal | total:m2297_23 | -| ir.cpp:2297:53:2297:53 | SideEffect | m2297_23 | -| ir.cpp:2297:55:2297:62 | CallTarget | func:r2297_33 | -| ir.cpp:2297:55:2297:62 | ChiPartial | partial:m2297_35 | -| ir.cpp:2297:55:2297:62 | ChiTotal | total:m2297_24 | -| ir.cpp:2297:55:2297:62 | SideEffect | ~m2297_24 | -| ir.cpp:2297:55:2297:62 | StoreValue | r2297_34 | -| ir.cpp:2298:9:2298:9 | Address | &:r2298_2 | -| ir.cpp:2298:13:2298:13 | StoreValue | r2298_1 | -| ir.cpp:2302:6:2302:19 | ChiPartial | partial:m2302_3 | -| ir.cpp:2302:6:2302:19 | ChiTotal | total:m2302_2 | -| ir.cpp:2302:6:2302:19 | SideEffect | ~m2307_5 | -| ir.cpp:2302:26:2302:26 | Address | &:r2302_5 | -| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | -| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | -| ir.cpp:2303:15:2303:15 | Arg(this) | this:r2303_1 | -| ir.cpp:2303:18:2303:33 | CallTarget | func:r2303_3 | -| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_7 | -| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_10 | -| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2302_4 | -| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2303_2 | -| ir.cpp:2303:18:2303:33 | SideEffect | ~m2302_4 | -| ir.cpp:2303:26:2303:32 | Address | &:r2303_5 | -| ir.cpp:2303:26:2303:32 | Arg(0) | 0:r2303_5 | -| ir.cpp:2303:26:2303:32 | SideEffect | ~m2302_3 | -| ir.cpp:2303:26:2303:32 | Unary | r2303_4 | -| ir.cpp:2303:36:2303:36 | Address | &:r2303_12 | -| ir.cpp:2303:36:2303:36 | Condition | r2303_13 | -| ir.cpp:2303:36:2303:36 | Load | m2302_6 | -| ir.cpp:2304:13:2304:13 | Address | &:r2304_1 | -| ir.cpp:2304:16:2304:17 | StoreValue | r2304_2 | -| ir.cpp:2306:13:2306:13 | Address | &:r2306_1 | -| ir.cpp:2306:16:2306:17 | StoreValue | r2306_2 | +| ir.cpp:2296:16:2296:17 | Address | &:r2296_1 | +| ir.cpp:2296:16:2296:17 | Address | &:r2296_1 | +| ir.cpp:2296:16:2296:17 | Arg(this) | this:r2296_1 | +| ir.cpp:2296:16:2296:17 | CallTarget | func:r2296_3 | +| ir.cpp:2296:16:2296:17 | ChiPartial | partial:m2296_5 | +| ir.cpp:2296:16:2296:17 | ChiPartial | partial:m2296_7 | +| ir.cpp:2296:16:2296:17 | ChiTotal | total:m2292_6 | +| ir.cpp:2296:16:2296:17 | ChiTotal | total:m2296_2 | +| ir.cpp:2296:16:2296:17 | SideEffect | ~m2292_6 | +| ir.cpp:2297:5:2297:5 | Address | &:r2297_1 | +| ir.cpp:2297:5:2297:5 | Address | &:r2297_1 | +| ir.cpp:2297:5:2297:5 | Arg(this) | this:r2297_1 | +| ir.cpp:2297:5:2297:5 | CallTarget | func:r2297_2 | +| ir.cpp:2297:5:2297:5 | ChiPartial | partial:m2297_4 | +| ir.cpp:2297:5:2297:5 | ChiPartial | partial:m2297_7 | +| ir.cpp:2297:5:2297:5 | ChiTotal | total:m2296_6 | +| ir.cpp:2297:5:2297:5 | ChiTotal | total:m2296_8 | +| ir.cpp:2297:5:2297:5 | SideEffect | m2296_8 | +| ir.cpp:2297:5:2297:5 | SideEffect | ~m2296_6 | +| ir.cpp:2298:12:2298:13 | Address | &:r2298_2 | +| ir.cpp:2298:12:2298:13 | Address | &:r2298_2 | +| ir.cpp:2298:12:2298:13 | Arg(this) | this:r2298_2 | +| ir.cpp:2298:12:2298:13 | CallTarget | func:r2298_4 | +| ir.cpp:2298:12:2298:13 | ChiPartial | partial:m2298_6 | +| ir.cpp:2298:12:2298:13 | ChiPartial | partial:m2298_8 | +| ir.cpp:2298:12:2298:13 | ChiTotal | total:m2298_1 | +| ir.cpp:2298:12:2298:13 | ChiTotal | total:m2298_3 | +| ir.cpp:2298:12:2298:13 | Phi | from 1:~m2295_5 | +| ir.cpp:2298:12:2298:13 | Phi | from 2:~m2297_5 | +| ir.cpp:2298:12:2298:13 | SideEffect | ~m2298_1 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_2 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_2 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_10 | +| ir.cpp:2299:1:2299:1 | Address | &:r2299_10 | +| ir.cpp:2299:1:2299:1 | Arg(this) | this:r2299_2 | +| ir.cpp:2299:1:2299:1 | Arg(this) | this:r2299_10 | +| ir.cpp:2299:1:2299:1 | CallTarget | func:r2299_3 | +| ir.cpp:2299:1:2299:1 | CallTarget | func:r2299_11 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_5 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_8 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_13 | +| ir.cpp:2299:1:2299:1 | ChiPartial | partial:m2299_16 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2292_8 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2298_7 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2298_9 | +| ir.cpp:2299:1:2299:1 | ChiTotal | total:m2299_6 | +| ir.cpp:2299:1:2299:1 | SideEffect | m2292_8 | +| ir.cpp:2299:1:2299:1 | SideEffect | m2298_9 | +| ir.cpp:2299:1:2299:1 | SideEffect | ~m2298_7 | +| ir.cpp:2299:1:2299:1 | SideEffect | ~m2299_6 | +| ir.cpp:2301:6:2301:19 | ChiPartial | partial:m2301_3 | +| ir.cpp:2301:6:2301:19 | ChiTotal | total:m2301_2 | +| ir.cpp:2301:6:2301:19 | SideEffect | ~m2311_54 | +| ir.cpp:2302:10:2302:10 | Address | &:r2302_1 | +| ir.cpp:2302:13:2302:16 | StoreValue | r2302_2 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_1 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_1 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_31 | +| ir.cpp:2303:16:2303:16 | Address | &:r2303_31 | +| ir.cpp:2303:16:2303:16 | Arg(this) | this:r2303_1 | +| ir.cpp:2303:16:2303:16 | Arg(this) | this:r2303_31 | +| ir.cpp:2303:16:2303:16 | CallTarget | func:r2303_32 | +| ir.cpp:2303:16:2303:16 | ChiPartial | partial:m2303_34 | +| ir.cpp:2303:16:2303:16 | ChiPartial | partial:m2303_37 | +| ir.cpp:2303:16:2303:16 | ChiTotal | total:m2303_12 | +| ir.cpp:2303:16:2303:16 | ChiTotal | total:m2303_13 | +| ir.cpp:2303:16:2303:16 | SideEffect | m2303_12 | +| ir.cpp:2303:16:2303:16 | SideEffect | ~m2303_13 | +| ir.cpp:2303:18:2303:24 | Address | &:r2303_5 | +| ir.cpp:2303:18:2303:24 | Arg(0) | 0:r2303_5 | +| ir.cpp:2303:18:2303:24 | SideEffect | ~m2301_3 | +| ir.cpp:2303:18:2303:24 | Unary | r2303_4 | +| ir.cpp:2303:18:2303:25 | CallTarget | func:r2303_3 | +| ir.cpp:2303:18:2303:25 | ChiPartial | partial:m2303_7 | +| ir.cpp:2303:18:2303:25 | ChiPartial | partial:m2303_10 | +| ir.cpp:2303:18:2303:25 | ChiTotal | total:m2301_4 | +| ir.cpp:2303:18:2303:25 | ChiTotal | total:m2303_2 | +| ir.cpp:2303:18:2303:25 | SideEffect | ~m2301_4 | +| ir.cpp:2303:28:2303:28 | Address | &:r2303_15 | +| ir.cpp:2303:28:2303:28 | Left | r2303_17 | +| ir.cpp:2303:28:2303:28 | Load | m2303_14 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:m2302_3 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:m2303_11 | +| ir.cpp:2303:28:2303:28 | Phi | from 0:~m2303_8 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:m2303_28 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:m2303_30 | +| ir.cpp:2303:28:2303:28 | Phi | from 2:~m2303_25 | +| ir.cpp:2303:28:2303:28 | Unary | r2303_16 | +| ir.cpp:2303:28:2303:33 | Condition | r2303_19 | +| ir.cpp:2303:33:2303:33 | Right | r2303_18 | +| ir.cpp:2303:36:2303:36 | Address | &:r2303_29 | +| ir.cpp:2303:40:2303:40 | Address | &:r2303_21 | +| ir.cpp:2303:40:2303:40 | Address | &:r2303_21 | +| ir.cpp:2303:40:2303:40 | Arg(this) | this:r2303_21 | +| ir.cpp:2303:40:2303:40 | ChiPartial | partial:m2303_27 | +| ir.cpp:2303:40:2303:40 | ChiTotal | total:m2303_12 | +| ir.cpp:2303:40:2303:40 | SideEffect | m2303_12 | +| ir.cpp:2303:42:2303:49 | CallTarget | func:r2303_22 | +| ir.cpp:2303:42:2303:49 | ChiPartial | partial:m2303_24 | +| ir.cpp:2303:42:2303:49 | ChiTotal | total:m2305_5 | +| ir.cpp:2303:42:2303:49 | SideEffect | ~m2305_5 | +| ir.cpp:2303:42:2303:49 | StoreValue | r2303_23 | +| ir.cpp:2304:16:2304:17 | Address | &:r2304_1 | +| ir.cpp:2304:16:2304:17 | Address | &:r2304_1 | +| ir.cpp:2304:16:2304:17 | Arg(this) | this:r2304_1 | +| ir.cpp:2304:16:2304:17 | CallTarget | func:r2304_3 | +| ir.cpp:2304:16:2304:17 | ChiPartial | partial:m2304_5 | +| ir.cpp:2304:16:2304:17 | ChiPartial | partial:m2304_7 | +| ir.cpp:2304:16:2304:17 | ChiTotal | total:m2303_13 | +| ir.cpp:2304:16:2304:17 | ChiTotal | total:m2304_2 | +| ir.cpp:2304:16:2304:17 | SideEffect | ~m2303_13 | +| ir.cpp:2305:5:2305:5 | Address | &:r2305_1 | +| ir.cpp:2305:5:2305:5 | Address | &:r2305_1 | +| ir.cpp:2305:5:2305:5 | Arg(this) | this:r2305_1 | +| ir.cpp:2305:5:2305:5 | CallTarget | func:r2305_2 | +| ir.cpp:2305:5:2305:5 | ChiPartial | partial:m2305_4 | +| ir.cpp:2305:5:2305:5 | ChiPartial | partial:m2305_7 | +| ir.cpp:2305:5:2305:5 | ChiTotal | total:m2304_6 | +| ir.cpp:2305:5:2305:5 | ChiTotal | total:m2304_8 | +| ir.cpp:2305:5:2305:5 | SideEffect | m2304_8 | +| ir.cpp:2305:5:2305:5 | SideEffect | ~m2304_6 | | ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | -| ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | -| ir.cpp:2307:5:2307:5 | Arg(this) | this:r2307_1 | -| ir.cpp:2307:5:2307:5 | CallTarget | func:r2307_2 | -| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_4 | -| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_7 | -| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_8 | -| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_11 | -| ir.cpp:2307:5:2307:5 | SideEffect | m2303_11 | -| ir.cpp:2307:5:2307:5 | SideEffect | ~m2303_8 | -| ir.cpp:2317:6:2317:19 | ChiPartial | partial:m2317_3 | -| ir.cpp:2317:6:2317:19 | ChiTotal | total:m2317_2 | -| ir.cpp:2317:6:2317:19 | SideEffect | ~m2322_14 | -| ir.cpp:2317:26:2317:26 | Address | &:r2317_5 | -| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | -| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | -| ir.cpp:2318:8:2318:23 | Arg(this) | this:r2318_1 | -| ir.cpp:2318:8:2318:23 | Condition | r2318_19 | -| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | -| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | -| ir.cpp:2318:13:2318:13 | Arg(this) | this:r2318_11 | -| ir.cpp:2318:13:2318:13 | CallTarget | func:r2318_12 | -| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_14 | -| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_17 | -| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_8 | -| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_10 | -| ir.cpp:2318:13:2318:13 | SideEffect | m2318_10 | -| ir.cpp:2318:13:2318:13 | SideEffect | ~m2318_8 | -| ir.cpp:2318:13:2318:13 | Unary | r2318_13 | -| ir.cpp:2318:16:2318:23 | CallTarget | func:r2318_3 | -| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_7 | -| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_9 | -| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2317_4 | -| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2318_2 | -| ir.cpp:2318:16:2318:23 | SideEffect | ~m2317_4 | -| ir.cpp:2318:22:2318:22 | Address | &:r2318_4 | -| ir.cpp:2318:22:2318:22 | Arg(0) | 0:r2318_5 | -| ir.cpp:2318:22:2318:22 | Load | m2317_6 | -| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | -| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | -| ir.cpp:2319:16:2319:17 | Arg(this) | this:r2319_1 | -| ir.cpp:2319:16:2319:17 | CallTarget | func:r2319_3 | -| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_5 | -| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_7 | -| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2318_15 | -| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2319_2 | -| ir.cpp:2319:16:2319:17 | SideEffect | ~m2318_15 | -| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | -| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | -| ir.cpp:2320:5:2320:5 | Arg(this) | this:r2320_1 | -| ir.cpp:2320:5:2320:5 | CallTarget | func:r2320_2 | -| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_4 | -| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_7 | -| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_6 | -| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_8 | -| ir.cpp:2320:5:2320:5 | SideEffect | m2319_8 | -| ir.cpp:2320:5:2320:5 | SideEffect | ~m2319_6 | -| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | -| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | -| ir.cpp:2321:16:2321:17 | Arg(this) | this:r2321_1 | -| ir.cpp:2321:16:2321:17 | CallTarget | func:r2321_3 | -| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_5 | -| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_7 | -| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2318_15 | -| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2321_2 | -| ir.cpp:2321:16:2321:17 | SideEffect | ~m2318_15 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | -| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | -| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_1 | -| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_10 | -| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_2 | -| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_11 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_4 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_7 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_13 | -| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_16 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2318_18 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_6 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_8 | -| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2322_9 | -| ir.cpp:2322:5:2322:5 | Phi | from 1:~m2320_5 | -| ir.cpp:2322:5:2322:5 | Phi | from 2:~m2322_5 | -| ir.cpp:2322:5:2322:5 | SideEffect | m2318_18 | -| ir.cpp:2322:5:2322:5 | SideEffect | m2321_8 | -| ir.cpp:2322:5:2322:5 | SideEffect | ~m2321_6 | -| ir.cpp:2322:5:2322:5 | SideEffect | ~m2322_9 | -| ir.cpp:2325:6:2325:25 | ChiPartial | partial:m2325_3 | -| ir.cpp:2325:6:2325:25 | ChiTotal | total:m2325_2 | -| ir.cpp:2325:6:2325:25 | SideEffect | ~m2336_13 | -| ir.cpp:2325:32:2325:32 | Address | &:r2325_5 | -| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | -| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | -| ir.cpp:2327:16:2327:16 | Arg(this) | this:r2327_1 | -| ir.cpp:2327:16:2327:16 | CallTarget | func:r2327_3 | -| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_5 | -| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_7 | -| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2325_4 | -| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2327_2 | -| ir.cpp:2327:16:2327:16 | SideEffect | ~m2325_4 | -| ir.cpp:2328:15:2328:15 | Address | &:r2328_2 | -| ir.cpp:2328:15:2328:15 | Condition | r2328_3 | -| ir.cpp:2328:15:2328:15 | Load | m2328_1 | -| ir.cpp:2328:15:2328:15 | Phi | from 0:m2325_6 | -| ir.cpp:2328:15:2328:15 | Phi | from 2:m2329_3 | -| ir.cpp:2329:13:2329:13 | Address | &:r2329_2 | -| ir.cpp:2329:17:2329:21 | StoreValue | r2329_1 | -| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | -| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | -| ir.cpp:2331:5:2331:5 | Arg(this) | this:r2331_1 | -| ir.cpp:2331:5:2331:5 | CallTarget | func:r2331_2 | -| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_4 | -| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_7 | -| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_6 | -| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_8 | -| ir.cpp:2331:5:2331:5 | SideEffect | m2327_8 | -| ir.cpp:2331:5:2331:5 | SideEffect | ~m2327_6 | -| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | -| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | -| ir.cpp:2334:16:2334:31 | Arg(this) | this:r2334_3 | -| ir.cpp:2334:16:2334:31 | Condition | r2334_21 | -| ir.cpp:2334:16:2334:31 | Phi | from 3:m2328_1 | -| ir.cpp:2334:16:2334:31 | Phi | from 3:~m2331_5 | -| ir.cpp:2334:16:2334:31 | Phi | from 5:m2335_3 | -| ir.cpp:2334:16:2334:31 | Phi | from 5:~m2336_5 | -| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | -| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | -| ir.cpp:2334:21:2334:21 | Arg(this) | this:r2334_13 | -| ir.cpp:2334:21:2334:21 | CallTarget | func:r2334_14 | -| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_16 | -| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_19 | -| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_10 | -| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_12 | -| ir.cpp:2334:21:2334:21 | SideEffect | m2334_12 | -| ir.cpp:2334:21:2334:21 | SideEffect | ~m2334_10 | -| ir.cpp:2334:21:2334:21 | Unary | r2334_15 | -| ir.cpp:2334:24:2334:31 | CallTarget | func:r2334_5 | -| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_9 | -| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_11 | -| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_1 | -| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_4 | -| ir.cpp:2334:24:2334:31 | SideEffect | ~m2334_1 | -| ir.cpp:2334:30:2334:30 | Address | &:r2334_6 | -| ir.cpp:2334:30:2334:30 | Arg(0) | 0:r2334_7 | -| ir.cpp:2334:30:2334:30 | Load | m2334_2 | -| ir.cpp:2335:13:2335:13 | Address | &:r2335_2 | -| ir.cpp:2335:17:2335:21 | StoreValue | r2335_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | -| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | -| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_1 | -| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_9 | -| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_2 | -| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_10 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_4 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_7 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_12 | -| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_15 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | -| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | -| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | -| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | -| ir.cpp:2340:6:2340:13 | ChiPartial | partial:m2340_3 | -| ir.cpp:2340:6:2340:13 | ChiTotal | total:m2340_2 | -| ir.cpp:2340:6:2340:13 | SideEffect | m2340_3 | -| ir.cpp:2342:6:2342:24 | ChiPartial | partial:m2342_3 | -| ir.cpp:2342:6:2342:24 | ChiTotal | total:m2342_2 | -| ir.cpp:2342:6:2342:24 | Phi | from 2:~m2351_5 | -| ir.cpp:2342:6:2342:24 | Phi | from 4:~m2351_13 | -| ir.cpp:2342:6:2342:24 | Phi | from 5:~m2351_22 | -| ir.cpp:2342:6:2342:24 | SideEffect | ~m2342_7 | -| ir.cpp:2342:31:2342:31 | Address | &:r2342_5 | -| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | -| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | -| ir.cpp:2343:12:2343:12 | Arg(this) | this:r2343_1 | -| ir.cpp:2343:12:2343:12 | CallTarget | func:r2343_3 | -| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_5 | -| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_7 | -| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2342_4 | -| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2343_2 | -| ir.cpp:2343:12:2343:12 | SideEffect | ~m2342_4 | -| ir.cpp:2344:8:2344:8 | Address | &:r2344_1 | -| ir.cpp:2344:8:2344:8 | Condition | r2344_2 | -| ir.cpp:2344:8:2344:8 | Load | m2342_6 | -| ir.cpp:2347:8:2347:8 | Address | &:r2347_1 | -| ir.cpp:2347:8:2347:8 | Condition | r2347_2 | -| ir.cpp:2347:8:2347:8 | Load | m2342_6 | -| ir.cpp:2348:16:2348:23 | CallTarget | func:r2348_1 | -| ir.cpp:2348:16:2348:23 | ChiPartial | partial:m2348_3 | -| ir.cpp:2348:16:2348:23 | ChiTotal | total:m2343_6 | -| ir.cpp:2348:16:2348:23 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | -| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_1 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_9 | -| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_18 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_2 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_10 | -| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_19 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_4 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_7 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_12 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_15 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_21 | -| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_24 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | -| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2348_4 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | -| ir.cpp:2351:1:2351:1 | SideEffect | ~m2348_4 | -| ir.cpp:2353:5:2353:24 | Address | &:r2353_9 | -| ir.cpp:2353:5:2353:24 | ChiPartial | partial:m2353_3 | -| ir.cpp:2353:5:2353:24 | ChiTotal | total:m2353_2 | -| ir.cpp:2353:5:2353:24 | Load | m2353_8 | -| ir.cpp:2353:5:2353:24 | Phi | from 2:m2356_3 | -| ir.cpp:2353:5:2353:24 | Phi | from 2:~m2359_5 | -| ir.cpp:2353:5:2353:24 | Phi | from 3:m2358_3 | -| ir.cpp:2353:5:2353:24 | Phi | from 3:~m2359_13 | -| ir.cpp:2353:5:2353:24 | SideEffect | ~m2353_7 | -| ir.cpp:2353:31:2353:31 | Address | &:r2353_5 | -| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | -| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | -| ir.cpp:2354:12:2354:12 | Arg(this) | this:r2354_1 | -| ir.cpp:2354:12:2354:12 | CallTarget | func:r2354_3 | -| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_5 | -| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_7 | -| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2353_4 | -| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2354_2 | -| ir.cpp:2354:12:2354:12 | SideEffect | ~m2353_4 | -| ir.cpp:2355:8:2355:8 | Address | &:r2355_1 | -| ir.cpp:2355:8:2355:8 | Condition | r2355_2 | -| ir.cpp:2355:8:2355:8 | Load | m2353_6 | -| ir.cpp:2356:9:2356:17 | Address | &:r2356_1 | -| ir.cpp:2356:16:2356:16 | StoreValue | r2356_2 | -| ir.cpp:2358:5:2358:13 | Address | &:r2358_1 | -| ir.cpp:2358:12:2358:12 | StoreValue | r2358_2 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | -| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | -| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_1 | -| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_9 | -| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_2 | -| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_10 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_4 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_7 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_12 | -| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_15 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | -| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | -| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | -| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | -| ir.cpp:2361:6:2361:26 | ChiPartial | partial:m2361_3 | -| ir.cpp:2361:6:2361:26 | ChiTotal | total:m2361_2 | -| ir.cpp:2361:6:2361:26 | SideEffect | ~m2364_5 | -| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | -| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | -| ir.cpp:2362:12:2362:12 | Arg(this) | this:r2362_1 | -| ir.cpp:2362:12:2362:12 | CallTarget | func:r2362_3 | -| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_5 | -| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_7 | -| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2361_4 | -| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2362_2 | -| ir.cpp:2362:12:2362:12 | SideEffect | ~m2361_4 | -| ir.cpp:2363:12:2363:19 | CallTarget | func:r2363_1 | -| ir.cpp:2363:12:2363:19 | ChiPartial | partial:m2363_3 | -| ir.cpp:2363:12:2363:19 | ChiTotal | total:m2362_6 | -| ir.cpp:2363:12:2363:19 | SideEffect | ~m2362_6 | -| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | -| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | -| ir.cpp:2364:1:2364:1 | Arg(this) | this:r2364_1 | -| ir.cpp:2364:1:2364:1 | CallTarget | func:r2364_2 | -| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_4 | -| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_7 | -| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2362_8 | -| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2363_4 | -| ir.cpp:2364:1:2364:1 | SideEffect | m2362_8 | -| ir.cpp:2364:1:2364:1 | SideEffect | ~m2363_4 | -| ir.cpp:2374:32:2374:47 | Address | &:r2374_5 | -| ir.cpp:2374:32:2374:47 | ChiPartial | partial:m2374_3 | -| ir.cpp:2374:32:2374:47 | ChiTotal | total:m2374_2 | -| ir.cpp:2374:32:2374:47 | Load | m2376_3 | -| ir.cpp:2374:32:2374:47 | SideEffect | m2374_3 | -| ir.cpp:2376:9:2376:44 | Address | &:r2376_1 | -| ir.cpp:2376:16:2376:43 | StoreValue | r2376_2 | -| ir.cpp:2381:5:2381:49 | Address | &:r2381_5 | -| ir.cpp:2381:5:2381:49 | ChiPartial | partial:m2381_3 | -| ir.cpp:2381:5:2381:49 | ChiTotal | total:m2381_2 | -| ir.cpp:2381:5:2381:49 | Load | m2382_5 | -| ir.cpp:2381:5:2381:49 | SideEffect | m2381_3 | -| ir.cpp:2382:5:2382:17 | Address | &:r2382_1 | -| ir.cpp:2382:12:2382:12 | Left | r2382_2 | -| ir.cpp:2382:12:2382:16 | StoreValue | r2382_4 | -| ir.cpp:2382:16:2382:16 | Right | r2382_3 | -| ir.cpp:2392:5:2392:45 | Address | &:r2392_5 | -| ir.cpp:2392:5:2392:45 | ChiPartial | partial:m2392_3 | -| ir.cpp:2392:5:2392:45 | ChiTotal | total:m2392_2 | -| ir.cpp:2392:5:2392:45 | Load | m2393_3 | -| ir.cpp:2392:5:2392:45 | SideEffect | m2392_3 | -| ir.cpp:2393:5:2393:22 | Address | &:r2393_1 | -| ir.cpp:2393:12:2393:21 | StoreValue | r2393_2 | -| ir.cpp:2396:6:2396:40 | ChiPartial | partial:m2396_3 | -| ir.cpp:2396:6:2396:40 | ChiTotal | total:m2396_2 | -| ir.cpp:2396:6:2396:40 | SideEffect | ~m2416_56 | -| ir.cpp:2397:9:2397:46 | Address | &:r2397_1 | -| ir.cpp:2397:9:2397:46 | Condition | r2397_22 | -| ir.cpp:2397:14:2397:14 | Address | &:r2397_18 | -| ir.cpp:2397:14:2397:14 | Left | r2397_19 | -| ir.cpp:2397:14:2397:14 | Load | m2397_17 | -| ir.cpp:2397:14:2397:14 | Right | r2397_20 | -| ir.cpp:2397:14:2397:14 | Unary | r2397_21 | -| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | -| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | -| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | -| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 | -| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 | -| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 | -| ir.cpp:2397:18:2397:38 | CallTarget | func:r2397_4 | -| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_6 | -| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_8 | -| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_15 | -| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2396_4 | -| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_3 | -| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_9 | -| ir.cpp:2397:18:2397:38 | SideEffect | m2397_9 | -| ir.cpp:2397:18:2397:38 | SideEffect | ~m2396_4 | -| ir.cpp:2397:40:2397:44 | CallTarget | func:r2397_10 | -| ir.cpp:2397:40:2397:44 | ChiPartial | partial:m2397_12 | -| ir.cpp:2397:40:2397:44 | ChiTotal | total:m2397_7 | -| ir.cpp:2397:40:2397:44 | SideEffect | ~m2397_7 | -| ir.cpp:2397:40:2397:44 | StoreValue | r2397_11 | -| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 | -| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 | -| ir.cpp:2398:9:2398:9 | Left | r2398_2 | -| ir.cpp:2398:9:2398:9 | Load | m2397_17 | -| ir.cpp:2398:9:2398:11 | Right | r2398_3 | -| ir.cpp:2398:9:2398:11 | StoreValue | r2398_4 | -| ir.cpp:2400:14:2400:14 | Address | &:r2400_1 | -| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | -| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | -| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | -| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 | -| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 | -| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 | -| ir.cpp:2400:18:2400:38 | CallTarget | func:r2400_4 | -| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_6 | -| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_8 | -| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_15 | -| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2397_13 | -| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_3 | -| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_9 | -| ir.cpp:2400:18:2400:38 | SideEffect | m2400_9 | -| ir.cpp:2400:18:2400:38 | SideEffect | ~m2397_13 | -| ir.cpp:2400:40:2400:44 | CallTarget | func:r2400_10 | -| ir.cpp:2400:40:2400:44 | ChiPartial | partial:m2400_12 | -| ir.cpp:2400:40:2400:44 | ChiTotal | total:m2400_7 | -| ir.cpp:2400:40:2400:44 | SideEffect | ~m2400_7 | -| ir.cpp:2400:40:2400:44 | StoreValue | r2400_11 | -| ir.cpp:2400:49:2400:49 | Address | &:r2400_18 | -| ir.cpp:2400:49:2400:49 | Condition | r2400_21 | -| ir.cpp:2400:49:2400:49 | Left | r2400_19 | -| ir.cpp:2400:49:2400:49 | Load | m2400_17 | -| ir.cpp:2400:49:2400:49 | Right | r2400_20 | -| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 | -| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 | -| ir.cpp:2401:9:2401:9 | Left | r2401_2 | -| ir.cpp:2401:9:2401:9 | Load | m2400_17 | -| ir.cpp:2401:9:2401:11 | Right | r2401_3 | -| ir.cpp:2401:9:2401:11 | StoreValue | r2401_4 | -| ir.cpp:2403:24:2403:24 | Address | &:r2403_1 | -| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | -| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | -| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | -| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 | -| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 | -| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 | -| ir.cpp:2403:28:2403:48 | CallTarget | func:r2403_4 | -| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_6 | -| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_8 | -| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_15 | -| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2400_13 | -| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_3 | -| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_9 | -| ir.cpp:2403:28:2403:48 | SideEffect | m2403_9 | -| ir.cpp:2403:28:2403:48 | SideEffect | ~m2400_13 | -| ir.cpp:2403:50:2403:54 | CallTarget | func:r2403_10 | -| ir.cpp:2403:50:2403:54 | ChiPartial | partial:m2403_12 | -| ir.cpp:2403:50:2403:54 | ChiTotal | total:m2403_7 | -| ir.cpp:2403:50:2403:54 | SideEffect | ~m2403_7 | -| ir.cpp:2403:50:2403:54 | StoreValue | r2403_11 | -| ir.cpp:2403:59:2403:93 | Condition | r2403_18 | -| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 | -| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 | -| ir.cpp:2404:9:2404:9 | Left | r2404_2 | -| ir.cpp:2404:9:2404:9 | Load | m2403_17 | -| ir.cpp:2404:9:2404:11 | Right | r2404_3 | -| ir.cpp:2404:9:2404:11 | StoreValue | r2404_4 | -| ir.cpp:2406:12:2406:49 | Address | &:r2406_1 | -| ir.cpp:2406:12:2406:49 | Condition | r2406_21 | -| ir.cpp:2406:17:2406:17 | Address | &:r2406_18 | -| ir.cpp:2406:17:2406:17 | Load | m2406_17 | -| ir.cpp:2406:17:2406:17 | Unary | r2406_19 | -| ir.cpp:2406:17:2406:17 | Unary | r2406_20 | -| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | -| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | -| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | -| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 | -| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 | -| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 | -| ir.cpp:2406:21:2406:41 | CallTarget | func:r2406_4 | -| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_6 | -| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_8 | -| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_15 | -| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2403_13 | -| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_3 | -| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_9 | -| ir.cpp:2406:21:2406:41 | SideEffect | m2406_9 | -| ir.cpp:2406:21:2406:41 | SideEffect | ~m2403_13 | -| ir.cpp:2406:43:2406:47 | CallTarget | func:r2406_10 | -| ir.cpp:2406:43:2406:47 | ChiPartial | partial:m2406_12 | -| ir.cpp:2406:43:2406:47 | ChiTotal | total:m2406_7 | -| ir.cpp:2406:43:2406:47 | SideEffect | ~m2406_7 | -| ir.cpp:2406:43:2406:47 | StoreValue | r2406_11 | -| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 | -| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 | -| ir.cpp:2408:11:2408:11 | Left | r2408_2 | -| ir.cpp:2408:11:2408:11 | Load | m2406_17 | -| ir.cpp:2408:11:2408:13 | Right | r2408_3 | -| ir.cpp:2408:11:2408:13 | StoreValue | r2408_4 | -| ir.cpp:2411:17:2411:17 | Address | &:r2411_1 | -| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | -| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | -| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | -| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 | -| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 | -| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 | -| ir.cpp:2411:21:2411:41 | CallTarget | func:r2411_4 | -| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_6 | -| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_8 | -| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_15 | -| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2406_13 | -| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_3 | -| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_9 | -| ir.cpp:2411:21:2411:41 | SideEffect | m2411_9 | -| ir.cpp:2411:21:2411:41 | SideEffect | ~m2406_13 | -| ir.cpp:2411:43:2411:47 | CallTarget | func:r2411_10 | -| ir.cpp:2411:43:2411:47 | ChiPartial | partial:m2411_12 | -| ir.cpp:2411:43:2411:47 | ChiTotal | total:m2411_7 | -| ir.cpp:2411:43:2411:47 | SideEffect | ~m2411_7 | -| ir.cpp:2411:43:2411:47 | StoreValue | r2411_11 | -| ir.cpp:2411:52:2411:52 | Address | &:r2411_18 | -| ir.cpp:2411:52:2411:52 | Condition | r2411_20 | -| ir.cpp:2411:52:2411:52 | Load | m2411_17 | -| ir.cpp:2411:52:2411:52 | Unary | r2411_19 | -| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 | -| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 | -| ir.cpp:2413:11:2413:11 | Left | r2413_2 | -| ir.cpp:2413:11:2413:11 | Load | m2411_17 | -| ir.cpp:2413:11:2413:13 | Right | r2413_3 | -| ir.cpp:2413:11:2413:13 | StoreValue | r2413_4 | -| ir.cpp:2416:5:2416:5 | Address | &:r2416_18 | -| ir.cpp:2416:5:2416:5 | Address | &:r2416_31 | -| ir.cpp:2416:5:2416:5 | Address | &:r2416_37 | -| ir.cpp:2416:14:2416:14 | Address | &:r2416_1 | -| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | -| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | -| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | -| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 | -| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 | -| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 | -| ir.cpp:2416:18:2416:38 | CallTarget | func:r2416_4 | -| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_6 | -| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_8 | -| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_15 | -| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2411_13 | -| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_3 | -| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_9 | -| ir.cpp:2416:18:2416:38 | SideEffect | m2416_9 | -| ir.cpp:2416:18:2416:38 | SideEffect | ~m2411_13 | -| ir.cpp:2416:40:2416:44 | CallTarget | func:r2416_10 | -| ir.cpp:2416:40:2416:44 | ChiPartial | partial:m2416_12 | -| ir.cpp:2416:40:2416:44 | ChiTotal | total:m2416_7 | -| ir.cpp:2416:40:2416:44 | SideEffect | ~m2416_7 | -| ir.cpp:2416:40:2416:44 | StoreValue | r2416_11 | -| ir.cpp:2416:54:2416:54 | Address | &:r2416_58 | -| ir.cpp:2416:58:2416:58 | Address | &:r2416_32 | -| ir.cpp:2416:58:2416:58 | Address | &:r2416_38 | -| ir.cpp:2416:58:2416:58 | Address | &:r2416_61 | -| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 | -| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_2 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_5 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_7 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_8 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_15 | -| ir.cpp:2416:58:2416:58 | Arg(this) | this:r2416_66 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_34 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_40 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_46 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_47 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_60 | -| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_67 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_50 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_52 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_55 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_62 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_69 | -| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_72 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m0_9 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_43 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_44 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_51 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_56 | -| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_63 | -| ir.cpp:2416:58:2416:58 | Condition | r2416_54 | -| ir.cpp:2416:58:2416:58 | Load | m2416_30 | -| ir.cpp:2416:58:2416:58 | Load | m2416_30 | -| ir.cpp:2416:58:2416:58 | Phi | from 9:m2416_36 | -| ir.cpp:2416:58:2416:58 | Phi | from 9:~m2416_26 | -| ir.cpp:2416:58:2416:58 | Phi | from 11:m2416_73 | -| ir.cpp:2416:58:2416:58 | Phi | from 11:~m2416_70 | -| ir.cpp:2416:58:2416:58 | SideEffect | m2416_43 | -| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_44 | -| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_51 | -| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_56 | -| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_63 | -| ir.cpp:2416:58:2416:58 | StoreValue | r2416_35 | -| ir.cpp:2416:58:2416:58 | StoreValue | r2416_41 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_33 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_39 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_45 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_48 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_59 | -| ir.cpp:2416:58:2416:58 | Unary | r2416_68 | -| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 | -| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 | -| ir.cpp:2416:58:2416:77 | Arg(this) | this:r2416_19 | -| ir.cpp:2416:58:2416:77 | CallTarget | func:r2416_21 | -| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_25 | -| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_27 | -| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_13 | -| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_20 | -| ir.cpp:2416:58:2416:77 | SideEffect | ~m2416_13 | -| ir.cpp:2416:58:2416:77 | StoreValue | r2416_29 | -| ir.cpp:2416:58:2416:77 | Unary | r2416_19 | -| ir.cpp:2416:58:2416:78 | Load | ~m2416_63 | -| ir.cpp:2416:58:2416:78 | StoreValue | r2416_64 | -| ir.cpp:2416:76:2416:76 | Address | &:r2416_22 | -| ir.cpp:2416:76:2416:76 | Arg(0) | 0:r2416_23 | -| ir.cpp:2416:76:2416:76 | Load | m2416_17 | -| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 | -| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 | -| ir.cpp:2417:9:2417:9 | Load | m2416_65 | -| ir.cpp:2417:9:2417:9 | Unary | r2417_5 | -| ir.cpp:2417:9:2417:14 | Left | r2417_6 | -| ir.cpp:2417:9:2417:14 | StoreValue | r2417_8 | -| ir.cpp:2417:9:2417:14 | Unary | r2417_7 | -| ir.cpp:2417:14:2417:14 | Address | &:r2417_1 | -| ir.cpp:2417:14:2417:14 | Load | m2416_17 | -| ir.cpp:2417:14:2417:14 | Right | r2417_3 | -| ir.cpp:2417:14:2417:14 | Unary | r2417_2 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_24 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_30 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_51 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | +| ir.cpp:2307:16:2307:16 | Address | &:r2307_68 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_51 | +| ir.cpp:2307:16:2307:16 | Arg(this) | this:r2307_68 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_53 | +| ir.cpp:2307:16:2307:16 | CallTarget | func:r2307_69 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_63 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_66 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_71 | +| ir.cpp:2307:16:2307:16 | ChiPartial | partial:m2307_74 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_52 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_58 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2307_67 | +| ir.cpp:2307:16:2307:16 | ChiTotal | total:m2309_5 | +| ir.cpp:2307:16:2307:16 | SideEffect | m2307_67 | +| ir.cpp:2307:16:2307:16 | SideEffect | ~m2307_58 | +| ir.cpp:2307:16:2307:16 | SideEffect | ~m2309_5 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_25 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_31 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | +| ir.cpp:2307:20:2307:20 | Address | &:r2307_76 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_2 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_5 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_7 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_8 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r0_15 | +| ir.cpp:2307:20:2307:20 | Arg(this) | this:r2307_76 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_27 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_33 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_39 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_40 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_55 | +| ir.cpp:2307:20:2307:20 | CallTarget | func:r2307_77 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_43 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_45 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_48 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_57 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_79 | +| ir.cpp:2307:20:2307:20 | ChiPartial | partial:m2307_82 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m0_9 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_36 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_37 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_44 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_49 | +| ir.cpp:2307:20:2307:20 | ChiTotal | total:m2307_72 | +| ir.cpp:2307:20:2307:20 | Condition | r2307_47 | +| ir.cpp:2307:20:2307:20 | Load | m2307_23 | +| ir.cpp:2307:20:2307:20 | Load | m2307_23 | +| ir.cpp:2307:20:2307:20 | Phi | from 3:m2307_29 | +| ir.cpp:2307:20:2307:20 | Phi | from 3:~m2307_19 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:m2307_83 | +| ir.cpp:2307:20:2307:20 | Phi | from 5:~m2307_80 | +| ir.cpp:2307:20:2307:20 | SideEffect | m2307_36 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_37 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_44 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_49 | +| ir.cpp:2307:20:2307:20 | SideEffect | ~m2307_72 | +| ir.cpp:2307:20:2307:20 | StoreValue | r2307_28 | +| ir.cpp:2307:20:2307:20 | StoreValue | r2307_34 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_26 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_32 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_38 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_41 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_54 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_56 | +| ir.cpp:2307:20:2307:20 | Unary | r2307_78 | +| ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | +| ir.cpp:2307:20:2307:55 | Address | &:r2307_2 | +| ir.cpp:2307:20:2307:55 | Arg(this) | this:r2307_2 | +| ir.cpp:2307:20:2307:55 | CallTarget | func:r2307_4 | +| ir.cpp:2307:20:2307:55 | ChiPartial | partial:m2307_18 | +| ir.cpp:2307:20:2307:55 | ChiPartial | partial:m2307_20 | +| ir.cpp:2307:20:2307:55 | ChiTotal | total:m2307_3 | +| ir.cpp:2307:20:2307:55 | ChiTotal | total:m2307_12 | +| ir.cpp:2307:20:2307:55 | SideEffect | ~m2307_12 | +| ir.cpp:2307:20:2307:55 | StoreValue | r2307_22 | +| ir.cpp:2307:20:2307:55 | Unary | r2307_2 | +| ir.cpp:2307:20:2307:56 | Address | &:r2307_61 | +| ir.cpp:2307:20:2307:56 | Arg(0) | 0:r2307_61 | +| ir.cpp:2307:20:2307:56 | SideEffect | ~m2307_64 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_59 | +| ir.cpp:2307:20:2307:56 | Unary | r2307_60 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Address | &:r2307_5 | +| ir.cpp:2307:40:2307:54 | Arg(0) | 0:r2307_16 | +| ir.cpp:2307:40:2307:54 | Arg(this) | this:r2307_5 | +| ir.cpp:2307:40:2307:54 | CallTarget | func:r2307_7 | +| ir.cpp:2307:40:2307:54 | ChiPartial | partial:m2307_11 | +| ir.cpp:2307:40:2307:54 | ChiPartial | partial:m2307_14 | +| ir.cpp:2307:40:2307:54 | ChiTotal | total:m2303_35 | +| ir.cpp:2307:40:2307:54 | ChiTotal | total:m2307_6 | +| ir.cpp:2307:40:2307:54 | Load | m2307_15 | +| ir.cpp:2307:40:2307:54 | SideEffect | ~m2303_35 | +| ir.cpp:2307:47:2307:53 | Address | &:r2307_9 | +| ir.cpp:2307:47:2307:53 | Arg(0) | 0:r2307_9 | +| ir.cpp:2307:47:2307:53 | SideEffect | ~m2301_3 | +| ir.cpp:2307:47:2307:53 | Unary | r2307_8 | +| ir.cpp:2308:16:2308:17 | Address | &:r2308_1 | +| ir.cpp:2308:16:2308:17 | Address | &:r2308_1 | +| ir.cpp:2308:16:2308:17 | Arg(this) | this:r2308_1 | +| ir.cpp:2308:16:2308:17 | CallTarget | func:r2308_3 | +| ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_5 | +| ir.cpp:2308:16:2308:17 | ChiPartial | partial:m2308_7 | +| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2307_64 | +| ir.cpp:2308:16:2308:17 | ChiTotal | total:m2308_2 | +| ir.cpp:2308:16:2308:17 | SideEffect | ~m2307_64 | +| ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | +| ir.cpp:2309:5:2309:5 | Address | &:r2309_1 | +| ir.cpp:2309:5:2309:5 | Arg(this) | this:r2309_1 | +| ir.cpp:2309:5:2309:5 | CallTarget | func:r2309_2 | +| ir.cpp:2309:5:2309:5 | ChiPartial | partial:m2309_4 | +| ir.cpp:2309:5:2309:5 | ChiPartial | partial:m2309_7 | +| ir.cpp:2309:5:2309:5 | ChiTotal | total:m2308_6 | +| ir.cpp:2309:5:2309:5 | ChiTotal | total:m2308_8 | +| ir.cpp:2309:5:2309:5 | SideEffect | m2308_8 | +| ir.cpp:2309:5:2309:5 | SideEffect | ~m2308_6 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_1 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_1 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_50 | +| ir.cpp:2311:16:2311:16 | Address | &:r2311_50 | +| ir.cpp:2311:16:2311:16 | Arg(this) | this:r2311_1 | +| ir.cpp:2311:16:2311:16 | Arg(this) | this:r2311_50 | +| ir.cpp:2311:16:2311:16 | CallTarget | func:r2311_51 | +| ir.cpp:2311:16:2311:16 | ChiPartial | partial:m2311_53 | +| ir.cpp:2311:16:2311:16 | ChiPartial | partial:m2311_56 | +| ir.cpp:2311:16:2311:16 | ChiTotal | total:m2311_23 | +| ir.cpp:2311:16:2311:16 | ChiTotal | total:m2311_46 | +| ir.cpp:2311:16:2311:16 | SideEffect | m2311_23 | +| ir.cpp:2311:16:2311:16 | SideEffect | ~m2311_46 | +| ir.cpp:2311:18:2311:24 | Address | &:r2311_5 | +| ir.cpp:2311:18:2311:24 | Arg(0) | 0:r2311_5 | +| ir.cpp:2311:18:2311:24 | SideEffect | ~m2301_3 | +| ir.cpp:2311:18:2311:24 | Unary | r2311_4 | +| ir.cpp:2311:18:2311:25 | CallTarget | func:r2311_3 | +| ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_7 | +| ir.cpp:2311:18:2311:25 | ChiPartial | partial:m2311_10 | +| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2307_49 | +| ir.cpp:2311:18:2311:25 | ChiTotal | total:m2311_2 | +| ir.cpp:2311:18:2311:25 | SideEffect | ~m2307_49 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_12 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_42 | +| ir.cpp:2311:28:2311:29 | Address | &:r2311_42 | +| ir.cpp:2311:28:2311:29 | Arg(this) | this:r2311_12 | +| ir.cpp:2311:28:2311:29 | Arg(this) | this:r2311_42 | +| ir.cpp:2311:28:2311:29 | CallTarget | func:r2311_43 | +| ir.cpp:2311:28:2311:29 | ChiPartial | partial:m2311_45 | +| ir.cpp:2311:28:2311:29 | ChiPartial | partial:m2311_48 | +| ir.cpp:2311:28:2311:29 | ChiTotal | total:m2311_22 | +| ir.cpp:2311:28:2311:29 | ChiTotal | total:m2311_24 | +| ir.cpp:2311:28:2311:29 | SideEffect | m2311_22 | +| ir.cpp:2311:28:2311:29 | SideEffect | ~m2311_24 | +| ir.cpp:2311:31:2311:37 | Address | &:r2311_16 | +| ir.cpp:2311:31:2311:37 | Arg(0) | 0:r2311_16 | +| ir.cpp:2311:31:2311:37 | SideEffect | ~m2301_3 | +| ir.cpp:2311:31:2311:37 | Unary | r2311_15 | +| ir.cpp:2311:31:2311:38 | CallTarget | func:r2311_14 | +| ir.cpp:2311:31:2311:38 | ChiPartial | partial:m2311_18 | +| ir.cpp:2311:31:2311:38 | ChiPartial | partial:m2311_21 | +| ir.cpp:2311:31:2311:38 | ChiTotal | total:m2311_8 | +| ir.cpp:2311:31:2311:38 | ChiTotal | total:m2311_13 | +| ir.cpp:2311:31:2311:38 | SideEffect | ~m2311_8 | +| ir.cpp:2311:41:2311:41 | Address | &:r2311_26 | +| ir.cpp:2311:41:2311:41 | Left | r2311_28 | +| ir.cpp:2311:41:2311:41 | Load | m2311_25 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:m2303_14 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:m2311_11 | +| ir.cpp:2311:41:2311:41 | Phi | from 6:~m2311_19 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:m2311_39 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:m2311_41 | +| ir.cpp:2311:41:2311:41 | Phi | from 8:~m2311_36 | +| ir.cpp:2311:41:2311:41 | Unary | r2311_27 | +| ir.cpp:2311:41:2311:46 | Condition | r2311_30 | +| ir.cpp:2311:46:2311:46 | Right | r2311_29 | +| ir.cpp:2311:49:2311:49 | Address | &:r2311_40 | +| ir.cpp:2311:53:2311:53 | Address | &:r2311_32 | +| ir.cpp:2311:53:2311:53 | Address | &:r2311_32 | +| ir.cpp:2311:53:2311:53 | Arg(this) | this:r2311_32 | +| ir.cpp:2311:53:2311:53 | ChiPartial | partial:m2311_38 | +| ir.cpp:2311:53:2311:53 | ChiTotal | total:m2311_23 | +| ir.cpp:2311:53:2311:53 | SideEffect | m2311_23 | +| ir.cpp:2311:55:2311:62 | CallTarget | func:r2311_33 | +| ir.cpp:2311:55:2311:62 | ChiPartial | partial:m2311_35 | +| ir.cpp:2311:55:2311:62 | ChiTotal | total:m2311_24 | +| ir.cpp:2311:55:2311:62 | SideEffect | ~m2311_24 | +| ir.cpp:2311:55:2311:62 | StoreValue | r2311_34 | +| ir.cpp:2312:9:2312:9 | Address | &:r2312_2 | +| ir.cpp:2312:13:2312:13 | StoreValue | r2312_1 | +| ir.cpp:2316:6:2316:19 | ChiPartial | partial:m2316_3 | +| ir.cpp:2316:6:2316:19 | ChiTotal | total:m2316_2 | +| ir.cpp:2316:6:2316:19 | SideEffect | ~m2321_5 | +| ir.cpp:2316:26:2316:26 | Address | &:r2316_5 | +| ir.cpp:2317:15:2317:15 | Address | &:r2317_1 | +| ir.cpp:2317:15:2317:15 | Address | &:r2317_1 | +| ir.cpp:2317:15:2317:15 | Arg(this) | this:r2317_1 | +| ir.cpp:2317:18:2317:33 | CallTarget | func:r2317_3 | +| ir.cpp:2317:18:2317:33 | ChiPartial | partial:m2317_7 | +| ir.cpp:2317:18:2317:33 | ChiPartial | partial:m2317_10 | +| ir.cpp:2317:18:2317:33 | ChiTotal | total:m2316_4 | +| ir.cpp:2317:18:2317:33 | ChiTotal | total:m2317_2 | +| ir.cpp:2317:18:2317:33 | SideEffect | ~m2316_4 | +| ir.cpp:2317:26:2317:32 | Address | &:r2317_5 | +| ir.cpp:2317:26:2317:32 | Arg(0) | 0:r2317_5 | +| ir.cpp:2317:26:2317:32 | SideEffect | ~m2316_3 | +| ir.cpp:2317:26:2317:32 | Unary | r2317_4 | +| ir.cpp:2317:36:2317:36 | Address | &:r2317_12 | +| ir.cpp:2317:36:2317:36 | Condition | r2317_13 | +| ir.cpp:2317:36:2317:36 | Load | m2316_6 | +| ir.cpp:2318:13:2318:13 | Address | &:r2318_1 | +| ir.cpp:2318:16:2318:17 | StoreValue | r2318_2 | +| ir.cpp:2320:13:2320:13 | Address | &:r2320_1 | +| ir.cpp:2320:16:2320:17 | StoreValue | r2320_2 | +| ir.cpp:2321:5:2321:5 | Address | &:r2321_1 | +| ir.cpp:2321:5:2321:5 | Address | &:r2321_1 | +| ir.cpp:2321:5:2321:5 | Arg(this) | this:r2321_1 | +| ir.cpp:2321:5:2321:5 | CallTarget | func:r2321_2 | +| ir.cpp:2321:5:2321:5 | ChiPartial | partial:m2321_4 | +| ir.cpp:2321:5:2321:5 | ChiPartial | partial:m2321_7 | +| ir.cpp:2321:5:2321:5 | ChiTotal | total:m2317_8 | +| ir.cpp:2321:5:2321:5 | ChiTotal | total:m2317_11 | +| ir.cpp:2321:5:2321:5 | SideEffect | m2317_11 | +| ir.cpp:2321:5:2321:5 | SideEffect | ~m2317_8 | +| ir.cpp:2331:6:2331:19 | ChiPartial | partial:m2331_3 | +| ir.cpp:2331:6:2331:19 | ChiTotal | total:m2331_2 | +| ir.cpp:2331:6:2331:19 | SideEffect | ~m2336_14 | +| ir.cpp:2331:26:2331:26 | Address | &:r2331_5 | +| ir.cpp:2332:8:2332:23 | Address | &:r2332_1 | +| ir.cpp:2332:8:2332:23 | Address | &:r2332_1 | +| ir.cpp:2332:8:2332:23 | Arg(this) | this:r2332_1 | +| ir.cpp:2332:8:2332:23 | Condition | r2332_19 | +| ir.cpp:2332:13:2332:13 | Address | &:r2332_11 | +| ir.cpp:2332:13:2332:13 | Address | &:r2332_11 | +| ir.cpp:2332:13:2332:13 | Arg(this) | this:r2332_11 | +| ir.cpp:2332:13:2332:13 | CallTarget | func:r2332_12 | +| ir.cpp:2332:13:2332:13 | ChiPartial | partial:m2332_14 | +| ir.cpp:2332:13:2332:13 | ChiPartial | partial:m2332_17 | +| ir.cpp:2332:13:2332:13 | ChiTotal | total:m2332_8 | +| ir.cpp:2332:13:2332:13 | ChiTotal | total:m2332_10 | +| ir.cpp:2332:13:2332:13 | SideEffect | m2332_10 | +| ir.cpp:2332:13:2332:13 | SideEffect | ~m2332_8 | +| ir.cpp:2332:13:2332:13 | Unary | r2332_13 | +| ir.cpp:2332:16:2332:23 | CallTarget | func:r2332_3 | +| ir.cpp:2332:16:2332:23 | ChiPartial | partial:m2332_7 | +| ir.cpp:2332:16:2332:23 | ChiPartial | partial:m2332_9 | +| ir.cpp:2332:16:2332:23 | ChiTotal | total:m2331_4 | +| ir.cpp:2332:16:2332:23 | ChiTotal | total:m2332_2 | +| ir.cpp:2332:16:2332:23 | SideEffect | ~m2331_4 | +| ir.cpp:2332:22:2332:22 | Address | &:r2332_4 | +| ir.cpp:2332:22:2332:22 | Arg(0) | 0:r2332_5 | +| ir.cpp:2332:22:2332:22 | Load | m2331_6 | +| ir.cpp:2333:16:2333:17 | Address | &:r2333_1 | +| ir.cpp:2333:16:2333:17 | Address | &:r2333_1 | +| ir.cpp:2333:16:2333:17 | Arg(this) | this:r2333_1 | +| ir.cpp:2333:16:2333:17 | CallTarget | func:r2333_3 | +| ir.cpp:2333:16:2333:17 | ChiPartial | partial:m2333_5 | +| ir.cpp:2333:16:2333:17 | ChiPartial | partial:m2333_7 | +| ir.cpp:2333:16:2333:17 | ChiTotal | total:m2332_15 | +| ir.cpp:2333:16:2333:17 | ChiTotal | total:m2333_2 | +| ir.cpp:2333:16:2333:17 | SideEffect | ~m2332_15 | +| ir.cpp:2334:5:2334:5 | Address | &:r2334_1 | +| ir.cpp:2334:5:2334:5 | Address | &:r2334_1 | +| ir.cpp:2334:5:2334:5 | Arg(this) | this:r2334_1 | +| ir.cpp:2334:5:2334:5 | CallTarget | func:r2334_2 | +| ir.cpp:2334:5:2334:5 | ChiPartial | partial:m2334_4 | +| ir.cpp:2334:5:2334:5 | ChiPartial | partial:m2334_7 | +| ir.cpp:2334:5:2334:5 | ChiTotal | total:m2333_6 | +| ir.cpp:2334:5:2334:5 | ChiTotal | total:m2333_8 | +| ir.cpp:2334:5:2334:5 | SideEffect | m2333_8 | +| ir.cpp:2334:5:2334:5 | SideEffect | ~m2333_6 | +| ir.cpp:2335:16:2335:17 | Address | &:r2335_1 | +| ir.cpp:2335:16:2335:17 | Address | &:r2335_1 | +| ir.cpp:2335:16:2335:17 | Arg(this) | this:r2335_1 | +| ir.cpp:2335:16:2335:17 | CallTarget | func:r2335_3 | +| ir.cpp:2335:16:2335:17 | ChiPartial | partial:m2335_5 | +| ir.cpp:2335:16:2335:17 | ChiPartial | partial:m2335_7 | +| ir.cpp:2335:16:2335:17 | ChiTotal | total:m2332_15 | +| ir.cpp:2335:16:2335:17 | ChiTotal | total:m2335_2 | +| ir.cpp:2335:16:2335:17 | SideEffect | ~m2332_15 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_1 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_1 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_10 | +| ir.cpp:2336:5:2336:5 | Address | &:r2336_10 | +| ir.cpp:2336:5:2336:5 | Arg(this) | this:r2336_1 | +| ir.cpp:2336:5:2336:5 | Arg(this) | this:r2336_10 | +| ir.cpp:2336:5:2336:5 | CallTarget | func:r2336_2 | +| ir.cpp:2336:5:2336:5 | CallTarget | func:r2336_11 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_4 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_7 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_13 | +| ir.cpp:2336:5:2336:5 | ChiPartial | partial:m2336_16 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2332_18 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2335_6 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2335_8 | +| ir.cpp:2336:5:2336:5 | ChiTotal | total:m2336_9 | +| ir.cpp:2336:5:2336:5 | Phi | from 1:~m2334_5 | +| ir.cpp:2336:5:2336:5 | Phi | from 2:~m2336_5 | +| ir.cpp:2336:5:2336:5 | SideEffect | m2332_18 | +| ir.cpp:2336:5:2336:5 | SideEffect | m2335_8 | +| ir.cpp:2336:5:2336:5 | SideEffect | ~m2335_6 | +| ir.cpp:2336:5:2336:5 | SideEffect | ~m2336_9 | +| ir.cpp:2339:6:2339:25 | ChiPartial | partial:m2339_3 | +| ir.cpp:2339:6:2339:25 | ChiTotal | total:m2339_2 | +| ir.cpp:2339:6:2339:25 | SideEffect | ~m2350_13 | +| ir.cpp:2339:32:2339:32 | Address | &:r2339_5 | +| ir.cpp:2341:16:2341:16 | Address | &:r2341_1 | +| ir.cpp:2341:16:2341:16 | Address | &:r2341_1 | +| ir.cpp:2341:16:2341:16 | Arg(this) | this:r2341_1 | +| ir.cpp:2341:16:2341:16 | CallTarget | func:r2341_3 | +| ir.cpp:2341:16:2341:16 | ChiPartial | partial:m2341_5 | +| ir.cpp:2341:16:2341:16 | ChiPartial | partial:m2341_7 | +| ir.cpp:2341:16:2341:16 | ChiTotal | total:m2339_4 | +| ir.cpp:2341:16:2341:16 | ChiTotal | total:m2341_2 | +| ir.cpp:2341:16:2341:16 | SideEffect | ~m2339_4 | +| ir.cpp:2342:15:2342:15 | Address | &:r2342_2 | +| ir.cpp:2342:15:2342:15 | Condition | r2342_3 | +| ir.cpp:2342:15:2342:15 | Load | m2342_1 | +| ir.cpp:2342:15:2342:15 | Phi | from 0:m2339_6 | +| ir.cpp:2342:15:2342:15 | Phi | from 2:m2343_3 | +| ir.cpp:2343:13:2343:13 | Address | &:r2343_2 | +| ir.cpp:2343:17:2343:21 | StoreValue | r2343_1 | +| ir.cpp:2345:5:2345:5 | Address | &:r2345_1 | +| ir.cpp:2345:5:2345:5 | Address | &:r2345_1 | +| ir.cpp:2345:5:2345:5 | Arg(this) | this:r2345_1 | +| ir.cpp:2345:5:2345:5 | CallTarget | func:r2345_2 | +| ir.cpp:2345:5:2345:5 | ChiPartial | partial:m2345_4 | +| ir.cpp:2345:5:2345:5 | ChiPartial | partial:m2345_7 | +| ir.cpp:2345:5:2345:5 | ChiTotal | total:m2341_6 | +| ir.cpp:2345:5:2345:5 | ChiTotal | total:m2341_8 | +| ir.cpp:2345:5:2345:5 | SideEffect | m2341_8 | +| ir.cpp:2345:5:2345:5 | SideEffect | ~m2341_6 | +| ir.cpp:2348:16:2348:31 | Address | &:r2348_3 | +| ir.cpp:2348:16:2348:31 | Address | &:r2348_3 | +| ir.cpp:2348:16:2348:31 | Arg(this) | this:r2348_3 | +| ir.cpp:2348:16:2348:31 | Condition | r2348_21 | +| ir.cpp:2348:16:2348:31 | Phi | from 3:m2342_1 | +| ir.cpp:2348:16:2348:31 | Phi | from 3:~m2345_5 | +| ir.cpp:2348:16:2348:31 | Phi | from 5:m2349_3 | +| ir.cpp:2348:16:2348:31 | Phi | from 5:~m2350_5 | +| ir.cpp:2348:21:2348:21 | Address | &:r2348_13 | +| ir.cpp:2348:21:2348:21 | Address | &:r2348_13 | +| ir.cpp:2348:21:2348:21 | Arg(this) | this:r2348_13 | +| ir.cpp:2348:21:2348:21 | CallTarget | func:r2348_14 | +| ir.cpp:2348:21:2348:21 | ChiPartial | partial:m2348_16 | +| ir.cpp:2348:21:2348:21 | ChiPartial | partial:m2348_19 | +| ir.cpp:2348:21:2348:21 | ChiTotal | total:m2348_10 | +| ir.cpp:2348:21:2348:21 | ChiTotal | total:m2348_12 | +| ir.cpp:2348:21:2348:21 | SideEffect | m2348_12 | +| ir.cpp:2348:21:2348:21 | SideEffect | ~m2348_10 | +| ir.cpp:2348:21:2348:21 | Unary | r2348_15 | +| ir.cpp:2348:24:2348:31 | CallTarget | func:r2348_5 | +| ir.cpp:2348:24:2348:31 | ChiPartial | partial:m2348_9 | +| ir.cpp:2348:24:2348:31 | ChiPartial | partial:m2348_11 | +| ir.cpp:2348:24:2348:31 | ChiTotal | total:m2348_1 | +| ir.cpp:2348:24:2348:31 | ChiTotal | total:m2348_4 | +| ir.cpp:2348:24:2348:31 | SideEffect | ~m2348_1 | +| ir.cpp:2348:30:2348:30 | Address | &:r2348_6 | +| ir.cpp:2348:30:2348:30 | Arg(0) | 0:r2348_7 | +| ir.cpp:2348:30:2348:30 | Load | m2348_2 | +| ir.cpp:2349:13:2349:13 | Address | &:r2349_2 | +| ir.cpp:2349:17:2349:21 | StoreValue | r2349_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_1 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_9 | +| ir.cpp:2350:9:2350:9 | Address | &:r2350_9 | +| ir.cpp:2350:9:2350:9 | Arg(this) | this:r2350_1 | +| ir.cpp:2350:9:2350:9 | Arg(this) | this:r2350_9 | +| ir.cpp:2350:9:2350:9 | CallTarget | func:r2350_2 | +| ir.cpp:2350:9:2350:9 | CallTarget | func:r2350_10 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_4 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_7 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_12 | +| ir.cpp:2350:9:2350:9 | ChiPartial | partial:m2350_15 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_17 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_17 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_20 | +| ir.cpp:2350:9:2350:9 | ChiTotal | total:m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | m2348_20 | +| ir.cpp:2350:9:2350:9 | SideEffect | ~m2348_17 | +| ir.cpp:2350:9:2350:9 | SideEffect | ~m2348_17 | +| ir.cpp:2354:6:2354:13 | ChiPartial | partial:m2354_3 | +| ir.cpp:2354:6:2354:13 | ChiTotal | total:m2354_2 | +| ir.cpp:2354:6:2354:13 | SideEffect | m2354_3 | +| ir.cpp:2356:6:2356:24 | ChiPartial | partial:m2356_3 | +| ir.cpp:2356:6:2356:24 | ChiTotal | total:m2356_2 | +| ir.cpp:2356:6:2356:24 | Phi | from 2:~m2365_5 | +| ir.cpp:2356:6:2356:24 | Phi | from 4:~m2365_13 | +| ir.cpp:2356:6:2356:24 | Phi | from 5:~m2365_22 | +| ir.cpp:2356:6:2356:24 | SideEffect | ~m2356_7 | +| ir.cpp:2356:31:2356:31 | Address | &:r2356_5 | +| ir.cpp:2357:12:2357:12 | Address | &:r2357_1 | +| ir.cpp:2357:12:2357:12 | Address | &:r2357_1 | +| ir.cpp:2357:12:2357:12 | Arg(this) | this:r2357_1 | +| ir.cpp:2357:12:2357:12 | CallTarget | func:r2357_3 | +| ir.cpp:2357:12:2357:12 | ChiPartial | partial:m2357_5 | +| ir.cpp:2357:12:2357:12 | ChiPartial | partial:m2357_7 | +| ir.cpp:2357:12:2357:12 | ChiTotal | total:m2356_4 | +| ir.cpp:2357:12:2357:12 | ChiTotal | total:m2357_2 | +| ir.cpp:2357:12:2357:12 | SideEffect | ~m2356_4 | +| ir.cpp:2358:8:2358:8 | Address | &:r2358_1 | +| ir.cpp:2358:8:2358:8 | Condition | r2358_2 | +| ir.cpp:2358:8:2358:8 | Load | m2356_6 | +| ir.cpp:2361:8:2361:8 | Address | &:r2361_1 | +| ir.cpp:2361:8:2361:8 | Condition | r2361_2 | +| ir.cpp:2361:8:2361:8 | Load | m2356_6 | +| ir.cpp:2362:16:2362:23 | CallTarget | func:r2362_1 | +| ir.cpp:2362:16:2362:23 | ChiPartial | partial:m2362_3 | +| ir.cpp:2362:16:2362:23 | ChiTotal | total:m2357_6 | +| ir.cpp:2362:16:2362:23 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_1 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_1 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_9 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_9 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_18 | +| ir.cpp:2365:1:2365:1 | Address | &:r2365_18 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_1 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_9 | +| ir.cpp:2365:1:2365:1 | Arg(this) | this:r2365_18 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_2 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_10 | +| ir.cpp:2365:1:2365:1 | CallTarget | func:r2365_19 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_4 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_7 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_12 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_15 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_21 | +| ir.cpp:2365:1:2365:1 | ChiPartial | partial:m2365_24 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_6 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_6 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2357_8 | +| ir.cpp:2365:1:2365:1 | ChiTotal | total:m2362_4 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | m2357_8 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2357_6 | +| ir.cpp:2365:1:2365:1 | SideEffect | ~m2362_4 | +| ir.cpp:2367:5:2367:24 | Address | &:r2367_9 | +| ir.cpp:2367:5:2367:24 | ChiPartial | partial:m2367_3 | +| ir.cpp:2367:5:2367:24 | ChiTotal | total:m2367_2 | +| ir.cpp:2367:5:2367:24 | Load | m2367_8 | +| ir.cpp:2367:5:2367:24 | Phi | from 2:m2370_3 | +| ir.cpp:2367:5:2367:24 | Phi | from 2:~m2373_5 | +| ir.cpp:2367:5:2367:24 | Phi | from 3:m2372_3 | +| ir.cpp:2367:5:2367:24 | Phi | from 3:~m2373_13 | +| ir.cpp:2367:5:2367:24 | SideEffect | ~m2367_7 | +| ir.cpp:2367:31:2367:31 | Address | &:r2367_5 | +| ir.cpp:2368:12:2368:12 | Address | &:r2368_1 | +| ir.cpp:2368:12:2368:12 | Address | &:r2368_1 | +| ir.cpp:2368:12:2368:12 | Arg(this) | this:r2368_1 | +| ir.cpp:2368:12:2368:12 | CallTarget | func:r2368_3 | +| ir.cpp:2368:12:2368:12 | ChiPartial | partial:m2368_5 | +| ir.cpp:2368:12:2368:12 | ChiPartial | partial:m2368_7 | +| ir.cpp:2368:12:2368:12 | ChiTotal | total:m2367_4 | +| ir.cpp:2368:12:2368:12 | ChiTotal | total:m2368_2 | +| ir.cpp:2368:12:2368:12 | SideEffect | ~m2367_4 | +| ir.cpp:2369:8:2369:8 | Address | &:r2369_1 | +| ir.cpp:2369:8:2369:8 | Condition | r2369_2 | +| ir.cpp:2369:8:2369:8 | Load | m2367_6 | +| ir.cpp:2370:9:2370:17 | Address | &:r2370_1 | +| ir.cpp:2370:16:2370:16 | StoreValue | r2370_2 | +| ir.cpp:2372:5:2372:13 | Address | &:r2372_1 | +| ir.cpp:2372:12:2372:12 | StoreValue | r2372_2 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_1 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_1 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_9 | +| ir.cpp:2373:1:2373:1 | Address | &:r2373_9 | +| ir.cpp:2373:1:2373:1 | Arg(this) | this:r2373_1 | +| ir.cpp:2373:1:2373:1 | Arg(this) | this:r2373_9 | +| ir.cpp:2373:1:2373:1 | CallTarget | func:r2373_2 | +| ir.cpp:2373:1:2373:1 | CallTarget | func:r2373_10 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_4 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_7 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_12 | +| ir.cpp:2373:1:2373:1 | ChiPartial | partial:m2373_15 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_6 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_6 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_8 | +| ir.cpp:2373:1:2373:1 | ChiTotal | total:m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | m2368_8 | +| ir.cpp:2373:1:2373:1 | SideEffect | ~m2368_6 | +| ir.cpp:2373:1:2373:1 | SideEffect | ~m2368_6 | +| ir.cpp:2375:6:2375:26 | ChiPartial | partial:m2375_3 | +| ir.cpp:2375:6:2375:26 | ChiTotal | total:m2375_2 | +| ir.cpp:2375:6:2375:26 | SideEffect | ~m2378_5 | +| ir.cpp:2376:12:2376:12 | Address | &:r2376_1 | +| ir.cpp:2376:12:2376:12 | Address | &:r2376_1 | +| ir.cpp:2376:12:2376:12 | Arg(this) | this:r2376_1 | +| ir.cpp:2376:12:2376:12 | CallTarget | func:r2376_3 | +| ir.cpp:2376:12:2376:12 | ChiPartial | partial:m2376_5 | +| ir.cpp:2376:12:2376:12 | ChiPartial | partial:m2376_7 | +| ir.cpp:2376:12:2376:12 | ChiTotal | total:m2375_4 | +| ir.cpp:2376:12:2376:12 | ChiTotal | total:m2376_2 | +| ir.cpp:2376:12:2376:12 | SideEffect | ~m2375_4 | +| ir.cpp:2377:12:2377:19 | CallTarget | func:r2377_1 | +| ir.cpp:2377:12:2377:19 | ChiPartial | partial:m2377_3 | +| ir.cpp:2377:12:2377:19 | ChiTotal | total:m2376_6 | +| ir.cpp:2377:12:2377:19 | SideEffect | ~m2376_6 | +| ir.cpp:2378:1:2378:1 | Address | &:r2378_1 | +| ir.cpp:2378:1:2378:1 | Address | &:r2378_1 | +| ir.cpp:2378:1:2378:1 | Arg(this) | this:r2378_1 | +| ir.cpp:2378:1:2378:1 | CallTarget | func:r2378_2 | +| ir.cpp:2378:1:2378:1 | ChiPartial | partial:m2378_4 | +| ir.cpp:2378:1:2378:1 | ChiPartial | partial:m2378_7 | +| ir.cpp:2378:1:2378:1 | ChiTotal | total:m2376_8 | +| ir.cpp:2378:1:2378:1 | ChiTotal | total:m2377_4 | +| ir.cpp:2378:1:2378:1 | SideEffect | m2376_8 | +| ir.cpp:2378:1:2378:1 | SideEffect | ~m2377_4 | +| ir.cpp:2388:32:2388:47 | Address | &:r2388_5 | +| ir.cpp:2388:32:2388:47 | ChiPartial | partial:m2388_3 | +| ir.cpp:2388:32:2388:47 | ChiTotal | total:m2388_2 | +| ir.cpp:2388:32:2388:47 | Load | m2390_3 | +| ir.cpp:2388:32:2388:47 | SideEffect | m2388_3 | +| ir.cpp:2390:9:2390:44 | Address | &:r2390_1 | +| ir.cpp:2390:16:2390:43 | StoreValue | r2390_2 | +| ir.cpp:2395:5:2395:49 | Address | &:r2395_5 | +| ir.cpp:2395:5:2395:49 | ChiPartial | partial:m2395_3 | +| ir.cpp:2395:5:2395:49 | ChiTotal | total:m2395_2 | +| ir.cpp:2395:5:2395:49 | Load | m2396_5 | +| ir.cpp:2395:5:2395:49 | SideEffect | m2395_3 | +| ir.cpp:2396:5:2396:17 | Address | &:r2396_1 | +| ir.cpp:2396:12:2396:12 | Left | r2396_2 | +| ir.cpp:2396:12:2396:16 | StoreValue | r2396_4 | +| ir.cpp:2396:16:2396:16 | Right | r2396_3 | +| ir.cpp:2406:5:2406:45 | Address | &:r2406_5 | +| ir.cpp:2406:5:2406:45 | ChiPartial | partial:m2406_3 | +| ir.cpp:2406:5:2406:45 | ChiTotal | total:m2406_2 | +| ir.cpp:2406:5:2406:45 | Load | m2407_3 | +| ir.cpp:2406:5:2406:45 | SideEffect | m2406_3 | +| ir.cpp:2407:5:2407:22 | Address | &:r2407_1 | +| ir.cpp:2407:12:2407:21 | StoreValue | r2407_2 | +| ir.cpp:2410:6:2410:40 | ChiPartial | partial:m2410_3 | +| ir.cpp:2410:6:2410:40 | ChiTotal | total:m2410_2 | +| ir.cpp:2410:6:2410:40 | SideEffect | ~m2430_56 | +| ir.cpp:2411:9:2411:46 | Address | &:r2411_1 | +| ir.cpp:2411:9:2411:46 | Condition | r2411_22 | +| ir.cpp:2411:14:2411:14 | Address | &:r2411_18 | +| ir.cpp:2411:14:2411:14 | Left | r2411_19 | +| ir.cpp:2411:14:2411:14 | Load | m2411_17 | +| ir.cpp:2411:14:2411:14 | Right | r2411_20 | +| ir.cpp:2411:14:2411:14 | Unary | r2411_21 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Address | &:r2411_2 | +| ir.cpp:2411:18:2411:38 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:18:2411:38 | Arg(this) | this:r2411_2 | +| ir.cpp:2411:18:2411:38 | CallTarget | func:r2411_4 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_6 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_8 | +| ir.cpp:2411:18:2411:38 | ChiPartial | partial:m2411_15 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2410_4 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2411_3 | +| ir.cpp:2411:18:2411:38 | ChiTotal | total:m2411_9 | +| ir.cpp:2411:18:2411:38 | SideEffect | m2411_9 | +| ir.cpp:2411:18:2411:38 | SideEffect | ~m2410_4 | +| ir.cpp:2411:40:2411:44 | CallTarget | func:r2411_10 | +| ir.cpp:2411:40:2411:44 | ChiPartial | partial:m2411_12 | +| ir.cpp:2411:40:2411:44 | ChiTotal | total:m2411_7 | +| ir.cpp:2411:40:2411:44 | SideEffect | ~m2411_7 | +| ir.cpp:2411:40:2411:44 | StoreValue | r2411_11 | +| ir.cpp:2412:9:2412:9 | Address | &:r2412_1 | +| ir.cpp:2412:9:2412:9 | Address | &:r2412_1 | +| ir.cpp:2412:9:2412:9 | Left | r2412_2 | +| ir.cpp:2412:9:2412:9 | Load | m2411_17 | +| ir.cpp:2412:9:2412:11 | Right | r2412_3 | +| ir.cpp:2412:9:2412:11 | StoreValue | r2412_4 | +| ir.cpp:2414:14:2414:14 | Address | &:r2414_1 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Address | &:r2414_2 | +| ir.cpp:2414:18:2414:38 | Arg(this) | this:r2414_2 | +| ir.cpp:2414:18:2414:38 | Arg(this) | this:r2414_2 | +| ir.cpp:2414:18:2414:38 | CallTarget | func:r2414_4 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_6 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_8 | +| ir.cpp:2414:18:2414:38 | ChiPartial | partial:m2414_15 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2411_13 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2414_3 | +| ir.cpp:2414:18:2414:38 | ChiTotal | total:m2414_9 | +| ir.cpp:2414:18:2414:38 | SideEffect | m2414_9 | +| ir.cpp:2414:18:2414:38 | SideEffect | ~m2411_13 | +| ir.cpp:2414:40:2414:44 | CallTarget | func:r2414_10 | +| ir.cpp:2414:40:2414:44 | ChiPartial | partial:m2414_12 | +| ir.cpp:2414:40:2414:44 | ChiTotal | total:m2414_7 | +| ir.cpp:2414:40:2414:44 | SideEffect | ~m2414_7 | +| ir.cpp:2414:40:2414:44 | StoreValue | r2414_11 | +| ir.cpp:2414:49:2414:49 | Address | &:r2414_18 | +| ir.cpp:2414:49:2414:49 | Condition | r2414_21 | +| ir.cpp:2414:49:2414:49 | Left | r2414_19 | +| ir.cpp:2414:49:2414:49 | Load | m2414_17 | +| ir.cpp:2414:49:2414:49 | Right | r2414_20 | +| ir.cpp:2415:9:2415:9 | Address | &:r2415_1 | +| ir.cpp:2415:9:2415:9 | Address | &:r2415_1 | +| ir.cpp:2415:9:2415:9 | Left | r2415_2 | +| ir.cpp:2415:9:2415:9 | Load | m2414_17 | +| ir.cpp:2415:9:2415:11 | Right | r2415_3 | +| ir.cpp:2415:9:2415:11 | StoreValue | r2415_4 | +| ir.cpp:2417:24:2417:24 | Address | &:r2417_1 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Address | &:r2417_2 | +| ir.cpp:2417:28:2417:48 | Arg(this) | this:r2417_2 | +| ir.cpp:2417:28:2417:48 | Arg(this) | this:r2417_2 | +| ir.cpp:2417:28:2417:48 | CallTarget | func:r2417_4 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_6 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_8 | +| ir.cpp:2417:28:2417:48 | ChiPartial | partial:m2417_15 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2414_13 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2417_3 | +| ir.cpp:2417:28:2417:48 | ChiTotal | total:m2417_9 | +| ir.cpp:2417:28:2417:48 | SideEffect | m2417_9 | +| ir.cpp:2417:28:2417:48 | SideEffect | ~m2414_13 | +| ir.cpp:2417:50:2417:54 | CallTarget | func:r2417_10 | +| ir.cpp:2417:50:2417:54 | ChiPartial | partial:m2417_12 | +| ir.cpp:2417:50:2417:54 | ChiTotal | total:m2417_7 | +| ir.cpp:2417:50:2417:54 | SideEffect | ~m2417_7 | +| ir.cpp:2417:50:2417:54 | StoreValue | r2417_11 | +| ir.cpp:2417:59:2417:93 | Condition | r2417_18 | +| ir.cpp:2418:9:2418:9 | Address | &:r2418_1 | +| ir.cpp:2418:9:2418:9 | Address | &:r2418_1 | +| ir.cpp:2418:9:2418:9 | Left | r2418_2 | +| ir.cpp:2418:9:2418:9 | Load | m2417_17 | +| ir.cpp:2418:9:2418:11 | Right | r2418_3 | +| ir.cpp:2418:9:2418:11 | StoreValue | r2418_4 | +| ir.cpp:2420:12:2420:49 | Address | &:r2420_1 | +| ir.cpp:2420:12:2420:49 | Condition | r2420_21 | +| ir.cpp:2420:17:2420:17 | Address | &:r2420_18 | +| ir.cpp:2420:17:2420:17 | Load | m2420_17 | +| ir.cpp:2420:17:2420:17 | Unary | r2420_19 | +| ir.cpp:2420:17:2420:17 | Unary | r2420_20 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Address | &:r2420_2 | +| ir.cpp:2420:21:2420:41 | Arg(this) | this:r2420_2 | +| ir.cpp:2420:21:2420:41 | Arg(this) | this:r2420_2 | +| ir.cpp:2420:21:2420:41 | CallTarget | func:r2420_4 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_6 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_8 | +| ir.cpp:2420:21:2420:41 | ChiPartial | partial:m2420_15 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2417_13 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2420_3 | +| ir.cpp:2420:21:2420:41 | ChiTotal | total:m2420_9 | +| ir.cpp:2420:21:2420:41 | SideEffect | m2420_9 | +| ir.cpp:2420:21:2420:41 | SideEffect | ~m2417_13 | +| ir.cpp:2420:43:2420:47 | CallTarget | func:r2420_10 | +| ir.cpp:2420:43:2420:47 | ChiPartial | partial:m2420_12 | +| ir.cpp:2420:43:2420:47 | ChiTotal | total:m2420_7 | +| ir.cpp:2420:43:2420:47 | SideEffect | ~m2420_7 | +| ir.cpp:2420:43:2420:47 | StoreValue | r2420_11 | +| ir.cpp:2422:11:2422:11 | Address | &:r2422_1 | +| ir.cpp:2422:11:2422:11 | Address | &:r2422_1 | +| ir.cpp:2422:11:2422:11 | Left | r2422_2 | +| ir.cpp:2422:11:2422:11 | Load | m2420_17 | +| ir.cpp:2422:11:2422:13 | Right | r2422_3 | +| ir.cpp:2422:11:2422:13 | StoreValue | r2422_4 | +| ir.cpp:2425:17:2425:17 | Address | &:r2425_1 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Address | &:r2425_2 | +| ir.cpp:2425:21:2425:41 | Arg(this) | this:r2425_2 | +| ir.cpp:2425:21:2425:41 | Arg(this) | this:r2425_2 | +| ir.cpp:2425:21:2425:41 | CallTarget | func:r2425_4 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_6 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_8 | +| ir.cpp:2425:21:2425:41 | ChiPartial | partial:m2425_15 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2420_13 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2425_3 | +| ir.cpp:2425:21:2425:41 | ChiTotal | total:m2425_9 | +| ir.cpp:2425:21:2425:41 | SideEffect | m2425_9 | +| ir.cpp:2425:21:2425:41 | SideEffect | ~m2420_13 | +| ir.cpp:2425:43:2425:47 | CallTarget | func:r2425_10 | +| ir.cpp:2425:43:2425:47 | ChiPartial | partial:m2425_12 | +| ir.cpp:2425:43:2425:47 | ChiTotal | total:m2425_7 | +| ir.cpp:2425:43:2425:47 | SideEffect | ~m2425_7 | +| ir.cpp:2425:43:2425:47 | StoreValue | r2425_11 | +| ir.cpp:2425:52:2425:52 | Address | &:r2425_18 | +| ir.cpp:2425:52:2425:52 | Condition | r2425_20 | +| ir.cpp:2425:52:2425:52 | Load | m2425_17 | +| ir.cpp:2425:52:2425:52 | Unary | r2425_19 | +| ir.cpp:2427:11:2427:11 | Address | &:r2427_1 | +| ir.cpp:2427:11:2427:11 | Address | &:r2427_1 | +| ir.cpp:2427:11:2427:11 | Left | r2427_2 | +| ir.cpp:2427:11:2427:11 | Load | m2425_17 | +| ir.cpp:2427:11:2427:13 | Right | r2427_3 | +| ir.cpp:2427:11:2427:13 | StoreValue | r2427_4 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_18 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_31 | +| ir.cpp:2430:5:2430:5 | Address | &:r2430_37 | +| ir.cpp:2430:14:2430:14 | Address | &:r2430_1 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Address | &:r2430_2 | +| ir.cpp:2430:18:2430:38 | Arg(this) | this:r2430_2 | +| ir.cpp:2430:18:2430:38 | Arg(this) | this:r2430_2 | +| ir.cpp:2430:18:2430:38 | CallTarget | func:r2430_4 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_6 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_8 | +| ir.cpp:2430:18:2430:38 | ChiPartial | partial:m2430_15 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2425_13 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2430_3 | +| ir.cpp:2430:18:2430:38 | ChiTotal | total:m2430_9 | +| ir.cpp:2430:18:2430:38 | SideEffect | m2430_9 | +| ir.cpp:2430:18:2430:38 | SideEffect | ~m2425_13 | +| ir.cpp:2430:40:2430:44 | CallTarget | func:r2430_10 | +| ir.cpp:2430:40:2430:44 | ChiPartial | partial:m2430_12 | +| ir.cpp:2430:40:2430:44 | ChiTotal | total:m2430_7 | +| ir.cpp:2430:40:2430:44 | SideEffect | ~m2430_7 | +| ir.cpp:2430:40:2430:44 | StoreValue | r2430_11 | +| ir.cpp:2430:54:2430:54 | Address | &:r2430_58 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_32 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_38 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_61 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | +| ir.cpp:2430:58:2430:58 | Address | &:r2430_66 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_2 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_5 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_7 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_8 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r0_15 | +| ir.cpp:2430:58:2430:58 | Arg(this) | this:r2430_66 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_34 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_40 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_46 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_47 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_60 | +| ir.cpp:2430:58:2430:58 | CallTarget | func:r2430_67 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_50 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_52 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_55 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_62 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_69 | +| ir.cpp:2430:58:2430:58 | ChiPartial | partial:m2430_72 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m0_9 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_43 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_44 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_51 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_56 | +| ir.cpp:2430:58:2430:58 | ChiTotal | total:m2430_63 | +| ir.cpp:2430:58:2430:58 | Condition | r2430_54 | +| ir.cpp:2430:58:2430:58 | Load | m2430_30 | +| ir.cpp:2430:58:2430:58 | Load | m2430_30 | +| ir.cpp:2430:58:2430:58 | Phi | from 9:m2430_36 | +| ir.cpp:2430:58:2430:58 | Phi | from 9:~m2430_26 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:m2430_73 | +| ir.cpp:2430:58:2430:58 | Phi | from 11:~m2430_70 | +| ir.cpp:2430:58:2430:58 | SideEffect | m2430_43 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_44 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_51 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_56 | +| ir.cpp:2430:58:2430:58 | SideEffect | ~m2430_63 | +| ir.cpp:2430:58:2430:58 | StoreValue | r2430_35 | +| ir.cpp:2430:58:2430:58 | StoreValue | r2430_41 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_33 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_39 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_45 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_48 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_59 | +| ir.cpp:2430:58:2430:58 | Unary | r2430_68 | +| ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | +| ir.cpp:2430:58:2430:77 | Address | &:r2430_19 | +| ir.cpp:2430:58:2430:77 | Arg(this) | this:r2430_19 | +| ir.cpp:2430:58:2430:77 | CallTarget | func:r2430_21 | +| ir.cpp:2430:58:2430:77 | ChiPartial | partial:m2430_25 | +| ir.cpp:2430:58:2430:77 | ChiPartial | partial:m2430_27 | +| ir.cpp:2430:58:2430:77 | ChiTotal | total:m2430_13 | +| ir.cpp:2430:58:2430:77 | ChiTotal | total:m2430_20 | +| ir.cpp:2430:58:2430:77 | SideEffect | ~m2430_13 | +| ir.cpp:2430:58:2430:77 | StoreValue | r2430_29 | +| ir.cpp:2430:58:2430:77 | Unary | r2430_19 | +| ir.cpp:2430:58:2430:78 | Load | ~m2430_63 | +| ir.cpp:2430:58:2430:78 | StoreValue | r2430_64 | +| ir.cpp:2430:76:2430:76 | Address | &:r2430_22 | +| ir.cpp:2430:76:2430:76 | Arg(0) | 0:r2430_23 | +| ir.cpp:2430:76:2430:76 | Load | m2430_17 | +| ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | +| ir.cpp:2431:9:2431:9 | Address | &:r2431_4 | +| ir.cpp:2431:9:2431:9 | Load | m2430_65 | +| ir.cpp:2431:9:2431:9 | Unary | r2431_5 | +| ir.cpp:2431:9:2431:14 | Left | r2431_6 | +| ir.cpp:2431:9:2431:14 | StoreValue | r2431_8 | +| ir.cpp:2431:9:2431:14 | Unary | r2431_7 | +| ir.cpp:2431:14:2431:14 | Address | &:r2431_1 | +| ir.cpp:2431:14:2431:14 | Load | m2430_17 | +| ir.cpp:2431:14:2431:14 | Right | r2431_3 | +| ir.cpp:2431:14:2431:14 | Unary | r2431_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 25d6225d77e..cf8448c9f5d 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -10826,687 +10826,724 @@ ir.cpp: # 1932| v1932_5(void) = AliasedUse : ~m? # 1932| v1932_6(void) = ExitFunction : -# 1938| char global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| mu1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(char) = Constant[42] : -# 1938| mu1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| v1938_6(void) = ReturnVoid : -# 1938| v1938_7(void) = AliasedUse : ~m? -# 1938| v1938_8(void) = ExitFunction : +# 1939| int missing_declaration_entries::Bar3::two_more_missing_variable_declaration_entries() +# 1939| Block 0 +# 1939| v1939_1(void) = EnterFunction : +# 1939| mu1939_2(unknown) = AliasedDefinition : +# 1939| mu1939_3(unknown) = InitializeNonLocal : +# 1939| r1939_4(glval) = VariableAddress[#this] : +# 1939| mu1939_5(glval>) = InitializeParameter[#this] : &:r1939_4 +# 1939| r1939_6(glval>) = Load[#this] : &:r1939_4, ~m? +# 1939| mu1939_7(Bar3) = InitializeIndirection[#this] : &:r1939_6 +# 1942| r1942_1(glval) = VariableAddress[#return] : +# 1942| r1942_2(glval) = VariableAddress[g] : +# 1942| r1942_3(int) = Load[g] : &:r1942_2, ~m? +# 1942| mu1942_4(int) = Store[#return] : &:r1942_1, r1942_3 +# 1939| v1939_8(void) = ReturnIndirection[#this] : &:r1939_6, ~m? +# 1939| r1939_9(glval) = VariableAddress[#return] : +# 1939| v1939_10(void) = ReturnValue : &:r1939_9, ~m? +# 1939| v1939_11(void) = AliasedUse : ~m? +# 1939| v1939_12(void) = ExitFunction : -# 1938| int global_template -# 1938| Block 0 -# 1938| v1938_1(void) = EnterFunction : -# 1938| mu1938_2(unknown) = AliasedDefinition : -# 1938| r1938_3(glval) = VariableAddress[global_template] : -# 1938| r1938_4(int) = Constant[42] : -# 1938| mu1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 -# 1938| v1938_6(void) = ReturnVoid : -# 1938| v1938_7(void) = AliasedUse : ~m? -# 1938| v1938_8(void) = ExitFunction : +# 1946| void missing_declaration_entries::test3() +# 1946| Block 0 +# 1946| v1946_1(void) = EnterFunction : +# 1946| mu1946_2(unknown) = AliasedDefinition : +# 1946| mu1946_3(unknown) = InitializeNonLocal : +# 1947| r1947_1(glval>) = VariableAddress[b] : +# 1947| mu1947_2(Bar3) = Uninitialized[b] : &:r1947_1 +# 1948| r1948_1(glval>) = VariableAddress[b] : +# 1948| r1948_2(glval) = FunctionAddress[two_more_missing_variable_declaration_entries] : +# 1948| r1948_3(int) = Call[two_more_missing_variable_declaration_entries] : func:r1948_2, this:r1948_1 +# 1948| mu1948_4(unknown) = ^CallSideEffect : ~m? +# 1948| v1948_5(void) = ^IndirectReadSideEffect[-1] : &:r1948_1, ~m? +# 1948| mu1948_6(Bar3) = ^IndirectMayWriteSideEffect[-1] : &:r1948_1 +# 1949| v1949_1(void) = NoOp : +# 1946| v1946_4(void) = ReturnVoid : +# 1946| v1946_5(void) = AliasedUse : ~m? +# 1946| v1946_6(void) = ExitFunction : -# 1940| int test_global_template_int() -# 1940| Block 0 -# 1940| v1940_1(void) = EnterFunction : -# 1940| mu1940_2(unknown) = AliasedDefinition : -# 1940| mu1940_3(unknown) = InitializeNonLocal : -# 1941| r1941_1(glval) = VariableAddress[local_int] : -# 1941| r1941_2(glval) = VariableAddress[global_template] : -# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m? -# 1941| mu1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 -# 1942| r1942_1(glval) = VariableAddress[local_char] : -# 1942| r1942_2(glval) = VariableAddress[global_template] : -# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m? -# 1942| mu1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[local_int] : -# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, ~m? -# 1943| r1943_4(glval) = VariableAddress[local_char] : -# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, ~m? -# 1943| r1943_6(int) = Convert : r1943_5 -# 1943| r1943_7(int) = Add : r1943_3, r1943_6 -# 1943| mu1943_8(int) = Store[#return] : &:r1943_1, r1943_7 -# 1940| r1940_4(glval) = VariableAddress[#return] : -# 1940| v1940_5(void) = ReturnValue : &:r1940_4, ~m? -# 1940| v1940_6(void) = AliasedUse : ~m? -# 1940| v1940_7(void) = ExitFunction : +# 1952| char global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(char) = Constant[42] : +# 1952| mu1952_5(char) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| v1952_6(void) = ReturnVoid : +# 1952| v1952_7(void) = AliasedUse : ~m? +# 1952| v1952_8(void) = ExitFunction : -# 1948| int noreturnTest(int) -# 1948| Block 0 -# 1948| v1948_1(void) = EnterFunction : -# 1948| mu1948_2(unknown) = AliasedDefinition : -# 1948| mu1948_3(unknown) = InitializeNonLocal : -# 1948| r1948_4(glval) = VariableAddress[x] : -# 1948| mu1948_5(int) = InitializeParameter[x] : &:r1948_4 -# 1949| r1949_1(glval) = VariableAddress[x] : -# 1949| r1949_2(int) = Load[x] : &:r1949_1, ~m? -# 1949| r1949_3(int) = Constant[10] : -# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 -# 1949| v1949_5(void) = ConditionalBranch : r1949_4 +# 1952| int global_template +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| r1952_3(glval) = VariableAddress[global_template] : +# 1952| r1952_4(int) = Constant[42] : +# 1952| mu1952_5(int) = Store[global_template] : &:r1952_3, r1952_4 +# 1952| v1952_6(void) = ReturnVoid : +# 1952| v1952_7(void) = AliasedUse : ~m? +# 1952| v1952_8(void) = ExitFunction : + +# 1954| int test_global_template_int() +# 1954| Block 0 +# 1954| v1954_1(void) = EnterFunction : +# 1954| mu1954_2(unknown) = AliasedDefinition : +# 1954| mu1954_3(unknown) = InitializeNonLocal : +# 1955| r1955_1(glval) = VariableAddress[local_int] : +# 1955| r1955_2(glval) = VariableAddress[global_template] : +# 1955| r1955_3(int) = Load[global_template] : &:r1955_2, ~m? +# 1955| mu1955_4(int) = Store[local_int] : &:r1955_1, r1955_3 +# 1956| r1956_1(glval) = VariableAddress[local_char] : +# 1956| r1956_2(glval) = VariableAddress[global_template] : +# 1956| r1956_3(char) = Load[global_template] : &:r1956_2, ~m? +# 1956| mu1956_4(char) = Store[local_char] : &:r1956_1, r1956_3 +# 1957| r1957_1(glval) = VariableAddress[#return] : +# 1957| r1957_2(glval) = VariableAddress[local_int] : +# 1957| r1957_3(int) = Load[local_int] : &:r1957_2, ~m? +# 1957| r1957_4(glval) = VariableAddress[local_char] : +# 1957| r1957_5(char) = Load[local_char] : &:r1957_4, ~m? +# 1957| r1957_6(int) = Convert : r1957_5 +# 1957| r1957_7(int) = Add : r1957_3, r1957_6 +# 1957| mu1957_8(int) = Store[#return] : &:r1957_1, r1957_7 +# 1954| r1954_4(glval) = VariableAddress[#return] : +# 1954| v1954_5(void) = ReturnValue : &:r1954_4, ~m? +# 1954| v1954_6(void) = AliasedUse : ~m? +# 1954| v1954_7(void) = ExitFunction : + +# 1962| int noreturnTest(int) +# 1962| Block 0 +# 1962| v1962_1(void) = EnterFunction : +# 1962| mu1962_2(unknown) = AliasedDefinition : +# 1962| mu1962_3(unknown) = InitializeNonLocal : +# 1962| r1962_4(glval) = VariableAddress[x] : +# 1962| mu1962_5(int) = InitializeParameter[x] : &:r1962_4 +# 1963| r1963_1(glval) = VariableAddress[x] : +# 1963| r1963_2(int) = Load[x] : &:r1963_1, ~m? +# 1963| r1963_3(int) = Constant[10] : +# 1963| r1963_4(bool) = CompareLT : r1963_2, r1963_3 +# 1963| v1963_5(void) = ConditionalBranch : r1963_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 1948| Block 1 -# 1948| r1948_6(glval) = VariableAddress[#return] : -# 1948| v1948_7(void) = ReturnValue : &:r1948_6, ~m? -# 1948| v1948_8(void) = AliasedUse : ~m? -# 1948| v1948_9(void) = ExitFunction : +# 1962| Block 1 +# 1962| r1962_6(glval) = VariableAddress[#return] : +# 1962| v1962_7(void) = ReturnValue : &:r1962_6, ~m? +# 1962| v1962_8(void) = AliasedUse : ~m? +# 1962| v1962_9(void) = ExitFunction : -# 1950| Block 2 -# 1950| r1950_1(glval) = VariableAddress[#return] : -# 1950| r1950_2(glval) = VariableAddress[x] : -# 1950| r1950_3(int) = Load[x] : &:r1950_2, ~m? -# 1950| mu1950_4(int) = Store[#return] : &:r1950_1, r1950_3 -#-----| Goto -> Block 1 - -# 1952| Block 3 -# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : -# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 -# 1952| mu1952_3(unknown) = ^CallSideEffect : ~m? -# 1948| v1948_10(void) = Unreached : - -# 1954| Block 4 -# 1954| r1954_1(glval) = VariableAddress[#return] : -# 1954| mu1954_2(int) = Uninitialized[#return] : &:r1954_1 -#-----| Goto -> Block 1 - -# 1956| int noreturnTest2(int) -# 1956| Block 0 -# 1956| v1956_1(void) = EnterFunction : -# 1956| mu1956_2(unknown) = AliasedDefinition : -# 1956| mu1956_3(unknown) = InitializeNonLocal : -# 1956| r1956_4(glval) = VariableAddress[x] : -# 1956| mu1956_5(int) = InitializeParameter[x] : &:r1956_4 -# 1957| r1957_1(glval) = VariableAddress[x] : -# 1957| r1957_2(int) = Load[x] : &:r1957_1, ~m? -# 1957| r1957_3(int) = Constant[10] : -# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 -# 1957| v1957_5(void) = ConditionalBranch : r1957_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 1958| Block 1 -# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : -# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 -# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? -# 1956| v1956_6(void) = Unreached : - -# 1960| Block 2 -# 1960| r1960_1(glval) = VariableAddress[#return] : -# 1960| r1960_2(glval) = VariableAddress[x] : -# 1960| r1960_3(int) = Load[x] : &:r1960_2, ~m? -# 1960| mu1960_4(int) = Store[#return] : &:r1960_1, r1960_3 -# 1956| r1956_7(glval) = VariableAddress[#return] : -# 1956| v1956_8(void) = ReturnValue : &:r1956_7, ~m? -# 1956| v1956_9(void) = AliasedUse : ~m? -# 1956| v1956_10(void) = ExitFunction : - -# 1963| int static_function(int) -# 1963| Block 0 -# 1963| v1963_1(void) = EnterFunction : -# 1963| mu1963_2(unknown) = AliasedDefinition : -# 1963| mu1963_3(unknown) = InitializeNonLocal : -# 1963| r1963_4(glval) = VariableAddress[x] : -# 1963| mu1963_5(int) = InitializeParameter[x] : &:r1963_4 +# 1964| Block 2 # 1964| r1964_1(glval) = VariableAddress[#return] : # 1964| r1964_2(glval) = VariableAddress[x] : # 1964| r1964_3(int) = Load[x] : &:r1964_2, ~m? # 1964| mu1964_4(int) = Store[#return] : &:r1964_1, r1964_3 -# 1963| r1963_6(glval) = VariableAddress[#return] : -# 1963| v1963_7(void) = ReturnValue : &:r1963_6, ~m? -# 1963| v1963_8(void) = AliasedUse : ~m? -# 1963| v1963_9(void) = ExitFunction : +#-----| Goto -> Block 1 -# 1967| void test_static_functions_with_assignments() -# 1967| Block 0 -# 1967| v1967_1(void) = EnterFunction : -# 1967| mu1967_2(unknown) = AliasedDefinition : -# 1967| mu1967_3(unknown) = InitializeNonLocal : -# 1968| r1968_1(glval) = VariableAddress[c] : -# 1968| mu1968_2(C) = Uninitialized[c] : &:r1968_1 -# 1968| r1968_3(glval) = FunctionAddress[C] : -# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 -# 1968| mu1968_5(unknown) = ^CallSideEffect : ~m? -# 1968| mu1968_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[c] : -# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1970| r1970_3(int) = Constant[10] : -# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 -# 1970| mu1970_5(unknown) = ^CallSideEffect : ~m? -# 1970| r1970_6(glval) = VariableAddress[x] : -# 1970| mu1970_7(int) = Store[x] : &:r1970_6, r1970_4 -# 1971| r1971_1(glval) = VariableAddress[y] : -# 1971| mu1971_2(int) = Uninitialized[y] : &:r1971_1 -# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1972| r1972_2(int) = Constant[10] : -# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 -# 1972| mu1972_4(unknown) = ^CallSideEffect : ~m? -# 1972| r1972_5(glval) = VariableAddress[y] : -# 1972| mu1972_6(int) = Store[y] : &:r1972_5, r1972_3 -# 1973| r1973_1(glval) = VariableAddress[z] : -# 1973| mu1973_2(int) = Uninitialized[z] : &:r1973_1 -# 1974| r1974_1(glval) = FunctionAddress[static_function] : -# 1974| r1974_2(int) = Constant[10] : -# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 -# 1974| mu1974_4(unknown) = ^CallSideEffect : ~m? -# 1974| r1974_5(glval) = VariableAddress[z] : -# 1974| mu1974_6(int) = Store[z] : &:r1974_5, r1974_3 -# 1975| v1975_1(void) = NoOp : -# 1975| r1975_2(glval) = VariableAddress[c] : -# 1975| r1975_3(glval) = FunctionAddress[~C] : -# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 -# 1975| mu1975_5(unknown) = ^CallSideEffect : ~m? -# 1975| v1975_6(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, ~m? -# 1975| mu1975_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 -# 1967| v1967_4(void) = ReturnVoid : -# 1967| v1967_5(void) = AliasedUse : ~m? -# 1967| v1967_6(void) = ExitFunction : +# 1966| Block 3 +# 1966| r1966_1(glval) = FunctionAddress[noreturnFunc] : +# 1966| v1966_2(void) = Call[noreturnFunc] : func:r1966_1 +# 1966| mu1966_3(unknown) = ^CallSideEffect : ~m? +# 1962| v1962_10(void) = Unreached : -# 1977| void test_double_assign() +# 1968| Block 4 +# 1968| r1968_1(glval) = VariableAddress[#return] : +# 1968| mu1968_2(int) = Uninitialized[#return] : &:r1968_1 +#-----| Goto -> Block 1 + +# 1970| int noreturnTest2(int) +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| mu1970_2(unknown) = AliasedDefinition : +# 1970| mu1970_3(unknown) = InitializeNonLocal : +# 1970| r1970_4(glval) = VariableAddress[x] : +# 1970| mu1970_5(int) = InitializeParameter[x] : &:r1970_4 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| r1971_2(int) = Load[x] : &:r1971_1, ~m? +# 1971| r1971_3(int) = Constant[10] : +# 1971| r1971_4(bool) = CompareLT : r1971_2, r1971_3 +# 1971| v1971_5(void) = ConditionalBranch : r1971_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 1972| Block 1 +# 1972| r1972_1(glval) = FunctionAddress[noreturnFunc] : +# 1972| v1972_2(void) = Call[noreturnFunc] : func:r1972_1 +# 1972| mu1972_3(unknown) = ^CallSideEffect : ~m? +# 1970| v1970_6(void) = Unreached : + +# 1974| Block 2 +# 1974| r1974_1(glval) = VariableAddress[#return] : +# 1974| r1974_2(glval) = VariableAddress[x] : +# 1974| r1974_3(int) = Load[x] : &:r1974_2, ~m? +# 1974| mu1974_4(int) = Store[#return] : &:r1974_1, r1974_3 +# 1970| r1970_7(glval) = VariableAddress[#return] : +# 1970| v1970_8(void) = ReturnValue : &:r1970_7, ~m? +# 1970| v1970_9(void) = AliasedUse : ~m? +# 1970| v1970_10(void) = ExitFunction : + +# 1977| int static_function(int) # 1977| Block 0 -# 1977| v1977_1(void) = EnterFunction : -# 1977| mu1977_2(unknown) = AliasedDefinition : -# 1977| mu1977_3(unknown) = InitializeNonLocal : -# 1978| r1978_1(glval) = VariableAddress[i] : -# 1978| mu1978_2(int) = Uninitialized[i] : &:r1978_1 -# 1978| r1978_3(glval) = VariableAddress[j] : -# 1978| mu1978_4(int) = Uninitialized[j] : &:r1978_3 -# 1979| r1979_1(int) = Constant[40] : -# 1979| r1979_2(glval) = VariableAddress[j] : -# 1979| mu1979_3(int) = Store[j] : &:r1979_2, r1979_1 -# 1979| r1979_4(int) = Load[j] : &:r1979_2, ~m? -# 1979| r1979_5(glval) = VariableAddress[i] : -# 1979| mu1979_6(int) = Store[i] : &:r1979_5, r1979_4 -# 1980| v1980_1(void) = NoOp : -# 1977| v1977_4(void) = ReturnVoid : -# 1977| v1977_5(void) = AliasedUse : ~m? -# 1977| v1977_6(void) = ExitFunction : +# 1977| v1977_1(void) = EnterFunction : +# 1977| mu1977_2(unknown) = AliasedDefinition : +# 1977| mu1977_3(unknown) = InitializeNonLocal : +# 1977| r1977_4(glval) = VariableAddress[x] : +# 1977| mu1977_5(int) = InitializeParameter[x] : &:r1977_4 +# 1978| r1978_1(glval) = VariableAddress[#return] : +# 1978| r1978_2(glval) = VariableAddress[x] : +# 1978| r1978_3(int) = Load[x] : &:r1978_2, ~m? +# 1978| mu1978_4(int) = Store[#return] : &:r1978_1, r1978_3 +# 1977| r1977_6(glval) = VariableAddress[#return] : +# 1977| v1977_7(void) = ReturnValue : &:r1977_6, ~m? +# 1977| v1977_8(void) = AliasedUse : ~m? +# 1977| v1977_9(void) = ExitFunction : -# 1982| void test_assign_with_assign_operation() -# 1982| Block 0 -# 1982| v1982_1(void) = EnterFunction : -# 1982| mu1982_2(unknown) = AliasedDefinition : -# 1982| mu1982_3(unknown) = InitializeNonLocal : -# 1983| r1983_1(glval) = VariableAddress[i] : -# 1983| mu1983_2(int) = Uninitialized[i] : &:r1983_1 -# 1983| r1983_3(glval) = VariableAddress[j] : -# 1983| r1983_4(int) = Constant[0] : -# 1983| mu1983_5(int) = Store[j] : &:r1983_3, r1983_4 -# 1984| r1984_1(int) = Constant[40] : -# 1984| r1984_2(glval) = VariableAddress[j] : -# 1984| r1984_3(int) = Load[j] : &:r1984_2, ~m? -# 1984| r1984_4(int) = Add : r1984_3, r1984_1 -# 1984| mu1984_5(int) = Store[j] : &:r1984_2, r1984_4 -# 1984| r1984_6(int) = Load[j] : &:r1984_2, ~m? -# 1984| r1984_7(glval) = VariableAddress[i] : -# 1984| mu1984_8(int) = Store[i] : &:r1984_7, r1984_6 -# 1985| v1985_1(void) = NoOp : -# 1982| v1982_4(void) = ReturnVoid : -# 1982| v1982_5(void) = AliasedUse : ~m? -# 1982| v1982_6(void) = ExitFunction : +# 1981| void test_static_functions_with_assignments() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| mu1981_2(unknown) = AliasedDefinition : +# 1981| mu1981_3(unknown) = InitializeNonLocal : +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| mu1982_2(C) = Uninitialized[c] : &:r1982_1 +# 1982| r1982_3(glval) = FunctionAddress[C] : +# 1982| v1982_4(void) = Call[C] : func:r1982_3, this:r1982_1 +# 1982| mu1982_5(unknown) = ^CallSideEffect : ~m? +# 1982| mu1982_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1982_1 +# 1983| r1983_1(glval) = VariableAddress[x] : +# 1983| mu1983_2(int) = Uninitialized[x] : &:r1983_1 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1984| r1984_3(int) = Constant[10] : +# 1984| r1984_4(int) = Call[StaticMemberFunction] : func:r1984_2, 0:r1984_3 +# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? +# 1984| r1984_6(glval) = VariableAddress[x] : +# 1984| mu1984_7(int) = Store[x] : &:r1984_6, r1984_4 +# 1985| r1985_1(glval) = VariableAddress[y] : +# 1985| mu1985_2(int) = Uninitialized[y] : &:r1985_1 +# 1986| r1986_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1986| r1986_2(int) = Constant[10] : +# 1986| r1986_3(int) = Call[StaticMemberFunction] : func:r1986_1, 0:r1986_2 +# 1986| mu1986_4(unknown) = ^CallSideEffect : ~m? +# 1986| r1986_5(glval) = VariableAddress[y] : +# 1986| mu1986_6(int) = Store[y] : &:r1986_5, r1986_3 +# 1987| r1987_1(glval) = VariableAddress[z] : +# 1987| mu1987_2(int) = Uninitialized[z] : &:r1987_1 +# 1988| r1988_1(glval) = FunctionAddress[static_function] : +# 1988| r1988_2(int) = Constant[10] : +# 1988| r1988_3(int) = Call[static_function] : func:r1988_1, 0:r1988_2 +# 1988| mu1988_4(unknown) = ^CallSideEffect : ~m? +# 1988| r1988_5(glval) = VariableAddress[z] : +# 1988| mu1988_6(int) = Store[z] : &:r1988_5, r1988_3 +# 1989| v1989_1(void) = NoOp : +# 1989| r1989_2(glval) = VariableAddress[c] : +# 1989| r1989_3(glval) = FunctionAddress[~C] : +# 1989| v1989_4(void) = Call[~C] : func:r1989_3, this:r1989_2 +# 1989| mu1989_5(unknown) = ^CallSideEffect : ~m? +# 1989| v1989_6(void) = ^IndirectReadSideEffect[-1] : &:r1989_2, ~m? +# 1989| mu1989_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1989_2 +# 1981| v1981_4(void) = ReturnVoid : +# 1981| v1981_5(void) = AliasedUse : ~m? +# 1981| v1981_6(void) = ExitFunction : -# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| void test_double_assign() # 1991| Block 0 -# 1991| v1991_1(void) = EnterFunction : -# 1991| mu1991_2(unknown) = AliasedDefinition : -# 1991| mu1991_3(unknown) = InitializeNonLocal : -# 1992| r1992_1(glval) = VariableAddress[#return] : -# 1992| r1992_2(glval) = VariableAddress[x] : -# 1992| r1992_3(D &) = CopyValue : r1992_2 -# 1992| mu1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 -# 1991| r1991_4(glval) = VariableAddress[#return] : -# 1991| v1991_5(void) = ReturnValue : &:r1991_4, ~m? -# 1991| v1991_6(void) = AliasedUse : ~m? -# 1991| v1991_7(void) = ExitFunction : +# 1991| v1991_1(void) = EnterFunction : +# 1991| mu1991_2(unknown) = AliasedDefinition : +# 1991| mu1991_3(unknown) = InitializeNonLocal : +# 1992| r1992_1(glval) = VariableAddress[i] : +# 1992| mu1992_2(int) = Uninitialized[i] : &:r1992_1 +# 1992| r1992_3(glval) = VariableAddress[j] : +# 1992| mu1992_4(int) = Uninitialized[j] : &:r1992_3 +# 1993| r1993_1(int) = Constant[40] : +# 1993| r1993_2(glval) = VariableAddress[j] : +# 1993| mu1993_3(int) = Store[j] : &:r1993_2, r1993_1 +# 1993| r1993_4(int) = Load[j] : &:r1993_2, ~m? +# 1993| r1993_5(glval) = VariableAddress[i] : +# 1993| mu1993_6(int) = Store[i] : &:r1993_5, r1993_4 +# 1994| v1994_1(void) = NoOp : +# 1991| v1991_4(void) = ReturnVoid : +# 1991| v1991_5(void) = AliasedUse : ~m? +# 1991| v1991_6(void) = ExitFunction : -# 1994| D D::ObjectStaticMemberFunction() -# 1994| Block 0 -# 1994| v1994_1(void) = EnterFunction : -# 1994| mu1994_2(unknown) = AliasedDefinition : -# 1994| mu1994_3(unknown) = InitializeNonLocal : -# 1995| r1995_1(glval) = VariableAddress[#return] : -# 1995| r1995_2(glval) = VariableAddress[x] : -# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m? -# 1995| mu1995_4(D) = Store[#return] : &:r1995_1, r1995_3 -# 1994| r1994_4(glval) = VariableAddress[#return] : -# 1994| v1994_5(void) = ReturnValue : &:r1994_4, ~m? -# 1994| v1994_6(void) = AliasedUse : ~m? -# 1994| v1994_7(void) = ExitFunction : +# 1996| void test_assign_with_assign_operation() +# 1996| Block 0 +# 1996| v1996_1(void) = EnterFunction : +# 1996| mu1996_2(unknown) = AliasedDefinition : +# 1996| mu1996_3(unknown) = InitializeNonLocal : +# 1997| r1997_1(glval) = VariableAddress[i] : +# 1997| mu1997_2(int) = Uninitialized[i] : &:r1997_1 +# 1997| r1997_3(glval) = VariableAddress[j] : +# 1997| r1997_4(int) = Constant[0] : +# 1997| mu1997_5(int) = Store[j] : &:r1997_3, r1997_4 +# 1998| r1998_1(int) = Constant[40] : +# 1998| r1998_2(glval) = VariableAddress[j] : +# 1998| r1998_3(int) = Load[j] : &:r1998_2, ~m? +# 1998| r1998_4(int) = Add : r1998_3, r1998_1 +# 1998| mu1998_5(int) = Store[j] : &:r1998_2, r1998_4 +# 1998| r1998_6(int) = Load[j] : &:r1998_2, ~m? +# 1998| r1998_7(glval) = VariableAddress[i] : +# 1998| mu1998_8(int) = Store[i] : &:r1998_7, r1998_6 +# 1999| v1999_1(void) = NoOp : +# 1996| v1996_4(void) = ReturnVoid : +# 1996| v1996_5(void) = AliasedUse : ~m? +# 1996| v1996_6(void) = ExitFunction : -# 1999| void test_static_member_functions_with_reference_return() -# 1999| Block 0 -# 1999| v1999_1(void) = EnterFunction : -# 1999| mu1999_2(unknown) = AliasedDefinition : -# 1999| mu1999_3(unknown) = InitializeNonLocal : -# 2000| r2000_1(glval) = VariableAddress[d] : -# 2000| mu2000_2(D) = Uninitialized[d] : &:r2000_1 -# 2002| r2002_1(glval) = VariableAddress[d] : -# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 -# 2002| mu2002_4(unknown) = ^CallSideEffect : ~m? -# 2002| r2002_5(glval) = CopyValue : r2002_3 -# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 -# 2003| mu2003_3(unknown) = ^CallSideEffect : ~m? -# 2003| r2003_4(glval) = CopyValue : r2003_2 -# 2004| r2004_1(glval) = VariableAddress[d] : -# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 -# 2004| mu2004_4(unknown) = ^CallSideEffect : ~m? -# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 -# 2005| mu2005_3(unknown) = ^CallSideEffect : ~m? -# 2007| r2007_1(glval) = VariableAddress[x] : -# 2007| mu2007_2(D) = Uninitialized[x] : &:r2007_1 -# 2008| r2008_1(glval) = VariableAddress[d] : -# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 -# 2008| mu2008_4(unknown) = ^CallSideEffect : ~m? -# 2008| r2008_5(D) = Load[?] : &:r2008_3, ~m? -# 2008| r2008_6(glval) = VariableAddress[x] : -# 2008| mu2008_7(D) = Store[x] : &:r2008_6, r2008_5 -# 2009| r2009_1(glval) = VariableAddress[y] : -# 2009| mu2009_2(D) = Uninitialized[y] : &:r2009_1 -# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 -# 2010| mu2010_3(unknown) = ^CallSideEffect : ~m? -# 2010| r2010_4(D) = Load[?] : &:r2010_2, ~m? -# 2010| r2010_5(glval) = VariableAddress[y] : -# 2010| mu2010_6(D) = Store[y] : &:r2010_5, r2010_4 -# 2011| r2011_1(glval) = VariableAddress[j] : -# 2011| mu2011_2(D) = Uninitialized[j] : &:r2011_1 -# 2012| r2012_1(glval) = VariableAddress[d] : -# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 -# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? -# 2012| r2012_5(glval) = VariableAddress[j] : -# 2012| mu2012_6(D) = Store[j] : &:r2012_5, r2012_3 -# 2013| r2013_1(glval) = VariableAddress[k] : -# 2013| mu2013_2(D) = Uninitialized[k] : &:r2013_1 -# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 -# 2014| mu2014_3(unknown) = ^CallSideEffect : ~m? -# 2014| r2014_4(glval) = VariableAddress[k] : -# 2014| mu2014_5(D) = Store[k] : &:r2014_4, r2014_2 -# 2015| v2015_1(void) = NoOp : -# 1999| v1999_4(void) = ReturnVoid : -# 1999| v1999_5(void) = AliasedUse : ~m? -# 1999| v1999_6(void) = ExitFunction : +# 2005| D& D::ReferenceStaticMemberFunction() +# 2005| Block 0 +# 2005| v2005_1(void) = EnterFunction : +# 2005| mu2005_2(unknown) = AliasedDefinition : +# 2005| mu2005_3(unknown) = InitializeNonLocal : +# 2006| r2006_1(glval) = VariableAddress[#return] : +# 2006| r2006_2(glval) = VariableAddress[x] : +# 2006| r2006_3(D &) = CopyValue : r2006_2 +# 2006| mu2006_4(D &) = Store[#return] : &:r2006_1, r2006_3 +# 2005| r2005_4(glval) = VariableAddress[#return] : +# 2005| v2005_5(void) = ReturnValue : &:r2005_4, ~m? +# 2005| v2005_6(void) = AliasedUse : ~m? +# 2005| v2005_7(void) = ExitFunction : -# 2017| void test_volatile() -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| mu2017_2(unknown) = AliasedDefinition : -# 2017| mu2017_3(unknown) = InitializeNonLocal : -# 2018| r2018_1(glval) = VariableAddress[x] : -# 2018| mu2018_2(int) = Uninitialized[x] : &:r2018_1 -# 2019| r2019_1(glval) = VariableAddress[x] : -# 2019| r2019_2(int) = Load[x] : &:r2019_1, ~m? -# 2020| v2020_1(void) = NoOp : -# 2017| v2017_4(void) = ReturnVoid : -# 2017| v2017_5(void) = AliasedUse : ~m? -# 2017| v2017_6(void) = ExitFunction : +# 2008| D D::ObjectStaticMemberFunction() +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| mu2008_2(unknown) = AliasedDefinition : +# 2008| mu2008_3(unknown) = InitializeNonLocal : +# 2009| r2009_1(glval) = VariableAddress[#return] : +# 2009| r2009_2(glval) = VariableAddress[x] : +# 2009| r2009_3(D) = Load[x] : &:r2009_2, ~m? +# 2009| mu2009_4(D) = Store[#return] : &:r2009_1, r2009_3 +# 2008| r2008_4(glval) = VariableAddress[#return] : +# 2008| v2008_5(void) = ReturnValue : &:r2008_4, ~m? +# 2008| v2008_6(void) = AliasedUse : ~m? +# 2008| v2008_7(void) = ExitFunction : -# 2028| void value_category_test() -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| mu2028_2(unknown) = AliasedDefinition : -# 2028| mu2028_3(unknown) = InitializeNonLocal : -# 2029| r2029_1(glval) = VariableAddress[c] : -# 2029| mu2029_2(ValCat) = Uninitialized[c] : &:r2029_1 +# 2013| void test_static_member_functions_with_reference_return() +# 2013| Block 0 +# 2013| v2013_1(void) = EnterFunction : +# 2013| mu2013_2(unknown) = AliasedDefinition : +# 2013| mu2013_3(unknown) = InitializeNonLocal : +# 2014| r2014_1(glval) = VariableAddress[d] : +# 2014| mu2014_2(D) = Uninitialized[d] : &:r2014_1 +# 2016| r2016_1(glval) = VariableAddress[d] : +# 2016| r2016_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2016| r2016_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2016_2 +# 2016| mu2016_4(unknown) = ^CallSideEffect : ~m? +# 2016| r2016_5(glval) = CopyValue : r2016_3 +# 2017| r2017_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2017| r2017_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2017_1 +# 2017| mu2017_3(unknown) = ^CallSideEffect : ~m? +# 2017| r2017_4(glval) = CopyValue : r2017_2 +# 2018| r2018_1(glval) = VariableAddress[d] : +# 2018| r2018_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2018| r2018_3(D) = Call[ObjectStaticMemberFunction] : func:r2018_2 +# 2018| mu2018_4(unknown) = ^CallSideEffect : ~m? +# 2019| r2019_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2019| r2019_2(D) = Call[ObjectStaticMemberFunction] : func:r2019_1 +# 2019| mu2019_3(unknown) = ^CallSideEffect : ~m? +# 2021| r2021_1(glval) = VariableAddress[x] : +# 2021| mu2021_2(D) = Uninitialized[x] : &:r2021_1 +# 2022| r2022_1(glval) = VariableAddress[d] : +# 2022| r2022_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2022| r2022_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2022_2 +# 2022| mu2022_4(unknown) = ^CallSideEffect : ~m? +# 2022| r2022_5(D) = Load[?] : &:r2022_3, ~m? +# 2022| r2022_6(glval) = VariableAddress[x] : +# 2022| mu2022_7(D) = Store[x] : &:r2022_6, r2022_5 +# 2023| r2023_1(glval) = VariableAddress[y] : +# 2023| mu2023_2(D) = Uninitialized[y] : &:r2023_1 +# 2024| r2024_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2024| r2024_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2024_1 +# 2024| mu2024_3(unknown) = ^CallSideEffect : ~m? +# 2024| r2024_4(D) = Load[?] : &:r2024_2, ~m? +# 2024| r2024_5(glval) = VariableAddress[y] : +# 2024| mu2024_6(D) = Store[y] : &:r2024_5, r2024_4 +# 2025| r2025_1(glval) = VariableAddress[j] : +# 2025| mu2025_2(D) = Uninitialized[j] : &:r2025_1 +# 2026| r2026_1(glval) = VariableAddress[d] : +# 2026| r2026_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2026| r2026_3(D) = Call[ObjectStaticMemberFunction] : func:r2026_2 +# 2026| mu2026_4(unknown) = ^CallSideEffect : ~m? +# 2026| r2026_5(glval) = VariableAddress[j] : +# 2026| mu2026_6(D) = Store[j] : &:r2026_5, r2026_3 +# 2027| r2027_1(glval) = VariableAddress[k] : +# 2027| mu2027_2(D) = Uninitialized[k] : &:r2027_1 +# 2028| r2028_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2028| r2028_2(D) = Call[ObjectStaticMemberFunction] : func:r2028_1 +# 2028| mu2028_3(unknown) = ^CallSideEffect : ~m? +# 2028| r2028_4(glval) = VariableAddress[k] : +# 2028| mu2028_5(D) = Store[k] : &:r2028_4, r2028_2 +# 2029| v2029_1(void) = NoOp : +# 2013| v2013_4(void) = ReturnVoid : +# 2013| v2013_5(void) = AliasedUse : ~m? +# 2013| v2013_6(void) = ExitFunction : + +# 2031| void test_volatile() +# 2031| Block 0 +# 2031| v2031_1(void) = EnterFunction : +# 2031| mu2031_2(unknown) = AliasedDefinition : +# 2031| mu2031_3(unknown) = InitializeNonLocal : +# 2032| r2032_1(glval) = VariableAddress[x] : +# 2032| mu2032_2(int) = Uninitialized[x] : &:r2032_1 +# 2033| r2033_1(glval) = VariableAddress[x] : +# 2033| r2033_2(int) = Load[x] : &:r2033_1, ~m? +# 2034| v2034_1(void) = NoOp : +# 2031| v2031_4(void) = ReturnVoid : +# 2031| v2031_5(void) = AliasedUse : ~m? +# 2031| v2031_6(void) = ExitFunction : + +# 2042| void value_category_test() +# 2042| Block 0 +# 2042| v2042_1(void) = EnterFunction : +# 2042| mu2042_2(unknown) = AliasedDefinition : +# 2042| mu2042_3(unknown) = InitializeNonLocal : +# 2043| r2043_1(glval) = VariableAddress[c] : +# 2043| mu2043_2(ValCat) = Uninitialized[c] : &:r2043_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 2031| r2031_1(glval) = VariableAddress[c] : -# 2031| r2031_2(glval) = FunctionAddress[lvalue] : -# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 -# 2031| mu2031_4(unknown) = ^CallSideEffect : ~m? -# 2031| r2031_5(glval) = CopyValue : r2031_3 -# 2031| mu2031_6(ValCat) = Store[?] : &:r2031_5, r0_3 +# 2045| r2045_1(glval) = VariableAddress[c] : +# 2045| r2045_2(glval) = FunctionAddress[lvalue] : +# 2045| r2045_3(ValCat &) = Call[lvalue] : func:r2045_2 +# 2045| mu2045_4(unknown) = ^CallSideEffect : ~m? +# 2045| r2045_5(glval) = CopyValue : r2045_3 +# 2045| mu2045_6(ValCat) = Store[?] : &:r2045_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 2032| r2032_1(glval) = VariableAddress[c] : -# 2032| r2032_2(glval) = FunctionAddress[xvalue] : -# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 -# 2032| mu2032_4(unknown) = ^CallSideEffect : ~m? -# 2032| r2032_5(glval) = CopyValue : r2032_3 -# 2032| mu2032_6(ValCat) = Store[?] : &:r2032_5, r0_6 +# 2046| r2046_1(glval) = VariableAddress[c] : +# 2046| r2046_2(glval) = FunctionAddress[xvalue] : +# 2046| r2046_3(ValCat &&) = Call[xvalue] : func:r2046_2 +# 2046| mu2046_4(unknown) = ^CallSideEffect : ~m? +# 2046| r2046_5(glval) = CopyValue : r2046_3 +# 2046| mu2046_6(ValCat) = Store[?] : &:r2046_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : -# 2033| r2033_2(glval) = VariableAddress[c] : -# 2033| r2033_3(glval) = FunctionAddress[prvalue] : -# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 -# 2033| mu2033_5(unknown) = ^CallSideEffect : ~m? -# 2033| mu2033_6(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 -# 2033| mu2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 +# 2047| r2047_1(glval) = VariableAddress[#temp2047:5] : +# 2047| r2047_2(glval) = VariableAddress[c] : +# 2047| r2047_3(glval) = FunctionAddress[prvalue] : +# 2047| r2047_4(ValCat) = Call[prvalue] : func:r2047_3 +# 2047| mu2047_5(unknown) = ^CallSideEffect : ~m? +# 2047| mu2047_6(ValCat) = Store[#temp2047:5] : &:r2047_1, r2047_4 +# 2047| mu2047_7(ValCat) = Store[#temp2047:5] : &:r2047_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 2034| r2034_1(glval) = FunctionAddress[lvalue] : -# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 -# 2034| mu2034_3(unknown) = ^CallSideEffect : ~m? -# 2034| r2034_4(glval) = CopyValue : r2034_2 -# 2034| mu2034_5(ValCat) = Store[?] : &:r2034_4, r0_12 +# 2048| r2048_1(glval) = FunctionAddress[lvalue] : +# 2048| r2048_2(ValCat &) = Call[lvalue] : func:r2048_1 +# 2048| mu2048_3(unknown) = ^CallSideEffect : ~m? +# 2048| r2048_4(glval) = CopyValue : r2048_2 +# 2048| mu2048_5(ValCat) = Store[?] : &:r2048_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 2035| r2035_1(glval) = FunctionAddress[xvalue] : -# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 -# 2035| mu2035_3(unknown) = ^CallSideEffect : ~m? -# 2035| r2035_4(glval) = CopyValue : r2035_2 -# 2035| mu2035_5(ValCat) = Store[?] : &:r2035_4, r0_15 +# 2049| r2049_1(glval) = FunctionAddress[xvalue] : +# 2049| r2049_2(ValCat &&) = Call[xvalue] : func:r2049_1 +# 2049| mu2049_3(unknown) = ^CallSideEffect : ~m? +# 2049| r2049_4(glval) = CopyValue : r2049_2 +# 2049| mu2049_5(ValCat) = Store[?] : &:r2049_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : -# 2036| r2036_2(glval) = FunctionAddress[prvalue] : -# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 -# 2036| mu2036_4(unknown) = ^CallSideEffect : ~m? -# 2036| mu2036_5(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 -# 2036| mu2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 -# 2037| v2037_1(void) = NoOp : -# 2028| v2028_4(void) = ReturnVoid : -# 2028| v2028_5(void) = AliasedUse : ~m? -# 2028| v2028_6(void) = ExitFunction : +# 2050| r2050_1(glval) = VariableAddress[#temp2050:5] : +# 2050| r2050_2(glval) = FunctionAddress[prvalue] : +# 2050| r2050_3(ValCat) = Call[prvalue] : func:r2050_2 +# 2050| mu2050_4(unknown) = ^CallSideEffect : ~m? +# 2050| mu2050_5(ValCat) = Store[#temp2050:5] : &:r2050_1, r2050_3 +# 2050| mu2050_6(ValCat) = Store[#temp2050:5] : &:r2050_1, r0_18 +# 2051| v2051_1(void) = NoOp : +# 2042| v2042_4(void) = ReturnVoid : +# 2042| v2042_5(void) = AliasedUse : ~m? +# 2042| v2042_6(void) = ExitFunction : -# 2039| void SetStaticFuncPtr() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| mu2039_2(unknown) = AliasedDefinition : -# 2039| mu2039_3(unknown) = InitializeNonLocal : -# 2040| r2040_1(glval) = VariableAddress[c] : -# 2040| mu2040_2(C) = Uninitialized[c] : &:r2040_1 -# 2040| r2040_3(glval) = FunctionAddress[C] : -# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 -# 2040| mu2040_5(unknown) = ^CallSideEffect : ~m? -# 2040| mu2040_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 -# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2041| mu2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 -# 2042| r2042_1(glval) = VariableAddress[c] : -# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 2042| mu2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 -# 2043| v2043_1(void) = NoOp : -# 2043| r2043_2(glval) = VariableAddress[c] : -# 2043| r2043_3(glval) = FunctionAddress[~C] : -# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 -# 2043| mu2043_5(unknown) = ^CallSideEffect : ~m? -# 2043| v2043_6(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, ~m? -# 2043| mu2043_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 -# 2039| v2039_4(void) = ReturnVoid : -# 2039| v2039_5(void) = AliasedUse : ~m? -# 2039| v2039_6(void) = ExitFunction : +# 2053| void SetStaticFuncPtr() +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| mu2053_2(unknown) = AliasedDefinition : +# 2053| mu2053_3(unknown) = InitializeNonLocal : +# 2054| r2054_1(glval) = VariableAddress[c] : +# 2054| mu2054_2(C) = Uninitialized[c] : &:r2054_1 +# 2054| r2054_3(glval) = FunctionAddress[C] : +# 2054| v2054_4(void) = Call[C] : func:r2054_3, this:r2054_1 +# 2054| mu2054_5(unknown) = ^CallSideEffect : ~m? +# 2054| mu2054_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2054_1 +# 2055| r2055_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2055| r2055_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2055| mu2055_3(..(*)(..)) = Store[pfn] : &:r2055_1, r2055_2 +# 2056| r2056_1(glval) = VariableAddress[c] : +# 2056| r2056_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2056| r2056_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2056| mu2056_4(..(*)(..)) = Store[pfn] : &:r2056_3, r2056_2 +# 2057| v2057_1(void) = NoOp : +# 2057| r2057_2(glval) = VariableAddress[c] : +# 2057| r2057_3(glval) = FunctionAddress[~C] : +# 2057| v2057_4(void) = Call[~C] : func:r2057_3, this:r2057_2 +# 2057| mu2057_5(unknown) = ^CallSideEffect : ~m? +# 2057| v2057_6(void) = ^IndirectReadSideEffect[-1] : &:r2057_2, ~m? +# 2057| mu2057_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2057_2 +# 2053| v2053_4(void) = ReturnVoid : +# 2053| v2053_5(void) = AliasedUse : ~m? +# 2053| v2053_6(void) = ExitFunction : -# 2045| void TernaryTestInt(bool, int, int, int) -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| mu2045_2(unknown) = AliasedDefinition : -# 2045| mu2045_3(unknown) = InitializeNonLocal : -# 2045| r2045_4(glval) = VariableAddress[a] : -# 2045| mu2045_5(bool) = InitializeParameter[a] : &:r2045_4 -# 2045| r2045_6(glval) = VariableAddress[x] : -# 2045| mu2045_7(int) = InitializeParameter[x] : &:r2045_6 -# 2045| r2045_8(glval) = VariableAddress[y] : -# 2045| mu2045_9(int) = InitializeParameter[y] : &:r2045_8 -# 2045| r2045_10(glval) = VariableAddress[z] : -# 2045| mu2045_11(int) = InitializeParameter[z] : &:r2045_10 -# 2046| r2046_1(glval) = VariableAddress[a] : -# 2046| r2046_2(bool) = Load[a] : &:r2046_1, ~m? -# 2046| v2046_3(void) = ConditionalBranch : r2046_2 +# 2059| void TernaryTestInt(bool, int, int, int) +# 2059| Block 0 +# 2059| v2059_1(void) = EnterFunction : +# 2059| mu2059_2(unknown) = AliasedDefinition : +# 2059| mu2059_3(unknown) = InitializeNonLocal : +# 2059| r2059_4(glval) = VariableAddress[a] : +# 2059| mu2059_5(bool) = InitializeParameter[a] : &:r2059_4 +# 2059| r2059_6(glval) = VariableAddress[x] : +# 2059| mu2059_7(int) = InitializeParameter[x] : &:r2059_6 +# 2059| r2059_8(glval) = VariableAddress[y] : +# 2059| mu2059_9(int) = InitializeParameter[y] : &:r2059_8 +# 2059| r2059_10(glval) = VariableAddress[z] : +# 2059| mu2059_11(int) = InitializeParameter[z] : &:r2059_10 +# 2060| r2060_1(glval) = VariableAddress[a] : +# 2060| r2060_2(bool) = Load[a] : &:r2060_1, ~m? +# 2060| v2060_3(void) = ConditionalBranch : r2060_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2046| Block 1 -# 2046| r2046_4(glval) = VariableAddress[#temp2046:9] : -# 2046| r2046_5(int) = Load[#temp2046:9] : &:r2046_4, ~m? -# 2046| r2046_6(glval) = VariableAddress[z] : -# 2046| mu2046_7(int) = Store[z] : &:r2046_6, r2046_5 -# 2047| r2047_1(glval) = VariableAddress[a] : -# 2047| r2047_2(bool) = Load[a] : &:r2047_1, ~m? -# 2047| v2047_3(void) = ConditionalBranch : r2047_2 +# 2060| Block 1 +# 2060| r2060_4(glval) = VariableAddress[#temp2060:9] : +# 2060| r2060_5(int) = Load[#temp2060:9] : &:r2060_4, ~m? +# 2060| r2060_6(glval) = VariableAddress[z] : +# 2060| mu2060_7(int) = Store[z] : &:r2060_6, r2060_5 +# 2061| r2061_1(glval) = VariableAddress[a] : +# 2061| r2061_2(bool) = Load[a] : &:r2061_1, ~m? +# 2061| v2061_3(void) = ConditionalBranch : r2061_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2046| Block 2 -# 2046| r2046_8(glval) = VariableAddress[x] : -# 2046| r2046_9(int) = Load[x] : &:r2046_8, ~m? -# 2046| r2046_10(glval) = VariableAddress[#temp2046:9] : -# 2046| mu2046_11(int) = Store[#temp2046:9] : &:r2046_10, r2046_9 +# 2060| Block 2 +# 2060| r2060_8(glval) = VariableAddress[x] : +# 2060| r2060_9(int) = Load[x] : &:r2060_8, ~m? +# 2060| r2060_10(glval) = VariableAddress[#temp2060:9] : +# 2060| mu2060_11(int) = Store[#temp2060:9] : &:r2060_10, r2060_9 #-----| Goto -> Block 1 -# 2046| Block 3 -# 2046| r2046_12(glval) = VariableAddress[y] : -# 2046| r2046_13(int) = Load[y] : &:r2046_12, ~m? -# 2046| r2046_14(glval) = VariableAddress[#temp2046:9] : -# 2046| mu2046_15(int) = Store[#temp2046:9] : &:r2046_14, r2046_13 +# 2060| Block 3 +# 2060| r2060_12(glval) = VariableAddress[y] : +# 2060| r2060_13(int) = Load[y] : &:r2060_12, ~m? +# 2060| r2060_14(glval) = VariableAddress[#temp2060:9] : +# 2060| mu2060_15(int) = Store[#temp2060:9] : &:r2060_14, r2060_13 #-----| Goto -> Block 1 -# 2047| Block 4 -# 2047| r2047_4(glval) = VariableAddress[#temp2047:9] : -# 2047| r2047_5(int) = Load[#temp2047:9] : &:r2047_4, ~m? -# 2047| r2047_6(glval) = VariableAddress[z] : -# 2047| mu2047_7(int) = Store[z] : &:r2047_6, r2047_5 -# 2048| r2048_1(glval) = VariableAddress[a] : -# 2048| r2048_2(bool) = Load[a] : &:r2048_1, ~m? -# 2048| v2048_3(void) = ConditionalBranch : r2048_2 +# 2061| Block 4 +# 2061| r2061_4(glval) = VariableAddress[#temp2061:9] : +# 2061| r2061_5(int) = Load[#temp2061:9] : &:r2061_4, ~m? +# 2061| r2061_6(glval) = VariableAddress[z] : +# 2061| mu2061_7(int) = Store[z] : &:r2061_6, r2061_5 +# 2062| r2062_1(glval) = VariableAddress[a] : +# 2062| r2062_2(bool) = Load[a] : &:r2062_1, ~m? +# 2062| v2062_3(void) = ConditionalBranch : r2062_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2047| Block 5 -# 2047| r2047_8(glval) = VariableAddress[x] : -# 2047| r2047_9(int) = Load[x] : &:r2047_8, ~m? -# 2047| r2047_10(glval) = VariableAddress[#temp2047:9] : -# 2047| mu2047_11(int) = Store[#temp2047:9] : &:r2047_10, r2047_9 +# 2061| Block 5 +# 2061| r2061_8(glval) = VariableAddress[x] : +# 2061| r2061_9(int) = Load[x] : &:r2061_8, ~m? +# 2061| r2061_10(glval) = VariableAddress[#temp2061:9] : +# 2061| mu2061_11(int) = Store[#temp2061:9] : &:r2061_10, r2061_9 #-----| Goto -> Block 4 -# 2047| Block 6 -# 2047| r2047_12(int) = Constant[5] : -# 2047| r2047_13(glval) = VariableAddress[#temp2047:9] : -# 2047| mu2047_14(int) = Store[#temp2047:9] : &:r2047_13, r2047_12 +# 2061| Block 6 +# 2061| r2061_12(int) = Constant[5] : +# 2061| r2061_13(glval) = VariableAddress[#temp2061:9] : +# 2061| mu2061_14(int) = Store[#temp2061:9] : &:r2061_13, r2061_12 #-----| Goto -> Block 4 -# 2048| Block 7 -# 2048| r2048_4(glval) = VariableAddress[#temp2048:9] : -# 2048| r2048_5(int) = Load[#temp2048:9] : &:r2048_4, ~m? -# 2048| r2048_6(glval) = VariableAddress[z] : -# 2048| mu2048_7(int) = Store[z] : &:r2048_6, r2048_5 -# 2049| r2049_1(int) = Constant[7] : -# 2049| r2049_2(glval) = VariableAddress[a] : -# 2049| r2049_3(bool) = Load[a] : &:r2049_2, ~m? -# 2049| v2049_4(void) = ConditionalBranch : r2049_3 +# 2062| Block 7 +# 2062| r2062_4(glval) = VariableAddress[#temp2062:9] : +# 2062| r2062_5(int) = Load[#temp2062:9] : &:r2062_4, ~m? +# 2062| r2062_6(glval) = VariableAddress[z] : +# 2062| mu2062_7(int) = Store[z] : &:r2062_6, r2062_5 +# 2063| r2063_1(int) = Constant[7] : +# 2063| r2063_2(glval) = VariableAddress[a] : +# 2063| r2063_3(bool) = Load[a] : &:r2063_2, ~m? +# 2063| v2063_4(void) = ConditionalBranch : r2063_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2048| Block 8 -# 2048| r2048_8(int) = Constant[3] : -# 2048| r2048_9(glval) = VariableAddress[#temp2048:9] : -# 2048| mu2048_10(int) = Store[#temp2048:9] : &:r2048_9, r2048_8 +# 2062| Block 8 +# 2062| r2062_8(int) = Constant[3] : +# 2062| r2062_9(glval) = VariableAddress[#temp2062:9] : +# 2062| mu2062_10(int) = Store[#temp2062:9] : &:r2062_9, r2062_8 #-----| Goto -> Block 7 -# 2048| Block 9 -# 2048| r2048_11(int) = Constant[5] : -# 2048| r2048_12(glval) = VariableAddress[#temp2048:9] : -# 2048| mu2048_13(int) = Store[#temp2048:9] : &:r2048_12, r2048_11 +# 2062| Block 9 +# 2062| r2062_11(int) = Constant[5] : +# 2062| r2062_12(glval) = VariableAddress[#temp2062:9] : +# 2062| mu2062_13(int) = Store[#temp2062:9] : &:r2062_12, r2062_11 #-----| Goto -> Block 7 -# 2049| Block 10 -# 2049| r2049_5(glval) = VariableAddress[#temp2049:6] : -# 2049| r2049_6(glval) = Load[#temp2049:6] : &:r2049_5, ~m? -# 2049| mu2049_7(int) = Store[?] : &:r2049_6, r2049_1 -# 2050| v2050_1(void) = NoOp : -# 2045| v2045_12(void) = ReturnVoid : -# 2045| v2045_13(void) = AliasedUse : ~m? -# 2045| v2045_14(void) = ExitFunction : +# 2063| Block 10 +# 2063| r2063_5(glval) = VariableAddress[#temp2063:6] : +# 2063| r2063_6(glval) = Load[#temp2063:6] : &:r2063_5, ~m? +# 2063| mu2063_7(int) = Store[?] : &:r2063_6, r2063_1 +# 2064| v2064_1(void) = NoOp : +# 2059| v2059_12(void) = ReturnVoid : +# 2059| v2059_13(void) = AliasedUse : ~m? +# 2059| v2059_14(void) = ExitFunction : -# 2049| Block 11 -# 2049| r2049_8(glval) = VariableAddress[x] : -# 2049| r2049_9(glval) = VariableAddress[#temp2049:6] : -# 2049| mu2049_10(glval) = Store[#temp2049:6] : &:r2049_9, r2049_8 +# 2063| Block 11 +# 2063| r2063_8(glval) = VariableAddress[x] : +# 2063| r2063_9(glval) = VariableAddress[#temp2063:6] : +# 2063| mu2063_10(glval) = Store[#temp2063:6] : &:r2063_9, r2063_8 #-----| Goto -> Block 10 -# 2049| Block 12 -# 2049| r2049_11(glval) = VariableAddress[y] : -# 2049| r2049_12(glval) = VariableAddress[#temp2049:6] : -# 2049| mu2049_13(glval) = Store[#temp2049:6] : &:r2049_12, r2049_11 +# 2063| Block 12 +# 2063| r2063_11(glval) = VariableAddress[y] : +# 2063| r2063_12(glval) = VariableAddress[#temp2063:6] : +# 2063| mu2063_13(glval) = Store[#temp2063:6] : &:r2063_12, r2063_11 #-----| Goto -> Block 10 -# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2055| Block 0 -# 2055| v2055_1(void) = EnterFunction : -# 2055| mu2055_2(unknown) = AliasedDefinition : -# 2055| mu2055_3(unknown) = InitializeNonLocal : -# 2055| r2055_4(glval) = VariableAddress[a] : -# 2055| mu2055_5(bool) = InitializeParameter[a] : &:r2055_4 -# 2055| r2055_6(glval) = VariableAddress[x] : -# 2055| mu2055_7(TernaryPodObj) = InitializeParameter[x] : &:r2055_6 -# 2055| r2055_8(glval) = VariableAddress[y] : -# 2055| mu2055_9(TernaryPodObj) = InitializeParameter[y] : &:r2055_8 -# 2055| r2055_10(glval) = VariableAddress[z] : -# 2055| mu2055_11(TernaryPodObj) = InitializeParameter[z] : &:r2055_10 -# 2056| r2056_1(glval) = VariableAddress[a] : -# 2056| r2056_2(bool) = Load[a] : &:r2056_1, ~m? -# 2056| v2056_3(void) = ConditionalBranch : r2056_2 +# 2069| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2069| Block 0 +# 2069| v2069_1(void) = EnterFunction : +# 2069| mu2069_2(unknown) = AliasedDefinition : +# 2069| mu2069_3(unknown) = InitializeNonLocal : +# 2069| r2069_4(glval) = VariableAddress[a] : +# 2069| mu2069_5(bool) = InitializeParameter[a] : &:r2069_4 +# 2069| r2069_6(glval) = VariableAddress[x] : +# 2069| mu2069_7(TernaryPodObj) = InitializeParameter[x] : &:r2069_6 +# 2069| r2069_8(glval) = VariableAddress[y] : +# 2069| mu2069_9(TernaryPodObj) = InitializeParameter[y] : &:r2069_8 +# 2069| r2069_10(glval) = VariableAddress[z] : +# 2069| mu2069_11(TernaryPodObj) = InitializeParameter[z] : &:r2069_10 +# 2070| r2070_1(glval) = VariableAddress[a] : +# 2070| r2070_2(bool) = Load[a] : &:r2070_1, ~m? +# 2070| v2070_3(void) = ConditionalBranch : r2070_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2056| Block 1 -# 2056| r2056_4(glval) = VariableAddress[#temp2056:9] : -# 2056| r2056_5(TernaryPodObj) = Load[#temp2056:9] : &:r2056_4, ~m? -# 2056| r2056_6(glval) = VariableAddress[z] : -# 2056| mu2056_7(TernaryPodObj) = Store[z] : &:r2056_6, r2056_5 -# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_2(glval) = VariableAddress[a] : -# 2057| r2057_3(bool) = Load[a] : &:r2057_2, ~m? -# 2057| v2057_4(void) = ConditionalBranch : r2057_3 +# 2070| Block 1 +# 2070| r2070_4(glval) = VariableAddress[#temp2070:9] : +# 2070| r2070_5(TernaryPodObj) = Load[#temp2070:9] : &:r2070_4, ~m? +# 2070| r2070_6(glval) = VariableAddress[z] : +# 2070| mu2070_7(TernaryPodObj) = Store[z] : &:r2070_6, r2070_5 +# 2071| r2071_1(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_2(glval) = VariableAddress[a] : +# 2071| r2071_3(bool) = Load[a] : &:r2071_2, ~m? +# 2071| v2071_4(void) = ConditionalBranch : r2071_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2056| Block 2 -# 2056| r2056_8(glval) = VariableAddress[x] : -# 2056| r2056_9(TernaryPodObj) = Load[x] : &:r2056_8, ~m? -# 2056| r2056_10(glval) = VariableAddress[#temp2056:9] : -# 2056| mu2056_11(TernaryPodObj) = Store[#temp2056:9] : &:r2056_10, r2056_9 +# 2070| Block 2 +# 2070| r2070_8(glval) = VariableAddress[x] : +# 2070| r2070_9(TernaryPodObj) = Load[x] : &:r2070_8, ~m? +# 2070| r2070_10(glval) = VariableAddress[#temp2070:9] : +# 2070| mu2070_11(TernaryPodObj) = Store[#temp2070:9] : &:r2070_10, r2070_9 #-----| Goto -> Block 1 -# 2056| Block 3 -# 2056| r2056_12(glval) = VariableAddress[y] : -# 2056| r2056_13(TernaryPodObj) = Load[y] : &:r2056_12, ~m? -# 2056| r2056_14(glval) = VariableAddress[#temp2056:9] : -# 2056| mu2056_15(TernaryPodObj) = Store[#temp2056:9] : &:r2056_14, r2056_13 +# 2070| Block 3 +# 2070| r2070_12(glval) = VariableAddress[y] : +# 2070| r2070_13(TernaryPodObj) = Load[y] : &:r2070_12, ~m? +# 2070| r2070_14(glval) = VariableAddress[#temp2070:9] : +# 2070| mu2070_15(TernaryPodObj) = Store[#temp2070:9] : &:r2070_14, r2070_13 #-----| Goto -> Block 1 -# 2057| Block 4 -# 2057| r2057_5(glval) = VariableAddress[#temp2057:9] : -# 2057| r2057_6(TernaryPodObj) = Load[#temp2057:9] : &:r2057_5, ~m? -# 2057| mu2057_7(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_6 -# 2057| r2057_8(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, ~m? -# 2057| r2057_9(glval) = VariableAddress[z] : -# 2057| mu2057_10(TernaryPodObj) = Store[z] : &:r2057_9, r2057_8 -# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_2(glval) = VariableAddress[a] : -# 2058| r2058_3(bool) = Load[a] : &:r2058_2, ~m? -# 2058| v2058_4(void) = ConditionalBranch : r2058_3 +# 2071| Block 4 +# 2071| r2071_5(glval) = VariableAddress[#temp2071:9] : +# 2071| r2071_6(TernaryPodObj) = Load[#temp2071:9] : &:r2071_5, ~m? +# 2071| mu2071_7(TernaryPodObj) = Store[#temp2071:9] : &:r2071_1, r2071_6 +# 2071| r2071_8(TernaryPodObj) = Load[#temp2071:9] : &:r2071_1, ~m? +# 2071| r2071_9(glval) = VariableAddress[z] : +# 2071| mu2071_10(TernaryPodObj) = Store[z] : &:r2071_9, r2071_8 +# 2072| r2072_1(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_2(glval) = VariableAddress[a] : +# 2072| r2072_3(bool) = Load[a] : &:r2072_2, ~m? +# 2072| v2072_4(void) = ConditionalBranch : r2072_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2057| Block 5 -# 2057| r2057_11(glval) = VariableAddress[#temp2057:13] : -# 2057| r2057_12(glval) = VariableAddress[x] : -# 2057| r2057_13(TernaryPodObj) = Load[x] : &:r2057_12, ~m? -# 2057| mu2057_14(TernaryPodObj) = Store[#temp2057:13] : &:r2057_11, r2057_13 -# 2057| r2057_15(TernaryPodObj) = Load[#temp2057:13] : &:r2057_11, ~m? -# 2057| r2057_16(glval) = VariableAddress[#temp2057:9] : -# 2057| mu2057_17(TernaryPodObj) = Store[#temp2057:9] : &:r2057_16, r2057_15 +# 2071| Block 5 +# 2071| r2071_11(glval) = VariableAddress[#temp2071:13] : +# 2071| r2071_12(glval) = VariableAddress[x] : +# 2071| r2071_13(TernaryPodObj) = Load[x] : &:r2071_12, ~m? +# 2071| mu2071_14(TernaryPodObj) = Store[#temp2071:13] : &:r2071_11, r2071_13 +# 2071| r2071_15(TernaryPodObj) = Load[#temp2071:13] : &:r2071_11, ~m? +# 2071| r2071_16(glval) = VariableAddress[#temp2071:9] : +# 2071| mu2071_17(TernaryPodObj) = Store[#temp2071:9] : &:r2071_16, r2071_15 #-----| Goto -> Block 4 -# 2057| Block 6 -# 2057| r2057_18(glval) = VariableAddress[#temp2057:17] : -# 2057| r2057_19(TernaryPodObj) = Constant[0] : -# 2057| mu2057_20(TernaryPodObj) = Store[#temp2057:17] : &:r2057_18, r2057_19 -# 2057| r2057_21(TernaryPodObj) = Load[#temp2057:17] : &:r2057_18, ~m? -# 2057| r2057_22(glval) = VariableAddress[#temp2057:9] : -# 2057| mu2057_23(TernaryPodObj) = Store[#temp2057:9] : &:r2057_22, r2057_21 +# 2071| Block 6 +# 2071| r2071_18(glval) = VariableAddress[#temp2071:17] : +# 2071| r2071_19(TernaryPodObj) = Constant[0] : +# 2071| mu2071_20(TernaryPodObj) = Store[#temp2071:17] : &:r2071_18, r2071_19 +# 2071| r2071_21(TernaryPodObj) = Load[#temp2071:17] : &:r2071_18, ~m? +# 2071| r2071_22(glval) = VariableAddress[#temp2071:9] : +# 2071| mu2071_23(TernaryPodObj) = Store[#temp2071:9] : &:r2071_22, r2071_21 #-----| Goto -> Block 4 -# 2058| Block 7 -# 2058| r2058_5(glval) = VariableAddress[#temp2058:9] : -# 2058| r2058_6(TernaryPodObj) = Load[#temp2058:9] : &:r2058_5, ~m? -# 2058| mu2058_7(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_6 -# 2058| r2058_8(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, ~m? -# 2058| r2058_9(glval) = VariableAddress[z] : -# 2058| mu2058_10(TernaryPodObj) = Store[z] : &:r2058_9, r2058_8 -# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : -# 2059| r2059_2(TernaryPodObj) = Constant[0] : -# 2059| mu2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 -# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, ~m? -# 2059| r2059_5(glval) = VariableAddress[a] : -# 2059| r2059_6(bool) = Load[a] : &:r2059_5, ~m? -# 2059| v2059_7(void) = ConditionalBranch : r2059_6 +# 2072| Block 7 +# 2072| r2072_5(glval) = VariableAddress[#temp2072:9] : +# 2072| r2072_6(TernaryPodObj) = Load[#temp2072:9] : &:r2072_5, ~m? +# 2072| mu2072_7(TernaryPodObj) = Store[#temp2072:9] : &:r2072_1, r2072_6 +# 2072| r2072_8(TernaryPodObj) = Load[#temp2072:9] : &:r2072_1, ~m? +# 2072| r2072_9(glval) = VariableAddress[z] : +# 2072| mu2072_10(TernaryPodObj) = Store[z] : &:r2072_9, r2072_8 +# 2073| r2073_1(glval) = VariableAddress[#temp2073:23] : +# 2073| r2073_2(TernaryPodObj) = Constant[0] : +# 2073| mu2073_3(TernaryPodObj) = Store[#temp2073:23] : &:r2073_1, r2073_2 +# 2073| r2073_4(TernaryPodObj) = Load[#temp2073:23] : &:r2073_1, ~m? +# 2073| r2073_5(glval) = VariableAddress[a] : +# 2073| r2073_6(bool) = Load[a] : &:r2073_5, ~m? +# 2073| v2073_7(void) = ConditionalBranch : r2073_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2058| Block 8 -# 2058| r2058_11(glval) = VariableAddress[#temp2058:13] : -# 2058| r2058_12(TernaryPodObj) = Constant[0] : -# 2058| mu2058_13(TernaryPodObj) = Store[#temp2058:13] : &:r2058_11, r2058_12 -# 2058| r2058_14(TernaryPodObj) = Load[#temp2058:13] : &:r2058_11, ~m? -# 2058| r2058_15(glval) = VariableAddress[#temp2058:9] : -# 2058| mu2058_16(TernaryPodObj) = Store[#temp2058:9] : &:r2058_15, r2058_14 +# 2072| Block 8 +# 2072| r2072_11(glval) = VariableAddress[#temp2072:13] : +# 2072| r2072_12(TernaryPodObj) = Constant[0] : +# 2072| mu2072_13(TernaryPodObj) = Store[#temp2072:13] : &:r2072_11, r2072_12 +# 2072| r2072_14(TernaryPodObj) = Load[#temp2072:13] : &:r2072_11, ~m? +# 2072| r2072_15(glval) = VariableAddress[#temp2072:9] : +# 2072| mu2072_16(TernaryPodObj) = Store[#temp2072:9] : &:r2072_15, r2072_14 #-----| Goto -> Block 7 -# 2058| Block 9 -# 2058| r2058_17(glval) = VariableAddress[#temp2058:31] : -# 2058| r2058_18(TernaryPodObj) = Constant[0] : -# 2058| mu2058_19(TernaryPodObj) = Store[#temp2058:31] : &:r2058_17, r2058_18 -# 2058| r2058_20(TernaryPodObj) = Load[#temp2058:31] : &:r2058_17, ~m? -# 2058| r2058_21(glval) = VariableAddress[#temp2058:9] : -# 2058| mu2058_22(TernaryPodObj) = Store[#temp2058:9] : &:r2058_21, r2058_20 +# 2072| Block 9 +# 2072| r2072_17(glval) = VariableAddress[#temp2072:31] : +# 2072| r2072_18(TernaryPodObj) = Constant[0] : +# 2072| mu2072_19(TernaryPodObj) = Store[#temp2072:31] : &:r2072_17, r2072_18 +# 2072| r2072_20(TernaryPodObj) = Load[#temp2072:31] : &:r2072_17, ~m? +# 2072| r2072_21(glval) = VariableAddress[#temp2072:9] : +# 2072| mu2072_22(TernaryPodObj) = Store[#temp2072:9] : &:r2072_21, r2072_20 #-----| Goto -> Block 7 -# 2059| Block 10 -# 2059| r2059_8(glval) = VariableAddress[#temp2059:10] : -# 2059| r2059_9(TernaryPodObj) = Load[#temp2059:10] : &:r2059_8, ~m? -# 2059| r2059_10(glval) = VariableAddress[z] : -# 2059| mu2059_11(TernaryPodObj) = Store[z] : &:r2059_10, r2059_9 -# 2059| r2059_12(glval) = CopyValue : r2059_10 -# 2059| mu2059_13(TernaryPodObj) = Store[?] : &:r2059_12, r2059_4 -# 2060| v2060_1(void) = NoOp : -# 2055| v2055_12(void) = ReturnVoid : -# 2055| v2055_13(void) = AliasedUse : ~m? -# 2055| v2055_14(void) = ExitFunction : +# 2073| Block 10 +# 2073| r2073_8(glval) = VariableAddress[#temp2073:10] : +# 2073| r2073_9(TernaryPodObj) = Load[#temp2073:10] : &:r2073_8, ~m? +# 2073| r2073_10(glval) = VariableAddress[z] : +# 2073| mu2073_11(TernaryPodObj) = Store[z] : &:r2073_10, r2073_9 +# 2073| r2073_12(glval) = CopyValue : r2073_10 +# 2073| mu2073_13(TernaryPodObj) = Store[?] : &:r2073_12, r2073_4 +# 2074| v2074_1(void) = NoOp : +# 2069| v2069_12(void) = ReturnVoid : +# 2069| v2069_13(void) = AliasedUse : ~m? +# 2069| v2069_14(void) = ExitFunction : -# 2059| Block 11 -# 2059| r2059_14(glval) = VariableAddress[x] : -# 2059| r2059_15(TernaryPodObj) = Load[x] : &:r2059_14, ~m? -# 2059| r2059_16(glval) = VariableAddress[#temp2059:10] : -# 2059| mu2059_17(TernaryPodObj) = Store[#temp2059:10] : &:r2059_16, r2059_15 +# 2073| Block 11 +# 2073| r2073_14(glval) = VariableAddress[x] : +# 2073| r2073_15(TernaryPodObj) = Load[x] : &:r2073_14, ~m? +# 2073| r2073_16(glval) = VariableAddress[#temp2073:10] : +# 2073| mu2073_17(TernaryPodObj) = Store[#temp2073:10] : &:r2073_16, r2073_15 #-----| Goto -> Block 10 -# 2059| Block 12 -# 2059| r2059_18(glval) = VariableAddress[y] : -# 2059| r2059_19(TernaryPodObj) = Load[y] : &:r2059_18, ~m? -# 2059| r2059_20(glval) = VariableAddress[#temp2059:10] : -# 2059| mu2059_21(TernaryPodObj) = Store[#temp2059:10] : &:r2059_20, r2059_19 +# 2073| Block 12 +# 2073| r2073_18(glval) = VariableAddress[y] : +# 2073| r2073_19(TernaryPodObj) = Load[y] : &:r2073_18, ~m? +# 2073| r2073_20(glval) = VariableAddress[#temp2073:10] : +# 2073| mu2073_21(TernaryPodObj) = Store[#temp2073:10] : &:r2073_20, r2073_19 #-----| Goto -> Block 10 -# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 +# 2076| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -11517,1453 +11554,1095 @@ ir.cpp: #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| mu0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2062| v2062_8(void) = ReturnIndirection[#this] : &:r2062_6, ~m? +# 2076| v2076_8(void) = ReturnIndirection[#this] : &:r2076_6, ~m? #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2062| r2062_9(glval) = VariableAddress[#return] : -# 2062| v2062_10(void) = ReturnValue : &:r2062_9, ~m? -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| r2076_9(glval) = VariableAddress[#return] : +# 2076| v2076_10(void) = ReturnValue : &:r2076_9, ~m? +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj() -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 -# 2062| v2062_8(void) = NoOp : -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? -# 2062| v2062_10(void) = ReturnVoid : -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| void TernaryNonPodObj::TernaryNonPodObj() +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 +# 2076| v2076_8(void) = NoOp : +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_6, ~m? +# 2076| v2076_10(void) = ReturnVoid : +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2062| Block 0 -# 2062| v2062_1(void) = EnterFunction : -# 2062| mu2062_2(unknown) = AliasedDefinition : -# 2062| mu2062_3(unknown) = InitializeNonLocal : -# 2062| r2062_4(glval) = VariableAddress[#this] : -# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 -# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? -# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 +# 2076| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2076| Block 0 +# 2076| v2076_1(void) = EnterFunction : +# 2076| mu2076_2(unknown) = AliasedDefinition : +# 2076| mu2076_3(unknown) = InitializeNonLocal : +# 2076| r2076_4(glval) = VariableAddress[#this] : +# 2076| mu2076_5(glval) = InitializeParameter[#this] : &:r2076_4 +# 2076| r2076_6(glval) = Load[#this] : &:r2076_4, ~m? +# 2076| mu2076_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2076_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2062| v2062_8(void) = NoOp : -# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? +# 2076| v2076_8(void) = NoOp : +# 2076| v2076_9(void) = ReturnIndirection[#this] : &:r2076_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2062| v2062_10(void) = ReturnVoid : -# 2062| v2062_11(void) = AliasedUse : ~m? -# 2062| v2062_12(void) = ExitFunction : +# 2076| v2076_10(void) = ReturnVoid : +# 2076| v2076_11(void) = AliasedUse : ~m? +# 2076| v2076_12(void) = ExitFunction : -# 2063| void TernaryNonPodObj::~TernaryNonPodObj() -# 2063| Block 0 -# 2063| v2063_1(void) = EnterFunction : -# 2063| mu2063_2(unknown) = AliasedDefinition : -# 2063| mu2063_3(unknown) = InitializeNonLocal : -# 2063| r2063_4(glval) = VariableAddress[#this] : -# 2063| mu2063_5(glval) = InitializeParameter[#this] : &:r2063_4 -# 2063| r2063_6(glval) = Load[#this] : &:r2063_4, ~m? -# 2063| mu2063_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_6 -# 2063| v2063_8(void) = NoOp : -# 2063| v2063_9(void) = ReturnIndirection[#this] : &:r2063_6, ~m? -# 2063| v2063_10(void) = ReturnVoid : -# 2063| v2063_11(void) = AliasedUse : ~m? -# 2063| v2063_12(void) = ExitFunction : +# 2077| void TernaryNonPodObj::~TernaryNonPodObj() +# 2077| Block 0 +# 2077| v2077_1(void) = EnterFunction : +# 2077| mu2077_2(unknown) = AliasedDefinition : +# 2077| mu2077_3(unknown) = InitializeNonLocal : +# 2077| r2077_4(glval) = VariableAddress[#this] : +# 2077| mu2077_5(glval) = InitializeParameter[#this] : &:r2077_4 +# 2077| r2077_6(glval) = Load[#this] : &:r2077_4, ~m? +# 2077| mu2077_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2077_6 +# 2077| v2077_8(void) = NoOp : +# 2077| v2077_9(void) = ReturnIndirection[#this] : &:r2077_6, ~m? +# 2077| v2077_10(void) = ReturnVoid : +# 2077| v2077_11(void) = AliasedUse : ~m? +# 2077| v2077_12(void) = ExitFunction : -# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2066| Block 0 -# 2066| v2066_1(void) = EnterFunction : -# 2066| mu2066_2(unknown) = AliasedDefinition : -# 2066| mu2066_3(unknown) = InitializeNonLocal : -# 2066| r2066_4(glval) = VariableAddress[a] : -# 2066| mu2066_5(bool) = InitializeParameter[a] : &:r2066_4 -# 2066| r2066_6(glval) = VariableAddress[x] : -# 2066| mu2066_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_6 -# 2066| r2066_8(glval) = VariableAddress[y] : -# 2066| mu2066_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_8 -# 2066| r2066_10(glval) = VariableAddress[z] : -# 2066| mu2066_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_10 -# 2067| r2067_1(glval) = VariableAddress[z] : -# 2067| r2067_2(glval) = FunctionAddress[operator=] : -# 2067| r2067_3(glval) = VariableAddress[a] : -# 2067| r2067_4(bool) = Load[a] : &:r2067_3, ~m? -# 2067| v2067_5(void) = ConditionalBranch : r2067_4 +# 2080| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2080| Block 0 +# 2080| v2080_1(void) = EnterFunction : +# 2080| mu2080_2(unknown) = AliasedDefinition : +# 2080| mu2080_3(unknown) = InitializeNonLocal : +# 2080| r2080_4(glval) = VariableAddress[a] : +# 2080| mu2080_5(bool) = InitializeParameter[a] : &:r2080_4 +# 2080| r2080_6(glval) = VariableAddress[x] : +# 2080| mu2080_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2080_6 +# 2080| r2080_8(glval) = VariableAddress[y] : +# 2080| mu2080_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2080_8 +# 2080| r2080_10(glval) = VariableAddress[z] : +# 2080| mu2080_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2080_10 +# 2081| r2081_1(glval) = VariableAddress[z] : +# 2081| r2081_2(glval) = FunctionAddress[operator=] : +# 2081| r2081_3(glval) = VariableAddress[a] : +# 2081| r2081_4(bool) = Load[a] : &:r2081_3, ~m? +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2067| Block 1 -# 2067| r2067_6(glval) = VariableAddress[#temp2067:9] : -# 2067| r2067_7(glval) = Load[#temp2067:9] : &:r2067_6, ~m? -# 2067| r2067_8(glval) = Convert : r2067_7 -# 2067| r2067_9(TernaryNonPodObj &) = CopyValue : r2067_8 -# 2067| r2067_10(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_9 -# 2067| mu2067_11(unknown) = ^CallSideEffect : ~m? -# 2067| v2067_12(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, ~m? -# 2067| v2067_13(void) = ^BufferReadSideEffect[0] : &:r2067_9, ~m? -# 2067| mu2067_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 -# 2067| r2067_15(glval) = CopyValue : r2067_10 -# 2068| r2068_1(glval) = VariableAddress[z] : -# 2068| r2068_2(glval) = FunctionAddress[operator=] : -# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_4(glval) = VariableAddress[a] : -# 2068| r2068_5(bool) = Load[a] : &:r2068_4, ~m? -# 2068| v2068_6(void) = ConditionalBranch : r2068_5 +# 2081| Block 1 +# 2081| r2081_6(glval) = VariableAddress[#temp2081:9] : +# 2081| r2081_7(glval) = Load[#temp2081:9] : &:r2081_6, ~m? +# 2081| r2081_8(glval) = Convert : r2081_7 +# 2081| r2081_9(TernaryNonPodObj &) = CopyValue : r2081_8 +# 2081| r2081_10(TernaryNonPodObj &) = Call[operator=] : func:r2081_2, this:r2081_1, 0:r2081_9 +# 2081| mu2081_11(unknown) = ^CallSideEffect : ~m? +# 2081| v2081_12(void) = ^IndirectReadSideEffect[-1] : &:r2081_1, ~m? +# 2081| v2081_13(void) = ^BufferReadSideEffect[0] : &:r2081_9, ~m? +# 2081| mu2081_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2081_1 +# 2081| r2081_15(glval) = CopyValue : r2081_10 +# 2082| r2082_1(glval) = VariableAddress[z] : +# 2082| r2082_2(glval) = FunctionAddress[operator=] : +# 2082| r2082_3(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_4(glval) = VariableAddress[a] : +# 2082| r2082_5(bool) = Load[a] : &:r2082_4, ~m? +# 2082| v2082_6(void) = ConditionalBranch : r2082_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2067| Block 2 -# 2067| r2067_16(glval) = VariableAddress[x] : -# 2067| r2067_17(glval) = VariableAddress[#temp2067:9] : -# 2067| mu2067_18(glval) = Store[#temp2067:9] : &:r2067_17, r2067_16 +# 2081| Block 2 +# 2081| r2081_16(glval) = VariableAddress[x] : +# 2081| r2081_17(glval) = VariableAddress[#temp2081:9] : +# 2081| mu2081_18(glval) = Store[#temp2081:9] : &:r2081_17, r2081_16 #-----| Goto -> Block 1 -# 2067| Block 3 -# 2067| r2067_19(glval) = VariableAddress[y] : -# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : -# 2067| mu2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 +# 2081| Block 3 +# 2081| r2081_19(glval) = VariableAddress[y] : +# 2081| r2081_20(glval) = VariableAddress[#temp2081:9] : +# 2081| mu2081_21(glval) = Store[#temp2081:9] : &:r2081_20, r2081_19 #-----| Goto -> Block 1 -# 2068| Block 4 -# 2068| r2068_7(glval) = VariableAddress[#temp2068:9] : -# 2068| r2068_8(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_7, ~m? -# 2068| mu2068_9(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_8 -# 2068| r2068_10(glval) = Convert : r2068_3 -# 2068| r2068_11(TernaryNonPodObj &) = CopyValue : r2068_10 -# 2068| r2068_12(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_11 -# 2068| mu2068_13(unknown) = ^CallSideEffect : ~m? -# 2068| v2068_14(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, ~m? -# 2068| v2068_15(void) = ^BufferReadSideEffect[0] : &:r2068_11, ~m? -# 2068| mu2068_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 -# 2068| r2068_17(glval) = CopyValue : r2068_12 -# 2069| r2069_1(glval) = VariableAddress[z] : -# 2069| r2069_2(glval) = FunctionAddress[operator=] : -# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_4(glval) = VariableAddress[a] : -# 2069| r2069_5(bool) = Load[a] : &:r2069_4, ~m? -# 2069| v2069_6(void) = ConditionalBranch : r2069_5 +# 2082| Block 4 +# 2082| r2082_7(glval) = VariableAddress[#temp2082:9] : +# 2082| r2082_8(TernaryNonPodObj) = Load[#temp2082:9] : &:r2082_7, ~m? +# 2082| mu2082_9(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_3, r2082_8 +# 2082| r2082_10(glval) = Convert : r2082_3 +# 2082| r2082_11(TernaryNonPodObj &) = CopyValue : r2082_10 +# 2082| r2082_12(TernaryNonPodObj &) = Call[operator=] : func:r2082_2, this:r2082_1, 0:r2082_11 +# 2082| mu2082_13(unknown) = ^CallSideEffect : ~m? +# 2082| v2082_14(void) = ^IndirectReadSideEffect[-1] : &:r2082_1, ~m? +# 2082| v2082_15(void) = ^BufferReadSideEffect[0] : &:r2082_11, ~m? +# 2082| mu2082_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_1 +# 2082| r2082_17(glval) = CopyValue : r2082_12 +# 2083| r2083_1(glval) = VariableAddress[z] : +# 2083| r2083_2(glval) = FunctionAddress[operator=] : +# 2083| r2083_3(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_4(glval) = VariableAddress[a] : +# 2083| r2083_5(bool) = Load[a] : &:r2083_4, ~m? +# 2083| v2083_6(void) = ConditionalBranch : r2083_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2068| Block 5 -# 2068| r2068_18(glval) = VariableAddress[#temp2068:13] : -# 2068| mu2068_19(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_18 -# 2068| r2068_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| r2068_21(glval) = VariableAddress[x] : -# 2068| r2068_22(glval) = Convert : r2068_21 -# 2068| r2068_23(TernaryNonPodObj &) = CopyValue : r2068_22 -# 2068| v2068_24(void) = Call[TernaryNonPodObj] : func:r2068_20, this:r2068_18, 0:r2068_23 -# 2068| mu2068_25(unknown) = ^CallSideEffect : ~m? -# 2068| v2068_26(void) = ^BufferReadSideEffect[0] : &:r2068_23, ~m? -# 2068| mu2068_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_18 -# 2068| r2068_28(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_18, ~m? -# 2068| r2068_29(glval) = VariableAddress[#temp2068:9] : -# 2068| mu2068_30(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_29, r2068_28 +# 2082| Block 5 +# 2082| r2082_18(glval) = VariableAddress[#temp2082:13] : +# 2082| mu2082_19(TernaryNonPodObj) = Uninitialized[#temp2082:13] : &:r2082_18 +# 2082| r2082_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| r2082_21(glval) = VariableAddress[x] : +# 2082| r2082_22(glval) = Convert : r2082_21 +# 2082| r2082_23(TernaryNonPodObj &) = CopyValue : r2082_22 +# 2082| v2082_24(void) = Call[TernaryNonPodObj] : func:r2082_20, this:r2082_18, 0:r2082_23 +# 2082| mu2082_25(unknown) = ^CallSideEffect : ~m? +# 2082| v2082_26(void) = ^BufferReadSideEffect[0] : &:r2082_23, ~m? +# 2082| mu2082_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_18 +# 2082| r2082_28(TernaryNonPodObj) = Load[#temp2082:13] : &:r2082_18, ~m? +# 2082| r2082_29(glval) = VariableAddress[#temp2082:9] : +# 2082| mu2082_30(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_29, r2082_28 #-----| Goto -> Block 4 -# 2068| Block 6 -# 2068| r2068_31(glval) = VariableAddress[#temp2068:17] : -# 2068| mu2068_32(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_31 -# 2068| r2068_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2068| v2068_34(void) = Call[TernaryNonPodObj] : func:r2068_33, this:r2068_31 -# 2068| mu2068_35(unknown) = ^CallSideEffect : ~m? -# 2068| mu2068_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_31 -# 2068| r2068_37(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_31, ~m? -# 2068| r2068_38(glval) = VariableAddress[#temp2068:9] : -# 2068| mu2068_39(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_38, r2068_37 +# 2082| Block 6 +# 2082| r2082_31(glval) = VariableAddress[#temp2082:17] : +# 2082| mu2082_32(TernaryNonPodObj) = Uninitialized[#temp2082:17] : &:r2082_31 +# 2082| r2082_33(glval) = FunctionAddress[TernaryNonPodObj] : +# 2082| v2082_34(void) = Call[TernaryNonPodObj] : func:r2082_33, this:r2082_31 +# 2082| mu2082_35(unknown) = ^CallSideEffect : ~m? +# 2082| mu2082_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2082_31 +# 2082| r2082_37(TernaryNonPodObj) = Load[#temp2082:17] : &:r2082_31, ~m? +# 2082| r2082_38(glval) = VariableAddress[#temp2082:9] : +# 2082| mu2082_39(TernaryNonPodObj) = Store[#temp2082:9] : &:r2082_38, r2082_37 #-----| Goto -> Block 4 -# 2069| Block 7 -# 2069| r2069_7(glval) = VariableAddress[#temp2069:9] : -# 2069| r2069_8(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_7, ~m? -# 2069| mu2069_9(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_8 -# 2069| r2069_10(glval) = Convert : r2069_3 -# 2069| r2069_11(TernaryNonPodObj &) = CopyValue : r2069_10 -# 2069| r2069_12(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_11 -# 2069| mu2069_13(unknown) = ^CallSideEffect : ~m? -# 2069| v2069_14(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, ~m? -# 2069| v2069_15(void) = ^BufferReadSideEffect[0] : &:r2069_11, ~m? -# 2069| mu2069_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 -# 2069| r2069_17(glval) = CopyValue : r2069_12 -# 2070| r2070_1(glval) = VariableAddress[z] : -# 2070| r2070_2(glval) = FunctionAddress[operator=] : -# 2070| r2070_3(glval) = VariableAddress[a] : -# 2070| r2070_4(bool) = Load[a] : &:r2070_3, ~m? -# 2070| v2070_5(void) = ConditionalBranch : r2070_4 +# 2083| Block 7 +# 2083| r2083_7(glval) = VariableAddress[#temp2083:9] : +# 2083| r2083_8(TernaryNonPodObj) = Load[#temp2083:9] : &:r2083_7, ~m? +# 2083| mu2083_9(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_3, r2083_8 +# 2083| r2083_10(glval) = Convert : r2083_3 +# 2083| r2083_11(TernaryNonPodObj &) = CopyValue : r2083_10 +# 2083| r2083_12(TernaryNonPodObj &) = Call[operator=] : func:r2083_2, this:r2083_1, 0:r2083_11 +# 2083| mu2083_13(unknown) = ^CallSideEffect : ~m? +# 2083| v2083_14(void) = ^IndirectReadSideEffect[-1] : &:r2083_1, ~m? +# 2083| v2083_15(void) = ^BufferReadSideEffect[0] : &:r2083_11, ~m? +# 2083| mu2083_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_1 +# 2083| r2083_17(glval) = CopyValue : r2083_12 +# 2084| r2084_1(glval) = VariableAddress[z] : +# 2084| r2084_2(glval) = FunctionAddress[operator=] : +# 2084| r2084_3(glval) = VariableAddress[a] : +# 2084| r2084_4(bool) = Load[a] : &:r2084_3, ~m? +# 2084| v2084_5(void) = ConditionalBranch : r2084_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2069| Block 8 -# 2069| r2069_18(glval) = VariableAddress[#temp2069:13] : -# 2069| mu2069_19(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_18 -# 2069| r2069_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_21(void) = Call[TernaryNonPodObj] : func:r2069_20, this:r2069_18 -# 2069| mu2069_22(unknown) = ^CallSideEffect : ~m? -# 2069| mu2069_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_18 -# 2069| r2069_24(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_18, ~m? -# 2069| r2069_25(glval) = VariableAddress[#temp2069:9] : -# 2069| mu2069_26(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_25, r2069_24 +# 2083| Block 8 +# 2083| r2083_18(glval) = VariableAddress[#temp2083:13] : +# 2083| mu2083_19(TernaryNonPodObj) = Uninitialized[#temp2083:13] : &:r2083_18 +# 2083| r2083_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_21(void) = Call[TernaryNonPodObj] : func:r2083_20, this:r2083_18 +# 2083| mu2083_22(unknown) = ^CallSideEffect : ~m? +# 2083| mu2083_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_18 +# 2083| r2083_24(TernaryNonPodObj) = Load[#temp2083:13] : &:r2083_18, ~m? +# 2083| r2083_25(glval) = VariableAddress[#temp2083:9] : +# 2083| mu2083_26(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_25, r2083_24 #-----| Goto -> Block 7 -# 2069| Block 9 -# 2069| r2069_27(glval) = VariableAddress[#temp2069:34] : -# 2069| mu2069_28(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_27 -# 2069| r2069_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2069| v2069_30(void) = Call[TernaryNonPodObj] : func:r2069_29, this:r2069_27 -# 2069| mu2069_31(unknown) = ^CallSideEffect : ~m? -# 2069| mu2069_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_27 -# 2069| r2069_33(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_27, ~m? -# 2069| r2069_34(glval) = VariableAddress[#temp2069:9] : -# 2069| mu2069_35(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_34, r2069_33 +# 2083| Block 9 +# 2083| r2083_27(glval) = VariableAddress[#temp2083:34] : +# 2083| mu2083_28(TernaryNonPodObj) = Uninitialized[#temp2083:34] : &:r2083_27 +# 2083| r2083_29(glval) = FunctionAddress[TernaryNonPodObj] : +# 2083| v2083_30(void) = Call[TernaryNonPodObj] : func:r2083_29, this:r2083_27 +# 2083| mu2083_31(unknown) = ^CallSideEffect : ~m? +# 2083| mu2083_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2083_27 +# 2083| r2083_33(TernaryNonPodObj) = Load[#temp2083:34] : &:r2083_27, ~m? +# 2083| r2083_34(glval) = VariableAddress[#temp2083:9] : +# 2083| mu2083_35(TernaryNonPodObj) = Store[#temp2083:9] : &:r2083_34, r2083_33 #-----| Goto -> Block 7 -# 2070| Block 10 -# 2070| r2070_6(glval) = VariableAddress[#temp2070:10] : -# 2070| r2070_7(glval) = Load[#temp2070:10] : &:r2070_6, ~m? -# 2070| r2070_8(glval) = Convert : r2070_7 -# 2070| r2070_9(TernaryNonPodObj &) = CopyValue : r2070_8 -# 2070| r2070_10(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_9 -# 2070| mu2070_11(unknown) = ^CallSideEffect : ~m? -# 2070| v2070_12(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, ~m? -# 2070| v2070_13(void) = ^BufferReadSideEffect[0] : &:r2070_9, ~m? -# 2070| mu2070_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 -# 2070| r2070_15(glval) = CopyValue : r2070_10 -# 2070| r2070_16(glval) = FunctionAddress[operator=] : -# 2070| r2070_17(glval) = VariableAddress[#temp2070:23] : -# 2070| mu2070_18(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_17 -# 2070| r2070_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2070| v2070_20(void) = Call[TernaryNonPodObj] : func:r2070_19, this:r2070_17 -# 2070| mu2070_21(unknown) = ^CallSideEffect : ~m? -# 2070| mu2070_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_17 -# 2070| r2070_23(glval) = Convert : r2070_17 -# 2070| r2070_24(TernaryNonPodObj &) = CopyValue : r2070_23 -# 2070| r2070_25(TernaryNonPodObj &) = Call[operator=] : func:r2070_16, this:r2070_15, 0:r2070_24 -# 2070| mu2070_26(unknown) = ^CallSideEffect : ~m? -# 2070| v2070_27(void) = ^IndirectReadSideEffect[-1] : &:r2070_15, ~m? -# 2070| v2070_28(void) = ^BufferReadSideEffect[0] : &:r2070_24, ~m? -# 2070| mu2070_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_15 -# 2070| r2070_30(glval) = CopyValue : r2070_25 -# 2071| v2071_1(void) = NoOp : -# 2066| v2066_12(void) = ReturnVoid : -# 2066| v2066_13(void) = AliasedUse : ~m? -# 2066| v2066_14(void) = ExitFunction : +# 2084| Block 10 +# 2084| r2084_6(glval) = VariableAddress[#temp2084:10] : +# 2084| r2084_7(glval) = Load[#temp2084:10] : &:r2084_6, ~m? +# 2084| r2084_8(glval) = Convert : r2084_7 +# 2084| r2084_9(TernaryNonPodObj &) = CopyValue : r2084_8 +# 2084| r2084_10(TernaryNonPodObj &) = Call[operator=] : func:r2084_2, this:r2084_1, 0:r2084_9 +# 2084| mu2084_11(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_12(void) = ^IndirectReadSideEffect[-1] : &:r2084_1, ~m? +# 2084| v2084_13(void) = ^BufferReadSideEffect[0] : &:r2084_9, ~m? +# 2084| mu2084_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_1 +# 2084| r2084_15(glval) = CopyValue : r2084_10 +# 2084| r2084_16(glval) = FunctionAddress[operator=] : +# 2084| r2084_17(glval) = VariableAddress[#temp2084:23] : +# 2084| mu2084_18(TernaryNonPodObj) = Uninitialized[#temp2084:23] : &:r2084_17 +# 2084| r2084_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2084| v2084_20(void) = Call[TernaryNonPodObj] : func:r2084_19, this:r2084_17 +# 2084| mu2084_21(unknown) = ^CallSideEffect : ~m? +# 2084| mu2084_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_17 +# 2084| r2084_23(glval) = Convert : r2084_17 +# 2084| r2084_24(TernaryNonPodObj &) = CopyValue : r2084_23 +# 2084| r2084_25(TernaryNonPodObj &) = Call[operator=] : func:r2084_16, this:r2084_15, 0:r2084_24 +# 2084| mu2084_26(unknown) = ^CallSideEffect : ~m? +# 2084| v2084_27(void) = ^IndirectReadSideEffect[-1] : &:r2084_15, ~m? +# 2084| v2084_28(void) = ^BufferReadSideEffect[0] : &:r2084_24, ~m? +# 2084| mu2084_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2084_15 +# 2084| r2084_30(glval) = CopyValue : r2084_25 +# 2085| v2085_1(void) = NoOp : +# 2080| v2080_12(void) = ReturnVoid : +# 2080| v2080_13(void) = AliasedUse : ~m? +# 2080| v2080_14(void) = ExitFunction : -# 2070| Block 11 -# 2070| r2070_31(glval) = VariableAddress[x] : -# 2070| r2070_32(glval) = VariableAddress[#temp2070:10] : -# 2070| mu2070_33(glval) = Store[#temp2070:10] : &:r2070_32, r2070_31 +# 2084| Block 11 +# 2084| r2084_31(glval) = VariableAddress[x] : +# 2084| r2084_32(glval) = VariableAddress[#temp2084:10] : +# 2084| mu2084_33(glval) = Store[#temp2084:10] : &:r2084_32, r2084_31 #-----| Goto -> Block 10 -# 2070| Block 12 -# 2070| r2070_34(glval) = VariableAddress[y] : -# 2070| r2070_35(glval) = VariableAddress[#temp2070:10] : -# 2070| mu2070_36(glval) = Store[#temp2070:10] : &:r2070_35, r2070_34 +# 2084| Block 12 +# 2084| r2084_34(glval) = VariableAddress[y] : +# 2084| r2084_35(glval) = VariableAddress[#temp2084:10] : +# 2084| mu2084_36(glval) = Store[#temp2084:10] : &:r2084_35, r2084_34 #-----| Goto -> Block 10 -# 2075| unsigned int CommaTest(unsigned int) -# 2075| Block 0 -# 2075| v2075_1(void) = EnterFunction : -# 2075| mu2075_2(unknown) = AliasedDefinition : -# 2075| mu2075_3(unknown) = InitializeNonLocal : -# 2075| r2075_4(glval) = VariableAddress[x] : -# 2075| mu2075_5(unsigned int) = InitializeParameter[x] : &:r2075_4 -# 2076| r2076_1(glval) = VariableAddress[y] : -# 2076| mu2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 -# 2077| r2077_1(glval) = VariableAddress[x] : -# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, ~m? -# 2077| r2077_3(unsigned int) = Constant[100] : -# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 -# 2077| v2077_5(void) = ConditionalBranch : r2077_4 +# 2089| unsigned int CommaTest(unsigned int) +# 2089| Block 0 +# 2089| v2089_1(void) = EnterFunction : +# 2089| mu2089_2(unknown) = AliasedDefinition : +# 2089| mu2089_3(unknown) = InitializeNonLocal : +# 2089| r2089_4(glval) = VariableAddress[x] : +# 2089| mu2089_5(unsigned int) = InitializeParameter[x] : &:r2089_4 +# 2090| r2090_1(glval) = VariableAddress[y] : +# 2090| mu2090_2(unsigned int) = Uninitialized[y] : &:r2090_1 +# 2091| r2091_1(glval) = VariableAddress[x] : +# 2091| r2091_2(unsigned int) = Load[x] : &:r2091_1, ~m? +# 2091| r2091_3(unsigned int) = Constant[100] : +# 2091| r2091_4(bool) = CompareLT : r2091_2, r2091_3 +# 2091| v2091_5(void) = ConditionalBranch : r2091_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2077| Block 1 -# 2077| r2077_6(glval) = VariableAddress[#temp2077:7] : -# 2077| r2077_7(unsigned int) = Load[#temp2077:7] : &:r2077_6, ~m? -# 2077| r2077_8(glval) = VariableAddress[y] : -# 2077| mu2077_9(unsigned int) = Store[y] : &:r2077_8, r2077_7 -# 2080| r2080_1(glval) = VariableAddress[#return] : -# 2080| mu2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 -# 2075| r2075_6(glval) = VariableAddress[#return] : -# 2075| v2075_7(void) = ReturnValue : &:r2075_6, ~m? -# 2075| v2075_8(void) = AliasedUse : ~m? -# 2075| v2075_9(void) = ExitFunction : +# 2091| Block 1 +# 2091| r2091_6(glval) = VariableAddress[#temp2091:7] : +# 2091| r2091_7(unsigned int) = Load[#temp2091:7] : &:r2091_6, ~m? +# 2091| r2091_8(glval) = VariableAddress[y] : +# 2091| mu2091_9(unsigned int) = Store[y] : &:r2091_8, r2091_7 +# 2094| r2094_1(glval) = VariableAddress[#return] : +# 2094| mu2094_2(unsigned int) = Uninitialized[#return] : &:r2094_1 +# 2089| r2089_6(glval) = VariableAddress[#return] : +# 2089| v2089_7(void) = ReturnValue : &:r2089_6, ~m? +# 2089| v2089_8(void) = AliasedUse : ~m? +# 2089| v2089_9(void) = ExitFunction : -# 2078| Block 2 -# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : -# 2078| r2078_2(glval) = VariableAddress[x] : -# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, ~m? -# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 -# 2078| mu2078_5(unknown) = ^CallSideEffect : ~m? -# 2078| r2078_6(glval) = VariableAddress[x] : -# 2078| r2078_7(unsigned int) = Load[x] : &:r2078_6, ~m? -# 2078| r2078_8(unsigned int) = CopyValue : r2078_7 -# 2077| r2077_10(glval) = VariableAddress[#temp2077:7] : -# 2077| mu2077_11(unsigned int) = Store[#temp2077:7] : &:r2077_10, r2078_8 +# 2092| Block 2 +# 2092| r2092_1(glval) = FunctionAddress[CommaTestHelper] : +# 2092| r2092_2(glval) = VariableAddress[x] : +# 2092| r2092_3(unsigned int) = Load[x] : &:r2092_2, ~m? +# 2092| v2092_4(void) = Call[CommaTestHelper] : func:r2092_1, 0:r2092_3 +# 2092| mu2092_5(unknown) = ^CallSideEffect : ~m? +# 2092| r2092_6(glval) = VariableAddress[x] : +# 2092| r2092_7(unsigned int) = Load[x] : &:r2092_6, ~m? +# 2092| r2092_8(unsigned int) = CopyValue : r2092_7 +# 2091| r2091_10(glval) = VariableAddress[#temp2091:7] : +# 2091| mu2091_11(unsigned int) = Store[#temp2091:7] : &:r2091_10, r2092_8 #-----| Goto -> Block 1 -# 2079| Block 3 -# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : -# 2079| r2079_2(glval) = VariableAddress[x] : -# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, ~m? -# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 -# 2079| mu2079_5(unknown) = ^CallSideEffect : ~m? -# 2079| r2079_6(int) = Constant[10] : -# 2079| r2079_7(int) = CopyValue : r2079_6 -# 2079| r2079_8(unsigned int) = Convert : r2079_7 -# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : -# 2077| mu2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2079_8 +# 2093| Block 3 +# 2093| r2093_1(glval) = FunctionAddress[CommaTestHelper] : +# 2093| r2093_2(glval) = VariableAddress[x] : +# 2093| r2093_3(unsigned int) = Load[x] : &:r2093_2, ~m? +# 2093| v2093_4(void) = Call[CommaTestHelper] : func:r2093_1, 0:r2093_3 +# 2093| mu2093_5(unknown) = ^CallSideEffect : ~m? +# 2093| r2093_6(int) = Constant[10] : +# 2093| r2093_7(int) = CopyValue : r2093_6 +# 2093| r2093_8(unsigned int) = Convert : r2093_7 +# 2091| r2091_12(glval) = VariableAddress[#temp2091:7] : +# 2091| mu2091_13(unsigned int) = Store[#temp2091:7] : &:r2091_12, r2093_8 #-----| Goto -> Block 1 -# 2082| void NewDeleteMem() -# 2082| Block 0 -# 2082| v2082_1(void) = EnterFunction : -# 2082| mu2082_2(unknown) = AliasedDefinition : -# 2082| mu2082_3(unknown) = InitializeNonLocal : -# 2083| r2083_1(glval) = VariableAddress[x] : -# 2083| r2083_2(glval) = FunctionAddress[operator new] : -# 2083| r2083_3(unsigned long) = Constant[4] : -# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 -# 2083| mu2083_5(unknown) = ^CallSideEffect : ~m? -# 2083| mu2083_6(unknown) = ^InitializeDynamicAllocation : &:r2083_4 -# 2083| r2083_7(int *) = Convert : r2083_4 -# 2083| mu2083_8(int *) = Store[x] : &:r2083_1, r2083_7 -# 2084| r2084_1(int) = Constant[6] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int *) = Load[x] : &:r2084_2, ~m? -# 2084| r2084_4(glval) = CopyValue : r2084_3 -# 2084| mu2084_5(int) = Store[?] : &:r2084_4, r2084_1 -# 2085| r2085_1(glval) = FunctionAddress[operator delete] : -# 2085| r2085_2(glval) = VariableAddress[x] : -# 2085| r2085_3(int *) = Load[x] : &:r2085_2, ~m? -# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 -# 2085| mu2085_5(unknown) = ^CallSideEffect : ~m? -# 2086| v2086_1(void) = NoOp : -# 2082| v2082_4(void) = ReturnVoid : -# 2082| v2082_5(void) = AliasedUse : ~m? -# 2082| v2082_6(void) = ExitFunction : +# 2096| void NewDeleteMem() +# 2096| Block 0 +# 2096| v2096_1(void) = EnterFunction : +# 2096| mu2096_2(unknown) = AliasedDefinition : +# 2096| mu2096_3(unknown) = InitializeNonLocal : +# 2097| r2097_1(glval) = VariableAddress[x] : +# 2097| r2097_2(glval) = FunctionAddress[operator new] : +# 2097| r2097_3(unsigned long) = Constant[4] : +# 2097| r2097_4(void *) = Call[operator new] : func:r2097_2, 0:r2097_3 +# 2097| mu2097_5(unknown) = ^CallSideEffect : ~m? +# 2097| mu2097_6(unknown) = ^InitializeDynamicAllocation : &:r2097_4 +# 2097| r2097_7(int *) = Convert : r2097_4 +# 2097| mu2097_8(int *) = Store[x] : &:r2097_1, r2097_7 +# 2098| r2098_1(int) = Constant[6] : +# 2098| r2098_2(glval) = VariableAddress[x] : +# 2098| r2098_3(int *) = Load[x] : &:r2098_2, ~m? +# 2098| r2098_4(glval) = CopyValue : r2098_3 +# 2098| mu2098_5(int) = Store[?] : &:r2098_4, r2098_1 +# 2099| r2099_1(glval) = FunctionAddress[operator delete] : +# 2099| r2099_2(glval) = VariableAddress[x] : +# 2099| r2099_3(int *) = Load[x] : &:r2099_2, ~m? +# 2099| v2099_4(void) = Call[operator delete] : func:r2099_1, 0:r2099_3 +# 2099| mu2099_5(unknown) = ^CallSideEffect : ~m? +# 2100| v2100_1(void) = NoOp : +# 2096| v2096_4(void) = ReturnVoid : +# 2096| v2096_5(void) = AliasedUse : ~m? +# 2096| v2096_6(void) = ExitFunction : -# 2088| void Base2::Base2() -# 2088| Block 0 -# 2088| v2088_1(void) = EnterFunction : -# 2088| mu2088_2(unknown) = AliasedDefinition : -# 2088| mu2088_3(unknown) = InitializeNonLocal : -# 2088| r2088_4(glval) = VariableAddress[#this] : -# 2088| mu2088_5(glval) = InitializeParameter[#this] : &:r2088_4 -# 2088| r2088_6(glval) = Load[#this] : &:r2088_4, ~m? -# 2088| mu2088_7(Base2) = InitializeIndirection[#this] : &:r2088_6 -# 2088| v2088_8(void) = NoOp : -# 2088| v2088_9(void) = ReturnIndirection[#this] : &:r2088_6, ~m? -# 2088| v2088_10(void) = ReturnVoid : -# 2088| v2088_11(void) = AliasedUse : ~m? -# 2088| v2088_12(void) = ExitFunction : +# 2102| void Base2::Base2() +# 2102| Block 0 +# 2102| v2102_1(void) = EnterFunction : +# 2102| mu2102_2(unknown) = AliasedDefinition : +# 2102| mu2102_3(unknown) = InitializeNonLocal : +# 2102| r2102_4(glval) = VariableAddress[#this] : +# 2102| mu2102_5(glval) = InitializeParameter[#this] : &:r2102_4 +# 2102| r2102_6(glval) = Load[#this] : &:r2102_4, ~m? +# 2102| mu2102_7(Base2) = InitializeIndirection[#this] : &:r2102_6 +# 2102| v2102_8(void) = NoOp : +# 2102| v2102_9(void) = ReturnIndirection[#this] : &:r2102_6, ~m? +# 2102| v2102_10(void) = ReturnVoid : +# 2102| v2102_11(void) = AliasedUse : ~m? +# 2102| v2102_12(void) = ExitFunction : -# 2090| void Base2::operator delete(void*) -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| mu2090_2(unknown) = AliasedDefinition : -# 2090| mu2090_3(unknown) = InitializeNonLocal : -# 2090| r2090_4(glval) = VariableAddress[p] : -# 2090| mu2090_5(void *) = InitializeParameter[p] : &:r2090_4 -# 2090| r2090_6(void *) = Load[p] : &:r2090_4, ~m? -# 2090| mu2090_7(unknown) = InitializeIndirection[p] : &:r2090_6 -# 2091| v2091_1(void) = NoOp : -# 2090| v2090_8(void) = ReturnIndirection[p] : &:r2090_6, ~m? -# 2090| v2090_9(void) = ReturnVoid : -# 2090| v2090_10(void) = AliasedUse : ~m? -# 2090| v2090_11(void) = ExitFunction : +# 2104| void Base2::operator delete(void*) +# 2104| Block 0 +# 2104| v2104_1(void) = EnterFunction : +# 2104| mu2104_2(unknown) = AliasedDefinition : +# 2104| mu2104_3(unknown) = InitializeNonLocal : +# 2104| r2104_4(glval) = VariableAddress[p] : +# 2104| mu2104_5(void *) = InitializeParameter[p] : &:r2104_4 +# 2104| r2104_6(void *) = Load[p] : &:r2104_4, ~m? +# 2104| mu2104_7(unknown) = InitializeIndirection[p] : &:r2104_6 +# 2105| v2105_1(void) = NoOp : +# 2104| v2104_8(void) = ReturnIndirection[p] : &:r2104_6, ~m? +# 2104| v2104_9(void) = ReturnVoid : +# 2104| v2104_10(void) = AliasedUse : ~m? +# 2104| v2104_11(void) = ExitFunction : -# 2092| void Base2::~Base2() -# 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| mu2092_2(unknown) = AliasedDefinition : -# 2092| mu2092_3(unknown) = InitializeNonLocal : -# 2092| r2092_4(glval) = VariableAddress[#this] : -# 2092| mu2092_5(glval) = InitializeParameter[#this] : &:r2092_4 -# 2092| r2092_6(glval) = Load[#this] : &:r2092_4, ~m? -# 2092| mu2092_7(Base2) = InitializeIndirection[#this] : &:r2092_6 -# 2092| v2092_8(void) = NoOp : -# 2092| v2092_9(void) = ReturnIndirection[#this] : &:r2092_6, ~m? -# 2092| v2092_10(void) = ReturnVoid : -# 2092| v2092_11(void) = AliasedUse : ~m? -# 2092| v2092_12(void) = ExitFunction : +# 2106| void Base2::~Base2() +# 2106| Block 0 +# 2106| v2106_1(void) = EnterFunction : +# 2106| mu2106_2(unknown) = AliasedDefinition : +# 2106| mu2106_3(unknown) = InitializeNonLocal : +# 2106| r2106_4(glval) = VariableAddress[#this] : +# 2106| mu2106_5(glval) = InitializeParameter[#this] : &:r2106_4 +# 2106| r2106_6(glval) = Load[#this] : &:r2106_4, ~m? +# 2106| mu2106_7(Base2) = InitializeIndirection[#this] : &:r2106_6 +# 2106| v2106_8(void) = NoOp : +# 2106| v2106_9(void) = ReturnIndirection[#this] : &:r2106_6, ~m? +# 2106| v2106_10(void) = ReturnVoid : +# 2106| v2106_11(void) = AliasedUse : ~m? +# 2106| v2106_12(void) = ExitFunction : -# 2095| void Derived2::Derived2() -# 2095| Block 0 -# 2095| v2095_1(void) = EnterFunction : -# 2095| mu2095_2(unknown) = AliasedDefinition : -# 2095| mu2095_3(unknown) = InitializeNonLocal : -# 2095| r2095_4(glval) = VariableAddress[#this] : -# 2095| mu2095_5(glval) = InitializeParameter[#this] : &:r2095_4 -# 2095| r2095_6(glval) = Load[#this] : &:r2095_4, ~m? -# 2095| mu2095_7(Derived2) = InitializeIndirection[#this] : &:r2095_6 -# 2095| r2095_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2095_5 -# 2095| r2095_9(glval) = FunctionAddress[Base2] : -# 2095| v2095_10(void) = Call[Base2] : func:r2095_9, this:r2095_8 -# 2095| mu2095_11(unknown) = ^CallSideEffect : ~m? -# 2095| mu2095_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_8 -# 2095| v2095_13(void) = NoOp : -# 2095| v2095_14(void) = ReturnIndirection[#this] : &:r2095_6, ~m? -# 2095| v2095_15(void) = ReturnVoid : -# 2095| v2095_16(void) = AliasedUse : ~m? -# 2095| v2095_17(void) = ExitFunction : +# 2109| void Derived2::Derived2() +# 2109| Block 0 +# 2109| v2109_1(void) = EnterFunction : +# 2109| mu2109_2(unknown) = AliasedDefinition : +# 2109| mu2109_3(unknown) = InitializeNonLocal : +# 2109| r2109_4(glval) = VariableAddress[#this] : +# 2109| mu2109_5(glval) = InitializeParameter[#this] : &:r2109_4 +# 2109| r2109_6(glval) = Load[#this] : &:r2109_4, ~m? +# 2109| mu2109_7(Derived2) = InitializeIndirection[#this] : &:r2109_6 +# 2109| r2109_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2109_5 +# 2109| r2109_9(glval) = FunctionAddress[Base2] : +# 2109| v2109_10(void) = Call[Base2] : func:r2109_9, this:r2109_8 +# 2109| mu2109_11(unknown) = ^CallSideEffect : ~m? +# 2109| mu2109_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2109_8 +# 2109| v2109_13(void) = NoOp : +# 2109| v2109_14(void) = ReturnIndirection[#this] : &:r2109_6, ~m? +# 2109| v2109_15(void) = ReturnVoid : +# 2109| v2109_16(void) = AliasedUse : ~m? +# 2109| v2109_17(void) = ExitFunction : -# 2098| void Derived2::~Derived2() -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| mu2098_2(unknown) = AliasedDefinition : -# 2098| mu2098_3(unknown) = InitializeNonLocal : -# 2098| r2098_4(glval) = VariableAddress[#this] : -# 2098| mu2098_5(glval) = InitializeParameter[#this] : &:r2098_4 -# 2098| r2098_6(glval) = Load[#this] : &:r2098_4, ~m? -# 2098| mu2098_7(Derived2) = InitializeIndirection[#this] : &:r2098_6 -# 2098| v2098_8(void) = NoOp : -# 2098| r2098_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2098_5 -# 2098| r2098_10(glval) = FunctionAddress[~Base2] : -# 2098| v2098_11(void) = Call[~Base2] : func:r2098_10, this:r2098_9 -# 2098| mu2098_12(unknown) = ^CallSideEffect : ~m? -# 2098| v2098_13(void) = ReturnIndirection[#this] : &:r2098_6, ~m? -# 2098| v2098_14(void) = ReturnVoid : -# 2098| v2098_15(void) = AliasedUse : ~m? -# 2098| v2098_16(void) = ExitFunction : +# 2112| void Derived2::~Derived2() +# 2112| Block 0 +# 2112| v2112_1(void) = EnterFunction : +# 2112| mu2112_2(unknown) = AliasedDefinition : +# 2112| mu2112_3(unknown) = InitializeNonLocal : +# 2112| r2112_4(glval) = VariableAddress[#this] : +# 2112| mu2112_5(glval) = InitializeParameter[#this] : &:r2112_4 +# 2112| r2112_6(glval) = Load[#this] : &:r2112_4, ~m? +# 2112| mu2112_7(Derived2) = InitializeIndirection[#this] : &:r2112_6 +# 2112| v2112_8(void) = NoOp : +# 2112| r2112_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2112_5 +# 2112| r2112_10(glval) = FunctionAddress[~Base2] : +# 2112| v2112_11(void) = Call[~Base2] : func:r2112_10, this:r2112_9 +# 2112| mu2112_12(unknown) = ^CallSideEffect : ~m? +# 2112| v2112_13(void) = ReturnIndirection[#this] : &:r2112_6, ~m? +# 2112| v2112_14(void) = ReturnVoid : +# 2112| v2112_15(void) = AliasedUse : ~m? +# 2112| v2112_16(void) = ExitFunction : -# 2100| void Derived2::operator delete(void*) -# 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| mu2100_2(unknown) = AliasedDefinition : -# 2100| mu2100_3(unknown) = InitializeNonLocal : -# 2100| r2100_4(glval) = VariableAddress[p] : -# 2100| mu2100_5(void *) = InitializeParameter[p] : &:r2100_4 -# 2100| r2100_6(void *) = Load[p] : &:r2100_4, ~m? -# 2100| mu2100_7(unknown) = InitializeIndirection[p] : &:r2100_6 -# 2101| v2101_1(void) = NoOp : -# 2100| v2100_8(void) = ReturnIndirection[p] : &:r2100_6, ~m? -# 2100| v2100_9(void) = ReturnVoid : -# 2100| v2100_10(void) = AliasedUse : ~m? -# 2100| v2100_11(void) = ExitFunction : +# 2114| void Derived2::operator delete(void*) +# 2114| Block 0 +# 2114| v2114_1(void) = EnterFunction : +# 2114| mu2114_2(unknown) = AliasedDefinition : +# 2114| mu2114_3(unknown) = InitializeNonLocal : +# 2114| r2114_4(glval) = VariableAddress[p] : +# 2114| mu2114_5(void *) = InitializeParameter[p] : &:r2114_4 +# 2114| r2114_6(void *) = Load[p] : &:r2114_4, ~m? +# 2114| mu2114_7(unknown) = InitializeIndirection[p] : &:r2114_6 +# 2115| v2115_1(void) = NoOp : +# 2114| v2114_8(void) = ReturnIndirection[p] : &:r2114_6, ~m? +# 2114| v2114_9(void) = ReturnVoid : +# 2114| v2114_10(void) = AliasedUse : ~m? +# 2114| v2114_11(void) = ExitFunction : -# 2105| int virtual_delete() -# 2105| Block 0 -# 2105| v2105_1(void) = EnterFunction : -# 2105| mu2105_2(unknown) = AliasedDefinition : -# 2105| mu2105_3(unknown) = InitializeNonLocal : -# 2107| r2107_1(glval) = VariableAddress[b1] : -# 2107| r2107_2(glval) = FunctionAddress[operator new] : -# 2107| r2107_3(unsigned long) = Constant[8] : -# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 -# 2107| mu2107_5(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_6(unknown) = ^InitializeDynamicAllocation : &:r2107_4 -# 2107| r2107_7(Base2 *) = Convert : r2107_4 -# 2107| r2107_8(glval) = FunctionAddress[Base2] : -# 2107| v2107_9(void) = Call[Base2] : func:r2107_8, this:r2107_7 -# 2107| mu2107_10(unknown) = ^CallSideEffect : ~m? -# 2107| mu2107_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_7 -# 2107| mu2107_12(Base2 *) = Store[b1] : &:r2107_1, r2107_7 -# 2108| r2108_1(glval) = VariableAddress[b1] : -# 2108| r2108_2(Base2 *) = Load[b1] : &:r2108_1, ~m? -# 2108| r2108_3(glval) = FunctionAddress[~Base2] : -# 2108| v2108_4(void) = Call[~Base2] : func:r2108_3 -# 2108| mu2108_5(unknown) = ^CallSideEffect : ~m? -# 2108| v2108_6(void) = ^IndirectReadSideEffect[-1] : &:r2108_2, ~m? -# 2108| mu2108_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2108_2 -# 2108| r2108_8(glval) = VirtualDeleteFunctionAddress : -# 2108| r2108_9(Base2 *) = CopyValue : r2108_1 -# 2108| v2108_10(void) = Call[?] : func:r2108_8, 0:r2108_9 -# 2108| mu2108_11(unknown) = ^CallSideEffect : ~m? -# 2110| r2110_1(glval) = VariableAddress[b2] : -# 2110| r2110_2(glval) = FunctionAddress[operator new] : -# 2110| r2110_3(unsigned long) = Constant[16] : -# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 -# 2110| mu2110_5(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_6(unknown) = ^InitializeDynamicAllocation : &:r2110_4 -# 2110| r2110_7(Derived2 *) = Convert : r2110_4 -# 2110| r2110_8(glval) = FunctionAddress[Derived2] : -# 2110| v2110_9(void) = Call[Derived2] : func:r2110_8, this:r2110_7 -# 2110| mu2110_10(unknown) = ^CallSideEffect : ~m? -# 2110| mu2110_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_7 -# 2110| r2110_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_7 -# 2110| mu2110_13(Base2 *) = Store[b2] : &:r2110_1, r2110_12 -# 2111| r2111_1(glval) = VariableAddress[b2] : -# 2111| r2111_2(Base2 *) = Load[b2] : &:r2111_1, ~m? -# 2111| r2111_3(glval) = FunctionAddress[~Base2] : -# 2111| v2111_4(void) = Call[~Base2] : func:r2111_3 -# 2111| mu2111_5(unknown) = ^CallSideEffect : ~m? -# 2111| v2111_6(void) = ^IndirectReadSideEffect[-1] : &:r2111_2, ~m? -# 2111| mu2111_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2111_2 -# 2111| r2111_8(glval) = VirtualDeleteFunctionAddress : -# 2111| r2111_9(Base2 *) = CopyValue : r2111_1 -# 2111| v2111_10(void) = Call[?] : func:r2111_8, 0:r2111_9 -# 2111| mu2111_11(unknown) = ^CallSideEffect : ~m? -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[operator new] : -# 2113| r2113_3(unsigned long) = Constant[16] : -# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 -# 2113| mu2113_5(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_6(unknown) = ^InitializeDynamicAllocation : &:r2113_4 -# 2113| r2113_7(Derived2 *) = Convert : r2113_4 -# 2113| r2113_8(glval) = FunctionAddress[Derived2] : -# 2113| v2113_9(void) = Call[Derived2] : func:r2113_8, this:r2113_7 -# 2113| mu2113_10(unknown) = ^CallSideEffect : ~m? -# 2113| mu2113_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_7 -# 2113| mu2113_12(Derived2 *) = Store[d] : &:r2113_1, r2113_7 -# 2114| r2114_1(glval) = VariableAddress[d] : -# 2114| r2114_2(Derived2 *) = Load[d] : &:r2114_1, ~m? -# 2114| r2114_3(glval) = FunctionAddress[~Derived2] : -# 2114| v2114_4(void) = Call[~Derived2] : func:r2114_3 -# 2114| mu2114_5(unknown) = ^CallSideEffect : ~m? -# 2114| v2114_6(void) = ^IndirectReadSideEffect[-1] : &:r2114_2, ~m? -# 2114| mu2114_7(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2114_2 -# 2114| r2114_8(glval) = VirtualDeleteFunctionAddress : -# 2114| r2114_9(Derived2 *) = CopyValue : r2114_1 -# 2114| v2114_10(void) = Call[?] : func:r2114_8, 0:r2114_9 -# 2114| mu2114_11(unknown) = ^CallSideEffect : ~m? -# 2115| r2115_1(glval) = VariableAddress[#return] : -# 2115| mu2115_2(int) = Uninitialized[#return] : &:r2115_1 -# 2105| r2105_4(glval) = VariableAddress[#return] : -# 2105| v2105_5(void) = ReturnValue : &:r2105_4, ~m? -# 2105| v2105_6(void) = AliasedUse : ~m? -# 2105| v2105_7(void) = ExitFunction : - -# 2119| void test_constant_folding() +# 2119| int virtual_delete() # 2119| Block 0 -# 2119| v2119_1(void) = EnterFunction : -# 2119| mu2119_2(unknown) = AliasedDefinition : -# 2119| mu2119_3(unknown) = InitializeNonLocal : -# 2120| r2120_1(glval) = VariableAddress[x] : -# 2120| r2120_2(int) = Constant[116] : -# 2120| mu2120_3(int) = Store[x] : &:r2120_1, r2120_2 -# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2121| r2121_2(int) = Constant[116] : -# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 -# 2121| mu2121_4(unknown) = ^CallSideEffect : ~m? -# 2122| v2122_1(void) = NoOp : -# 2119| v2119_4(void) = ReturnVoid : -# 2119| v2119_5(void) = AliasedUse : ~m? -# 2119| v2119_6(void) = ExitFunction : +# 2119| v2119_1(void) = EnterFunction : +# 2119| mu2119_2(unknown) = AliasedDefinition : +# 2119| mu2119_3(unknown) = InitializeNonLocal : +# 2121| r2121_1(glval) = VariableAddress[b1] : +# 2121| r2121_2(glval) = FunctionAddress[operator new] : +# 2121| r2121_3(unsigned long) = Constant[8] : +# 2121| r2121_4(void *) = Call[operator new] : func:r2121_2, 0:r2121_3 +# 2121| mu2121_5(unknown) = ^CallSideEffect : ~m? +# 2121| mu2121_6(unknown) = ^InitializeDynamicAllocation : &:r2121_4 +# 2121| r2121_7(Base2 *) = Convert : r2121_4 +# 2121| r2121_8(glval) = FunctionAddress[Base2] : +# 2121| v2121_9(void) = Call[Base2] : func:r2121_8, this:r2121_7 +# 2121| mu2121_10(unknown) = ^CallSideEffect : ~m? +# 2121| mu2121_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2121_7 +# 2121| mu2121_12(Base2 *) = Store[b1] : &:r2121_1, r2121_7 +# 2122| r2122_1(glval) = VariableAddress[b1] : +# 2122| r2122_2(Base2 *) = Load[b1] : &:r2122_1, ~m? +# 2122| r2122_3(glval) = FunctionAddress[~Base2] : +# 2122| v2122_4(void) = Call[~Base2] : func:r2122_3 +# 2122| mu2122_5(unknown) = ^CallSideEffect : ~m? +# 2122| v2122_6(void) = ^IndirectReadSideEffect[-1] : &:r2122_2, ~m? +# 2122| mu2122_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2122_2 +# 2122| r2122_8(glval) = VirtualDeleteFunctionAddress : +# 2122| r2122_9(Base2 *) = CopyValue : r2122_1 +# 2122| v2122_10(void) = Call[?] : func:r2122_8, 0:r2122_9 +# 2122| mu2122_11(unknown) = ^CallSideEffect : ~m? +# 2124| r2124_1(glval) = VariableAddress[b2] : +# 2124| r2124_2(glval) = FunctionAddress[operator new] : +# 2124| r2124_3(unsigned long) = Constant[16] : +# 2124| r2124_4(void *) = Call[operator new] : func:r2124_2, 0:r2124_3 +# 2124| mu2124_5(unknown) = ^CallSideEffect : ~m? +# 2124| mu2124_6(unknown) = ^InitializeDynamicAllocation : &:r2124_4 +# 2124| r2124_7(Derived2 *) = Convert : r2124_4 +# 2124| r2124_8(glval) = FunctionAddress[Derived2] : +# 2124| v2124_9(void) = Call[Derived2] : func:r2124_8, this:r2124_7 +# 2124| mu2124_10(unknown) = ^CallSideEffect : ~m? +# 2124| mu2124_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2124_7 +# 2124| r2124_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2124_7 +# 2124| mu2124_13(Base2 *) = Store[b2] : &:r2124_1, r2124_12 +# 2125| r2125_1(glval) = VariableAddress[b2] : +# 2125| r2125_2(Base2 *) = Load[b2] : &:r2125_1, ~m? +# 2125| r2125_3(glval) = FunctionAddress[~Base2] : +# 2125| v2125_4(void) = Call[~Base2] : func:r2125_3 +# 2125| mu2125_5(unknown) = ^CallSideEffect : ~m? +# 2125| v2125_6(void) = ^IndirectReadSideEffect[-1] : &:r2125_2, ~m? +# 2125| mu2125_7(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2125_2 +# 2125| r2125_8(glval) = VirtualDeleteFunctionAddress : +# 2125| r2125_9(Base2 *) = CopyValue : r2125_1 +# 2125| v2125_10(void) = Call[?] : func:r2125_8, 0:r2125_9 +# 2125| mu2125_11(unknown) = ^CallSideEffect : ~m? +# 2127| r2127_1(glval) = VariableAddress[d] : +# 2127| r2127_2(glval) = FunctionAddress[operator new] : +# 2127| r2127_3(unsigned long) = Constant[16] : +# 2127| r2127_4(void *) = Call[operator new] : func:r2127_2, 0:r2127_3 +# 2127| mu2127_5(unknown) = ^CallSideEffect : ~m? +# 2127| mu2127_6(unknown) = ^InitializeDynamicAllocation : &:r2127_4 +# 2127| r2127_7(Derived2 *) = Convert : r2127_4 +# 2127| r2127_8(glval) = FunctionAddress[Derived2] : +# 2127| v2127_9(void) = Call[Derived2] : func:r2127_8, this:r2127_7 +# 2127| mu2127_10(unknown) = ^CallSideEffect : ~m? +# 2127| mu2127_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2127_7 +# 2127| mu2127_12(Derived2 *) = Store[d] : &:r2127_1, r2127_7 +# 2128| r2128_1(glval) = VariableAddress[d] : +# 2128| r2128_2(Derived2 *) = Load[d] : &:r2128_1, ~m? +# 2128| r2128_3(glval) = FunctionAddress[~Derived2] : +# 2128| v2128_4(void) = Call[~Derived2] : func:r2128_3 +# 2128| mu2128_5(unknown) = ^CallSideEffect : ~m? +# 2128| v2128_6(void) = ^IndirectReadSideEffect[-1] : &:r2128_2, ~m? +# 2128| mu2128_7(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2128_2 +# 2128| r2128_8(glval) = VirtualDeleteFunctionAddress : +# 2128| r2128_9(Derived2 *) = CopyValue : r2128_1 +# 2128| v2128_10(void) = Call[?] : func:r2128_8, 0:r2128_9 +# 2128| mu2128_11(unknown) = ^CallSideEffect : ~m? +# 2129| r2129_1(glval) = VariableAddress[#return] : +# 2129| mu2129_2(int) = Uninitialized[#return] : &:r2129_1 +# 2119| r2119_4(glval) = VariableAddress[#return] : +# 2119| v2119_5(void) = ReturnValue : &:r2119_4, ~m? +# 2119| v2119_6(void) = AliasedUse : ~m? +# 2119| v2119_7(void) = ExitFunction : -# 2126| int NonExit() -# 2126| Block 0 -# 2126| v2126_1(void) = EnterFunction : -# 2126| mu2126_2(unknown) = AliasedDefinition : -# 2126| mu2126_3(unknown) = InitializeNonLocal : -# 2127| r2127_1(glval) = VariableAddress[x] : -# 2127| r2127_2(glval) = FunctionAddress[Add] : -# 2127| r2127_3(int) = Constant[3] : -# 2127| r2127_4(int) = Constant[4] : -# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 -# 2127| mu2127_6(unknown) = ^CallSideEffect : ~m? -# 2127| mu2127_7(int) = Store[x] : &:r2127_1, r2127_5 -# 2128| r2128_1(glval) = VariableAddress[x] : -# 2128| r2128_2(int) = Load[x] : &:r2128_1, ~m? -# 2128| r2128_3(int) = Constant[7] : -# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 -# 2128| v2128_5(void) = ConditionalBranch : r2128_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2133| void test_constant_folding() +# 2133| Block 0 +# 2133| v2133_1(void) = EnterFunction : +# 2133| mu2133_2(unknown) = AliasedDefinition : +# 2133| mu2133_3(unknown) = InitializeNonLocal : +# 2134| r2134_1(glval) = VariableAddress[x] : +# 2134| r2134_2(int) = Constant[116] : +# 2134| mu2134_3(int) = Store[x] : &:r2134_1, r2134_2 +# 2135| r2135_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2135| r2135_2(int) = Constant[116] : +# 2135| v2135_3(void) = Call[test_constant_folding_use] : func:r2135_1, 0:r2135_2 +# 2135| mu2135_4(unknown) = ^CallSideEffect : ~m? +# 2136| v2136_1(void) = NoOp : +# 2133| v2133_4(void) = ReturnVoid : +# 2133| v2133_5(void) = AliasedUse : ~m? +# 2133| v2133_6(void) = ExitFunction : -# 2129| Block 1 -# 2129| r2129_1(glval) = FunctionAddress[exit] : -# 2129| r2129_2(int) = Constant[3] : -# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 -# 2129| mu2129_4(unknown) = ^CallSideEffect : ~m? -# 2126| v2126_4(void) = Unreached : - -# 2130| Block 2 -# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : -# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 -# 2130| mu2130_3(unknown) = ^CallSideEffect : ~m? -# 2131| r2131_1(glval) = VariableAddress[#return] : -# 2131| r2131_2(glval) = VariableAddress[x] : -# 2131| r2131_3(int) = Load[x] : &:r2131_2, ~m? -# 2131| mu2131_4(int) = Store[#return] : &:r2131_1, r2131_3 -# 2126| r2126_5(glval) = VariableAddress[#return] : -# 2126| v2126_6(void) = ReturnValue : &:r2126_5, ~m? -# 2126| v2126_7(void) = AliasedUse : ~m? -# 2126| v2126_8(void) = ExitFunction : - -# 2134| void CallsNonExit() -# 2134| Block 0 -# 2134| v2134_1(void) = EnterFunction : -# 2134| mu2134_2(unknown) = AliasedDefinition : -# 2134| mu2134_3(unknown) = InitializeNonLocal : -# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : -# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 -# 2135| mu2135_3(unknown) = ^CallSideEffect : ~m? -# 2136| r2136_1(glval) = FunctionAddress[exit] : -# 2136| r2136_2(int) = Constant[3] : -# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 -# 2136| mu2136_4(unknown) = ^CallSideEffect : ~m? -# 2134| v2134_4(void) = Unreached : - -# 2137| Block 1 -# 2137| v2137_1(void) = NoOp : -# 2134| v2134_5(void) = ReturnVoid : -# 2134| v2134_6(void) = AliasedUse : ~m? -# 2134| v2134_7(void) = ExitFunction : - -# 2139| int TransNonExit() -# 2139| Block 0 -# 2139| v2139_1(void) = EnterFunction : -# 2139| mu2139_2(unknown) = AliasedDefinition : -# 2139| mu2139_3(unknown) = InitializeNonLocal : -# 2140| r2140_1(glval) = VariableAddress[x] : -# 2140| r2140_2(glval) = FunctionAddress[Add] : -# 2140| r2140_3(int) = Constant[3] : -# 2140| r2140_4(int) = Constant[4] : -# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 -# 2140| mu2140_6(unknown) = ^CallSideEffect : ~m? -# 2140| mu2140_7(int) = Store[x] : &:r2140_1, r2140_5 +# 2140| int NonExit() +# 2140| Block 0 +# 2140| v2140_1(void) = EnterFunction : +# 2140| mu2140_2(unknown) = AliasedDefinition : +# 2140| mu2140_3(unknown) = InitializeNonLocal : # 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| r2141_2(int) = Load[x] : &:r2141_1, ~m? -# 2141| r2141_3(int) = Constant[7] : -# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 -# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +# 2141| r2141_2(glval) = FunctionAddress[Add] : +# 2141| r2141_3(int) = Constant[3] : +# 2141| r2141_4(int) = Constant[4] : +# 2141| r2141_5(int) = Call[Add] : func:r2141_2, 0:r2141_3, 1:r2141_4 +# 2141| mu2141_6(unknown) = ^CallSideEffect : ~m? +# 2141| mu2141_7(int) = Store[x] : &:r2141_1, r2141_5 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(int) = Load[x] : &:r2142_1, ~m? +# 2142| r2142_3(int) = Constant[7] : +# 2142| r2142_4(bool) = CompareEQ : r2142_2, r2142_3 +# 2142| v2142_5(void) = ConditionalBranch : r2142_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2142| Block 1 -# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : -# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 -# 2142| mu2142_3(unknown) = ^CallSideEffect : ~m? -#-----| Goto -> Block 2 +# 2143| Block 1 +# 2143| r2143_1(glval) = FunctionAddress[exit] : +# 2143| r2143_2(int) = Constant[3] : +# 2143| v2143_3(void) = Call[exit] : func:r2143_1, 0:r2143_2 +# 2143| mu2143_4(unknown) = ^CallSideEffect : ~m? +# 2140| v2140_4(void) = Unreached : -# 2143| Block 2 -# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : -# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 -# 2143| mu2143_3(unknown) = ^CallSideEffect : ~m? -# 2144| r2144_1(glval) = VariableAddress[#return] : -# 2144| r2144_2(glval) = VariableAddress[x] : -# 2144| r2144_3(int) = Load[x] : &:r2144_2, ~m? -# 2144| mu2144_4(int) = Store[#return] : &:r2144_1, r2144_3 -# 2139| r2139_4(glval) = VariableAddress[#return] : -# 2139| v2139_5(void) = ReturnValue : &:r2139_4, ~m? -# 2139| v2139_6(void) = AliasedUse : ~m? -# 2139| v2139_7(void) = ExitFunction : +# 2144| Block 2 +# 2144| r2144_1(glval) = FunctionAddress[VoidFunc] : +# 2144| v2144_2(void) = Call[VoidFunc] : func:r2144_1 +# 2144| mu2144_3(unknown) = ^CallSideEffect : ~m? +# 2145| r2145_1(glval) = VariableAddress[#return] : +# 2145| r2145_2(glval) = VariableAddress[x] : +# 2145| r2145_3(int) = Load[x] : &:r2145_2, ~m? +# 2145| mu2145_4(int) = Store[#return] : &:r2145_1, r2145_3 +# 2140| r2140_5(glval) = VariableAddress[#return] : +# 2140| v2140_6(void) = ReturnValue : &:r2140_5, ~m? +# 2140| v2140_7(void) = AliasedUse : ~m? +# 2140| v2140_8(void) = ExitFunction : -# 2147| void newArrayCorrectType(size_t) -# 2147| Block 0 -# 2147| v2147_1(void) = EnterFunction : -# 2147| mu2147_2(unknown) = AliasedDefinition : -# 2147| mu2147_3(unknown) = InitializeNonLocal : -# 2147| r2147_4(glval) = VariableAddress[n] : -# 2147| mu2147_5(unsigned long) = InitializeParameter[n] : &:r2147_4 -# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : -# 2148| r2148_2(glval) = VariableAddress[n] : -# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, ~m? -# 2148| r2148_4(unsigned long) = Constant[4] : -# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 -# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 -# 2148| mu2148_7(unknown) = ^CallSideEffect : ~m? -# 2148| mu2148_8(unknown) = ^InitializeDynamicAllocation : &:r2148_6 -# 2148| r2148_9(int *) = Convert : r2148_6 -# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : -# 2149| r2149_2(glval) = VariableAddress[n] : -# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, ~m? -# 2149| r2149_4(unsigned long) = Constant[4] : -# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 -# 2149| r2149_6(float) = Constant[1.0] : -# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 -# 2149| mu2149_8(unknown) = ^CallSideEffect : ~m? -# 2149| mu2149_9(unknown) = ^InitializeDynamicAllocation : &:r2149_7 -# 2149| r2149_10(int *) = Convert : r2149_7 -# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : -# 2150| r2150_2(glval) = VariableAddress[n] : -# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, ~m? -# 2150| r2150_4(unsigned long) = Constant[8] : -# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 -# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 -# 2150| mu2150_7(unknown) = ^CallSideEffect : ~m? -# 2150| mu2150_8(unknown) = ^InitializeDynamicAllocation : &:r2150_6 -# 2150| r2150_9(String *) = Convert : r2150_6 -# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : -# 2151| r2151_2(glval) = VariableAddress[n] : -# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, ~m? -# 2151| r2151_4(unsigned long) = Constant[256] : -# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 -# 2151| r2151_6(align_val_t) = Constant[128] : -# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 -# 2151| mu2151_8(unknown) = ^CallSideEffect : ~m? -# 2151| mu2151_9(unknown) = ^InitializeDynamicAllocation : &:r2151_7 -# 2151| r2151_10(Overaligned *) = Convert : r2151_7 -# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : -# 2152| r2152_2(glval) = VariableAddress[n] : -# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, ~m? -# 2152| r2152_4(unsigned long) = Constant[1] : -# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 -# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 -# 2152| mu2152_7(unknown) = ^CallSideEffect : ~m? -# 2152| mu2152_8(unknown) = ^InitializeDynamicAllocation : &:r2152_6 -# 2152| r2152_9(DefaultCtorWithDefaultParam *) = Convert : r2152_6 -# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : -# 2153| r2153_2(glval) = VariableAddress[n] : -# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, ~m? -# 2153| r2153_4(unsigned long) = Constant[4] : -# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 -# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 -# 2153| mu2153_7(unknown) = ^CallSideEffect : ~m? -# 2153| mu2153_8(unknown) = ^InitializeDynamicAllocation : &:r2153_6 -# 2153| r2153_9(int *) = Convert : r2153_6 -# 2154| v2154_1(void) = NoOp : -# 2147| v2147_6(void) = ReturnVoid : -# 2147| v2147_7(void) = AliasedUse : ~m? -# 2147| v2147_8(void) = ExitFunction : +# 2148| void CallsNonExit() +# 2148| Block 0 +# 2148| v2148_1(void) = EnterFunction : +# 2148| mu2148_2(unknown) = AliasedDefinition : +# 2148| mu2148_3(unknown) = InitializeNonLocal : +# 2149| r2149_1(glval) = FunctionAddress[VoidFunc] : +# 2149| v2149_2(void) = Call[VoidFunc] : func:r2149_1 +# 2149| mu2149_3(unknown) = ^CallSideEffect : ~m? +# 2150| r2150_1(glval) = FunctionAddress[exit] : +# 2150| r2150_2(int) = Constant[3] : +# 2150| v2150_3(void) = Call[exit] : func:r2150_1, 0:r2150_2 +# 2150| mu2150_4(unknown) = ^CallSideEffect : ~m? +# 2148| v2148_4(void) = Unreached : -# 2158| char* test_strtod(char*) -# 2158| Block 0 -# 2158| v2158_1(void) = EnterFunction : -# 2158| mu2158_2(unknown) = AliasedDefinition : -# 2158| mu2158_3(unknown) = InitializeNonLocal : -# 2158| r2158_4(glval) = VariableAddress[s] : -# 2158| mu2158_5(char *) = InitializeParameter[s] : &:r2158_4 -# 2158| r2158_6(char *) = Load[s] : &:r2158_4, ~m? -# 2158| mu2158_7(unknown) = InitializeIndirection[s] : &:r2158_6 -# 2159| r2159_1(glval) = VariableAddress[end] : -# 2159| mu2159_2(char *) = Uninitialized[end] : &:r2159_1 -# 2160| r2160_1(glval) = VariableAddress[d] : -# 2160| r2160_2(glval) = FunctionAddress[strtod] : -# 2160| r2160_3(glval) = VariableAddress[s] : -# 2160| r2160_4(char *) = Load[s] : &:r2160_3, ~m? -# 2160| r2160_5(char *) = Convert : r2160_4 -# 2160| r2160_6(glval) = VariableAddress[end] : -# 2160| r2160_7(char **) = CopyValue : r2160_6 -# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 -# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m? -# 2160| mu2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 -# 2160| mu2160_11(double) = Store[d] : &:r2160_1, r2160_8 -# 2161| r2161_1(glval) = VariableAddress[#return] : -# 2161| r2161_2(glval) = VariableAddress[end] : -# 2161| r2161_3(char *) = Load[end] : &:r2161_2, ~m? -# 2161| mu2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 -# 2158| v2158_8(void) = ReturnIndirection[s] : &:r2158_6, ~m? -# 2158| r2158_9(glval) = VariableAddress[#return] : -# 2158| v2158_10(void) = ReturnValue : &:r2158_9, ~m? -# 2158| v2158_11(void) = AliasedUse : ~m? -# 2158| v2158_12(void) = ExitFunction : +# 2151| Block 1 +# 2151| v2151_1(void) = NoOp : +# 2148| v2148_5(void) = ReturnVoid : +# 2148| v2148_6(void) = AliasedUse : ~m? +# 2148| v2148_7(void) = ExitFunction : -# 2168| void call_as_child_of_ConditionDeclExpr() -# 2168| Block 0 -# 2168| v2168_1(void) = EnterFunction : -# 2168| mu2168_2(unknown) = AliasedDefinition : -# 2168| mu2168_3(unknown) = InitializeNonLocal : -# 2169| r2169_1(glval) = VariableAddress[b] : -# 2169| r2169_2(HasOperatorBool) = Constant[0] : -# 2169| mu2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 -# 2169| r2169_4(glval) = VariableAddress[b] : -# 2169| r2169_5(glval) = FunctionAddress[operator bool] : -# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 -# 2169| mu2169_7(unknown) = ^CallSideEffect : ~m? -# 2169| v2169_8(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, ~m? -# 2169| mu2169_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 -# 2169| r2169_10(bool) = CopyValue : r2169_6 -# 2169| v2169_11(void) = ConditionalBranch : r2169_10 +# 2153| int TransNonExit() +# 2153| Block 0 +# 2153| v2153_1(void) = EnterFunction : +# 2153| mu2153_2(unknown) = AliasedDefinition : +# 2153| mu2153_3(unknown) = InitializeNonLocal : +# 2154| r2154_1(glval) = VariableAddress[x] : +# 2154| r2154_2(glval) = FunctionAddress[Add] : +# 2154| r2154_3(int) = Constant[3] : +# 2154| r2154_4(int) = Constant[4] : +# 2154| r2154_5(int) = Call[Add] : func:r2154_2, 0:r2154_3, 1:r2154_4 +# 2154| mu2154_6(unknown) = ^CallSideEffect : ~m? +# 2154| mu2154_7(int) = Store[x] : &:r2154_1, r2154_5 +# 2155| r2155_1(glval) = VariableAddress[x] : +# 2155| r2155_2(int) = Load[x] : &:r2155_1, ~m? +# 2155| r2155_3(int) = Constant[7] : +# 2155| r2155_4(bool) = CompareEQ : r2155_2, r2155_3 +# 2155| v2155_5(void) = ConditionalBranch : r2155_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2169| Block 1 -# 2169| v2169_12(void) = NoOp : +# 2156| Block 1 +# 2156| r2156_1(glval) = FunctionAddress[CallsNonExit] : +# 2156| v2156_2(void) = Call[CallsNonExit] : func:r2156_1 +# 2156| mu2156_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 2 -# 2170| Block 2 -# 2170| v2170_1(void) = NoOp : -# 2168| v2168_4(void) = ReturnVoid : -# 2168| v2168_5(void) = AliasedUse : ~m? -# 2168| v2168_6(void) = ExitFunction : +# 2157| Block 2 +# 2157| r2157_1(glval) = FunctionAddress[VoidFunc] : +# 2157| v2157_2(void) = Call[VoidFunc] : func:r2157_1 +# 2157| mu2157_3(unknown) = ^CallSideEffect : ~m? +# 2158| r2158_1(glval) = VariableAddress[#return] : +# 2158| r2158_2(glval) = VariableAddress[x] : +# 2158| r2158_3(int) = Load[x] : &:r2158_2, ~m? +# 2158| mu2158_4(int) = Store[#return] : &:r2158_1, r2158_3 +# 2153| r2153_4(glval) = VariableAddress[#return] : +# 2153| v2153_5(void) = ReturnValue : &:r2153_4, ~m? +# 2153| v2153_6(void) = AliasedUse : ~m? +# 2153| v2153_7(void) = ExitFunction : -# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2161| void newArrayCorrectType(size_t) +# 2161| Block 0 +# 2161| v2161_1(void) = EnterFunction : +# 2161| mu2161_2(unknown) = AliasedDefinition : +# 2161| mu2161_3(unknown) = InitializeNonLocal : +# 2161| r2161_4(glval) = VariableAddress[n] : +# 2161| mu2161_5(unsigned long) = InitializeParameter[n] : &:r2161_4 +# 2162| r2162_1(glval) = FunctionAddress[operator new[]] : +# 2162| r2162_2(glval) = VariableAddress[n] : +# 2162| r2162_3(unsigned long) = Load[n] : &:r2162_2, ~m? +# 2162| r2162_4(unsigned long) = Constant[4] : +# 2162| r2162_5(unsigned long) = Mul : r2162_3, r2162_4 +# 2162| r2162_6(void *) = Call[operator new[]] : func:r2162_1, 0:r2162_5 +# 2162| mu2162_7(unknown) = ^CallSideEffect : ~m? +# 2162| mu2162_8(unknown) = ^InitializeDynamicAllocation : &:r2162_6 +# 2162| r2162_9(int *) = Convert : r2162_6 +# 2163| r2163_1(glval) = FunctionAddress[operator new[]] : +# 2163| r2163_2(glval) = VariableAddress[n] : +# 2163| r2163_3(unsigned long) = Load[n] : &:r2163_2, ~m? +# 2163| r2163_4(unsigned long) = Constant[4] : +# 2163| r2163_5(unsigned long) = Mul : r2163_3, r2163_4 +# 2163| r2163_6(float) = Constant[1.0] : +# 2163| r2163_7(void *) = Call[operator new[]] : func:r2163_1, 0:r2163_5, 1:r2163_6 +# 2163| mu2163_8(unknown) = ^CallSideEffect : ~m? +# 2163| mu2163_9(unknown) = ^InitializeDynamicAllocation : &:r2163_7 +# 2163| r2163_10(int *) = Convert : r2163_7 +# 2164| r2164_1(glval) = FunctionAddress[operator new[]] : +# 2164| r2164_2(glval) = VariableAddress[n] : +# 2164| r2164_3(unsigned long) = Load[n] : &:r2164_2, ~m? +# 2164| r2164_4(unsigned long) = Constant[8] : +# 2164| r2164_5(unsigned long) = Mul : r2164_3, r2164_4 +# 2164| r2164_6(void *) = Call[operator new[]] : func:r2164_1, 0:r2164_5 +# 2164| mu2164_7(unknown) = ^CallSideEffect : ~m? +# 2164| mu2164_8(unknown) = ^InitializeDynamicAllocation : &:r2164_6 +# 2164| r2164_9(String *) = Convert : r2164_6 +# 2165| r2165_1(glval) = FunctionAddress[operator new[]] : +# 2165| r2165_2(glval) = VariableAddress[n] : +# 2165| r2165_3(unsigned long) = Load[n] : &:r2165_2, ~m? +# 2165| r2165_4(unsigned long) = Constant[256] : +# 2165| r2165_5(unsigned long) = Mul : r2165_3, r2165_4 +# 2165| r2165_6(align_val_t) = Constant[128] : +# 2165| r2165_7(void *) = Call[operator new[]] : func:r2165_1, 0:r2165_5, 1:r2165_6 +# 2165| mu2165_8(unknown) = ^CallSideEffect : ~m? +# 2165| mu2165_9(unknown) = ^InitializeDynamicAllocation : &:r2165_7 +# 2165| r2165_10(Overaligned *) = Convert : r2165_7 +# 2166| r2166_1(glval) = FunctionAddress[operator new[]] : +# 2166| r2166_2(glval) = VariableAddress[n] : +# 2166| r2166_3(unsigned long) = Load[n] : &:r2166_2, ~m? +# 2166| r2166_4(unsigned long) = Constant[1] : +# 2166| r2166_5(unsigned long) = Mul : r2166_3, r2166_4 +# 2166| r2166_6(void *) = Call[operator new[]] : func:r2166_1, 0:r2166_5 +# 2166| mu2166_7(unknown) = ^CallSideEffect : ~m? +# 2166| mu2166_8(unknown) = ^InitializeDynamicAllocation : &:r2166_6 +# 2166| r2166_9(DefaultCtorWithDefaultParam *) = Convert : r2166_6 +# 2167| r2167_1(glval) = FunctionAddress[operator new[]] : +# 2167| r2167_2(glval) = VariableAddress[n] : +# 2167| r2167_3(unsigned long) = Load[n] : &:r2167_2, ~m? +# 2167| r2167_4(unsigned long) = Constant[4] : +# 2167| r2167_5(unsigned long) = Mul : r2167_3, r2167_4 +# 2167| r2167_6(void *) = Call[operator new[]] : func:r2167_1, 0:r2167_5 +# 2167| mu2167_7(unknown) = ^CallSideEffect : ~m? +# 2167| mu2167_8(unknown) = ^InitializeDynamicAllocation : &:r2167_6 +# 2167| r2167_9(int *) = Convert : r2167_6 +# 2168| v2168_1(void) = NoOp : +# 2161| v2161_6(void) = ReturnVoid : +# 2161| v2161_7(void) = AliasedUse : ~m? +# 2161| v2161_8(void) = ExitFunction : + +# 2172| char* test_strtod(char*) # 2172| Block 0 -# 2172| v2172_1(void) = EnterFunction : -# 2172| mu2172_2(unknown) = AliasedDefinition : -# 2172| mu2172_3(unknown) = InitializeNonLocal : -# 2172| r2172_4(glval) = VariableAddress[#this] : -# 2172| mu2172_5(glval) = InitializeParameter[#this] : &:r2172_4 -# 2172| r2172_6(glval) = Load[#this] : &:r2172_4, ~m? -# 2172| mu2172_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_6 +# 2172| v2172_1(void) = EnterFunction : +# 2172| mu2172_2(unknown) = AliasedDefinition : +# 2172| mu2172_3(unknown) = InitializeNonLocal : +# 2172| r2172_4(glval) = VariableAddress[s] : +# 2172| mu2172_5(char *) = InitializeParameter[s] : &:r2172_4 +# 2172| r2172_6(char *) = Load[s] : &:r2172_4, ~m? +# 2172| mu2172_7(unknown) = InitializeIndirection[s] : &:r2172_6 +# 2173| r2173_1(glval) = VariableAddress[end] : +# 2173| mu2173_2(char *) = Uninitialized[end] : &:r2173_1 +# 2174| r2174_1(glval) = VariableAddress[d] : +# 2174| r2174_2(glval) = FunctionAddress[strtod] : +# 2174| r2174_3(glval) = VariableAddress[s] : +# 2174| r2174_4(char *) = Load[s] : &:r2174_3, ~m? +# 2174| r2174_5(char *) = Convert : r2174_4 +# 2174| r2174_6(glval) = VariableAddress[end] : +# 2174| r2174_7(char **) = CopyValue : r2174_6 +# 2174| r2174_8(double) = Call[strtod] : func:r2174_2, 0:r2174_5, 1:r2174_7 +# 2174| v2174_9(void) = ^BufferReadSideEffect[0] : &:r2174_5, ~m? +# 2174| mu2174_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2174_7 +# 2174| mu2174_11(double) = Store[d] : &:r2174_1, r2174_8 +# 2175| r2175_1(glval) = VariableAddress[#return] : +# 2175| r2175_2(glval) = VariableAddress[end] : +# 2175| r2175_3(char *) = Load[end] : &:r2175_2, ~m? +# 2175| mu2175_4(char *) = Store[#return] : &:r2175_1, r2175_3 +# 2172| v2172_8(void) = ReturnIndirection[s] : &:r2172_6, ~m? +# 2172| r2172_9(glval) = VariableAddress[#return] : +# 2172| v2172_10(void) = ReturnValue : &:r2172_9, ~m? +# 2172| v2172_11(void) = AliasedUse : ~m? +# 2172| v2172_12(void) = ExitFunction : + +# 2182| void call_as_child_of_ConditionDeclExpr() +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| mu2182_2(unknown) = AliasedDefinition : +# 2182| mu2182_3(unknown) = InitializeNonLocal : +# 2183| r2183_1(glval) = VariableAddress[b] : +# 2183| r2183_2(HasOperatorBool) = Constant[0] : +# 2183| mu2183_3(HasOperatorBool) = Store[b] : &:r2183_1, r2183_2 +# 2183| r2183_4(glval) = VariableAddress[b] : +# 2183| r2183_5(glval) = FunctionAddress[operator bool] : +# 2183| r2183_6(bool) = Call[operator bool] : func:r2183_5, this:r2183_4 +# 2183| mu2183_7(unknown) = ^CallSideEffect : ~m? +# 2183| v2183_8(void) = ^IndirectReadSideEffect[-1] : &:r2183_4, ~m? +# 2183| mu2183_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2183_4 +# 2183| r2183_10(bool) = CopyValue : r2183_6 +# 2183| v2183_11(void) = ConditionalBranch : r2183_10 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2183| Block 1 +# 2183| v2183_12(void) = NoOp : +#-----| Goto -> Block 2 + +# 2184| Block 2 +# 2184| v2184_1(void) = NoOp : +# 2182| v2182_4(void) = ReturnVoid : +# 2182| v2182_5(void) = AliasedUse : ~m? +# 2182| v2182_6(void) = ExitFunction : + +# 2186| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2186| Block 0 +# 2186| v2186_1(void) = EnterFunction : +# 2186| mu2186_2(unknown) = AliasedDefinition : +# 2186| mu2186_3(unknown) = InitializeNonLocal : +# 2186| r2186_4(glval) = VariableAddress[#this] : +# 2186| mu2186_5(glval) = InitializeParameter[#this] : &:r2186_4 +# 2186| r2186_6(glval) = Load[#this] : &:r2186_4, ~m? +# 2186| mu2186_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2186_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2172| r2172_8(glval) = FieldAddress[x] : mu2172_5 -# 2172| r2172_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 2172| r2172_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_9, ~m? -# 2172| r2172_11(glval) = CopyValue : r2172_10 -# 2172| r2172_12(glval) = FieldAddress[x] : r2172_11 -# 2172| r2172_13(char *) = Load[?] : &:r2172_12, ~m? -# 2172| mu2172_14(char *) = Store[?] : &:r2172_8, r2172_13 -# 2172| v2172_15(void) = NoOp : -# 2172| v2172_16(void) = ReturnIndirection[#this] : &:r2172_6, ~m? +# 2186| r2186_8(glval) = FieldAddress[x] : mu2186_5 +# 2186| r2186_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2186| r2186_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2186_9, ~m? +# 2186| r2186_11(glval) = CopyValue : r2186_10 +# 2186| r2186_12(glval) = FieldAddress[x] : r2186_11 +# 2186| r2186_13(char *) = Load[?] : &:r2186_12, ~m? +# 2186| mu2186_14(char *) = Store[?] : &:r2186_8, r2186_13 +# 2186| v2186_15(void) = NoOp : +# 2186| v2186_16(void) = ReturnIndirection[#this] : &:r2186_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2172| v2172_17(void) = ReturnVoid : -# 2172| v2172_18(void) = AliasedUse : ~m? -# 2172| v2172_19(void) = ExitFunction : +# 2186| v2186_17(void) = ReturnVoid : +# 2186| v2186_18(void) = AliasedUse : ~m? +# 2186| v2186_19(void) = ExitFunction : -# 2175| void ClassWithDestructor::ClassWithDestructor() -# 2175| Block 0 -# 2175| v2175_1(void) = EnterFunction : -# 2175| mu2175_2(unknown) = AliasedDefinition : -# 2175| mu2175_3(unknown) = InitializeNonLocal : -# 2175| r2175_4(glval) = VariableAddress[#this] : -# 2175| mu2175_5(glval) = InitializeParameter[#this] : &:r2175_4 -# 2175| r2175_6(glval) = Load[#this] : &:r2175_4, ~m? -# 2175| mu2175_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_6 -# 2175| r2175_8(glval) = FunctionAddress[operator new] : -# 2175| r2175_9(unsigned long) = Constant[1] : -# 2175| r2175_10(void *) = Call[operator new] : func:r2175_8, 0:r2175_9 -# 2175| mu2175_11(unknown) = ^CallSideEffect : ~m? -# 2175| mu2175_12(unknown) = ^InitializeDynamicAllocation : &:r2175_10 -# 2175| r2175_13(char *) = Convert : r2175_10 -# 2175| r2175_14(glval) = VariableAddress[#this] : -# 2175| r2175_15(ClassWithDestructor *) = Load[#this] : &:r2175_14, ~m? -# 2175| r2175_16(glval) = FieldAddress[x] : r2175_15 -# 2175| mu2175_17(char *) = Store[?] : &:r2175_16, r2175_13 -# 2175| v2175_18(void) = NoOp : -# 2175| v2175_19(void) = ReturnIndirection[#this] : &:r2175_6, ~m? -# 2175| v2175_20(void) = ReturnVoid : -# 2175| v2175_21(void) = AliasedUse : ~m? -# 2175| v2175_22(void) = ExitFunction : +# 2189| void ClassWithDestructor::ClassWithDestructor() +# 2189| Block 0 +# 2189| v2189_1(void) = EnterFunction : +# 2189| mu2189_2(unknown) = AliasedDefinition : +# 2189| mu2189_3(unknown) = InitializeNonLocal : +# 2189| r2189_4(glval) = VariableAddress[#this] : +# 2189| mu2189_5(glval) = InitializeParameter[#this] : &:r2189_4 +# 2189| r2189_6(glval) = Load[#this] : &:r2189_4, ~m? +# 2189| mu2189_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2189_6 +# 2189| r2189_8(glval) = FunctionAddress[operator new] : +# 2189| r2189_9(unsigned long) = Constant[1] : +# 2189| r2189_10(void *) = Call[operator new] : func:r2189_8, 0:r2189_9 +# 2189| mu2189_11(unknown) = ^CallSideEffect : ~m? +# 2189| mu2189_12(unknown) = ^InitializeDynamicAllocation : &:r2189_10 +# 2189| r2189_13(char *) = Convert : r2189_10 +# 2189| r2189_14(glval) = VariableAddress[#this] : +# 2189| r2189_15(ClassWithDestructor *) = Load[#this] : &:r2189_14, ~m? +# 2189| r2189_16(glval) = FieldAddress[x] : r2189_15 +# 2189| mu2189_17(char *) = Store[?] : &:r2189_16, r2189_13 +# 2189| v2189_18(void) = NoOp : +# 2189| v2189_19(void) = ReturnIndirection[#this] : &:r2189_6, ~m? +# 2189| v2189_20(void) = ReturnVoid : +# 2189| v2189_21(void) = AliasedUse : ~m? +# 2189| v2189_22(void) = ExitFunction : -# 2176| void ClassWithDestructor::~ClassWithDestructor() -# 2176| Block 0 -# 2176| v2176_1(void) = EnterFunction : -# 2176| mu2176_2(unknown) = AliasedDefinition : -# 2176| mu2176_3(unknown) = InitializeNonLocal : -# 2176| r2176_4(glval) = VariableAddress[#this] : -# 2176| mu2176_5(glval) = InitializeParameter[#this] : &:r2176_4 -# 2176| r2176_6(glval) = Load[#this] : &:r2176_4, ~m? -# 2176| mu2176_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_6 -# 2176| r2176_8(glval) = FunctionAddress[operator delete] : -# 2176| r2176_9(glval) = VariableAddress[#this] : -# 2176| r2176_10(ClassWithDestructor *) = Load[#this] : &:r2176_9, ~m? -# 2176| r2176_11(glval) = FieldAddress[x] : r2176_10 -# 2176| r2176_12(char *) = Load[?] : &:r2176_11, ~m? -# 2176| v2176_13(void) = Call[operator delete] : func:r2176_8, 0:r2176_12 -# 2176| mu2176_14(unknown) = ^CallSideEffect : ~m? -# 2176| v2176_15(void) = NoOp : -# 2176| v2176_16(void) = ReturnIndirection[#this] : &:r2176_6, ~m? -# 2176| v2176_17(void) = ReturnVoid : -# 2176| v2176_18(void) = AliasedUse : ~m? -# 2176| v2176_19(void) = ExitFunction : +# 2190| void ClassWithDestructor::~ClassWithDestructor() +# 2190| Block 0 +# 2190| v2190_1(void) = EnterFunction : +# 2190| mu2190_2(unknown) = AliasedDefinition : +# 2190| mu2190_3(unknown) = InitializeNonLocal : +# 2190| r2190_4(glval) = VariableAddress[#this] : +# 2190| mu2190_5(glval) = InitializeParameter[#this] : &:r2190_4 +# 2190| r2190_6(glval) = Load[#this] : &:r2190_4, ~m? +# 2190| mu2190_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2190_6 +# 2190| r2190_8(glval) = FunctionAddress[operator delete] : +# 2190| r2190_9(glval) = VariableAddress[#this] : +# 2190| r2190_10(ClassWithDestructor *) = Load[#this] : &:r2190_9, ~m? +# 2190| r2190_11(glval) = FieldAddress[x] : r2190_10 +# 2190| r2190_12(char *) = Load[?] : &:r2190_11, ~m? +# 2190| v2190_13(void) = Call[operator delete] : func:r2190_8, 0:r2190_12 +# 2190| mu2190_14(unknown) = ^CallSideEffect : ~m? +# 2190| v2190_15(void) = NoOp : +# 2190| v2190_16(void) = ReturnIndirection[#this] : &:r2190_6, ~m? +# 2190| v2190_17(void) = ReturnVoid : +# 2190| v2190_18(void) = AliasedUse : ~m? +# 2190| v2190_19(void) = ExitFunction : -# 2178| void ClassWithDestructor::set_x(char) -# 2178| Block 0 -# 2178| v2178_1(void) = EnterFunction : -# 2178| mu2178_2(unknown) = AliasedDefinition : -# 2178| mu2178_3(unknown) = InitializeNonLocal : -# 2178| r2178_4(glval) = VariableAddress[#this] : -# 2178| mu2178_5(glval) = InitializeParameter[#this] : &:r2178_4 -# 2178| r2178_6(glval) = Load[#this] : &:r2178_4, ~m? -# 2178| mu2178_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_6 -# 2178| r2178_8(glval) = VariableAddress[y] : -# 2178| mu2178_9(char) = InitializeParameter[y] : &:r2178_8 -# 2178| r2178_10(glval) = VariableAddress[y] : -# 2178| r2178_11(char) = Load[y] : &:r2178_10, ~m? -# 2178| r2178_12(glval) = VariableAddress[#this] : -# 2178| r2178_13(ClassWithDestructor *) = Load[#this] : &:r2178_12, ~m? -# 2178| r2178_14(glval) = FieldAddress[x] : r2178_13 -# 2178| r2178_15(char *) = Load[?] : &:r2178_14, ~m? -# 2178| r2178_16(glval) = CopyValue : r2178_15 -# 2178| mu2178_17(char) = Store[?] : &:r2178_16, r2178_11 -# 2178| v2178_18(void) = NoOp : -# 2178| v2178_19(void) = ReturnIndirection[#this] : &:r2178_6, ~m? -# 2178| v2178_20(void) = ReturnVoid : -# 2178| v2178_21(void) = AliasedUse : ~m? -# 2178| v2178_22(void) = ExitFunction : +# 2192| void ClassWithDestructor::set_x(char) +# 2192| Block 0 +# 2192| v2192_1(void) = EnterFunction : +# 2192| mu2192_2(unknown) = AliasedDefinition : +# 2192| mu2192_3(unknown) = InitializeNonLocal : +# 2192| r2192_4(glval) = VariableAddress[#this] : +# 2192| mu2192_5(glval) = InitializeParameter[#this] : &:r2192_4 +# 2192| r2192_6(glval) = Load[#this] : &:r2192_4, ~m? +# 2192| mu2192_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2192_6 +# 2192| r2192_8(glval) = VariableAddress[y] : +# 2192| mu2192_9(char) = InitializeParameter[y] : &:r2192_8 +# 2192| r2192_10(glval) = VariableAddress[y] : +# 2192| r2192_11(char) = Load[y] : &:r2192_10, ~m? +# 2192| r2192_12(glval) = VariableAddress[#this] : +# 2192| r2192_13(ClassWithDestructor *) = Load[#this] : &:r2192_12, ~m? +# 2192| r2192_14(glval) = FieldAddress[x] : r2192_13 +# 2192| r2192_15(char *) = Load[?] : &:r2192_14, ~m? +# 2192| r2192_16(glval) = CopyValue : r2192_15 +# 2192| mu2192_17(char) = Store[?] : &:r2192_16, r2192_11 +# 2192| v2192_18(void) = NoOp : +# 2192| v2192_19(void) = ReturnIndirection[#this] : &:r2192_6, ~m? +# 2192| v2192_20(void) = ReturnVoid : +# 2192| v2192_21(void) = AliasedUse : ~m? +# 2192| v2192_22(void) = ExitFunction : -# 2179| char ClassWithDestructor::get_x() -# 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| mu2179_2(unknown) = AliasedDefinition : -# 2179| mu2179_3(unknown) = InitializeNonLocal : -# 2179| r2179_4(glval) = VariableAddress[#this] : -# 2179| mu2179_5(glval) = InitializeParameter[#this] : &:r2179_4 -# 2179| r2179_6(glval) = Load[#this] : &:r2179_4, ~m? -# 2179| mu2179_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_6 -# 2179| r2179_8(glval) = VariableAddress[#return] : -# 2179| r2179_9(glval) = VariableAddress[#this] : -# 2179| r2179_10(ClassWithDestructor *) = Load[#this] : &:r2179_9, ~m? -# 2179| r2179_11(glval) = FieldAddress[x] : r2179_10 -# 2179| r2179_12(char *) = Load[?] : &:r2179_11, ~m? -# 2179| r2179_13(char) = Load[?] : &:r2179_12, ~m? -# 2179| mu2179_14(char) = Store[#return] : &:r2179_8, r2179_13 -# 2179| v2179_15(void) = ReturnIndirection[#this] : &:r2179_6, ~m? -# 2179| r2179_16(glval) = VariableAddress[#return] : -# 2179| v2179_17(void) = ReturnValue : &:r2179_16, ~m? -# 2179| v2179_18(void) = AliasedUse : ~m? -# 2179| v2179_19(void) = ExitFunction : +# 2193| char ClassWithDestructor::get_x() +# 2193| Block 0 +# 2193| v2193_1(void) = EnterFunction : +# 2193| mu2193_2(unknown) = AliasedDefinition : +# 2193| mu2193_3(unknown) = InitializeNonLocal : +# 2193| r2193_4(glval) = VariableAddress[#this] : +# 2193| mu2193_5(glval) = InitializeParameter[#this] : &:r2193_4 +# 2193| r2193_6(glval) = Load[#this] : &:r2193_4, ~m? +# 2193| mu2193_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2193_6 +# 2193| r2193_8(glval) = VariableAddress[#return] : +# 2193| r2193_9(glval) = VariableAddress[#this] : +# 2193| r2193_10(ClassWithDestructor *) = Load[#this] : &:r2193_9, ~m? +# 2193| r2193_11(glval) = FieldAddress[x] : r2193_10 +# 2193| r2193_12(char *) = Load[?] : &:r2193_11, ~m? +# 2193| r2193_13(char) = Load[?] : &:r2193_12, ~m? +# 2193| mu2193_14(char) = Store[#return] : &:r2193_8, r2193_13 +# 2193| v2193_15(void) = ReturnIndirection[#this] : &:r2193_6, ~m? +# 2193| r2193_16(glval) = VariableAddress[#return] : +# 2193| v2193_17(void) = ReturnValue : &:r2193_16, ~m? +# 2193| v2193_18(void) = AliasedUse : ~m? +# 2193| v2193_19(void) = ExitFunction : -# 2182| bool initialization_with_destructor_bool -# 2182| Block 0 -# 2182| v2182_1(void) = EnterFunction : -# 2182| mu2182_2(unknown) = AliasedDefinition : -# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2182| r2182_4(bool) = Constant[1] : -# 2182| mu2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 -# 2182| v2182_6(void) = ReturnVoid : -# 2182| v2182_7(void) = AliasedUse : ~m? -# 2182| v2182_8(void) = ExitFunction : +# 2196| bool initialization_with_destructor_bool +# 2196| Block 0 +# 2196| v2196_1(void) = EnterFunction : +# 2196| mu2196_2(unknown) = AliasedDefinition : +# 2196| r2196_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2196| r2196_4(bool) = Constant[1] : +# 2196| mu2196_5(bool) = Store[initialization_with_destructor_bool] : &:r2196_3, r2196_4 +# 2196| v2196_6(void) = ReturnVoid : +# 2196| v2196_7(void) = AliasedUse : ~m? +# 2196| v2196_8(void) = ExitFunction : -# 2184| void initialization_with_destructor(bool, char) -# 2184| Block 0 -# 2184| v2184_1(void) = EnterFunction : -# 2184| mu2184_2(unknown) = AliasedDefinition : -# 2184| mu2184_3(unknown) = InitializeNonLocal : -# 2184| r2184_4(glval) = VariableAddress[b] : -# 2184| mu2184_5(bool) = InitializeParameter[b] : &:r2184_4 -# 2184| r2184_6(glval) = VariableAddress[c] : -# 2184| mu2184_7(char) = InitializeParameter[c] : &:r2184_6 -# 2185| r2185_1(glval) = VariableAddress[x] : -# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 -# 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 -# 2185| mu2185_5(unknown) = ^CallSideEffect : ~m? -# 2185| mu2185_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2185| r2185_7(glval) = VariableAddress[b] : -# 2185| r2185_8(bool) = Load[b] : &:r2185_7, ~m? -# 2185| v2185_9(void) = ConditionalBranch : r2185_8 +# 2198| void initialization_with_destructor(bool, char) +# 2198| Block 0 +# 2198| v2198_1(void) = EnterFunction : +# 2198| mu2198_2(unknown) = AliasedDefinition : +# 2198| mu2198_3(unknown) = InitializeNonLocal : +# 2198| r2198_4(glval) = VariableAddress[b] : +# 2198| mu2198_5(bool) = InitializeParameter[b] : &:r2198_4 +# 2198| r2198_6(glval) = VariableAddress[c] : +# 2198| mu2198_7(char) = InitializeParameter[c] : &:r2198_6 +# 2199| r2199_1(glval) = VariableAddress[x] : +# 2199| mu2199_2(ClassWithDestructor) = Uninitialized[x] : &:r2199_1 +# 2199| r2199_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2199| v2199_4(void) = Call[ClassWithDestructor] : func:r2199_3, this:r2199_1 +# 2199| mu2199_5(unknown) = ^CallSideEffect : ~m? +# 2199| mu2199_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2199_1 +# 2199| r2199_7(glval) = VariableAddress[b] : +# 2199| r2199_8(bool) = Load[b] : &:r2199_7, ~m? +# 2199| v2199_9(void) = ConditionalBranch : r2199_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 2184| Block 1 -# 2184| v2184_8(void) = ReturnVoid : -# 2184| v2184_9(void) = AliasedUse : ~m? -# 2184| v2184_10(void) = ExitFunction : +# 2198| Block 1 +# 2198| v2198_8(void) = ReturnVoid : +# 2198| v2198_9(void) = AliasedUse : ~m? +# 2198| v2198_10(void) = ExitFunction : -# 2186| Block 2 -# 2186| r2186_1(glval) = VariableAddress[x] : -# 2186| r2186_2(glval) = FunctionAddress[set_x] : -# 2186| r2186_3(char) = Constant[97] : -# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 -# 2186| mu2186_5(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_6(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, ~m? -# 2186| mu2186_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| r2186_8(glval) = VariableAddress[x] : -# 2186| r2186_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2186| v2186_10(void) = Call[~ClassWithDestructor] : func:r2186_9, this:r2186_8 -# 2186| mu2186_11(unknown) = ^CallSideEffect : ~m? -# 2186| v2186_12(void) = ^IndirectReadSideEffect[-1] : &:r2186_8, ~m? -# 2186| mu2186_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_8 +# 2200| Block 2 +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| r2200_2(glval) = FunctionAddress[set_x] : +# 2200| r2200_3(char) = Constant[97] : +# 2200| v2200_4(void) = Call[set_x] : func:r2200_2, this:r2200_1, 0:r2200_3 +# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? +# 2200| v2200_6(void) = ^IndirectReadSideEffect[-1] : &:r2200_1, ~m? +# 2200| mu2200_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2200| r2200_8(glval) = VariableAddress[x] : +# 2200| r2200_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2200| v2200_10(void) = Call[~ClassWithDestructor] : func:r2200_9, this:r2200_8 +# 2200| mu2200_11(unknown) = ^CallSideEffect : ~m? +# 2200| v2200_12(void) = ^IndirectReadSideEffect[-1] : &:r2200_8, ~m? +# 2200| mu2200_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_8 #-----| Goto -> Block 3 -# 2188| Block 3 -# 2188| r2188_1(glval) = VariableAddress[x] : -# 2188| mu2188_2(ClassWithDestructor) = Uninitialized[x] : &:r2188_1 -# 2188| r2188_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2188| v2188_4(void) = Call[ClassWithDestructor] : func:r2188_3, this:r2188_1 -# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? -# 2188| mu2188_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_1 -# 2188| r2188_7(bool) = Constant[1] : -# 2188| v2188_8(void) = ConditionalBranch : r2188_7 +# 2202| Block 3 +# 2202| r2202_1(glval) = VariableAddress[x] : +# 2202| mu2202_2(ClassWithDestructor) = Uninitialized[x] : &:r2202_1 +# 2202| r2202_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2202| v2202_4(void) = Call[ClassWithDestructor] : func:r2202_3, this:r2202_1 +# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? +# 2202| mu2202_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2202| r2202_7(bool) = Constant[1] : +# 2202| v2202_8(void) = ConditionalBranch : r2202_7 #-----| False -> Block 6 #-----| True -> Block 4 -# 2189| Block 4 -# 2189| r2189_1(glval) = VariableAddress[x] : -# 2189| r2189_2(glval) = FunctionAddress[set_x] : -# 2189| r2189_3(char) = Constant[97] : -# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 -# 2189| mu2189_5(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_6(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, ~m? -# 2189| mu2189_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 +# 2203| Block 4 +# 2203| r2203_1(glval) = VariableAddress[x] : +# 2203| r2203_2(glval) = FunctionAddress[set_x] : +# 2203| r2203_3(char) = Constant[97] : +# 2203| v2203_4(void) = Call[set_x] : func:r2203_2, this:r2203_1, 0:r2203_3 +# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_6(void) = ^IndirectReadSideEffect[-1] : &:r2203_1, ~m? +# 2203| mu2203_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_1 #-----| Goto -> Block 6 -# 2189| Block 5 -# 2189| r2189_8(glval) = VariableAddress[x] : -# 2189| r2189_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2189| v2189_10(void) = Call[~ClassWithDestructor] : func:r2189_9, this:r2189_8 -# 2189| mu2189_11(unknown) = ^CallSideEffect : ~m? -# 2189| v2189_12(void) = ^IndirectReadSideEffect[-1] : &:r2189_8, ~m? -# 2189| mu2189_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_8 +# 2203| Block 5 +# 2203| r2203_8(glval) = VariableAddress[x] : +# 2203| r2203_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2203| v2203_10(void) = Call[~ClassWithDestructor] : func:r2203_9, this:r2203_8 +# 2203| mu2203_11(unknown) = ^CallSideEffect : ~m? +# 2203| v2203_12(void) = ^IndirectReadSideEffect[-1] : &:r2203_8, ~m? +# 2203| mu2203_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2203_8 #-----| Goto -> Block 6 -# 2191| Block 6 -# 2191| r2191_1(glval) = VariableAddress[x] : -# 2191| mu2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 -# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 -# 2191| mu2191_5(unknown) = ^CallSideEffect : ~m? -# 2191| mu2191_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 -# 2191| r2191_7(glval) = VariableAddress[c] : -# 2191| r2191_8(char) = Load[c] : &:r2191_7, ~m? -# 2191| r2191_9(int) = Convert : r2191_8 -# 2191| v2191_10(void) = Switch : r2191_9 +# 2205| Block 6 +# 2205| r2205_1(glval) = VariableAddress[x] : +# 2205| mu2205_2(ClassWithDestructor) = Uninitialized[x] : &:r2205_1 +# 2205| r2205_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2205| v2205_4(void) = Call[ClassWithDestructor] : func:r2205_3, this:r2205_1 +# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? +# 2205| mu2205_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| r2205_7(glval) = VariableAddress[c] : +# 2205| r2205_8(char) = Load[c] : &:r2205_7, ~m? +# 2205| r2205_9(int) = Convert : r2205_8 +# 2205| v2205_10(void) = Switch : r2205_9 #-----| Case[97] -> Block 7 #-----| Default -> Block 8 -# 2192| Block 7 -# 2192| v2192_1(void) = NoOp : -# 2193| r2193_1(glval) = VariableAddress[x] : -# 2193| r2193_2(glval) = FunctionAddress[set_x] : -# 2193| r2193_3(char) = Constant[97] : -# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 -# 2193| mu2193_5(unknown) = ^CallSideEffect : ~m? -# 2193| v2193_6(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, ~m? -# 2193| mu2193_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 -# 2194| v2194_1(void) = NoOp : +# 2206| Block 7 +# 2206| v2206_1(void) = NoOp : +# 2207| r2207_1(glval) = VariableAddress[x] : +# 2207| r2207_2(glval) = FunctionAddress[set_x] : +# 2207| r2207_3(char) = Constant[97] : +# 2207| v2207_4(void) = Call[set_x] : func:r2207_2, this:r2207_1, 0:r2207_3 +# 2207| mu2207_5(unknown) = ^CallSideEffect : ~m? +# 2207| v2207_6(void) = ^IndirectReadSideEffect[-1] : &:r2207_1, ~m? +# 2207| mu2207_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2207_1 +# 2208| v2208_1(void) = NoOp : #-----| Goto -> Block 10 -# 2195| Block 8 -# 2195| v2195_1(void) = NoOp : -# 2196| r2196_1(glval) = VariableAddress[x] : -# 2196| r2196_2(glval) = FunctionAddress[set_x] : -# 2196| r2196_3(char) = Constant[98] : -# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 -# 2196| mu2196_5(unknown) = ^CallSideEffect : ~m? -# 2196| v2196_6(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, ~m? -# 2196| mu2196_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 -# 2197| v2197_1(void) = NoOp : +# 2209| Block 8 +# 2209| v2209_1(void) = NoOp : +# 2210| r2210_1(glval) = VariableAddress[x] : +# 2210| r2210_2(glval) = FunctionAddress[set_x] : +# 2210| r2210_3(char) = Constant[98] : +# 2210| v2210_4(void) = Call[set_x] : func:r2210_2, this:r2210_1, 0:r2210_3 +# 2210| mu2210_5(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_6(void) = ^IndirectReadSideEffect[-1] : &:r2210_1, ~m? +# 2210| mu2210_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2211| v2211_1(void) = NoOp : #-----| Goto -> Block 10 -# 2198| Block 9 -# 2198| r2198_1(glval) = VariableAddress[x] : -# 2198| r2198_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2198| v2198_3(void) = Call[~ClassWithDestructor] : func:r2198_2, this:r2198_1 -# 2198| mu2198_4(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_5(void) = ^IndirectReadSideEffect[-1] : &:r2198_1, ~m? -# 2198| mu2198_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2198_1 +# 2212| Block 9 +# 2212| r2212_1(glval) = VariableAddress[x] : +# 2212| r2212_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2212| v2212_3(void) = Call[~ClassWithDestructor] : func:r2212_2, this:r2212_1 +# 2212| mu2212_4(unknown) = ^CallSideEffect : ~m? +# 2212| v2212_5(void) = ^IndirectReadSideEffect[-1] : &:r2212_1, ~m? +# 2212| mu2212_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2212_1 #-----| Goto -> Block 10 -# 2198| Block 10 -# 2198| v2198_7(void) = NoOp : -# 2200| r2200_1(glval) = VariableAddress[x] : -# 2200| mu2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 -# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 -# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? -# 2200| mu2200_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 -# 2201| r2201_1(glval>) = VariableAddress[ys] : -# 2201| mu2201_2(vector) = Uninitialized[ys] : &:r2201_1 -# 2201| r2201_3(glval) = FunctionAddress[vector] : -# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : -# 2201| r2201_5(glval) = VariableAddress[x] : -# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, ~m? -# 2201| mu2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 -# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, ~m? -# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 -# 2201| mu2201_10(unknown) = ^CallSideEffect : ~m? -# 2201| mu2201_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 -# 2201| r2201_12(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_13(glval>) = VariableAddress[ys] : -# 2201| r2201_14(vector &) = CopyValue : r2201_13 -# 2201| mu2201_15(vector &) = Store[(__range)] : &:r2201_12, r2201_14 -# 2201| r2201_16(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_17(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_18(vector &) = Load[(__range)] : &:r2201_17, ~m? -#-----| r0_1(glval>) = CopyValue : r2201_18 +# 2212| Block 10 +# 2212| v2212_7(void) = NoOp : +# 2214| r2214_1(glval) = VariableAddress[x] : +# 2214| mu2214_2(ClassWithDestructor) = Uninitialized[x] : &:r2214_1 +# 2214| r2214_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2214| v2214_4(void) = Call[ClassWithDestructor] : func:r2214_3, this:r2214_1 +# 2214| mu2214_5(unknown) = ^CallSideEffect : ~m? +# 2214| mu2214_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| mu2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, ~m? +# 2215| mu2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, ~m? +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? +# 2215| mu2215_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| r2215_12(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_13(glval>) = VariableAddress[ys] : +# 2215| r2215_14(vector &) = CopyValue : r2215_13 +# 2215| mu2215_15(vector &) = Store[(__range)] : &:r2215_12, r2215_14 +# 2215| r2215_16(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_17(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_18(vector &) = Load[(__range)] : &:r2215_17, ~m? +#-----| r0_1(glval>) = CopyValue : r2215_18 #-----| r0_2(glval>) = Convert : r0_1 -# 2201| r2201_19(glval) = FunctionAddress[begin] : -# 2201| r2201_20(iterator) = Call[begin] : func:r2201_19, this:r0_2 +# 2215| r2215_19(glval) = FunctionAddress[begin] : +# 2215| r2215_20(iterator) = Call[begin] : func:r2215_19, this:r0_2 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2201| mu2201_21(iterator) = Store[(__begin)] : &:r2201_16, r2201_20 -# 2201| r2201_22(glval>) = VariableAddress[(__end)] : -# 2201| r2201_23(glval &>) = VariableAddress[(__range)] : -# 2201| r2201_24(vector &) = Load[(__range)] : &:r2201_23, ~m? -#-----| r0_4(glval>) = CopyValue : r2201_24 +# 2215| mu2215_21(iterator) = Store[(__begin)] : &:r2215_16, r2215_20 +# 2215| r2215_22(glval>) = VariableAddress[(__end)] : +# 2215| r2215_23(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_24(vector &) = Load[(__range)] : &:r2215_23, ~m? +#-----| r0_4(glval>) = CopyValue : r2215_24 #-----| r0_5(glval>) = Convert : r0_4 -# 2201| r2201_25(glval) = FunctionAddress[end] : -# 2201| r2201_26(iterator) = Call[end] : func:r2201_25, this:r0_5 +# 2215| r2215_25(glval) = FunctionAddress[end] : +# 2215| r2215_26(iterator) = Call[end] : func:r2215_25, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2201| mu2201_27(iterator) = Store[(__end)] : &:r2201_22, r2201_26 +# 2215| mu2215_27(iterator) = Store[(__end)] : &:r2215_22, r2215_26 #-----| Goto -> Block 11 -# 2201| Block 11 -# 2201| r2201_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2201_28 -# 2201| r2201_29(glval) = FunctionAddress[operator!=] : +# 2215| Block 11 +# 2215| r2215_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2215_28 +# 2215| r2215_29(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_30(glval) = FunctionAddress[iterator] : -# 2201| r2201_31(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2201_31 +# 2215| r2215_30(glval) = FunctionAddress[iterator] : +# 2215| r2215_31(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2215_31 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2201| v2201_32(void) = Call[iterator] : func:r2201_30, this:r0_8, 0:r0_11 -# 2201| mu2201_33(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_32(void) = Call[iterator] : func:r2215_30, this:r0_8, 0:r0_11 +# 2215| mu2215_33(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? -# 2201| mu2201_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? -# 2201| r2201_35(bool) = Call[operator!=] : func:r2201_29, this:r0_7, 0:r0_13 -# 2201| mu2201_36(unknown) = ^CallSideEffect : ~m? +# 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_7, 0:r0_13 +# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2201| v2201_37(void) = ConditionalBranch : r2201_35 +# 2215| v2215_37(void) = ConditionalBranch : r2215_35 #-----| False -> Block 14 #-----| True -> Block 12 -# 2201| Block 12 -# 2201| r2201_38(glval) = VariableAddress[y] : -# 2201| r2201_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2201_39 -# 2201| r2201_40(glval) = FunctionAddress[operator*] : -# 2201| r2201_41(ClassWithDestructor &) = Call[operator*] : func:r2201_40, this:r0_15 -# 2201| mu2201_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2201| r2201_43(ClassWithDestructor) = Load[?] : &:r2201_41, ~m? -# 2201| mu2201_44(ClassWithDestructor) = Store[y] : &:r2201_38, r2201_43 -# 2202| r2202_1(glval) = VariableAddress[y] : -# 2202| r2202_2(glval) = FunctionAddress[set_x] : -# 2202| r2202_3(char) = Constant[97] : -# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 -# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? -# 2202| v2202_6(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, ~m? -# 2202| mu2202_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2201| r2201_45(glval) = VariableAddress[y] : -# 2201| r2201_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_47(void) = Call[~ClassWithDestructor] : func:r2201_46, this:r2201_45 -# 2201| mu2201_48(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_49(void) = ^IndirectReadSideEffect[-1] : &:r2201_45, ~m? -# 2201| mu2201_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_45 -# 2201| r2201_51(glval>) = VariableAddress[(__begin)] : -# 2201| r2201_52(glval) = FunctionAddress[operator++] : -# 2201| r2201_53(iterator &) = Call[operator++] : func:r2201_52, this:r2201_51 -# 2201| mu2201_54(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_55(void) = ^IndirectReadSideEffect[-1] : &:r2201_51, ~m? -# 2201| mu2201_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_51 -# 2201| r2201_57(glval>) = CopyValue : r2201_53 -#-----| Goto (back edge) -> Block 11 - -# 2201| Block 13 -# 2201| r2201_58(glval>) = VariableAddress[ys] : -# 2201| r2201_59(glval) = FunctionAddress[~vector] : -# 2201| v2201_60(void) = Call[~vector] : func:r2201_59, this:r2201_58 -# 2201| mu2201_61(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_62(void) = ^IndirectReadSideEffect[-1] : &:r2201_58, ~m? -# 2201| mu2201_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_58 -#-----| Goto -> Block 14 - -# 2204| Block 14 -# 2204| r2204_1(glval>) = VariableAddress[ys] : -# 2204| mu2204_2(vector) = Uninitialized[ys] : &:r2204_1 -# 2204| r2204_3(glval) = FunctionAddress[vector] : -# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : -# 2204| r2204_5(glval) = VariableAddress[x] : -# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, ~m? -# 2204| mu2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 -# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, ~m? -# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 -# 2204| mu2204_10(unknown) = ^CallSideEffect : ~m? -# 2204| mu2204_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 -# 2204| r2204_12(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_13(glval>) = VariableAddress[ys] : -# 2204| r2204_14(vector &) = CopyValue : r2204_13 -# 2204| mu2204_15(vector &) = Store[(__range)] : &:r2204_12, r2204_14 -# 2204| r2204_16(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_17(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_18(vector &) = Load[(__range)] : &:r2204_17, ~m? -#-----| r0_17(glval>) = CopyValue : r2204_18 -#-----| r0_18(glval>) = Convert : r0_17 -# 2204| r2204_19(glval) = FunctionAddress[begin] : -# 2204| r2204_20(iterator) = Call[begin] : func:r2204_19, this:r0_18 -#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? -# 2204| mu2204_21(iterator) = Store[(__begin)] : &:r2204_16, r2204_20 -# 2204| r2204_22(glval>) = VariableAddress[(__end)] : -# 2204| r2204_23(glval &>) = VariableAddress[(__range)] : -# 2204| r2204_24(vector &) = Load[(__range)] : &:r2204_23, ~m? -#-----| r0_20(glval>) = CopyValue : r2204_24 -#-----| r0_21(glval>) = Convert : r0_20 -# 2204| r2204_25(glval) = FunctionAddress[end] : -# 2204| r2204_26(iterator) = Call[end] : func:r2204_25, this:r0_21 -#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -# 2204| mu2204_27(iterator) = Store[(__end)] : &:r2204_22, r2204_26 -#-----| Goto -> Block 15 - -# 2204| Block 15 -# 2204| r2204_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_23(glval>) = Convert : r2204_28 -# 2204| r2204_29(glval) = FunctionAddress[operator!=] : -#-----| r0_24(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_30(glval) = FunctionAddress[iterator] : -# 2204| r2204_31(glval>) = VariableAddress[(__end)] : -#-----| r0_26(glval>) = Convert : r2204_31 -#-----| r0_27(iterator &) = CopyValue : r0_26 -# 2204| v2204_32(void) = Call[iterator] : func:r2204_30, this:r0_24, 0:r0_27 -# 2204| mu2204_33(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? -# 2204| mu2204_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 -#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? -# 2204| r2204_35(bool) = Call[operator!=] : func:r2204_29, this:r0_23, 0:r0_29 -# 2204| mu2204_36(unknown) = ^CallSideEffect : ~m? -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? -# 2204| v2204_37(void) = ConditionalBranch : r2204_35 -#-----| False -> Block 20 -#-----| True -> Block 16 - -# 2204| Block 16 -# 2204| r2204_38(glval) = VariableAddress[y] : -# 2204| r2204_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_31(glval>) = Convert : r2204_39 -# 2204| r2204_40(glval) = FunctionAddress[operator*] : -# 2204| r2204_41(ClassWithDestructor &) = Call[operator*] : func:r2204_40, this:r0_31 -# 2204| mu2204_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? -# 2204| r2204_43(ClassWithDestructor) = Load[?] : &:r2204_41, ~m? -# 2204| mu2204_44(ClassWithDestructor) = Store[y] : &:r2204_38, r2204_43 -# 2205| r2205_1(glval) = VariableAddress[y] : -# 2205| r2205_2(glval) = FunctionAddress[set_x] : -# 2205| r2205_3(char) = Constant[97] : -# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 -# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? -# 2205| v2205_6(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, ~m? -# 2205| mu2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 -# 2206| r2206_1(glval) = VariableAddress[y] : -# 2206| r2206_2(glval) = FunctionAddress[get_x] : -# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 -# 2206| mu2206_4(unknown) = ^CallSideEffect : ~m? -# 2206| v2206_5(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, ~m? -# 2206| mu2206_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 -# 2206| r2206_7(int) = Convert : r2206_3 -# 2206| r2206_8(int) = Constant[98] : -# 2206| r2206_9(bool) = CompareEQ : r2206_7, r2206_8 -# 2206| v2206_10(void) = ConditionalBranch : r2206_9 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 2207| Block 17 -# 2207| v2207_1(void) = NoOp : -# 2204| r2204_45(glval) = VariableAddress[y] : -# 2204| r2204_46(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_47(void) = Call[~ClassWithDestructor] : func:r2204_46, this:r2204_45 -# 2204| mu2204_48(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_49(void) = ^IndirectReadSideEffect[-1] : &:r2204_45, ~m? -# 2204| mu2204_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_45 -# 2204| r2204_51(glval>) = VariableAddress[ys] : -# 2204| r2204_52(glval) = FunctionAddress[~vector] : -# 2204| v2204_53(void) = Call[~vector] : func:r2204_52, this:r2204_51 -# 2204| mu2204_54(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_55(void) = ^IndirectReadSideEffect[-1] : &:r2204_51, ~m? -# 2204| mu2204_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_51 -# 2219| r2219_1(glval) = VariableAddress[x] : -# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 -# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? -# 2219| mu2219_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -#-----| Goto -> Block 1 - -# 2204| Block 18 -# 2204| r2204_57(glval) = VariableAddress[y] : -# 2204| r2204_58(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_59(void) = Call[~ClassWithDestructor] : func:r2204_58, this:r2204_57 -# 2204| mu2204_60(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_61(void) = ^IndirectReadSideEffect[-1] : &:r2204_57, ~m? -# 2204| mu2204_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_57 -# 2204| r2204_63(glval>) = VariableAddress[(__begin)] : -# 2204| r2204_64(glval) = FunctionAddress[operator++] : -# 2204| r2204_65(iterator &) = Call[operator++] : func:r2204_64, this:r2204_63 -# 2204| mu2204_66(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_67(void) = ^IndirectReadSideEffect[-1] : &:r2204_63, ~m? -# 2204| mu2204_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_63 -# 2204| r2204_69(glval>) = CopyValue : r2204_65 -#-----| Goto (back edge) -> Block 15 - -# 2204| Block 19 -# 2204| r2204_70(glval>) = VariableAddress[ys] : -# 2204| r2204_71(glval) = FunctionAddress[~vector] : -# 2204| v2204_72(void) = Call[~vector] : func:r2204_71, this:r2204_70 -# 2204| mu2204_73(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_70, ~m? -# 2204| mu2204_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_70 -#-----| Goto -> Block 20 - -# 2210| Block 20 -# 2210| r2210_1(glval>) = VariableAddress[ys] : -# 2210| mu2210_2(vector) = Uninitialized[ys] : &:r2210_1 -# 2210| r2210_3(glval) = FunctionAddress[vector] : -# 2210| r2210_4(int) = Constant[1] : -# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 -# 2210| mu2210_6(unknown) = ^CallSideEffect : ~m? -# 2210| mu2210_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 -# 2210| r2210_8(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_9(glval>) = VariableAddress[ys] : -# 2210| r2210_10(vector &) = CopyValue : r2210_9 -# 2210| mu2210_11(vector &) = Store[(__range)] : &:r2210_8, r2210_10 -# 2210| r2210_12(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_13(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_14(vector &) = Load[(__range)] : &:r2210_13, ~m? -#-----| r0_33(glval>) = CopyValue : r2210_14 -#-----| r0_34(glval>) = Convert : r0_33 -# 2210| r2210_15(glval) = FunctionAddress[begin] : -# 2210| r2210_16(iterator) = Call[begin] : func:r2210_15, this:r0_34 -#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? -# 2210| mu2210_17(iterator) = Store[(__begin)] : &:r2210_12, r2210_16 -# 2210| r2210_18(glval>) = VariableAddress[(__end)] : -# 2210| r2210_19(glval &>) = VariableAddress[(__range)] : -# 2210| r2210_20(vector &) = Load[(__range)] : &:r2210_19, ~m? -#-----| r0_36(glval>) = CopyValue : r2210_20 -#-----| r0_37(glval>) = Convert : r0_36 -# 2210| r2210_21(glval) = FunctionAddress[end] : -# 2210| r2210_22(iterator) = Call[end] : func:r2210_21, this:r0_37 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? -# 2210| mu2210_23(iterator) = Store[(__end)] : &:r2210_18, r2210_22 -#-----| Goto -> Block 21 - -# 2210| Block 21 -# 2210| r2210_24(glval>) = VariableAddress[(__begin)] : -#-----| r0_39(glval>) = Convert : r2210_24 -# 2210| r2210_25(glval) = FunctionAddress[operator!=] : -#-----| r0_40(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_26(glval) = FunctionAddress[iterator] : -# 2210| r2210_27(glval>) = VariableAddress[(__end)] : -#-----| r0_42(glval>) = Convert : r2210_27 -#-----| r0_43(iterator &) = CopyValue : r0_42 -# 2210| v2210_28(void) = Call[iterator] : func:r2210_26, this:r0_40, 0:r0_43 -# 2210| mu2210_29(unknown) = ^CallSideEffect : ~m? -#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? -# 2210| mu2210_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 -#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? -# 2210| r2210_31(bool) = Call[operator!=] : func:r2210_25, this:r0_39, 0:r0_45 -# 2210| mu2210_32(unknown) = ^CallSideEffect : ~m? -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? -# 2210| v2210_33(void) = ConditionalBranch : r2210_31 -#-----| False -> Block 26 -#-----| True -> Block 23 - -# 2210| Block 22 -# 2210| r2210_34(glval>) = VariableAddress[(__begin)] : -# 2210| r2210_35(glval) = FunctionAddress[operator++] : -# 2210| r2210_36(iterator &) = Call[operator++] : func:r2210_35, this:r2210_34 -# 2210| mu2210_37(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_38(void) = ^IndirectReadSideEffect[-1] : &:r2210_34, ~m? -# 2210| mu2210_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_34 -# 2210| r2210_40(glval>) = CopyValue : r2210_36 -#-----| Goto (back edge) -> Block 21 - -# 2210| Block 23 -# 2210| r2210_41(glval) = VariableAddress[y] : -# 2210| r2210_42(glval>) = VariableAddress[(__begin)] : -#-----| r0_47(glval>) = Convert : r2210_42 -# 2210| r2210_43(glval) = FunctionAddress[operator*] : -# 2210| r2210_44(int &) = Call[operator*] : func:r2210_43, this:r0_47 -# 2210| mu2210_45(unknown) = ^CallSideEffect : ~m? -#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? -# 2210| r2210_46(int) = Load[?] : &:r2210_44, ~m? -# 2210| mu2210_47(int) = Store[y] : &:r2210_41, r2210_46 -# 2211| r2211_1(glval) = VariableAddress[y] : -# 2211| r2211_2(int) = Load[y] : &:r2211_1, ~m? -# 2211| r2211_3(int) = Constant[1] : -# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 -# 2211| v2211_5(void) = ConditionalBranch : r2211_4 -#-----| False -> Block 22 -#-----| True -> Block 24 - -# 2212| Block 24 -# 2212| v2212_1(void) = NoOp : -# 2210| r2210_48(glval>) = VariableAddress[ys] : -# 2210| r2210_49(glval) = FunctionAddress[~vector] : -# 2210| v2210_50(void) = Call[~vector] : func:r2210_49, this:r2210_48 -# 2210| mu2210_51(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_52(void) = ^IndirectReadSideEffect[-1] : &:r2210_48, ~m? -# 2210| mu2210_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_48 -# 2219| r2219_7(glval) = VariableAddress[x] : -# 2219| r2219_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_9(void) = Call[~ClassWithDestructor] : func:r2219_8, this:r2219_7 -# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? -# 2219| mu2219_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 -#-----| Goto -> Block 1 - -# 2210| Block 25 -# 2210| r2210_54(glval>) = VariableAddress[ys] : -# 2210| r2210_55(glval) = FunctionAddress[~vector] : -# 2210| v2210_56(void) = Call[~vector] : func:r2210_55, this:r2210_54 -# 2210| mu2210_57(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_58(void) = ^IndirectReadSideEffect[-1] : &:r2210_54, ~m? -# 2210| mu2210_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_54 -#-----| Goto -> Block 26 - -# 2215| Block 26 -# 2215| r2215_1(glval>) = VariableAddress[ys] : -# 2215| mu2215_2(vector) = Uninitialized[ys] : &:r2215_1 -# 2215| r2215_3(glval) = FunctionAddress[vector] : -# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : -# 2215| r2215_5(glval) = VariableAddress[x] : -# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, ~m? -# 2215| mu2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 -# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, ~m? -# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 -# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? -# 2215| mu2215_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 -# 2215| r2215_12(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_13(glval>) = VariableAddress[ys] : -# 2215| r2215_14(vector &) = CopyValue : r2215_13 -# 2215| mu2215_15(vector &) = Store[(__range)] : &:r2215_12, r2215_14 -# 2215| r2215_16(glval>) = VariableAddress[(__begin)] : -# 2215| r2215_17(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_18(vector &) = Load[(__range)] : &:r2215_17, ~m? -#-----| r0_49(glval>) = CopyValue : r2215_18 -#-----| r0_50(glval>) = Convert : r0_49 -# 2215| r2215_19(glval) = FunctionAddress[begin] : -# 2215| r2215_20(iterator) = Call[begin] : func:r2215_19, this:r0_50 -#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? -# 2215| mu2215_21(iterator) = Store[(__begin)] : &:r2215_16, r2215_20 -# 2215| r2215_22(glval>) = VariableAddress[(__end)] : -# 2215| r2215_23(glval &>) = VariableAddress[(__range)] : -# 2215| r2215_24(vector &) = Load[(__range)] : &:r2215_23, ~m? -#-----| r0_52(glval>) = CopyValue : r2215_24 -#-----| r0_53(glval>) = Convert : r0_52 -# 2215| r2215_25(glval) = FunctionAddress[end] : -# 2215| r2215_26(iterator) = Call[end] : func:r2215_25, this:r0_53 -#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? -# 2215| mu2215_27(iterator) = Store[(__end)] : &:r2215_22, r2215_26 -#-----| Goto -> Block 27 - -# 2215| Block 27 -# 2215| r2215_28(glval>) = VariableAddress[(__begin)] : -#-----| r0_55(glval>) = Convert : r2215_28 -# 2215| r2215_29(glval) = FunctionAddress[operator!=] : -#-----| r0_56(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_30(glval) = FunctionAddress[iterator] : -# 2215| r2215_31(glval>) = VariableAddress[(__end)] : -#-----| r0_58(glval>) = Convert : r2215_31 -#-----| r0_59(iterator &) = CopyValue : r0_58 -# 2215| v2215_32(void) = Call[iterator] : func:r2215_30, this:r0_56, 0:r0_59 -# 2215| mu2215_33(unknown) = ^CallSideEffect : ~m? -#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? -# 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 -#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? -# 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_55, 0:r0_61 -# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? -#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? -# 2215| v2215_37(void) = ConditionalBranch : r2215_35 -#-----| False -> Block 30 -#-----| True -> Block 28 - -# 2215| Block 28 +# 2215| Block 12 # 2215| r2215_38(glval) = VariableAddress[y] : # 2215| r2215_39(glval>) = VariableAddress[(__begin)] : -#-----| r0_63(glval>) = Convert : r2215_39 +#-----| r0_15(glval>) = Convert : r2215_39 # 2215| r2215_40(glval) = FunctionAddress[operator*] : -# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_63 +# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_15 # 2215| mu2215_42(unknown) = ^CallSideEffect : ~m? -#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? # 2215| r2215_43(ClassWithDestructor) = Load[?] : &:r2215_41, ~m? # 2215| mu2215_44(ClassWithDestructor) = Store[y] : &:r2215_38, r2215_43 -# 2216| r2216_1(glval) = VariableAddress[z1] : -# 2216| mu2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 -# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| r2216_1(glval) = VariableAddress[y] : +# 2216| r2216_2(glval) = FunctionAddress[set_x] : +# 2216| r2216_3(char) = Constant[97] : +# 2216| v2216_4(void) = Call[set_x] : func:r2216_2, this:r2216_1, 0:r2216_3 # 2216| mu2216_5(unknown) = ^CallSideEffect : ~m? -# 2216| mu2216_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 -# 2217| r2217_1(glval) = VariableAddress[z2] : -# 2217| mu2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 -# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 -# 2217| mu2217_5(unknown) = ^CallSideEffect : ~m? -# 2217| mu2217_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 -# 2218| r2218_1(glval) = VariableAddress[z2] : -# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 -# 2218| mu2218_4(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_5(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, ~m? -# 2218| mu2218_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2218| r2218_7(glval) = VariableAddress[z1] : -# 2218| r2218_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2218| v2218_9(void) = Call[~ClassWithDestructor] : func:r2218_8, this:r2218_7 -# 2218| mu2218_10(unknown) = ^CallSideEffect : ~m? -# 2218| v2218_11(void) = ^IndirectReadSideEffect[-1] : &:r2218_7, ~m? -# 2218| mu2218_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_7 +# 2216| v2216_6(void) = ^IndirectReadSideEffect[-1] : &:r2216_1, ~m? +# 2216| mu2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 # 2215| r2215_45(glval) = VariableAddress[y] : # 2215| r2215_46(glval) = FunctionAddress[~ClassWithDestructor] : # 2215| v2215_47(void) = Call[~ClassWithDestructor] : func:r2215_46, this:r2215_45 @@ -12977,722 +12656,854 @@ ir.cpp: # 2215| v2215_55(void) = ^IndirectReadSideEffect[-1] : &:r2215_51, ~m? # 2215| mu2215_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_51 # 2215| r2215_57(glval>) = CopyValue : r2215_53 -#-----| Goto (back edge) -> Block 27 +#-----| Goto (back edge) -> Block 11 -# 2215| Block 29 +# 2215| Block 13 # 2215| r2215_58(glval>) = VariableAddress[ys] : # 2215| r2215_59(glval) = FunctionAddress[~vector] : # 2215| v2215_60(void) = Call[~vector] : func:r2215_59, this:r2215_58 # 2215| mu2215_61(unknown) = ^CallSideEffect : ~m? # 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_58, ~m? # 2215| mu2215_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_58 -#-----| Goto -> Block 30 +#-----| Goto -> Block 14 -# 2219| Block 30 -# 2219| v2219_13(void) = NoOp : -# 2219| r2219_14(glval) = VariableAddress[x] : -# 2219| r2219_15(glval) = FunctionAddress[~ClassWithDestructor] : -# 2219| v2219_16(void) = Call[~ClassWithDestructor] : func:r2219_15, this:r2219_14 -# 2219| mu2219_17(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_18(void) = ^IndirectReadSideEffect[-1] : &:r2219_14, ~m? -# 2219| mu2219_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_14 +# 2218| Block 14 +# 2218| r2218_1(glval>) = VariableAddress[ys] : +# 2218| mu2218_2(vector) = Uninitialized[ys] : &:r2218_1 +# 2218| r2218_3(glval) = FunctionAddress[vector] : +# 2218| r2218_4(glval) = VariableAddress[#temp2218:45] : +# 2218| r2218_5(glval) = VariableAddress[x] : +# 2218| r2218_6(ClassWithDestructor) = Load[x] : &:r2218_5, ~m? +# 2218| mu2218_7(ClassWithDestructor) = Store[#temp2218:45] : &:r2218_4, r2218_6 +# 2218| r2218_8(ClassWithDestructor) = Load[#temp2218:45] : &:r2218_4, ~m? +# 2218| v2218_9(void) = Call[vector] : func:r2218_3, this:r2218_1, 0:r2218_8 +# 2218| mu2218_10(unknown) = ^CallSideEffect : ~m? +# 2218| mu2218_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| r2218_12(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_13(glval>) = VariableAddress[ys] : +# 2218| r2218_14(vector &) = CopyValue : r2218_13 +# 2218| mu2218_15(vector &) = Store[(__range)] : &:r2218_12, r2218_14 +# 2218| r2218_16(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_17(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_18(vector &) = Load[(__range)] : &:r2218_17, ~m? +#-----| r0_17(glval>) = CopyValue : r2218_18 +#-----| r0_18(glval>) = Convert : r0_17 +# 2218| r2218_19(glval) = FunctionAddress[begin] : +# 2218| r2218_20(iterator) = Call[begin] : func:r2218_19, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +# 2218| mu2218_21(iterator) = Store[(__begin)] : &:r2218_16, r2218_20 +# 2218| r2218_22(glval>) = VariableAddress[(__end)] : +# 2218| r2218_23(glval &>) = VariableAddress[(__range)] : +# 2218| r2218_24(vector &) = Load[(__range)] : &:r2218_23, ~m? +#-----| r0_20(glval>) = CopyValue : r2218_24 +#-----| r0_21(glval>) = Convert : r0_20 +# 2218| r2218_25(glval) = FunctionAddress[end] : +# 2218| r2218_26(iterator) = Call[end] : func:r2218_25, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 2218| mu2218_27(iterator) = Store[(__end)] : &:r2218_22, r2218_26 +#-----| Goto -> Block 15 + +# 2218| Block 15 +# 2218| r2218_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2218_28 +# 2218| r2218_29(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2218| r2218_30(glval) = FunctionAddress[iterator] : +# 2218| r2218_31(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2218_31 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2218| v2218_32(void) = Call[iterator] : func:r2218_30, this:r0_24, 0:r0_27 +# 2218| mu2218_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? +# 2218| mu2218_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? +# 2218| r2218_35(bool) = Call[operator!=] : func:r2218_29, this:r0_23, 0:r0_29 +# 2218| mu2218_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? +# 2218| v2218_37(void) = ConditionalBranch : r2218_35 +#-----| False -> Block 20 +#-----| True -> Block 16 + +# 2218| Block 16 +# 2218| r2218_38(glval) = VariableAddress[y] : +# 2218| r2218_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2218_39 +# 2218| r2218_40(glval) = FunctionAddress[operator*] : +# 2218| r2218_41(ClassWithDestructor &) = Call[operator*] : func:r2218_40, this:r0_31 +# 2218| mu2218_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 2218| r2218_43(ClassWithDestructor) = Load[?] : &:r2218_41, ~m? +# 2218| mu2218_44(ClassWithDestructor) = Store[y] : &:r2218_38, r2218_43 +# 2219| r2219_1(glval) = VariableAddress[y] : +# 2219| r2219_2(glval) = FunctionAddress[set_x] : +# 2219| r2219_3(char) = Constant[97] : +# 2219| v2219_4(void) = Call[set_x] : func:r2219_2, this:r2219_1, 0:r2219_3 +# 2219| mu2219_5(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? +# 2219| mu2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2220| r2220_1(glval) = VariableAddress[y] : +# 2220| r2220_2(glval) = FunctionAddress[get_x] : +# 2220| r2220_3(char) = Call[get_x] : func:r2220_2, this:r2220_1 +# 2220| mu2220_4(unknown) = ^CallSideEffect : ~m? +# 2220| v2220_5(void) = ^IndirectReadSideEffect[-1] : &:r2220_1, ~m? +# 2220| mu2220_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2220_1 +# 2220| r2220_7(int) = Convert : r2220_3 +# 2220| r2220_8(int) = Constant[98] : +# 2220| r2220_9(bool) = CompareEQ : r2220_7, r2220_8 +# 2220| v2220_10(void) = ConditionalBranch : r2220_9 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 2221| Block 17 +# 2221| v2221_1(void) = NoOp : +# 2218| r2218_45(glval) = VariableAddress[y] : +# 2218| r2218_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_47(void) = Call[~ClassWithDestructor] : func:r2218_46, this:r2218_45 +# 2218| mu2218_48(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_49(void) = ^IndirectReadSideEffect[-1] : &:r2218_45, ~m? +# 2218| mu2218_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_45 +# 2218| r2218_51(glval>) = VariableAddress[ys] : +# 2218| r2218_52(glval) = FunctionAddress[~vector] : +# 2218| v2218_53(void) = Call[~vector] : func:r2218_52, this:r2218_51 +# 2218| mu2218_54(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_55(void) = ^IndirectReadSideEffect[-1] : &:r2218_51, ~m? +# 2218| mu2218_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_51 +# 2233| r2233_1(glval) = VariableAddress[x] : +# 2233| r2233_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_3(void) = Call[~ClassWithDestructor] : func:r2233_2, this:r2233_1 +# 2233| mu2233_4(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_5(void) = ^IndirectReadSideEffect[-1] : &:r2233_1, ~m? +# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 #-----| Goto -> Block 1 -# 2221| void static_variable_with_destructor_1() -# 2221| Block 0 -# 2221| v2221_1(void) = EnterFunction : -# 2221| mu2221_2(unknown) = AliasedDefinition : -# 2221| mu2221_3(unknown) = InitializeNonLocal : -# 2222| r2222_1(glval) = VariableAddress[a] : -# 2222| mu2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 -# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 -# 2222| mu2222_5(unknown) = ^CallSideEffect : ~m? -# 2222| mu2222_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 -# 2223| r2223_1(glval) = VariableAddress[b#init] : -# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m? -# 2223| v2223_3(void) = ConditionalBranch : r2223_2 +# 2218| Block 18 +# 2218| r2218_57(glval) = VariableAddress[y] : +# 2218| r2218_58(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_59(void) = Call[~ClassWithDestructor] : func:r2218_58, this:r2218_57 +# 2218| mu2218_60(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_61(void) = ^IndirectReadSideEffect[-1] : &:r2218_57, ~m? +# 2218| mu2218_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_57 +# 2218| r2218_63(glval>) = VariableAddress[(__begin)] : +# 2218| r2218_64(glval) = FunctionAddress[operator++] : +# 2218| r2218_65(iterator &) = Call[operator++] : func:r2218_64, this:r2218_63 +# 2218| mu2218_66(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_67(void) = ^IndirectReadSideEffect[-1] : &:r2218_63, ~m? +# 2218| mu2218_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2218_63 +# 2218| r2218_69(glval>) = CopyValue : r2218_65 +#-----| Goto (back edge) -> Block 15 + +# 2218| Block 19 +# 2218| r2218_70(glval>) = VariableAddress[ys] : +# 2218| r2218_71(glval) = FunctionAddress[~vector] : +# 2218| v2218_72(void) = Call[~vector] : func:r2218_71, this:r2218_70 +# 2218| mu2218_73(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_74(void) = ^IndirectReadSideEffect[-1] : &:r2218_70, ~m? +# 2218| mu2218_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2218_70 +#-----| Goto -> Block 20 + +# 2224| Block 20 +# 2224| r2224_1(glval>) = VariableAddress[ys] : +# 2224| mu2224_2(vector) = Uninitialized[ys] : &:r2224_1 +# 2224| r2224_3(glval) = FunctionAddress[vector] : +# 2224| r2224_4(int) = Constant[1] : +# 2224| v2224_5(void) = Call[vector] : func:r2224_3, this:r2224_1, 0:r2224_4 +# 2224| mu2224_6(unknown) = ^CallSideEffect : ~m? +# 2224| mu2224_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_1 +# 2224| r2224_8(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_9(glval>) = VariableAddress[ys] : +# 2224| r2224_10(vector &) = CopyValue : r2224_9 +# 2224| mu2224_11(vector &) = Store[(__range)] : &:r2224_8, r2224_10 +# 2224| r2224_12(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_13(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_14(vector &) = Load[(__range)] : &:r2224_13, ~m? +#-----| r0_33(glval>) = CopyValue : r2224_14 +#-----| r0_34(glval>) = Convert : r0_33 +# 2224| r2224_15(glval) = FunctionAddress[begin] : +# 2224| r2224_16(iterator) = Call[begin] : func:r2224_15, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 2224| mu2224_17(iterator) = Store[(__begin)] : &:r2224_12, r2224_16 +# 2224| r2224_18(glval>) = VariableAddress[(__end)] : +# 2224| r2224_19(glval &>) = VariableAddress[(__range)] : +# 2224| r2224_20(vector &) = Load[(__range)] : &:r2224_19, ~m? +#-----| r0_36(glval>) = CopyValue : r2224_20 +#-----| r0_37(glval>) = Convert : r0_36 +# 2224| r2224_21(glval) = FunctionAddress[end] : +# 2224| r2224_22(iterator) = Call[end] : func:r2224_21, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? +# 2224| mu2224_23(iterator) = Store[(__end)] : &:r2224_18, r2224_22 +#-----| Goto -> Block 21 + +# 2224| Block 21 +# 2224| r2224_24(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2224_24 +# 2224| r2224_25(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2224| r2224_26(glval) = FunctionAddress[iterator] : +# 2224| r2224_27(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2224_27 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2224| v2224_28(void) = Call[iterator] : func:r2224_26, this:r0_40, 0:r0_43 +# 2224| mu2224_29(unknown) = ^CallSideEffect : ~m? +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? +# 2224| mu2224_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? +# 2224| r2224_31(bool) = Call[operator!=] : func:r2224_25, this:r0_39, 0:r0_45 +# 2224| mu2224_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 2224| v2224_33(void) = ConditionalBranch : r2224_31 +#-----| False -> Block 26 +#-----| True -> Block 23 + +# 2224| Block 22 +# 2224| r2224_34(glval>) = VariableAddress[(__begin)] : +# 2224| r2224_35(glval) = FunctionAddress[operator++] : +# 2224| r2224_36(iterator &) = Call[operator++] : func:r2224_35, this:r2224_34 +# 2224| mu2224_37(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_38(void) = ^IndirectReadSideEffect[-1] : &:r2224_34, ~m? +# 2224| mu2224_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2224_34 +# 2224| r2224_40(glval>) = CopyValue : r2224_36 +#-----| Goto (back edge) -> Block 21 + +# 2224| Block 23 +# 2224| r2224_41(glval) = VariableAddress[y] : +# 2224| r2224_42(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2224_42 +# 2224| r2224_43(glval) = FunctionAddress[operator*] : +# 2224| r2224_44(int &) = Call[operator*] : func:r2224_43, this:r0_47 +# 2224| mu2224_45(unknown) = ^CallSideEffect : ~m? +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? +# 2224| r2224_46(int) = Load[?] : &:r2224_44, ~m? +# 2224| mu2224_47(int) = Store[y] : &:r2224_41, r2224_46 +# 2225| r2225_1(glval) = VariableAddress[y] : +# 2225| r2225_2(int) = Load[y] : &:r2225_1, ~m? +# 2225| r2225_3(int) = Constant[1] : +# 2225| r2225_4(bool) = CompareEQ : r2225_2, r2225_3 +# 2225| v2225_5(void) = ConditionalBranch : r2225_4 +#-----| False -> Block 22 +#-----| True -> Block 24 + +# 2226| Block 24 +# 2226| v2226_1(void) = NoOp : +# 2224| r2224_48(glval>) = VariableAddress[ys] : +# 2224| r2224_49(glval) = FunctionAddress[~vector] : +# 2224| v2224_50(void) = Call[~vector] : func:r2224_49, this:r2224_48 +# 2224| mu2224_51(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_52(void) = ^IndirectReadSideEffect[-1] : &:r2224_48, ~m? +# 2224| mu2224_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_48 +# 2233| r2233_7(glval) = VariableAddress[x] : +# 2233| r2233_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_9(void) = Call[~ClassWithDestructor] : func:r2233_8, this:r2233_7 +# 2233| mu2233_10(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_11(void) = ^IndirectReadSideEffect[-1] : &:r2233_7, ~m? +# 2233| mu2233_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_7 +#-----| Goto -> Block 1 + +# 2224| Block 25 +# 2224| r2224_54(glval>) = VariableAddress[ys] : +# 2224| r2224_55(glval) = FunctionAddress[~vector] : +# 2224| v2224_56(void) = Call[~vector] : func:r2224_55, this:r2224_54 +# 2224| mu2224_57(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_58(void) = ^IndirectReadSideEffect[-1] : &:r2224_54, ~m? +# 2224| mu2224_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2224_54 +#-----| Goto -> Block 26 + +# 2229| Block 26 +# 2229| r2229_1(glval>) = VariableAddress[ys] : +# 2229| mu2229_2(vector) = Uninitialized[ys] : &:r2229_1 +# 2229| r2229_3(glval) = FunctionAddress[vector] : +# 2229| r2229_4(glval) = VariableAddress[#temp2229:45] : +# 2229| r2229_5(glval) = VariableAddress[x] : +# 2229| r2229_6(ClassWithDestructor) = Load[x] : &:r2229_5, ~m? +# 2229| mu2229_7(ClassWithDestructor) = Store[#temp2229:45] : &:r2229_4, r2229_6 +# 2229| r2229_8(ClassWithDestructor) = Load[#temp2229:45] : &:r2229_4, ~m? +# 2229| v2229_9(void) = Call[vector] : func:r2229_3, this:r2229_1, 0:r2229_8 +# 2229| mu2229_10(unknown) = ^CallSideEffect : ~m? +# 2229| mu2229_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_1 +# 2229| r2229_12(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_13(glval>) = VariableAddress[ys] : +# 2229| r2229_14(vector &) = CopyValue : r2229_13 +# 2229| mu2229_15(vector &) = Store[(__range)] : &:r2229_12, r2229_14 +# 2229| r2229_16(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_17(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_18(vector &) = Load[(__range)] : &:r2229_17, ~m? +#-----| r0_49(glval>) = CopyValue : r2229_18 +#-----| r0_50(glval>) = Convert : r0_49 +# 2229| r2229_19(glval) = FunctionAddress[begin] : +# 2229| r2229_20(iterator) = Call[begin] : func:r2229_19, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? +# 2229| mu2229_21(iterator) = Store[(__begin)] : &:r2229_16, r2229_20 +# 2229| r2229_22(glval>) = VariableAddress[(__end)] : +# 2229| r2229_23(glval &>) = VariableAddress[(__range)] : +# 2229| r2229_24(vector &) = Load[(__range)] : &:r2229_23, ~m? +#-----| r0_52(glval>) = CopyValue : r2229_24 +#-----| r0_53(glval>) = Convert : r0_52 +# 2229| r2229_25(glval) = FunctionAddress[end] : +# 2229| r2229_26(iterator) = Call[end] : func:r2229_25, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? +# 2229| mu2229_27(iterator) = Store[(__end)] : &:r2229_22, r2229_26 +#-----| Goto -> Block 27 + +# 2229| Block 27 +# 2229| r2229_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2229_28 +# 2229| r2229_29(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2229| r2229_30(glval) = FunctionAddress[iterator] : +# 2229| r2229_31(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2229_31 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2229| v2229_32(void) = Call[iterator] : func:r2229_30, this:r0_56, 0:r0_59 +# 2229| mu2229_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? +# 2229| mu2229_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? +# 2229| r2229_35(bool) = Call[operator!=] : func:r2229_29, this:r0_55, 0:r0_61 +# 2229| mu2229_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? +# 2229| v2229_37(void) = ConditionalBranch : r2229_35 +#-----| False -> Block 30 +#-----| True -> Block 28 + +# 2229| Block 28 +# 2229| r2229_38(glval) = VariableAddress[y] : +# 2229| r2229_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2229_39 +# 2229| r2229_40(glval) = FunctionAddress[operator*] : +# 2229| r2229_41(ClassWithDestructor &) = Call[operator*] : func:r2229_40, this:r0_63 +# 2229| mu2229_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +# 2229| r2229_43(ClassWithDestructor) = Load[?] : &:r2229_41, ~m? +# 2229| mu2229_44(ClassWithDestructor) = Store[y] : &:r2229_38, r2229_43 +# 2230| r2230_1(glval) = VariableAddress[z1] : +# 2230| mu2230_2(ClassWithDestructor) = Uninitialized[z1] : &:r2230_1 +# 2230| r2230_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2230| v2230_4(void) = Call[ClassWithDestructor] : func:r2230_3, this:r2230_1 +# 2230| mu2230_5(unknown) = ^CallSideEffect : ~m? +# 2230| mu2230_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2230_1 +# 2231| r2231_1(glval) = VariableAddress[z2] : +# 2231| mu2231_2(ClassWithDestructor) = Uninitialized[z2] : &:r2231_1 +# 2231| r2231_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2231| v2231_4(void) = Call[ClassWithDestructor] : func:r2231_3, this:r2231_1 +# 2231| mu2231_5(unknown) = ^CallSideEffect : ~m? +# 2231| mu2231_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 +# 2232| r2232_1(glval) = VariableAddress[z2] : +# 2232| r2232_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_3(void) = Call[~ClassWithDestructor] : func:r2232_2, this:r2232_1 +# 2232| mu2232_4(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_5(void) = ^IndirectReadSideEffect[-1] : &:r2232_1, ~m? +# 2232| mu2232_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2232| r2232_7(glval) = VariableAddress[z1] : +# 2232| r2232_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2232| v2232_9(void) = Call[~ClassWithDestructor] : func:r2232_8, this:r2232_7 +# 2232| mu2232_10(unknown) = ^CallSideEffect : ~m? +# 2232| v2232_11(void) = ^IndirectReadSideEffect[-1] : &:r2232_7, ~m? +# 2232| mu2232_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_7 +# 2229| r2229_45(glval) = VariableAddress[y] : +# 2229| r2229_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_47(void) = Call[~ClassWithDestructor] : func:r2229_46, this:r2229_45 +# 2229| mu2229_48(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_49(void) = ^IndirectReadSideEffect[-1] : &:r2229_45, ~m? +# 2229| mu2229_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_45 +# 2229| r2229_51(glval>) = VariableAddress[(__begin)] : +# 2229| r2229_52(glval) = FunctionAddress[operator++] : +# 2229| r2229_53(iterator &) = Call[operator++] : func:r2229_52, this:r2229_51 +# 2229| mu2229_54(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_55(void) = ^IndirectReadSideEffect[-1] : &:r2229_51, ~m? +# 2229| mu2229_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2229_51 +# 2229| r2229_57(glval>) = CopyValue : r2229_53 +#-----| Goto (back edge) -> Block 27 + +# 2229| Block 29 +# 2229| r2229_58(glval>) = VariableAddress[ys] : +# 2229| r2229_59(glval) = FunctionAddress[~vector] : +# 2229| v2229_60(void) = Call[~vector] : func:r2229_59, this:r2229_58 +# 2229| mu2229_61(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_62(void) = ^IndirectReadSideEffect[-1] : &:r2229_58, ~m? +# 2229| mu2229_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2229_58 +#-----| Goto -> Block 30 + +# 2233| Block 30 +# 2233| v2233_13(void) = NoOp : +# 2233| r2233_14(glval) = VariableAddress[x] : +# 2233| r2233_15(glval) = FunctionAddress[~ClassWithDestructor] : +# 2233| v2233_16(void) = Call[~ClassWithDestructor] : func:r2233_15, this:r2233_14 +# 2233| mu2233_17(unknown) = ^CallSideEffect : ~m? +# 2233| v2233_18(void) = ^IndirectReadSideEffect[-1] : &:r2233_14, ~m? +# 2233| mu2233_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_14 +#-----| Goto -> Block 1 + +# 2235| void static_variable_with_destructor_1() +# 2235| Block 0 +# 2235| v2235_1(void) = EnterFunction : +# 2235| mu2235_2(unknown) = AliasedDefinition : +# 2235| mu2235_3(unknown) = InitializeNonLocal : +# 2236| r2236_1(glval) = VariableAddress[a] : +# 2236| mu2236_2(ClassWithDestructor) = Uninitialized[a] : &:r2236_1 +# 2236| r2236_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2236| v2236_4(void) = Call[ClassWithDestructor] : func:r2236_3, this:r2236_1 +# 2236| mu2236_5(unknown) = ^CallSideEffect : ~m? +# 2236| mu2236_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 +# 2237| r2237_1(glval) = VariableAddress[b#init] : +# 2237| r2237_2(bool) = Load[b#init] : &:r2237_1, ~m? +# 2237| v2237_3(void) = ConditionalBranch : r2237_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2223| Block 1 -# 2223| r2223_4(glval) = VariableAddress[b] : +# 2237| Block 1 +# 2237| r2237_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2237_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 -# 2223| r2223_5(bool) = Constant[1] : -# 2223| mu2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_4 +# 2237| r2237_5(bool) = Constant[1] : +# 2237| mu2237_6(bool) = Store[b#init] : &:r2237_1, r2237_5 #-----| Goto -> Block 2 -# 2224| Block 2 -# 2224| v2224_1(void) = NoOp : -# 2224| r2224_2(glval) = VariableAddress[a] : -# 2224| r2224_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2224| v2224_4(void) = Call[~ClassWithDestructor] : func:r2224_3, this:r2224_2 -# 2224| mu2224_5(unknown) = ^CallSideEffect : ~m? -# 2224| v2224_6(void) = ^IndirectReadSideEffect[-1] : &:r2224_2, ~m? -# 2224| mu2224_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_2 -# 2221| v2221_4(void) = ReturnVoid : -# 2221| v2221_5(void) = AliasedUse : ~m? -# 2221| v2221_6(void) = ExitFunction : +# 2238| Block 2 +# 2238| v2238_1(void) = NoOp : +# 2238| r2238_2(glval) = VariableAddress[a] : +# 2238| r2238_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2238| v2238_4(void) = Call[~ClassWithDestructor] : func:r2238_3, this:r2238_2 +# 2238| mu2238_5(unknown) = ^CallSideEffect : ~m? +# 2238| v2238_6(void) = ^IndirectReadSideEffect[-1] : &:r2238_2, ~m? +# 2238| mu2238_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2238_2 +# 2235| v2235_4(void) = ReturnVoid : +# 2235| v2235_5(void) = AliasedUse : ~m? +# 2235| v2235_6(void) = ExitFunction : -# 2226| void static_variable_with_destructor_2() -# 2226| Block 0 -# 2226| v2226_1(void) = EnterFunction : -# 2226| mu2226_2(unknown) = AliasedDefinition : -# 2226| mu2226_3(unknown) = InitializeNonLocal : -# 2227| r2227_1(glval) = VariableAddress[a#init] : -# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m? -# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +# 2240| void static_variable_with_destructor_2() +# 2240| Block 0 +# 2240| v2240_1(void) = EnterFunction : +# 2240| mu2240_2(unknown) = AliasedDefinition : +# 2240| mu2240_3(unknown) = InitializeNonLocal : +# 2241| r2241_1(glval) = VariableAddress[a#init] : +# 2241| r2241_2(bool) = Load[a#init] : &:r2241_1, ~m? +# 2241| v2241_3(void) = ConditionalBranch : r2241_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2227| Block 1 -# 2227| r2227_4(glval) = VariableAddress[a] : +# 2241| Block 1 +# 2241| r2241_4(glval) = VariableAddress[a] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2241_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 -# 2227| r2227_5(bool) = Constant[1] : -# 2227| mu2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2241_4 +# 2241| r2241_5(bool) = Constant[1] : +# 2241| mu2241_6(bool) = Store[a#init] : &:r2241_1, r2241_5 #-----| Goto -> Block 2 -# 2228| Block 2 -# 2228| r2228_1(glval) = VariableAddress[b] : -# 2228| mu2228_2(ClassWithDestructor) = Uninitialized[b] : &:r2228_1 -# 2228| r2228_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2228| v2228_4(void) = Call[ClassWithDestructor] : func:r2228_3, this:r2228_1 -# 2228| mu2228_5(unknown) = ^CallSideEffect : ~m? -# 2228| mu2228_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_1 -# 2229| v2229_1(void) = NoOp : -# 2229| r2229_2(glval) = VariableAddress[b] : -# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 -# 2229| mu2229_5(unknown) = ^CallSideEffect : ~m? -# 2229| v2229_6(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, ~m? -# 2229| mu2229_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 -# 2226| v2226_4(void) = ReturnVoid : -# 2226| v2226_5(void) = AliasedUse : ~m? -# 2226| v2226_6(void) = ExitFunction : +# 2242| Block 2 +# 2242| r2242_1(glval) = VariableAddress[b] : +# 2242| mu2242_2(ClassWithDestructor) = Uninitialized[b] : &:r2242_1 +# 2242| r2242_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2242| v2242_4(void) = Call[ClassWithDestructor] : func:r2242_3, this:r2242_1 +# 2242| mu2242_5(unknown) = ^CallSideEffect : ~m? +# 2242| mu2242_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 +# 2243| v2243_1(void) = NoOp : +# 2243| r2243_2(glval) = VariableAddress[b] : +# 2243| r2243_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2243| v2243_4(void) = Call[~ClassWithDestructor] : func:r2243_3, this:r2243_2 +# 2243| mu2243_5(unknown) = ^CallSideEffect : ~m? +# 2243| v2243_6(void) = ^IndirectReadSideEffect[-1] : &:r2243_2, ~m? +# 2243| mu2243_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2243_2 +# 2240| v2240_4(void) = ReturnVoid : +# 2240| v2240_5(void) = AliasedUse : ~m? +# 2240| v2240_6(void) = ExitFunction : -# 2231| void static_variable_with_destructor_3() -# 2231| Block 0 -# 2231| v2231_1(void) = EnterFunction : -# 2231| mu2231_2(unknown) = AliasedDefinition : -# 2231| mu2231_3(unknown) = InitializeNonLocal : -# 2232| r2232_1(glval) = VariableAddress[a] : -# 2232| mu2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 -# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 -# 2232| mu2232_5(unknown) = ^CallSideEffect : ~m? -# 2232| mu2232_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 -# 2233| r2233_1(glval) = VariableAddress[b] : -# 2233| mu2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 -# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? -# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2234| r2234_1(glval) = VariableAddress[c#init] : -# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m? -# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +# 2245| void static_variable_with_destructor_3() +# 2245| Block 0 +# 2245| v2245_1(void) = EnterFunction : +# 2245| mu2245_2(unknown) = AliasedDefinition : +# 2245| mu2245_3(unknown) = InitializeNonLocal : +# 2246| r2246_1(glval) = VariableAddress[a] : +# 2246| mu2246_2(ClassWithDestructor) = Uninitialized[a] : &:r2246_1 +# 2246| r2246_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2246| v2246_4(void) = Call[ClassWithDestructor] : func:r2246_3, this:r2246_1 +# 2246| mu2246_5(unknown) = ^CallSideEffect : ~m? +# 2246| mu2246_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2246_1 +# 2247| r2247_1(glval) = VariableAddress[b] : +# 2247| mu2247_2(ClassWithDestructor) = Uninitialized[b] : &:r2247_1 +# 2247| r2247_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2247| v2247_4(void) = Call[ClassWithDestructor] : func:r2247_3, this:r2247_1 +# 2247| mu2247_5(unknown) = ^CallSideEffect : ~m? +# 2247| mu2247_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 +# 2248| r2248_1(glval) = VariableAddress[c#init] : +# 2248| r2248_2(bool) = Load[c#init] : &:r2248_1, ~m? +# 2248| v2248_3(void) = ConditionalBranch : r2248_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2234| Block 1 -# 2234| r2234_4(glval) = VariableAddress[c] : +# 2248| Block 1 +# 2248| r2248_4(glval) = VariableAddress[c] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2248_4 #-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 -# 2234| r2234_5(bool) = Constant[1] : -# 2234| mu2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2248_4 +# 2248| r2248_5(bool) = Constant[1] : +# 2248| mu2248_6(bool) = Store[c#init] : &:r2248_1, r2248_5 #-----| Goto -> Block 2 -# 2235| Block 2 -# 2235| v2235_1(void) = NoOp : -# 2235| r2235_2(glval) = VariableAddress[b] : -# 2235| r2235_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_4(void) = Call[~ClassWithDestructor] : func:r2235_3, this:r2235_2 -# 2235| mu2235_5(unknown) = ^CallSideEffect : ~m? -# 2235| v2235_6(void) = ^IndirectReadSideEffect[-1] : &:r2235_2, ~m? -# 2235| mu2235_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_2 -# 2235| r2235_8(glval) = VariableAddress[a] : -# 2235| r2235_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2235| v2235_10(void) = Call[~ClassWithDestructor] : func:r2235_9, this:r2235_8 -# 2235| mu2235_11(unknown) = ^CallSideEffect : ~m? -# 2235| v2235_12(void) = ^IndirectReadSideEffect[-1] : &:r2235_8, ~m? -# 2235| mu2235_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_8 -# 2231| v2231_4(void) = ReturnVoid : -# 2231| v2231_5(void) = AliasedUse : ~m? -# 2231| v2231_6(void) = ExitFunction : - -# 2237| ClassWithDestructor global_class_with_destructor -# 2237| Block 0 -# 2237| v2237_1(void) = EnterFunction : -# 2237| mu2237_2(unknown) = AliasedDefinition : -# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : -# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 -# 2237| mu2237_6(unknown) = ^CallSideEffect : ~m? -# 2237| mu2237_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 -# 2237| v2237_8(void) = ReturnVoid : -# 2237| v2237_9(void) = AliasedUse : ~m? -# 2237| v2237_10(void) = ExitFunction : - -# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| mu2241_2(unknown) = AliasedDefinition : -# 2241| mu2241_3(unknown) = InitializeNonLocal : -# 2241| r2241_4(glval) = VariableAddress[t] : -# 2241| mu2241_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_4 -# 2241| r2241_6(ClassWithDestructor &) = Load[t] : &:r2241_4, ~m? -# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 -# 2241| r2241_8(glval) = VariableAddress[#return] : -# 2241| r2241_9(glval) = VariableAddress[t] : -# 2241| r2241_10(ClassWithDestructor &) = Load[t] : &:r2241_9, ~m? -# 2241| r2241_11(glval) = CopyValue : r2241_10 -# 2241| r2241_12(ClassWithDestructor &) = CopyValue : r2241_11 -# 2241| mu2241_13(ClassWithDestructor &) = Store[#return] : &:r2241_8, r2241_12 -# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? -# 2241| r2241_15(glval) = VariableAddress[#return] : -# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? -# 2241| v2241_17(void) = AliasedUse : ~m? -# 2241| v2241_18(void) = ExitFunction : - -# 2241| int& vacuous_destructor_call::get(int&) -# 2241| Block 0 -# 2241| v2241_1(void) = EnterFunction : -# 2241| mu2241_2(unknown) = AliasedDefinition : -# 2241| mu2241_3(unknown) = InitializeNonLocal : -# 2241| r2241_4(glval) = VariableAddress[t] : -# 2241| mu2241_5(int &) = InitializeParameter[t] : &:r2241_4 -# 2241| r2241_6(int &) = Load[t] : &:r2241_4, ~m? -# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 -# 2241| r2241_8(glval) = VariableAddress[#return] : -# 2241| r2241_9(glval) = VariableAddress[t] : -# 2241| r2241_10(int &) = Load[t] : &:r2241_9, ~m? -# 2241| r2241_11(glval) = CopyValue : r2241_10 -# 2241| r2241_12(int &) = CopyValue : r2241_11 -# 2241| mu2241_13(int &) = Store[#return] : &:r2241_8, r2241_12 -# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? -# 2241| r2241_15(glval) = VariableAddress[#return] : -# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? -# 2241| v2241_17(void) = AliasedUse : ~m? -# 2241| v2241_18(void) = ExitFunction : - -# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| mu2244_2(unknown) = AliasedDefinition : -# 2244| mu2244_3(unknown) = InitializeNonLocal : -# 2244| r2244_4(glval) = VariableAddress[t] : -# 2244| mu2244_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_4 -# 2244| r2244_6(ClassWithDestructor &) = Load[t] : &:r2244_4, ~m? -# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, ~m? -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 -# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? -# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| r2245_10(glval) = CopyValue : r2245_6 -# 2245| r2245_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2245| v2245_12(void) = Call[~ClassWithDestructor] : func:r2245_11 -# 2245| mu2245_13(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_14(void) = ^IndirectReadSideEffect[-1] : &:r2245_10, ~m? -# 2245| mu2245_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_10 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? -# 2244| v2244_9(void) = ReturnVoid : -# 2244| v2244_10(void) = AliasedUse : ~m? -# 2244| v2244_11(void) = ExitFunction : - -# 2244| void vacuous_destructor_call::call_destructor(int&) -# 2244| Block 0 -# 2244| v2244_1(void) = EnterFunction : -# 2244| mu2244_2(unknown) = AliasedDefinition : -# 2244| mu2244_3(unknown) = InitializeNonLocal : -# 2244| r2244_4(glval) = VariableAddress[t] : -# 2244| mu2244_5(int &) = InitializeParameter[t] : &:r2244_4 -# 2244| r2244_6(int &) = Load[t] : &:r2244_4, ~m? -# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 -# 2245| r2245_1(glval) = FunctionAddress[get] : -# 2245| r2245_2(glval) = VariableAddress[t] : -# 2245| r2245_3(int &) = Load[t] : &:r2245_2, ~m? -# 2245| r2245_4(glval) = CopyValue : r2245_3 -# 2245| r2245_5(int &) = CopyValue : r2245_4 -# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 -# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? -# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? -# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 -# 2245| r2245_10(glval) = CopyValue : r2245_6 -# 2246| v2246_1(void) = NoOp : -# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? -# 2244| v2244_9(void) = ReturnVoid : -# 2244| v2244_10(void) = AliasedUse : ~m? -# 2244| v2244_11(void) = ExitFunction : - -# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2248| Block 0 -# 2248| v2248_1(void) = EnterFunction : -# 2248| mu2248_2(unknown) = AliasedDefinition : -# 2248| mu2248_3(unknown) = InitializeNonLocal : -# 2249| r2249_1(glval) = VariableAddress[c] : -# 2249| mu2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 -# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 +# 2249| Block 2 +# 2249| v2249_1(void) = NoOp : +# 2249| r2249_2(glval) = VariableAddress[b] : +# 2249| r2249_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_4(void) = Call[~ClassWithDestructor] : func:r2249_3, this:r2249_2 # 2249| mu2249_5(unknown) = ^CallSideEffect : ~m? -# 2249| mu2249_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 -# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : -# 2250| r2250_2(glval) = VariableAddress[c] : -# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 -# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 -# 2250| mu2250_5(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_6(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m? -# 2250| mu2250_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 -# 2251| v2251_1(void) = NoOp : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 -# 2251| mu2251_5(unknown) = ^CallSideEffect : ~m? -# 2251| v2251_6(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, ~m? -# 2251| mu2251_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 -# 2248| v2248_4(void) = ReturnVoid : -# 2248| v2248_5(void) = AliasedUse : ~m? -# 2248| v2248_6(void) = ExitFunction : +# 2249| v2249_6(void) = ^IndirectReadSideEffect[-1] : &:r2249_2, ~m? +# 2249| mu2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_2 +# 2249| r2249_8(glval) = VariableAddress[a] : +# 2249| r2249_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2249| v2249_10(void) = Call[~ClassWithDestructor] : func:r2249_9, this:r2249_8 +# 2249| mu2249_11(unknown) = ^CallSideEffect : ~m? +# 2249| v2249_12(void) = ^IndirectReadSideEffect[-1] : &:r2249_8, ~m? +# 2249| mu2249_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_8 +# 2245| v2245_4(void) = ReturnVoid : +# 2245| v2245_5(void) = AliasedUse : ~m? +# 2245| v2245_6(void) = ExitFunction : -# 2253| void vacuous_destructor_call::vacuous_destructor_call() -# 2253| Block 0 -# 2253| v2253_1(void) = EnterFunction : -# 2253| mu2253_2(unknown) = AliasedDefinition : -# 2253| mu2253_3(unknown) = InitializeNonLocal : -# 2254| r2254_1(glval) = VariableAddress[i] : -# 2254| mu2254_2(int) = Uninitialized[i] : &:r2254_1 -# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : -# 2255| r2255_2(glval) = VariableAddress[i] : -# 2255| r2255_3(int &) = CopyValue : r2255_2 -# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 -# 2255| mu2255_5(unknown) = ^CallSideEffect : ~m? -# 2255| v2255_6(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m? -# 2255| mu2255_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 -# 2256| v2256_1(void) = NoOp : -# 2253| v2253_4(void) = ReturnVoid : -# 2253| v2253_5(void) = AliasedUse : ~m? -# 2253| v2253_6(void) = ExitFunction : +# 2251| ClassWithDestructor global_class_with_destructor +# 2251| Block 0 +# 2251| v2251_1(void) = EnterFunction : +# 2251| mu2251_2(unknown) = AliasedDefinition : +# 2251| r2251_3(glval) = VariableAddress[global_class_with_destructor] : +# 2251| r2251_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2251| v2251_5(void) = Call[ClassWithDestructor] : func:r2251_4, this:r2251_3 +# 2251| mu2251_6(unknown) = ^CallSideEffect : ~m? +# 2251| mu2251_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_3 +# 2251| v2251_8(void) = ReturnVoid : +# 2251| v2251_9(void) = AliasedUse : ~m? +# 2251| v2251_10(void) = ExitFunction : -# 2259| void TryCatchDestructors(bool) -# 2259| Block 0 -# 2259| v2259_1(void) = EnterFunction : -# 2259| mu2259_2(unknown) = AliasedDefinition : -# 2259| mu2259_3(unknown) = InitializeNonLocal : -# 2259| r2259_4(glval) = VariableAddress[b] : -# 2259| mu2259_5(bool) = InitializeParameter[b] : &:r2259_4 -# 2261| r2261_1(glval) = VariableAddress[s] : -# 2261| mu2261_2(String) = Uninitialized[s] : &:r2261_1 -# 2261| r2261_3(glval) = FunctionAddress[String] : -# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 -# 2261| mu2261_5(unknown) = ^CallSideEffect : ~m? -# 2261| mu2261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 -# 2262| r2262_1(glval) = VariableAddress[b] : -# 2262| r2262_2(bool) = Load[b] : &:r2262_1, ~m? -# 2262| v2262_3(void) = ConditionalBranch : r2262_2 +# 2255| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| mu2255_2(unknown) = AliasedDefinition : +# 2255| mu2255_3(unknown) = InitializeNonLocal : +# 2255| r2255_4(glval) = VariableAddress[t] : +# 2255| mu2255_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2255_4 +# 2255| r2255_6(ClassWithDestructor &) = Load[t] : &:r2255_4, ~m? +# 2255| mu2255_7(unknown) = InitializeIndirection[t] : &:r2255_6 +# 2255| r2255_8(glval) = VariableAddress[#return] : +# 2255| r2255_9(glval) = VariableAddress[t] : +# 2255| r2255_10(ClassWithDestructor &) = Load[t] : &:r2255_9, ~m? +# 2255| r2255_11(glval) = CopyValue : r2255_10 +# 2255| r2255_12(ClassWithDestructor &) = CopyValue : r2255_11 +# 2255| mu2255_13(ClassWithDestructor &) = Store[#return] : &:r2255_8, r2255_12 +# 2255| v2255_14(void) = ReturnIndirection[t] : &:r2255_6, ~m? +# 2255| r2255_15(glval) = VariableAddress[#return] : +# 2255| v2255_16(void) = ReturnValue : &:r2255_15, ~m? +# 2255| v2255_17(void) = AliasedUse : ~m? +# 2255| v2255_18(void) = ExitFunction : + +# 2255| int& vacuous_destructor_call::get(int&) +# 2255| Block 0 +# 2255| v2255_1(void) = EnterFunction : +# 2255| mu2255_2(unknown) = AliasedDefinition : +# 2255| mu2255_3(unknown) = InitializeNonLocal : +# 2255| r2255_4(glval) = VariableAddress[t] : +# 2255| mu2255_5(int &) = InitializeParameter[t] : &:r2255_4 +# 2255| r2255_6(int &) = Load[t] : &:r2255_4, ~m? +# 2255| mu2255_7(unknown) = InitializeIndirection[t] : &:r2255_6 +# 2255| r2255_8(glval) = VariableAddress[#return] : +# 2255| r2255_9(glval) = VariableAddress[t] : +# 2255| r2255_10(int &) = Load[t] : &:r2255_9, ~m? +# 2255| r2255_11(glval) = CopyValue : r2255_10 +# 2255| r2255_12(int &) = CopyValue : r2255_11 +# 2255| mu2255_13(int &) = Store[#return] : &:r2255_8, r2255_12 +# 2255| v2255_14(void) = ReturnIndirection[t] : &:r2255_6, ~m? +# 2255| r2255_15(glval) = VariableAddress[#return] : +# 2255| v2255_16(void) = ReturnValue : &:r2255_15, ~m? +# 2255| v2255_17(void) = AliasedUse : ~m? +# 2255| v2255_18(void) = ExitFunction : + +# 2258| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| mu2258_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(ClassWithDestructor &) = Load[t] : &:r2258_4, ~m? +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(ClassWithDestructor &) = Load[t] : &:r2259_2, ~m? +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(ClassWithDestructor &) = CopyValue : r2259_4 +# 2259| r2259_6(ClassWithDestructor &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| mu2259_7(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_8(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m? +# 2259| mu2259_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| r2259_10(glval) = CopyValue : r2259_6 +# 2259| r2259_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2259| v2259_12(void) = Call[~ClassWithDestructor] : func:r2259_11 +# 2259| mu2259_13(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_14(void) = ^IndirectReadSideEffect[-1] : &:r2259_10, ~m? +# 2259| mu2259_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2259_10 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_8(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| v2258_9(void) = ReturnVoid : +# 2258| v2258_10(void) = AliasedUse : ~m? +# 2258| v2258_11(void) = ExitFunction : + +# 2258| void vacuous_destructor_call::call_destructor(int&) +# 2258| Block 0 +# 2258| v2258_1(void) = EnterFunction : +# 2258| mu2258_2(unknown) = AliasedDefinition : +# 2258| mu2258_3(unknown) = InitializeNonLocal : +# 2258| r2258_4(glval) = VariableAddress[t] : +# 2258| mu2258_5(int &) = InitializeParameter[t] : &:r2258_4 +# 2258| r2258_6(int &) = Load[t] : &:r2258_4, ~m? +# 2258| mu2258_7(unknown) = InitializeIndirection[t] : &:r2258_6 +# 2259| r2259_1(glval) = FunctionAddress[get] : +# 2259| r2259_2(glval) = VariableAddress[t] : +# 2259| r2259_3(int &) = Load[t] : &:r2259_2, ~m? +# 2259| r2259_4(glval) = CopyValue : r2259_3 +# 2259| r2259_5(int &) = CopyValue : r2259_4 +# 2259| r2259_6(int &) = Call[get] : func:r2259_1, 0:r2259_5 +# 2259| mu2259_7(unknown) = ^CallSideEffect : ~m? +# 2259| v2259_8(void) = ^BufferReadSideEffect[0] : &:r2259_5, ~m? +# 2259| mu2259_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2259_5 +# 2259| r2259_10(glval) = CopyValue : r2259_6 +# 2260| v2260_1(void) = NoOp : +# 2258| v2258_8(void) = ReturnIndirection[t] : &:r2258_6, ~m? +# 2258| v2258_9(void) = ReturnVoid : +# 2258| v2258_10(void) = AliasedUse : ~m? +# 2258| v2258_11(void) = ExitFunction : + +# 2262| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2262| Block 0 +# 2262| v2262_1(void) = EnterFunction : +# 2262| mu2262_2(unknown) = AliasedDefinition : +# 2262| mu2262_3(unknown) = InitializeNonLocal : +# 2263| r2263_1(glval) = VariableAddress[c] : +# 2263| mu2263_2(ClassWithDestructor) = Uninitialized[c] : &:r2263_1 +# 2263| r2263_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2263| v2263_4(void) = Call[ClassWithDestructor] : func:r2263_3, this:r2263_1 +# 2263| mu2263_5(unknown) = ^CallSideEffect : ~m? +# 2263| mu2263_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2263_1 +# 2264| r2264_1(glval) = FunctionAddress[call_destructor] : +# 2264| r2264_2(glval) = VariableAddress[c] : +# 2264| r2264_3(ClassWithDestructor &) = CopyValue : r2264_2 +# 2264| v2264_4(void) = Call[call_destructor] : func:r2264_1, 0:r2264_3 +# 2264| mu2264_5(unknown) = ^CallSideEffect : ~m? +# 2264| v2264_6(void) = ^BufferReadSideEffect[0] : &:r2264_3, ~m? +# 2264| mu2264_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2264_3 +# 2265| v2265_1(void) = NoOp : +# 2265| r2265_2(glval) = VariableAddress[c] : +# 2265| r2265_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2265| v2265_4(void) = Call[~ClassWithDestructor] : func:r2265_3, this:r2265_2 +# 2265| mu2265_5(unknown) = ^CallSideEffect : ~m? +# 2265| v2265_6(void) = ^IndirectReadSideEffect[-1] : &:r2265_2, ~m? +# 2265| mu2265_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2265_2 +# 2262| v2262_4(void) = ReturnVoid : +# 2262| v2262_5(void) = AliasedUse : ~m? +# 2262| v2262_6(void) = ExitFunction : + +# 2267| void vacuous_destructor_call::vacuous_destructor_call() +# 2267| Block 0 +# 2267| v2267_1(void) = EnterFunction : +# 2267| mu2267_2(unknown) = AliasedDefinition : +# 2267| mu2267_3(unknown) = InitializeNonLocal : +# 2268| r2268_1(glval) = VariableAddress[i] : +# 2268| mu2268_2(int) = Uninitialized[i] : &:r2268_1 +# 2269| r2269_1(glval) = FunctionAddress[call_destructor] : +# 2269| r2269_2(glval) = VariableAddress[i] : +# 2269| r2269_3(int &) = CopyValue : r2269_2 +# 2269| v2269_4(void) = Call[call_destructor] : func:r2269_1, 0:r2269_3 +# 2269| mu2269_5(unknown) = ^CallSideEffect : ~m? +# 2269| v2269_6(void) = ^BufferReadSideEffect[0] : &:r2269_3, ~m? +# 2269| mu2269_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2269_3 +# 2270| v2270_1(void) = NoOp : +# 2267| v2267_4(void) = ReturnVoid : +# 2267| v2267_5(void) = AliasedUse : ~m? +# 2267| v2267_6(void) = ExitFunction : + +# 2273| void TryCatchDestructors(bool) +# 2273| Block 0 +# 2273| v2273_1(void) = EnterFunction : +# 2273| mu2273_2(unknown) = AliasedDefinition : +# 2273| mu2273_3(unknown) = InitializeNonLocal : +# 2273| r2273_4(glval) = VariableAddress[b] : +# 2273| mu2273_5(bool) = InitializeParameter[b] : &:r2273_4 +# 2275| r2275_1(glval) = VariableAddress[s] : +# 2275| mu2275_2(String) = Uninitialized[s] : &:r2275_1 +# 2275| r2275_3(glval) = FunctionAddress[String] : +# 2275| v2275_4(void) = Call[String] : func:r2275_3, this:r2275_1 +# 2275| mu2275_5(unknown) = ^CallSideEffect : ~m? +# 2275| mu2275_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 +# 2276| r2276_1(glval) = VariableAddress[b] : +# 2276| r2276_2(bool) = Load[b] : &:r2276_1, ~m? +# 2276| v2276_3(void) = ConditionalBranch : r2276_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 2259| Block 1 -# 2259| v2259_6(void) = AliasedUse : ~m? -# 2259| v2259_7(void) = ExitFunction : +# 2273| Block 1 +# 2273| v2273_6(void) = AliasedUse : ~m? +# 2273| v2273_7(void) = ExitFunction : -# 2259| Block 2 -# 2259| v2259_8(void) = Unwind : +# 2273| Block 2 +# 2273| v2273_8(void) = Unwind : #-----| Goto -> Block 1 -# 2263| Block 3 -# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : -# 2263| r2263_2(glval) = StringConstant["string literal"] : -# 2263| r2263_3(char *) = Convert : r2263_2 -# 2263| mu2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 -# 2263| v2263_5(void) = ThrowValue : &:r2263_1, ~m? +# 2277| Block 3 +# 2277| r2277_1(glval) = VariableAddress[#throw2277:7] : +# 2277| r2277_2(glval) = StringConstant["string literal"] : +# 2277| r2277_3(char *) = Convert : r2277_2 +# 2277| mu2277_4(char *) = Store[#throw2277:7] : &:r2277_1, r2277_3 +# 2277| v2277_5(void) = ThrowValue : &:r2277_1, ~m? #-----| Exception -> Block 5 -# 2265| Block 4 -# 2265| r2265_1(glval) = VariableAddress[s2] : -# 2265| mu2265_2(String) = Uninitialized[s2] : &:r2265_1 -# 2265| r2265_3(glval) = FunctionAddress[String] : -# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 -# 2265| mu2265_5(unknown) = ^CallSideEffect : ~m? -# 2265| mu2265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 -# 2266| r2266_1(glval) = VariableAddress[s2] : -# 2266| r2266_2(glval) = FunctionAddress[~String] : -# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 -# 2266| mu2266_4(unknown) = ^CallSideEffect : ~m? -# 2266| v2266_5(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, ~m? -# 2266| mu2266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 -# 2266| r2266_7(glval) = VariableAddress[s] : -# 2266| r2266_8(glval) = FunctionAddress[~String] : -# 2266| v2266_9(void) = Call[~String] : func:r2266_8, this:r2266_7 -# 2266| mu2266_10(unknown) = ^CallSideEffect : ~m? -# 2266| v2266_11(void) = ^IndirectReadSideEffect[-1] : &:r2266_7, ~m? -# 2266| mu2266_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_7 +# 2279| Block 4 +# 2279| r2279_1(glval) = VariableAddress[s2] : +# 2279| mu2279_2(String) = Uninitialized[s2] : &:r2279_1 +# 2279| r2279_3(glval) = FunctionAddress[String] : +# 2279| v2279_4(void) = Call[String] : func:r2279_3, this:r2279_1 +# 2279| mu2279_5(unknown) = ^CallSideEffect : ~m? +# 2279| mu2279_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2279_1 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| r2280_2(glval) = FunctionAddress[~String] : +# 2280| v2280_3(void) = Call[~String] : func:r2280_2, this:r2280_1 +# 2280| mu2280_4(unknown) = ^CallSideEffect : ~m? +# 2280| v2280_5(void) = ^IndirectReadSideEffect[-1] : &:r2280_1, ~m? +# 2280| mu2280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2280| r2280_7(glval) = VariableAddress[s] : +# 2280| r2280_8(glval) = FunctionAddress[~String] : +# 2280| v2280_9(void) = Call[~String] : func:r2280_8, this:r2280_7 +# 2280| mu2280_10(unknown) = ^CallSideEffect : ~m? +# 2280| v2280_11(void) = ^IndirectReadSideEffect[-1] : &:r2280_7, ~m? +# 2280| mu2280_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_7 #-----| Goto -> Block 10 -# 2267| Block 5 -# 2267| v2267_1(void) = CatchByType[const char *] : +# 2281| Block 5 +# 2281| v2281_1(void) = CatchByType[const char *] : #-----| Exception -> Block 7 #-----| Goto -> Block 6 -# 2267| Block 6 -# 2267| r2267_2(glval) = VariableAddress[s] : -# 2267| mu2267_3(char *) = InitializeParameter[s] : &:r2267_2 -# 2267| r2267_4(char *) = Load[s] : &:r2267_2, ~m? -# 2267| mu2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 -# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : -# 2268| mu2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 -# 2268| r2268_3(glval) = FunctionAddress[String] : -# 2268| r2268_4(glval) = VariableAddress[s] : -# 2268| r2268_5(char *) = Load[s] : &:r2268_4, ~m? -# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 -# 2268| mu2268_7(unknown) = ^CallSideEffect : ~m? -# 2268| v2268_8(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m? -# 2268| mu2268_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 -# 2268| v2268_10(void) = ThrowValue : &:r2268_1, ~m? +# 2281| Block 6 +# 2281| r2281_2(glval) = VariableAddress[s] : +# 2281| mu2281_3(char *) = InitializeParameter[s] : &:r2281_2 +# 2281| r2281_4(char *) = Load[s] : &:r2281_2, ~m? +# 2281| mu2281_5(unknown) = InitializeIndirection[s] : &:r2281_4 +# 2282| r2282_1(glval) = VariableAddress[#throw2282:5] : +# 2282| mu2282_2(String) = Uninitialized[#throw2282:5] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| r2282_4(glval) = VariableAddress[s] : +# 2282| r2282_5(char *) = Load[s] : &:r2282_4, ~m? +# 2282| v2282_6(void) = Call[String] : func:r2282_3, this:r2282_1, 0:r2282_5 +# 2282| mu2282_7(unknown) = ^CallSideEffect : ~m? +# 2282| v2282_8(void) = ^BufferReadSideEffect[0] : &:r2282_5, ~m? +# 2282| mu2282_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2282| v2282_10(void) = ThrowValue : &:r2282_1, ~m? #-----| Exception -> Block 2 -# 2270| Block 7 -# 2270| v2270_1(void) = CatchByType[const String &] : +# 2284| Block 7 +# 2284| v2284_1(void) = CatchByType[const String &] : #-----| Exception -> Block 9 #-----| Goto -> Block 8 -# 2270| Block 8 -# 2270| r2270_2(glval) = VariableAddress[e] : -# 2270| mu2270_3(String &) = InitializeParameter[e] : &:r2270_2 -# 2270| r2270_4(String &) = Load[e] : &:r2270_2, ~m? -# 2270| mu2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 -# 2270| v2270_6(void) = NoOp : +# 2284| Block 8 +# 2284| r2284_2(glval) = VariableAddress[e] : +# 2284| mu2284_3(String &) = InitializeParameter[e] : &:r2284_2 +# 2284| r2284_4(String &) = Load[e] : &:r2284_2, ~m? +# 2284| mu2284_5(unknown) = InitializeIndirection[e] : &:r2284_4 +# 2284| v2284_6(void) = NoOp : #-----| Goto -> Block 10 -# 2272| Block 9 -# 2272| v2272_1(void) = CatchAny : -# 2273| v2273_1(void) = ReThrow : +# 2286| Block 9 +# 2286| v2286_1(void) = CatchAny : +# 2287| v2287_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2275| Block 10 -# 2275| v2275_1(void) = NoOp : -# 2259| v2259_9(void) = ReturnVoid : +# 2289| Block 10 +# 2289| v2289_1(void) = NoOp : +# 2273| v2273_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 2277| void IfDestructors(bool) -# 2277| Block 0 -# 2277| v2277_1(void) = EnterFunction : -# 2277| mu2277_2(unknown) = AliasedDefinition : -# 2277| mu2277_3(unknown) = InitializeNonLocal : -# 2277| r2277_4(glval) = VariableAddress[b] : -# 2277| mu2277_5(bool) = InitializeParameter[b] : &:r2277_4 -# 2278| r2278_1(glval) = VariableAddress[s1] : -# 2278| mu2278_2(String) = Uninitialized[s1] : &:r2278_1 -# 2278| r2278_3(glval) = FunctionAddress[String] : -# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 -# 2278| mu2278_5(unknown) = ^CallSideEffect : ~m? -# 2278| mu2278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 -# 2279| r2279_1(glval) = VariableAddress[b] : -# 2279| r2279_2(bool) = Load[b] : &:r2279_1, ~m? -# 2279| v2279_3(void) = ConditionalBranch : r2279_2 +# 2291| void IfDestructors(bool) +# 2291| Block 0 +# 2291| v2291_1(void) = EnterFunction : +# 2291| mu2291_2(unknown) = AliasedDefinition : +# 2291| mu2291_3(unknown) = InitializeNonLocal : +# 2291| r2291_4(glval) = VariableAddress[b] : +# 2291| mu2291_5(bool) = InitializeParameter[b] : &:r2291_4 +# 2292| r2292_1(glval) = VariableAddress[s1] : +# 2292| mu2292_2(String) = Uninitialized[s1] : &:r2292_1 +# 2292| r2292_3(glval) = FunctionAddress[String] : +# 2292| v2292_4(void) = Call[String] : func:r2292_3, this:r2292_1 +# 2292| mu2292_5(unknown) = ^CallSideEffect : ~m? +# 2292| mu2292_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2292_1 +# 2293| r2293_1(glval) = VariableAddress[b] : +# 2293| r2293_2(bool) = Load[b] : &:r2293_1, ~m? +# 2293| v2293_3(void) = ConditionalBranch : r2293_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2280| Block 1 -# 2280| r2280_1(glval) = VariableAddress[s2] : -# 2280| mu2280_2(String) = Uninitialized[s2] : &:r2280_1 -# 2280| r2280_3(glval) = FunctionAddress[String] : -# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 -# 2280| mu2280_5(unknown) = ^CallSideEffect : ~m? -# 2280| mu2280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 -# 2281| r2281_1(glval) = VariableAddress[s2] : -# 2281| r2281_2(glval) = FunctionAddress[~String] : -# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 -# 2281| mu2281_4(unknown) = ^CallSideEffect : ~m? -# 2281| v2281_5(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, ~m? -# 2281| mu2281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 +# 2294| Block 1 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| mu2294_5(unknown) = ^CallSideEffect : ~m? +# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| mu2295_4(unknown) = ^CallSideEffect : ~m? +# 2295| v2295_5(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, ~m? +# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 #-----| Goto -> Block 3 -# 2282| Block 2 -# 2282| r2282_1(glval) = VariableAddress[s3] : -# 2282| mu2282_2(String) = Uninitialized[s3] : &:r2282_1 -# 2282| r2282_3(glval) = FunctionAddress[String] : -# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 -# 2282| mu2282_5(unknown) = ^CallSideEffect : ~m? -# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 -# 2283| r2283_1(glval) = VariableAddress[s3] : -# 2283| r2283_2(glval) = FunctionAddress[~String] : -# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 -# 2283| mu2283_4(unknown) = ^CallSideEffect : ~m? -# 2283| v2283_5(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, ~m? -# 2283| mu2283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 +# 2296| Block 2 +# 2296| r2296_1(glval) = VariableAddress[s3] : +# 2296| mu2296_2(String) = Uninitialized[s3] : &:r2296_1 +# 2296| r2296_3(glval) = FunctionAddress[String] : +# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 +# 2296| mu2296_5(unknown) = ^CallSideEffect : ~m? +# 2296| mu2296_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 +# 2297| r2297_1(glval) = VariableAddress[s3] : +# 2297| r2297_2(glval) = FunctionAddress[~String] : +# 2297| v2297_3(void) = Call[~String] : func:r2297_2, this:r2297_1 +# 2297| mu2297_4(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_5(void) = ^IndirectReadSideEffect[-1] : &:r2297_1, ~m? +# 2297| mu2297_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 #-----| Goto -> Block 3 -# 2284| Block 3 -# 2284| r2284_1(glval) = VariableAddress[s4] : -# 2284| mu2284_2(String) = Uninitialized[s4] : &:r2284_1 -# 2284| r2284_3(glval) = FunctionAddress[String] : -# 2284| v2284_4(void) = Call[String] : func:r2284_3, this:r2284_1 -# 2284| mu2284_5(unknown) = ^CallSideEffect : ~m? -# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1 -# 2285| v2285_1(void) = NoOp : -# 2285| r2285_2(glval) = VariableAddress[s4] : -# 2285| r2285_3(glval) = FunctionAddress[~String] : -# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 -# 2285| mu2285_5(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_6(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, ~m? -# 2285| mu2285_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 -# 2285| r2285_8(glval) = VariableAddress[s1] : -# 2285| r2285_9(glval) = FunctionAddress[~String] : -# 2285| v2285_10(void) = Call[~String] : func:r2285_9, this:r2285_8 -# 2285| mu2285_11(unknown) = ^CallSideEffect : ~m? -# 2285| v2285_12(void) = ^IndirectReadSideEffect[-1] : &:r2285_8, ~m? -# 2285| mu2285_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_8 -# 2277| v2277_6(void) = ReturnVoid : -# 2277| v2277_7(void) = AliasedUse : ~m? -# 2277| v2277_8(void) = ExitFunction : +# 2298| Block 3 +# 2298| r2298_1(glval) = VariableAddress[s4] : +# 2298| mu2298_2(String) = Uninitialized[s4] : &:r2298_1 +# 2298| r2298_3(glval) = FunctionAddress[String] : +# 2298| v2298_4(void) = Call[String] : func:r2298_3, this:r2298_1 +# 2298| mu2298_5(unknown) = ^CallSideEffect : ~m? +# 2298| mu2298_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2298_1 +# 2299| v2299_1(void) = NoOp : +# 2299| r2299_2(glval) = VariableAddress[s4] : +# 2299| r2299_3(glval) = FunctionAddress[~String] : +# 2299| v2299_4(void) = Call[~String] : func:r2299_3, this:r2299_2 +# 2299| mu2299_5(unknown) = ^CallSideEffect : ~m? +# 2299| v2299_6(void) = ^IndirectReadSideEffect[-1] : &:r2299_2, ~m? +# 2299| mu2299_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_2 +# 2299| r2299_8(glval) = VariableAddress[s1] : +# 2299| r2299_9(glval) = FunctionAddress[~String] : +# 2299| v2299_10(void) = Call[~String] : func:r2299_9, this:r2299_8 +# 2299| mu2299_11(unknown) = ^CallSideEffect : ~m? +# 2299| v2299_12(void) = ^IndirectReadSideEffect[-1] : &:r2299_8, ~m? +# 2299| mu2299_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2299_8 +# 2291| v2291_6(void) = ReturnVoid : +# 2291| v2291_7(void) = AliasedUse : ~m? +# 2291| v2291_8(void) = ExitFunction : -# 2287| void ForDestructors() -# 2287| Block 0 -# 2287| v2287_1(void) = EnterFunction : -# 2287| mu2287_2(unknown) = AliasedDefinition : -# 2287| mu2287_3(unknown) = InitializeNonLocal : -# 2288| r2288_1(glval) = VariableAddress[c] : -# 2288| r2288_2(char) = Constant[97] : -# 2288| mu2288_3(char) = Store[c] : &:r2288_1, r2288_2 -# 2289| r2289_1(glval) = VariableAddress[s] : -# 2289| mu2289_2(String) = Uninitialized[s] : &:r2289_1 -# 2289| r2289_3(glval) = FunctionAddress[String] : -# 2289| r2289_4(glval) = StringConstant["hello"] : -# 2289| r2289_5(char *) = Convert : r2289_4 -# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 -# 2289| mu2289_7(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_8(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m? -# 2289| mu2289_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 -#-----| Goto -> Block 1 - -# 2289| Block 1 -# 2289| r2289_10(glval) = VariableAddress[c] : -# 2289| r2289_11(char) = Load[c] : &:r2289_10, ~m? -# 2289| r2289_12(int) = Convert : r2289_11 -# 2289| r2289_13(int) = Constant[0] : -# 2289| r2289_14(bool) = CompareNE : r2289_12, r2289_13 -# 2289| v2289_15(void) = ConditionalBranch : r2289_14 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2290| Block 2 -# 2290| r2290_1(glval) = VariableAddress[s2] : -# 2290| mu2290_2(String) = Uninitialized[s2] : &:r2290_1 -# 2290| r2290_3(glval) = FunctionAddress[String] : -# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 -# 2290| mu2290_5(unknown) = ^CallSideEffect : ~m? -# 2290| mu2290_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 -# 2291| r2291_1(glval) = VariableAddress[s2] : -# 2291| r2291_2(glval) = FunctionAddress[~String] : -# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 -# 2291| mu2291_4(unknown) = ^CallSideEffect : ~m? -# 2291| v2291_5(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, ~m? -# 2291| mu2291_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 -# 2289| r2289_16(glval) = VariableAddress[s] : -# 2289| r2289_17(glval) = FunctionAddress[pop_back] : -# 2289| r2289_18(char) = Call[pop_back] : func:r2289_17, this:r2289_16 -# 2289| mu2289_19(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_20(void) = ^IndirectReadSideEffect[-1] : &:r2289_16, ~m? -# 2289| mu2289_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_16 -# 2289| r2289_22(glval) = VariableAddress[c] : -# 2289| mu2289_23(char) = Store[c] : &:r2289_22, r2289_18 -#-----| Goto (back edge) -> Block 1 - -# 2289| Block 3 -# 2289| r2289_24(glval) = VariableAddress[s] : -# 2289| r2289_25(glval) = FunctionAddress[~String] : -# 2289| v2289_26(void) = Call[~String] : func:r2289_25, this:r2289_24 -# 2289| mu2289_27(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_28(void) = ^IndirectReadSideEffect[-1] : &:r2289_24, ~m? -# 2289| mu2289_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_24 -# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : -# 2293| mu2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 -# 2293| r2293_4(glval) = FunctionAddress[vector] : -# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : -# 2293| mu2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 -# 2293| r2293_7(glval) = FunctionAddress[String] : -# 2293| r2293_8(glval) = StringConstant["hello"] : -# 2293| r2293_9(char *) = Convert : r2293_8 -# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 -# 2293| mu2293_11(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_12(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m? -# 2293| mu2293_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 -# 2293| r2293_14(String) = Load[#temp2293:40] : &:r2293_5, ~m? -# 2293| v2293_15(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_14 -# 2293| mu2293_16(unknown) = ^CallSideEffect : ~m? -# 2293| mu2293_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 -# 2293| r2293_18(vector &) = CopyValue : r2293_2 -# 2293| mu2293_19(vector &&) = Store[(__range)] : &:r2293_1, r2293_18 -# 2293| r2293_20(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_21(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_22(vector &&) = Load[(__range)] : &:r2293_21, ~m? -#-----| r0_1(glval>) = CopyValue : r2293_22 -#-----| r0_2(glval>) = Convert : r0_1 -# 2293| r2293_23(glval) = FunctionAddress[begin] : -# 2293| r2293_24(iterator) = Call[begin] : func:r2293_23, this:r0_2 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2293| mu2293_25(iterator) = Store[(__begin)] : &:r2293_20, r2293_24 -# 2293| r2293_26(glval>) = VariableAddress[(__end)] : -# 2293| r2293_27(glval &&>) = VariableAddress[(__range)] : -# 2293| r2293_28(vector &&) = Load[(__range)] : &:r2293_27, ~m? -#-----| r0_4(glval>) = CopyValue : r2293_28 -#-----| r0_5(glval>) = Convert : r0_4 -# 2293| r2293_29(glval) = FunctionAddress[end] : -# 2293| r2293_30(iterator) = Call[end] : func:r2293_29, this:r0_5 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2293| mu2293_31(iterator) = Store[(__end)] : &:r2293_26, r2293_30 -#-----| Goto -> Block 4 - -# 2293| Block 4 -# 2293| r2293_32(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2293_32 -# 2293| r2293_33(glval) = FunctionAddress[operator!=] : -#-----| r0_8(glval>) = VariableAddress[#temp0:0] : -#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_34(glval) = FunctionAddress[iterator] : -# 2293| r2293_35(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2293_35 -#-----| r0_11(iterator &) = CopyValue : r0_10 -# 2293| v2293_36(void) = Call[iterator] : func:r2293_34, this:r0_8, 0:r0_11 -# 2293| mu2293_37(unknown) = ^CallSideEffect : ~m? -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? -# 2293| mu2293_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? -# 2293| r2293_39(bool) = Call[operator!=] : func:r2293_33, this:r0_7, 0:r0_13 -# 2293| mu2293_40(unknown) = ^CallSideEffect : ~m? -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2293| v2293_41(void) = ConditionalBranch : r2293_39 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 2293| Block 5 -# 2293| r2293_42(glval) = VariableAddress[s] : -# 2293| mu2293_43(String) = Uninitialized[s] : &:r2293_42 -# 2293| r2293_44(glval) = FunctionAddress[String] : -# 2293| r2293_45(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2293_45 -# 2293| r2293_46(glval) = FunctionAddress[operator*] : -# 2293| r2293_47(String &) = Call[operator*] : func:r2293_46, this:r0_15 -# 2293| mu2293_48(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2293| r2293_49(glval) = CopyValue : r2293_47 -# 2293| r2293_50(glval) = Convert : r2293_49 -# 2293| r2293_51(String &) = CopyValue : r2293_50 -# 2293| v2293_52(void) = Call[String] : func:r2293_44, this:r2293_42, 0:r2293_51 -# 2293| mu2293_53(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_54(void) = ^BufferReadSideEffect[0] : &:r2293_51, ~m? -# 2293| mu2293_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_42 -# 2294| r2294_1(glval) = VariableAddress[s2] : -# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 -# 2294| r2294_3(glval) = FunctionAddress[String] : -# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 -# 2294| mu2294_5(unknown) = ^CallSideEffect : ~m? -# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 -# 2295| r2295_1(glval) = VariableAddress[s2] : -# 2295| r2295_2(glval) = FunctionAddress[~String] : -# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 -# 2295| mu2295_4(unknown) = ^CallSideEffect : ~m? -# 2295| v2295_5(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, ~m? -# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 -# 2293| r2293_56(glval) = VariableAddress[s] : -# 2293| r2293_57(glval) = FunctionAddress[~String] : -# 2293| v2293_58(void) = Call[~String] : func:r2293_57, this:r2293_56 -# 2293| mu2293_59(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_60(void) = ^IndirectReadSideEffect[-1] : &:r2293_56, ~m? -# 2293| mu2293_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_56 -# 2293| r2293_62(glval>) = VariableAddress[(__begin)] : -# 2293| r2293_63(glval) = FunctionAddress[operator++] : -# 2293| r2293_64(iterator &) = Call[operator++] : func:r2293_63, this:r2293_62 -# 2293| mu2293_65(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_66(void) = ^IndirectReadSideEffect[-1] : &:r2293_62, ~m? -# 2293| mu2293_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_62 -# 2293| r2293_68(glval>) = CopyValue : r2293_64 -#-----| Goto (back edge) -> Block 4 - -# 2297| Block 6 -# 2297| r2297_1(glval) = VariableAddress[s] : -# 2297| mu2297_2(String) = Uninitialized[s] : &:r2297_1 -# 2297| r2297_3(glval) = FunctionAddress[String] : -# 2297| r2297_4(glval) = StringConstant["hello"] : -# 2297| r2297_5(char *) = Convert : r2297_4 -# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 -# 2297| mu2297_7(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_8(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m? -# 2297| mu2297_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 -# 2297| r2297_10(glval) = VariableAddress[s2] : -# 2297| mu2297_11(String) = Uninitialized[s2] : &:r2297_10 -# 2297| r2297_12(glval) = FunctionAddress[String] : -# 2297| r2297_13(glval) = StringConstant["world"] : -# 2297| r2297_14(char *) = Convert : r2297_13 -# 2297| v2297_15(void) = Call[String] : func:r2297_12, this:r2297_10, 0:r2297_14 -# 2297| mu2297_16(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_17(void) = ^BufferReadSideEffect[0] : &:r2297_14, ~m? -# 2297| mu2297_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_10 -#-----| Goto -> Block 7 - -# 2297| Block 7 -# 2297| r2297_19(glval) = VariableAddress[c] : -# 2297| r2297_20(char) = Load[c] : &:r2297_19, ~m? -# 2297| r2297_21(int) = Convert : r2297_20 -# 2297| r2297_22(int) = Constant[0] : -# 2297| r2297_23(bool) = CompareNE : r2297_21, r2297_22 -# 2297| v2297_24(void) = ConditionalBranch : r2297_23 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 2298| Block 8 -# 2298| r2298_1(char) = Constant[0] : -# 2298| r2298_2(glval) = VariableAddress[c] : -# 2298| mu2298_3(char) = Store[c] : &:r2298_2, r2298_1 -# 2297| r2297_25(glval) = VariableAddress[s] : -# 2297| r2297_26(glval) = FunctionAddress[pop_back] : -# 2297| r2297_27(char) = Call[pop_back] : func:r2297_26, this:r2297_25 -# 2297| mu2297_28(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_29(void) = ^IndirectReadSideEffect[-1] : &:r2297_25, ~m? -# 2297| mu2297_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_25 -# 2297| r2297_31(glval) = VariableAddress[c] : -# 2297| mu2297_32(char) = Store[c] : &:r2297_31, r2297_27 -#-----| Goto (back edge) -> Block 7 - -# 2297| Block 9 -# 2297| r2297_33(glval) = VariableAddress[s2] : -# 2297| r2297_34(glval) = FunctionAddress[~String] : -# 2297| v2297_35(void) = Call[~String] : func:r2297_34, this:r2297_33 -# 2297| mu2297_36(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_33, ~m? -# 2297| mu2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_33 -# 2297| r2297_39(glval) = VariableAddress[s] : -# 2297| r2297_40(glval) = FunctionAddress[~String] : -# 2297| v2297_41(void) = Call[~String] : func:r2297_40, this:r2297_39 -# 2297| mu2297_42(unknown) = ^CallSideEffect : ~m? -# 2297| v2297_43(void) = ^IndirectReadSideEffect[-1] : &:r2297_39, ~m? -# 2297| mu2297_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_39 -# 2300| v2300_1(void) = NoOp : -# 2287| v2287_4(void) = ReturnVoid : -# 2287| v2287_5(void) = AliasedUse : ~m? -# 2287| v2287_6(void) = ExitFunction : - -# 2302| void IfDestructors2(bool) -# 2302| Block 0 -# 2302| v2302_1(void) = EnterFunction : -# 2302| mu2302_2(unknown) = AliasedDefinition : -# 2302| mu2302_3(unknown) = InitializeNonLocal : -# 2302| r2302_4(glval) = VariableAddress[b] : -# 2302| mu2302_5(bool) = InitializeParameter[b] : &:r2302_4 +# 2301| void ForDestructors() +# 2301| Block 0 +# 2301| v2301_1(void) = EnterFunction : +# 2301| mu2301_2(unknown) = AliasedDefinition : +# 2301| mu2301_3(unknown) = InitializeNonLocal : +# 2302| r2302_1(glval) = VariableAddress[c] : +# 2302| r2302_2(char) = Constant[97] : +# 2302| mu2302_3(char) = Store[c] : &:r2302_1, r2302_2 # 2303| r2303_1(glval) = VariableAddress[s] : # 2303| mu2303_2(String) = Uninitialized[s] : &:r2303_1 # 2303| r2303_3(glval) = FunctionAddress[String] : @@ -13702,502 +13513,609 @@ ir.cpp: # 2303| mu2303_7(unknown) = ^CallSideEffect : ~m? # 2303| v2303_8(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m? # 2303| mu2303_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 -# 2303| r2303_10(glval) = VariableAddress[b] : -# 2303| r2303_11(bool) = Load[b] : &:r2303_10, ~m? -# 2303| v2303_12(void) = ConditionalBranch : r2303_11 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2304| Block 1 -# 2304| r2304_1(glval) = VariableAddress[x] : -# 2304| r2304_2(int) = Constant[0] : -# 2304| mu2304_3(int) = Store[x] : &:r2304_1, r2304_2 -#-----| Goto -> Block 3 - -# 2306| Block 2 -# 2306| r2306_1(glval) = VariableAddress[y] : -# 2306| r2306_2(int) = Constant[0] : -# 2306| mu2306_3(int) = Store[y] : &:r2306_1, r2306_2 -#-----| Goto -> Block 3 - -# 2307| Block 3 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| r2307_2(glval) = FunctionAddress[~String] : -# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 -# 2307| mu2307_4(unknown) = ^CallSideEffect : ~m? -# 2307| v2307_5(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, ~m? -# 2307| mu2307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2308| v2308_1(void) = NoOp : -# 2302| v2302_6(void) = ReturnVoid : -# 2302| v2302_7(void) = AliasedUse : ~m? -# 2302| v2302_8(void) = ExitFunction : - -# 2317| void IfDestructors3(bool) -# 2317| Block 0 -# 2317| v2317_1(void) = EnterFunction : -# 2317| mu2317_2(unknown) = AliasedDefinition : -# 2317| mu2317_3(unknown) = InitializeNonLocal : -# 2317| r2317_4(glval) = VariableAddress[b] : -# 2317| mu2317_5(bool) = InitializeParameter[b] : &:r2317_4 -# 2318| r2318_1(glval) = VariableAddress[B] : -# 2318| mu2318_2(Bool) = Uninitialized[B] : &:r2318_1 -# 2318| r2318_3(glval) = FunctionAddress[Bool] : -# 2318| r2318_4(glval) = VariableAddress[b] : -# 2318| r2318_5(bool) = Load[b] : &:r2318_4, ~m? -# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 -# 2318| mu2318_7(unknown) = ^CallSideEffect : ~m? -# 2318| mu2318_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 -# 2318| r2318_9(glval) = VariableAddress[B] : -# 2318| r2318_10(glval) = FunctionAddress[operator bool] : -# 2318| r2318_11(bool) = Call[operator bool] : func:r2318_10, this:r2318_9 -# 2318| mu2318_12(unknown) = ^CallSideEffect : ~m? -# 2318| v2318_13(void) = ^IndirectReadSideEffect[-1] : &:r2318_9, ~m? -# 2318| mu2318_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_9 -# 2318| r2318_15(bool) = CopyValue : r2318_11 -# 2318| v2318_16(void) = ConditionalBranch : r2318_15 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2319| Block 1 -# 2319| r2319_1(glval) = VariableAddress[s1] : -# 2319| mu2319_2(String) = Uninitialized[s1] : &:r2319_1 -# 2319| r2319_3(glval) = FunctionAddress[String] : -# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 -# 2319| mu2319_5(unknown) = ^CallSideEffect : ~m? -# 2319| mu2319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 -# 2320| r2320_1(glval) = VariableAddress[s1] : -# 2320| r2320_2(glval) = FunctionAddress[~String] : -# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 -# 2320| mu2320_4(unknown) = ^CallSideEffect : ~m? -# 2320| v2320_5(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, ~m? -# 2320| mu2320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 -#-----| Goto -> Block 3 - -# 2321| Block 2 -# 2321| r2321_1(glval) = VariableAddress[s2] : -# 2321| mu2321_2(String) = Uninitialized[s2] : &:r2321_1 -# 2321| r2321_3(glval) = FunctionAddress[String] : -# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 -# 2321| mu2321_5(unknown) = ^CallSideEffect : ~m? -# 2321| mu2321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 -# 2322| r2322_1(glval) = VariableAddress[s2] : -# 2322| r2322_2(glval) = FunctionAddress[~String] : -# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 -# 2322| mu2322_4(unknown) = ^CallSideEffect : ~m? -# 2322| v2322_5(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, ~m? -# 2322| mu2322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 -#-----| Goto -> Block 3 - -# 2322| Block 3 -# 2322| r2322_7(glval) = VariableAddress[B] : -# 2322| r2322_8(glval) = FunctionAddress[~Bool] : -# 2322| v2322_9(void) = Call[~Bool] : func:r2322_8, this:r2322_7 -# 2322| mu2322_10(unknown) = ^CallSideEffect : ~m? -# 2322| v2322_11(void) = ^IndirectReadSideEffect[-1] : &:r2322_7, ~m? -# 2322| mu2322_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_7 -# 2323| v2323_1(void) = NoOp : -# 2317| v2317_6(void) = ReturnVoid : -# 2317| v2317_7(void) = AliasedUse : ~m? -# 2317| v2317_8(void) = ExitFunction : - -# 2325| void WhileLoopDestructors(bool) -# 2325| Block 0 -# 2325| v2325_1(void) = EnterFunction : -# 2325| mu2325_2(unknown) = AliasedDefinition : -# 2325| mu2325_3(unknown) = InitializeNonLocal : -# 2325| r2325_4(glval) = VariableAddress[b] : -# 2325| mu2325_5(bool) = InitializeParameter[b] : &:r2325_4 -# 2327| r2327_1(glval) = VariableAddress[s] : -# 2327| mu2327_2(String) = Uninitialized[s] : &:r2327_1 -# 2327| r2327_3(glval) = FunctionAddress[String] : -# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 -# 2327| mu2327_5(unknown) = ^CallSideEffect : ~m? -# 2327| mu2327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 #-----| Goto -> Block 1 -# 2328| Block 1 -# 2328| r2328_1(glval) = VariableAddress[b] : -# 2328| r2328_2(bool) = Load[b] : &:r2328_1, ~m? -# 2328| v2328_3(void) = ConditionalBranch : r2328_2 +# 2303| Block 1 +# 2303| r2303_10(glval) = VariableAddress[c] : +# 2303| r2303_11(char) = Load[c] : &:r2303_10, ~m? +# 2303| r2303_12(int) = Convert : r2303_11 +# 2303| r2303_13(int) = Constant[0] : +# 2303| r2303_14(bool) = CompareNE : r2303_12, r2303_13 +# 2303| v2303_15(void) = ConditionalBranch : r2303_14 #-----| False -> Block 3 #-----| True -> Block 2 -# 2329| Block 2 -# 2329| r2329_1(bool) = Constant[0] : -# 2329| r2329_2(glval) = VariableAddress[b] : -# 2329| mu2329_3(bool) = Store[b] : &:r2329_2, r2329_1 +# 2304| Block 2 +# 2304| r2304_1(glval) = VariableAddress[s2] : +# 2304| mu2304_2(String) = Uninitialized[s2] : &:r2304_1 +# 2304| r2304_3(glval) = FunctionAddress[String] : +# 2304| v2304_4(void) = Call[String] : func:r2304_3, this:r2304_1 +# 2304| mu2304_5(unknown) = ^CallSideEffect : ~m? +# 2304| mu2304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 +# 2305| r2305_1(glval) = VariableAddress[s2] : +# 2305| r2305_2(glval) = FunctionAddress[~String] : +# 2305| v2305_3(void) = Call[~String] : func:r2305_2, this:r2305_1 +# 2305| mu2305_4(unknown) = ^CallSideEffect : ~m? +# 2305| v2305_5(void) = ^IndirectReadSideEffect[-1] : &:r2305_1, ~m? +# 2305| mu2305_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2305_1 +# 2303| r2303_16(glval) = VariableAddress[s] : +# 2303| r2303_17(glval) = FunctionAddress[pop_back] : +# 2303| r2303_18(char) = Call[pop_back] : func:r2303_17, this:r2303_16 +# 2303| mu2303_19(unknown) = ^CallSideEffect : ~m? +# 2303| v2303_20(void) = ^IndirectReadSideEffect[-1] : &:r2303_16, ~m? +# 2303| mu2303_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_16 +# 2303| r2303_22(glval) = VariableAddress[c] : +# 2303| mu2303_23(char) = Store[c] : &:r2303_22, r2303_18 #-----| Goto (back edge) -> Block 1 -# 2331| Block 3 -# 2331| r2331_1(glval) = VariableAddress[s] : -# 2331| r2331_2(glval) = FunctionAddress[~String] : -# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 -# 2331| mu2331_4(unknown) = ^CallSideEffect : ~m? -# 2331| v2331_5(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, ~m? -# 2331| mu2331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 +# 2303| Block 3 +# 2303| r2303_24(glval) = VariableAddress[s] : +# 2303| r2303_25(glval) = FunctionAddress[~String] : +# 2303| v2303_26(void) = Call[~String] : func:r2303_25, this:r2303_24 +# 2303| mu2303_27(unknown) = ^CallSideEffect : ~m? +# 2303| v2303_28(void) = ^IndirectReadSideEffect[-1] : &:r2303_24, ~m? +# 2303| mu2303_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_24 +# 2307| r2307_1(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_2(glval>) = VariableAddress[#temp2307:20] : +# 2307| mu2307_3(vector) = Uninitialized[#temp2307:20] : &:r2307_2 +# 2307| r2307_4(glval) = FunctionAddress[vector] : +# 2307| r2307_5(glval) = VariableAddress[#temp2307:40] : +# 2307| mu2307_6(String) = Uninitialized[#temp2307:40] : &:r2307_5 +# 2307| r2307_7(glval) = FunctionAddress[String] : +# 2307| r2307_8(glval) = StringConstant["hello"] : +# 2307| r2307_9(char *) = Convert : r2307_8 +# 2307| v2307_10(void) = Call[String] : func:r2307_7, this:r2307_5, 0:r2307_9 +# 2307| mu2307_11(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_12(void) = ^BufferReadSideEffect[0] : &:r2307_9, ~m? +# 2307| mu2307_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_5 +# 2307| r2307_14(String) = Load[#temp2307:40] : &:r2307_5, ~m? +# 2307| v2307_15(void) = Call[vector] : func:r2307_4, this:r2307_2, 0:r2307_14 +# 2307| mu2307_16(unknown) = ^CallSideEffect : ~m? +# 2307| mu2307_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2307_2 +# 2307| r2307_18(vector &) = CopyValue : r2307_2 +# 2307| mu2307_19(vector &&) = Store[(__range)] : &:r2307_1, r2307_18 +# 2307| r2307_20(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_21(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_22(vector &&) = Load[(__range)] : &:r2307_21, ~m? +#-----| r0_1(glval>) = CopyValue : r2307_22 +#-----| r0_2(glval>) = Convert : r0_1 +# 2307| r2307_23(glval) = FunctionAddress[begin] : +# 2307| r2307_24(iterator) = Call[begin] : func:r2307_23, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2307| mu2307_25(iterator) = Store[(__begin)] : &:r2307_20, r2307_24 +# 2307| r2307_26(glval>) = VariableAddress[(__end)] : +# 2307| r2307_27(glval &&>) = VariableAddress[(__range)] : +# 2307| r2307_28(vector &&) = Load[(__range)] : &:r2307_27, ~m? +#-----| r0_4(glval>) = CopyValue : r2307_28 +#-----| r0_5(glval>) = Convert : r0_4 +# 2307| r2307_29(glval) = FunctionAddress[end] : +# 2307| r2307_30(iterator) = Call[end] : func:r2307_29, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2307| mu2307_31(iterator) = Store[(__end)] : &:r2307_26, r2307_30 #-----| Goto -> Block 4 -# 2334| Block 4 -# 2334| r2334_1(glval) = VariableAddress[B] : -# 2334| mu2334_2(Bool) = Uninitialized[B] : &:r2334_1 -# 2334| r2334_3(glval) = FunctionAddress[Bool] : -# 2334| r2334_4(glval) = VariableAddress[b] : -# 2334| r2334_5(bool) = Load[b] : &:r2334_4, ~m? -# 2334| v2334_6(void) = Call[Bool] : func:r2334_3, this:r2334_1, 0:r2334_5 -# 2334| mu2334_7(unknown) = ^CallSideEffect : ~m? -# 2334| mu2334_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 -# 2334| r2334_9(glval) = VariableAddress[B] : -# 2334| r2334_10(glval) = FunctionAddress[operator bool] : -# 2334| r2334_11(bool) = Call[operator bool] : func:r2334_10, this:r2334_9 -# 2334| mu2334_12(unknown) = ^CallSideEffect : ~m? -# 2334| v2334_13(void) = ^IndirectReadSideEffect[-1] : &:r2334_9, ~m? -# 2334| mu2334_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_9 -# 2334| r2334_15(bool) = CopyValue : r2334_11 -# 2334| v2334_16(void) = ConditionalBranch : r2334_15 +# 2307| Block 4 +# 2307| r2307_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2307_32 +# 2307| r2307_33(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2307| r2307_34(glval) = FunctionAddress[iterator] : +# 2307| r2307_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2307_35 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2307| v2307_36(void) = Call[iterator] : func:r2307_34, this:r0_8, 0:r0_11 +# 2307| mu2307_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2307| mu2307_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2307| r2307_39(bool) = Call[operator!=] : func:r2307_33, this:r0_7, 0:r0_13 +# 2307| mu2307_40(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2307| v2307_41(void) = ConditionalBranch : r2307_39 #-----| False -> Block 6 #-----| True -> Block 5 -# 2335| Block 5 -# 2335| r2335_1(bool) = Constant[0] : -# 2335| r2335_2(glval) = VariableAddress[b] : -# 2335| mu2335_3(bool) = Store[b] : &:r2335_2, r2335_1 -# 2336| r2336_1(glval) = VariableAddress[B] : -# 2336| r2336_2(glval) = FunctionAddress[~Bool] : -# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 -# 2336| mu2336_4(unknown) = ^CallSideEffect : ~m? -# 2336| v2336_5(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, ~m? -# 2336| mu2336_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +# 2307| Block 5 +# 2307| r2307_42(glval) = VariableAddress[s] : +# 2307| mu2307_43(String) = Uninitialized[s] : &:r2307_42 +# 2307| r2307_44(glval) = FunctionAddress[String] : +# 2307| r2307_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2307_45 +# 2307| r2307_46(glval) = FunctionAddress[operator*] : +# 2307| r2307_47(String &) = Call[operator*] : func:r2307_46, this:r0_15 +# 2307| mu2307_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2307| r2307_49(glval) = CopyValue : r2307_47 +# 2307| r2307_50(glval) = Convert : r2307_49 +# 2307| r2307_51(String &) = CopyValue : r2307_50 +# 2307| v2307_52(void) = Call[String] : func:r2307_44, this:r2307_42, 0:r2307_51 +# 2307| mu2307_53(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_54(void) = ^BufferReadSideEffect[0] : &:r2307_51, ~m? +# 2307| mu2307_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_42 +# 2308| r2308_1(glval) = VariableAddress[s2] : +# 2308| mu2308_2(String) = Uninitialized[s2] : &:r2308_1 +# 2308| r2308_3(glval) = FunctionAddress[String] : +# 2308| v2308_4(void) = Call[String] : func:r2308_3, this:r2308_1 +# 2308| mu2308_5(unknown) = ^CallSideEffect : ~m? +# 2308| mu2308_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2308_1 +# 2309| r2309_1(glval) = VariableAddress[s2] : +# 2309| r2309_2(glval) = FunctionAddress[~String] : +# 2309| v2309_3(void) = Call[~String] : func:r2309_2, this:r2309_1 +# 2309| mu2309_4(unknown) = ^CallSideEffect : ~m? +# 2309| v2309_5(void) = ^IndirectReadSideEffect[-1] : &:r2309_1, ~m? +# 2309| mu2309_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2309_1 +# 2307| r2307_56(glval) = VariableAddress[s] : +# 2307| r2307_57(glval) = FunctionAddress[~String] : +# 2307| v2307_58(void) = Call[~String] : func:r2307_57, this:r2307_56 +# 2307| mu2307_59(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_60(void) = ^IndirectReadSideEffect[-1] : &:r2307_56, ~m? +# 2307| mu2307_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_56 +# 2307| r2307_62(glval>) = VariableAddress[(__begin)] : +# 2307| r2307_63(glval) = FunctionAddress[operator++] : +# 2307| r2307_64(iterator &) = Call[operator++] : func:r2307_63, this:r2307_62 +# 2307| mu2307_65(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_66(void) = ^IndirectReadSideEffect[-1] : &:r2307_62, ~m? +# 2307| mu2307_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2307_62 +# 2307| r2307_68(glval>) = CopyValue : r2307_64 #-----| Goto (back edge) -> Block 4 -# 2336| Block 6 +# 2311| Block 6 +# 2311| r2311_1(glval) = VariableAddress[s] : +# 2311| mu2311_2(String) = Uninitialized[s] : &:r2311_1 +# 2311| r2311_3(glval) = FunctionAddress[String] : +# 2311| r2311_4(glval) = StringConstant["hello"] : +# 2311| r2311_5(char *) = Convert : r2311_4 +# 2311| v2311_6(void) = Call[String] : func:r2311_3, this:r2311_1, 0:r2311_5 +# 2311| mu2311_7(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_8(void) = ^BufferReadSideEffect[0] : &:r2311_5, ~m? +# 2311| mu2311_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_1 +# 2311| r2311_10(glval) = VariableAddress[s2] : +# 2311| mu2311_11(String) = Uninitialized[s2] : &:r2311_10 +# 2311| r2311_12(glval) = FunctionAddress[String] : +# 2311| r2311_13(glval) = StringConstant["world"] : +# 2311| r2311_14(char *) = Convert : r2311_13 +# 2311| v2311_15(void) = Call[String] : func:r2311_12, this:r2311_10, 0:r2311_14 +# 2311| mu2311_16(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_17(void) = ^BufferReadSideEffect[0] : &:r2311_14, ~m? +# 2311| mu2311_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_10 +#-----| Goto -> Block 7 + +# 2311| Block 7 +# 2311| r2311_19(glval) = VariableAddress[c] : +# 2311| r2311_20(char) = Load[c] : &:r2311_19, ~m? +# 2311| r2311_21(int) = Convert : r2311_20 +# 2311| r2311_22(int) = Constant[0] : +# 2311| r2311_23(bool) = CompareNE : r2311_21, r2311_22 +# 2311| v2311_24(void) = ConditionalBranch : r2311_23 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2312| Block 8 +# 2312| r2312_1(char) = Constant[0] : +# 2312| r2312_2(glval) = VariableAddress[c] : +# 2312| mu2312_3(char) = Store[c] : &:r2312_2, r2312_1 +# 2311| r2311_25(glval) = VariableAddress[s] : +# 2311| r2311_26(glval) = FunctionAddress[pop_back] : +# 2311| r2311_27(char) = Call[pop_back] : func:r2311_26, this:r2311_25 +# 2311| mu2311_28(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_29(void) = ^IndirectReadSideEffect[-1] : &:r2311_25, ~m? +# 2311| mu2311_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_25 +# 2311| r2311_31(glval) = VariableAddress[c] : +# 2311| mu2311_32(char) = Store[c] : &:r2311_31, r2311_27 +#-----| Goto (back edge) -> Block 7 + +# 2311| Block 9 +# 2311| r2311_33(glval) = VariableAddress[s2] : +# 2311| r2311_34(glval) = FunctionAddress[~String] : +# 2311| v2311_35(void) = Call[~String] : func:r2311_34, this:r2311_33 +# 2311| mu2311_36(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_37(void) = ^IndirectReadSideEffect[-1] : &:r2311_33, ~m? +# 2311| mu2311_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_33 +# 2311| r2311_39(glval) = VariableAddress[s] : +# 2311| r2311_40(glval) = FunctionAddress[~String] : +# 2311| v2311_41(void) = Call[~String] : func:r2311_40, this:r2311_39 +# 2311| mu2311_42(unknown) = ^CallSideEffect : ~m? +# 2311| v2311_43(void) = ^IndirectReadSideEffect[-1] : &:r2311_39, ~m? +# 2311| mu2311_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2311_39 +# 2314| v2314_1(void) = NoOp : +# 2301| v2301_4(void) = ReturnVoid : +# 2301| v2301_5(void) = AliasedUse : ~m? +# 2301| v2301_6(void) = ExitFunction : + +# 2316| void IfDestructors2(bool) +# 2316| Block 0 +# 2316| v2316_1(void) = EnterFunction : +# 2316| mu2316_2(unknown) = AliasedDefinition : +# 2316| mu2316_3(unknown) = InitializeNonLocal : +# 2316| r2316_4(glval) = VariableAddress[b] : +# 2316| mu2316_5(bool) = InitializeParameter[b] : &:r2316_4 +# 2317| r2317_1(glval) = VariableAddress[s] : +# 2317| mu2317_2(String) = Uninitialized[s] : &:r2317_1 +# 2317| r2317_3(glval) = FunctionAddress[String] : +# 2317| r2317_4(glval) = StringConstant["hello"] : +# 2317| r2317_5(char *) = Convert : r2317_4 +# 2317| v2317_6(void) = Call[String] : func:r2317_3, this:r2317_1, 0:r2317_5 +# 2317| mu2317_7(unknown) = ^CallSideEffect : ~m? +# 2317| v2317_8(void) = ^BufferReadSideEffect[0] : &:r2317_5, ~m? +# 2317| mu2317_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 +# 2317| r2317_10(glval) = VariableAddress[b] : +# 2317| r2317_11(bool) = Load[b] : &:r2317_10, ~m? +# 2317| v2317_12(void) = ConditionalBranch : r2317_11 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2318| Block 1 +# 2318| r2318_1(glval) = VariableAddress[x] : +# 2318| r2318_2(int) = Constant[0] : +# 2318| mu2318_3(int) = Store[x] : &:r2318_1, r2318_2 +#-----| Goto -> Block 3 + +# 2320| Block 2 +# 2320| r2320_1(glval) = VariableAddress[y] : +# 2320| r2320_2(int) = Constant[0] : +# 2320| mu2320_3(int) = Store[y] : &:r2320_1, r2320_2 +#-----| Goto -> Block 3 + +# 2321| Block 3 +# 2321| r2321_1(glval) = VariableAddress[s] : +# 2321| r2321_2(glval) = FunctionAddress[~String] : +# 2321| v2321_3(void) = Call[~String] : func:r2321_2, this:r2321_1 +# 2321| mu2321_4(unknown) = ^CallSideEffect : ~m? +# 2321| v2321_5(void) = ^IndirectReadSideEffect[-1] : &:r2321_1, ~m? +# 2321| mu2321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2322| v2322_1(void) = NoOp : +# 2316| v2316_6(void) = ReturnVoid : +# 2316| v2316_7(void) = AliasedUse : ~m? +# 2316| v2316_8(void) = ExitFunction : + +# 2331| void IfDestructors3(bool) +# 2331| Block 0 +# 2331| v2331_1(void) = EnterFunction : +# 2331| mu2331_2(unknown) = AliasedDefinition : +# 2331| mu2331_3(unknown) = InitializeNonLocal : +# 2331| r2331_4(glval) = VariableAddress[b] : +# 2331| mu2331_5(bool) = InitializeParameter[b] : &:r2331_4 +# 2332| r2332_1(glval) = VariableAddress[B] : +# 2332| mu2332_2(Bool) = Uninitialized[B] : &:r2332_1 +# 2332| r2332_3(glval) = FunctionAddress[Bool] : +# 2332| r2332_4(glval) = VariableAddress[b] : +# 2332| r2332_5(bool) = Load[b] : &:r2332_4, ~m? +# 2332| v2332_6(void) = Call[Bool] : func:r2332_3, this:r2332_1, 0:r2332_5 +# 2332| mu2332_7(unknown) = ^CallSideEffect : ~m? +# 2332| mu2332_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_1 +# 2332| r2332_9(glval) = VariableAddress[B] : +# 2332| r2332_10(glval) = FunctionAddress[operator bool] : +# 2332| r2332_11(bool) = Call[operator bool] : func:r2332_10, this:r2332_9 +# 2332| mu2332_12(unknown) = ^CallSideEffect : ~m? +# 2332| v2332_13(void) = ^IndirectReadSideEffect[-1] : &:r2332_9, ~m? +# 2332| mu2332_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2332_9 +# 2332| r2332_15(bool) = CopyValue : r2332_11 +# 2332| v2332_16(void) = ConditionalBranch : r2332_15 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2333| Block 1 +# 2333| r2333_1(glval) = VariableAddress[s1] : +# 2333| mu2333_2(String) = Uninitialized[s1] : &:r2333_1 +# 2333| r2333_3(glval) = FunctionAddress[String] : +# 2333| v2333_4(void) = Call[String] : func:r2333_3, this:r2333_1 +# 2333| mu2333_5(unknown) = ^CallSideEffect : ~m? +# 2333| mu2333_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2333_1 +# 2334| r2334_1(glval) = VariableAddress[s1] : +# 2334| r2334_2(glval) = FunctionAddress[~String] : +# 2334| v2334_3(void) = Call[~String] : func:r2334_2, this:r2334_1 +# 2334| mu2334_4(unknown) = ^CallSideEffect : ~m? +# 2334| v2334_5(void) = ^IndirectReadSideEffect[-1] : &:r2334_1, ~m? +# 2334| mu2334_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 +#-----| Goto -> Block 3 + +# 2335| Block 2 +# 2335| r2335_1(glval) = VariableAddress[s2] : +# 2335| mu2335_2(String) = Uninitialized[s2] : &:r2335_1 +# 2335| r2335_3(glval) = FunctionAddress[String] : +# 2335| v2335_4(void) = Call[String] : func:r2335_3, this:r2335_1 +# 2335| mu2335_5(unknown) = ^CallSideEffect : ~m? +# 2335| mu2335_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2335_1 +# 2336| r2336_1(glval) = VariableAddress[s2] : +# 2336| r2336_2(glval) = FunctionAddress[~String] : +# 2336| v2336_3(void) = Call[~String] : func:r2336_2, this:r2336_1 +# 2336| mu2336_4(unknown) = ^CallSideEffect : ~m? +# 2336| v2336_5(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, ~m? +# 2336| mu2336_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +#-----| Goto -> Block 3 + +# 2336| Block 3 # 2336| r2336_7(glval) = VariableAddress[B] : # 2336| r2336_8(glval) = FunctionAddress[~Bool] : # 2336| v2336_9(void) = Call[~Bool] : func:r2336_8, this:r2336_7 # 2336| mu2336_10(unknown) = ^CallSideEffect : ~m? # 2336| v2336_11(void) = ^IndirectReadSideEffect[-1] : &:r2336_7, ~m? # 2336| mu2336_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_7 -# 2338| v2338_1(void) = NoOp : -# 2325| v2325_6(void) = ReturnVoid : -# 2325| v2325_7(void) = AliasedUse : ~m? -# 2325| v2325_8(void) = ExitFunction : +# 2337| v2337_1(void) = NoOp : +# 2331| v2331_6(void) = ReturnVoid : +# 2331| v2331_7(void) = AliasedUse : ~m? +# 2331| v2331_8(void) = ExitFunction : -# 2340| void VoidFunc() -# 2340| Block 0 -# 2340| v2340_1(void) = EnterFunction : -# 2340| mu2340_2(unknown) = AliasedDefinition : -# 2340| mu2340_3(unknown) = InitializeNonLocal : -# 2340| v2340_4(void) = NoOp : -# 2340| v2340_5(void) = ReturnVoid : -# 2340| v2340_6(void) = AliasedUse : ~m? -# 2340| v2340_7(void) = ExitFunction : - -# 2342| void IfReturnDestructors(bool) -# 2342| Block 0 -# 2342| v2342_1(void) = EnterFunction : -# 2342| mu2342_2(unknown) = AliasedDefinition : -# 2342| mu2342_3(unknown) = InitializeNonLocal : -# 2342| r2342_4(glval) = VariableAddress[b] : -# 2342| mu2342_5(bool) = InitializeParameter[b] : &:r2342_4 -# 2343| r2343_1(glval) = VariableAddress[s] : -# 2343| mu2343_2(String) = Uninitialized[s] : &:r2343_1 -# 2343| r2343_3(glval) = FunctionAddress[String] : -# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 -# 2343| mu2343_5(unknown) = ^CallSideEffect : ~m? -# 2343| mu2343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 -# 2344| r2344_1(glval) = VariableAddress[b] : -# 2344| r2344_2(bool) = Load[b] : &:r2344_1, ~m? -# 2344| v2344_3(void) = ConditionalBranch : r2344_2 -#-----| False -> Block 3 -#-----| True -> Block 2 +# 2339| void WhileLoopDestructors(bool) +# 2339| Block 0 +# 2339| v2339_1(void) = EnterFunction : +# 2339| mu2339_2(unknown) = AliasedDefinition : +# 2339| mu2339_3(unknown) = InitializeNonLocal : +# 2339| r2339_4(glval) = VariableAddress[b] : +# 2339| mu2339_5(bool) = InitializeParameter[b] : &:r2339_4 +# 2341| r2341_1(glval) = VariableAddress[s] : +# 2341| mu2341_2(String) = Uninitialized[s] : &:r2341_1 +# 2341| r2341_3(glval) = FunctionAddress[String] : +# 2341| v2341_4(void) = Call[String] : func:r2341_3, this:r2341_1 +# 2341| mu2341_5(unknown) = ^CallSideEffect : ~m? +# 2341| mu2341_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2341_1 +#-----| Goto -> Block 1 # 2342| Block 1 -# 2342| v2342_6(void) = ReturnVoid : -# 2342| v2342_7(void) = AliasedUse : ~m? -# 2342| v2342_8(void) = ExitFunction : - -# 2345| Block 2 -# 2345| v2345_1(void) = NoOp : -# 2351| r2351_1(glval) = VariableAddress[s] : -# 2351| r2351_2(glval) = FunctionAddress[~String] : -# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 -# 2351| mu2351_4(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_5(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, ~m? -# 2351| mu2351_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 -#-----| Goto -> Block 1 - -# 2347| Block 3 -# 2347| r2347_1(glval) = VariableAddress[b] : -# 2347| r2347_2(bool) = Load[b] : &:r2347_1, ~m? -# 2347| v2347_3(void) = ConditionalBranch : r2347_2 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 2348| Block 4 -# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : -# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 -# 2348| mu2348_3(unknown) = ^CallSideEffect : ~m? -# 2348| v2348_4(void) = NoOp : -# 2351| r2351_7(glval) = VariableAddress[s] : -# 2351| r2351_8(glval) = FunctionAddress[~String] : -# 2351| v2351_9(void) = Call[~String] : func:r2351_8, this:r2351_7 -# 2351| mu2351_10(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_11(void) = ^IndirectReadSideEffect[-1] : &:r2351_7, ~m? -# 2351| mu2351_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_7 -#-----| Goto -> Block 1 - -# 2350| Block 5 -# 2350| r2350_1(glval) = VariableAddress[s] : -# 2351| v2351_13(void) = NoOp : -# 2351| r2351_14(glval) = VariableAddress[s] : -# 2351| r2351_15(glval) = FunctionAddress[~String] : -# 2351| v2351_16(void) = Call[~String] : func:r2351_15, this:r2351_14 -# 2351| mu2351_17(unknown) = ^CallSideEffect : ~m? -# 2351| v2351_18(void) = ^IndirectReadSideEffect[-1] : &:r2351_14, ~m? -# 2351| mu2351_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_14 -#-----| Goto -> Block 1 - -# 2353| int IfReturnDestructors3(bool) -# 2353| Block 0 -# 2353| v2353_1(void) = EnterFunction : -# 2353| mu2353_2(unknown) = AliasedDefinition : -# 2353| mu2353_3(unknown) = InitializeNonLocal : -# 2353| r2353_4(glval) = VariableAddress[b] : -# 2353| mu2353_5(bool) = InitializeParameter[b] : &:r2353_4 -# 2354| r2354_1(glval) = VariableAddress[s] : -# 2354| mu2354_2(String) = Uninitialized[s] : &:r2354_1 -# 2354| r2354_3(glval) = FunctionAddress[String] : -# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 -# 2354| mu2354_5(unknown) = ^CallSideEffect : ~m? -# 2354| mu2354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 -# 2355| r2355_1(glval) = VariableAddress[b] : -# 2355| r2355_2(bool) = Load[b] : &:r2355_1, ~m? -# 2355| v2355_3(void) = ConditionalBranch : r2355_2 +# 2342| r2342_1(glval) = VariableAddress[b] : +# 2342| r2342_2(bool) = Load[b] : &:r2342_1, ~m? +# 2342| v2342_3(void) = ConditionalBranch : r2342_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2353| Block 1 -# 2353| r2353_6(glval) = VariableAddress[#return] : -# 2353| v2353_7(void) = ReturnValue : &:r2353_6, ~m? -# 2353| v2353_8(void) = AliasedUse : ~m? -# 2353| v2353_9(void) = ExitFunction : +# 2343| Block 2 +# 2343| r2343_1(bool) = Constant[0] : +# 2343| r2343_2(glval) = VariableAddress[b] : +# 2343| mu2343_3(bool) = Store[b] : &:r2343_2, r2343_1 +#-----| Goto (back edge) -> Block 1 -# 2356| Block 2 -# 2356| r2356_1(glval) = VariableAddress[#return] : -# 2356| r2356_2(int) = Constant[1] : -# 2356| mu2356_3(int) = Store[#return] : &:r2356_1, r2356_2 -# 2359| r2359_1(glval) = VariableAddress[s] : -# 2359| r2359_2(glval) = FunctionAddress[~String] : -# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 -# 2359| mu2359_4(unknown) = ^CallSideEffect : ~m? -# 2359| v2359_5(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, ~m? -# 2359| mu2359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 -#-----| Goto -> Block 1 - -# 2358| Block 3 -# 2358| r2358_1(glval) = VariableAddress[#return] : -# 2358| r2358_2(int) = Constant[0] : -# 2358| mu2358_3(int) = Store[#return] : &:r2358_1, r2358_2 -# 2359| r2359_7(glval) = VariableAddress[s] : -# 2359| r2359_8(glval) = FunctionAddress[~String] : -# 2359| v2359_9(void) = Call[~String] : func:r2359_8, this:r2359_7 -# 2359| mu2359_10(unknown) = ^CallSideEffect : ~m? -# 2359| v2359_11(void) = ^IndirectReadSideEffect[-1] : &:r2359_7, ~m? -# 2359| mu2359_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_7 -#-----| Goto -> Block 1 - -# 2361| void VoidReturnDestructors() -# 2361| Block 0 -# 2361| v2361_1(void) = EnterFunction : -# 2361| mu2361_2(unknown) = AliasedDefinition : -# 2361| mu2361_3(unknown) = InitializeNonLocal : -# 2362| r2362_1(glval) = VariableAddress[s] : -# 2362| mu2362_2(String) = Uninitialized[s] : &:r2362_1 -# 2362| r2362_3(glval) = FunctionAddress[String] : -# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 -# 2362| mu2362_5(unknown) = ^CallSideEffect : ~m? -# 2362| mu2362_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 -# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : -# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 -# 2363| mu2363_3(unknown) = ^CallSideEffect : ~m? -# 2363| v2363_4(void) = NoOp : -# 2364| r2364_1(glval) = VariableAddress[s] : -# 2364| r2364_2(glval) = FunctionAddress[~String] : -# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 -# 2364| mu2364_4(unknown) = ^CallSideEffect : ~m? -# 2364| v2364_5(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, ~m? -# 2364| mu2364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 -# 2361| v2361_4(void) = ReturnVoid : -# 2361| v2361_5(void) = AliasedUse : ~m? -# 2361| v2361_6(void) = ExitFunction : - -# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2374| Block 0 -# 2374| v2374_1(void) = EnterFunction : -# 2374| mu2374_2(unknown) = AliasedDefinition : -# 2374| mu2374_3(unknown) = InitializeNonLocal : -# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : -# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2376| mu2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 -# 2374| r2374_4(glval<..:: *>) = VariableAddress[#return] : -# 2374| v2374_5(void) = ReturnValue : &:r2374_4, ~m? -# 2374| v2374_6(void) = AliasedUse : ~m? -# 2374| v2374_7(void) = ExitFunction : - -# 2381| int small_operation_should_not_be_constant_folded() -# 2381| Block 0 -# 2381| v2381_1(void) = EnterFunction : -# 2381| mu2381_2(unknown) = AliasedDefinition : -# 2381| mu2381_3(unknown) = InitializeNonLocal : -# 2382| r2382_1(glval) = VariableAddress[#return] : -# 2382| r2382_2(int) = Constant[1] : -# 2382| r2382_3(int) = Constant[2] : -# 2382| r2382_4(int) = BitXor : r2382_2, r2382_3 -# 2382| mu2382_5(int) = Store[#return] : &:r2382_1, r2382_4 -# 2381| r2381_4(glval) = VariableAddress[#return] : -# 2381| v2381_5(void) = ReturnValue : &:r2381_4, ~m? -# 2381| v2381_6(void) = AliasedUse : ~m? -# 2381| v2381_7(void) = ExitFunction : - -# 2392| int large_operation_should_be_constant_folded() -# 2392| Block 0 -# 2392| v2392_1(void) = EnterFunction : -# 2392| mu2392_2(unknown) = AliasedDefinition : -# 2392| mu2392_3(unknown) = InitializeNonLocal : -# 2393| r2393_1(glval) = VariableAddress[#return] : -# 2393| r2393_2(int) = Constant[0] : -# 2393| mu2393_3(int) = Store[#return] : &:r2393_1, r2393_2 -# 2392| r2392_4(glval) = VariableAddress[#return] : -# 2392| v2392_5(void) = ReturnValue : &:r2392_4, ~m? -# 2392| v2392_6(void) = AliasedUse : ~m? -# 2392| v2392_7(void) = ExitFunction : - -# 2396| void initialization_with_temp_destructor() -# 2396| Block 0 -# 2396| v2396_1(void) = EnterFunction : -# 2396| mu2396_2(unknown) = AliasedDefinition : -# 2396| mu2396_3(unknown) = InitializeNonLocal : -# 2397| r2397_1(glval) = VariableAddress[x] : -# 2397| r2397_2(glval) = VariableAddress[#temp2397:18] : -# 2397| mu2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2 -# 2397| r2397_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2 -# 2397| mu2397_6(unknown) = ^CallSideEffect : ~m? -# 2397| mu2397_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 -# 2397| r2397_8(glval) = FunctionAddress[get_x] : -# 2397| r2397_9(char) = Call[get_x] : func:r2397_8, this:r2397_2 -# 2397| mu2397_10(unknown) = ^CallSideEffect : ~m? -# 2397| v2397_11(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, ~m? -# 2397| mu2397_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2 -# 2397| mu2397_13(char) = Store[x] : &:r2397_1, r2397_9 -# 2397| r2397_14(glval) = VariableAddress[x] : -# 2397| r2397_15(char) = Load[x] : &:r2397_14, ~m? -# 2397| r2397_16(char) = Constant[0] : -# 2397| r2397_17(bool) = CompareNE : r2397_15, r2397_16 -# 2397| r2397_18(bool) = CopyValue : r2397_17 -# 2397| v2397_19(void) = ConditionalBranch : r2397_18 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2398| Block 1 -# 2398| r2398_1(glval) = VariableAddress[x] : -# 2398| r2398_2(char) = Load[x] : &:r2398_1, ~m? -# 2398| r2398_3(char) = Constant[1] : -# 2398| r2398_4(char) = Add : r2398_2, r2398_3 -# 2398| mu2398_5(char) = Store[x] : &:r2398_1, r2398_4 -#-----| Goto -> Block 2 - -# 2400| Block 2 -# 2400| r2400_1(glval) = VariableAddress[x] : -# 2400| r2400_2(glval) = VariableAddress[#temp2400:18] : -# 2400| mu2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2 -# 2400| r2400_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2 -# 2400| mu2400_6(unknown) = ^CallSideEffect : ~m? -# 2400| mu2400_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 -# 2400| r2400_8(glval) = FunctionAddress[get_x] : -# 2400| r2400_9(char) = Call[get_x] : func:r2400_8, this:r2400_2 -# 2400| mu2400_10(unknown) = ^CallSideEffect : ~m? -# 2400| v2400_11(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, ~m? -# 2400| mu2400_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2 -# 2400| mu2400_13(char) = Store[x] : &:r2400_1, r2400_9 -# 2400| r2400_14(glval) = VariableAddress[x] : -# 2400| r2400_15(char) = Load[x] : &:r2400_14, ~m? -# 2400| r2400_16(char) = Constant[0] : -# 2400| r2400_17(bool) = CompareNE : r2400_15, r2400_16 -# 2400| v2400_18(void) = ConditionalBranch : r2400_17 -#-----| False -> Block 4 -#-----| True -> Block 3 - -# 2401| Block 3 -# 2401| r2401_1(glval) = VariableAddress[x] : -# 2401| r2401_2(char) = Load[x] : &:r2401_1, ~m? -# 2401| r2401_3(char) = Constant[1] : -# 2401| r2401_4(char) = Add : r2401_2, r2401_3 -# 2401| mu2401_5(char) = Store[x] : &:r2401_1, r2401_4 +# 2345| Block 3 +# 2345| r2345_1(glval) = VariableAddress[s] : +# 2345| r2345_2(glval) = FunctionAddress[~String] : +# 2345| v2345_3(void) = Call[~String] : func:r2345_2, this:r2345_1 +# 2345| mu2345_4(unknown) = ^CallSideEffect : ~m? +# 2345| v2345_5(void) = ^IndirectReadSideEffect[-1] : &:r2345_1, ~m? +# 2345| mu2345_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2345_1 #-----| Goto -> Block 4 -# 2403| Block 4 -# 2403| r2403_1(glval) = VariableAddress[x] : -# 2403| r2403_2(glval) = VariableAddress[#temp2403:28] : -# 2403| mu2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2 -# 2403| r2403_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2 -# 2403| mu2403_6(unknown) = ^CallSideEffect : ~m? -# 2403| mu2403_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 -# 2403| r2403_8(glval) = FunctionAddress[get_x] : -# 2403| r2403_9(char) = Call[get_x] : func:r2403_8, this:r2403_2 -# 2403| mu2403_10(unknown) = ^CallSideEffect : ~m? -# 2403| v2403_11(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, ~m? -# 2403| mu2403_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2 -# 2403| mu2403_13(char) = Store[x] : &:r2403_1, r2403_9 -# 2403| r2403_14(bool) = Constant[1] : -# 2403| v2403_15(void) = ConditionalBranch : r2403_14 +# 2348| Block 4 +# 2348| r2348_1(glval) = VariableAddress[B] : +# 2348| mu2348_2(Bool) = Uninitialized[B] : &:r2348_1 +# 2348| r2348_3(glval) = FunctionAddress[Bool] : +# 2348| r2348_4(glval) = VariableAddress[b] : +# 2348| r2348_5(bool) = Load[b] : &:r2348_4, ~m? +# 2348| v2348_6(void) = Call[Bool] : func:r2348_3, this:r2348_1, 0:r2348_5 +# 2348| mu2348_7(unknown) = ^CallSideEffect : ~m? +# 2348| mu2348_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_1 +# 2348| r2348_9(glval) = VariableAddress[B] : +# 2348| r2348_10(glval) = FunctionAddress[operator bool] : +# 2348| r2348_11(bool) = Call[operator bool] : func:r2348_10, this:r2348_9 +# 2348| mu2348_12(unknown) = ^CallSideEffect : ~m? +# 2348| v2348_13(void) = ^IndirectReadSideEffect[-1] : &:r2348_9, ~m? +# 2348| mu2348_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2348_9 +# 2348| r2348_15(bool) = CopyValue : r2348_11 +# 2348| v2348_16(void) = ConditionalBranch : r2348_15 #-----| False -> Block 6 #-----| True -> Block 5 -# 2404| Block 5 -# 2404| r2404_1(glval) = VariableAddress[x] : -# 2404| r2404_2(char) = Load[x] : &:r2404_1, ~m? -# 2404| r2404_3(char) = Constant[1] : -# 2404| r2404_4(char) = Add : r2404_2, r2404_3 -# 2404| mu2404_5(char) = Store[x] : &:r2404_1, r2404_4 -#-----| Goto -> Block 6 +# 2349| Block 5 +# 2349| r2349_1(bool) = Constant[0] : +# 2349| r2349_2(glval) = VariableAddress[b] : +# 2349| mu2349_3(bool) = Store[b] : &:r2349_2, r2349_1 +# 2350| r2350_1(glval) = VariableAddress[B] : +# 2350| r2350_2(glval) = FunctionAddress[~Bool] : +# 2350| v2350_3(void) = Call[~Bool] : func:r2350_2, this:r2350_1 +# 2350| mu2350_4(unknown) = ^CallSideEffect : ~m? +# 2350| v2350_5(void) = ^IndirectReadSideEffect[-1] : &:r2350_1, ~m? +# 2350| mu2350_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_1 +#-----| Goto (back edge) -> Block 4 -# 2406| Block 6 -# 2406| r2406_1(glval) = VariableAddress[x] : -# 2406| r2406_2(glval) = VariableAddress[#temp2406:21] : -# 2406| mu2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2 -# 2406| r2406_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2 -# 2406| mu2406_6(unknown) = ^CallSideEffect : ~m? -# 2406| mu2406_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 -# 2406| r2406_8(glval) = FunctionAddress[get_x] : -# 2406| r2406_9(char) = Call[get_x] : func:r2406_8, this:r2406_2 -# 2406| mu2406_10(unknown) = ^CallSideEffect : ~m? -# 2406| v2406_11(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, ~m? -# 2406| mu2406_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2 -# 2406| mu2406_13(char) = Store[x] : &:r2406_1, r2406_9 -# 2406| r2406_14(glval) = VariableAddress[x] : -# 2406| r2406_15(char) = Load[x] : &:r2406_14, ~m? -# 2406| r2406_16(int) = Convert : r2406_15 -# 2406| r2406_17(int) = CopyValue : r2406_16 -# 2406| v2406_18(void) = Switch : r2406_17 -#-----| Case[97] -> Block 7 -#-----| Default -> Block 8 +# 2350| Block 6 +# 2350| r2350_7(glval) = VariableAddress[B] : +# 2350| r2350_8(glval) = FunctionAddress[~Bool] : +# 2350| v2350_9(void) = Call[~Bool] : func:r2350_8, this:r2350_7 +# 2350| mu2350_10(unknown) = ^CallSideEffect : ~m? +# 2350| v2350_11(void) = ^IndirectReadSideEffect[-1] : &:r2350_7, ~m? +# 2350| mu2350_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2350_7 +# 2352| v2352_1(void) = NoOp : +# 2339| v2339_6(void) = ReturnVoid : +# 2339| v2339_7(void) = AliasedUse : ~m? +# 2339| v2339_8(void) = ExitFunction : -# 2407| Block 7 -# 2407| v2407_1(void) = NoOp : -# 2408| r2408_1(glval) = VariableAddress[x] : -# 2408| r2408_2(char) = Load[x] : &:r2408_1, ~m? -# 2408| r2408_3(char) = Constant[1] : -# 2408| r2408_4(char) = Add : r2408_2, r2408_3 -# 2408| mu2408_5(char) = Store[x] : &:r2408_1, r2408_4 -#-----| Goto -> Block 8 +# 2354| void VoidFunc() +# 2354| Block 0 +# 2354| v2354_1(void) = EnterFunction : +# 2354| mu2354_2(unknown) = AliasedDefinition : +# 2354| mu2354_3(unknown) = InitializeNonLocal : +# 2354| v2354_4(void) = NoOp : +# 2354| v2354_5(void) = ReturnVoid : +# 2354| v2354_6(void) = AliasedUse : ~m? +# 2354| v2354_7(void) = ExitFunction : -# 2411| Block 8 +# 2356| void IfReturnDestructors(bool) +# 2356| Block 0 +# 2356| v2356_1(void) = EnterFunction : +# 2356| mu2356_2(unknown) = AliasedDefinition : +# 2356| mu2356_3(unknown) = InitializeNonLocal : +# 2356| r2356_4(glval) = VariableAddress[b] : +# 2356| mu2356_5(bool) = InitializeParameter[b] : &:r2356_4 +# 2357| r2357_1(glval) = VariableAddress[s] : +# 2357| mu2357_2(String) = Uninitialized[s] : &:r2357_1 +# 2357| r2357_3(glval) = FunctionAddress[String] : +# 2357| v2357_4(void) = Call[String] : func:r2357_3, this:r2357_1 +# 2357| mu2357_5(unknown) = ^CallSideEffect : ~m? +# 2357| mu2357_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2357_1 +# 2358| r2358_1(glval) = VariableAddress[b] : +# 2358| r2358_2(bool) = Load[b] : &:r2358_1, ~m? +# 2358| v2358_3(void) = ConditionalBranch : r2358_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2356| Block 1 +# 2356| v2356_6(void) = ReturnVoid : +# 2356| v2356_7(void) = AliasedUse : ~m? +# 2356| v2356_8(void) = ExitFunction : + +# 2359| Block 2 +# 2359| v2359_1(void) = NoOp : +# 2365| r2365_1(glval) = VariableAddress[s] : +# 2365| r2365_2(glval) = FunctionAddress[~String] : +# 2365| v2365_3(void) = Call[~String] : func:r2365_2, this:r2365_1 +# 2365| mu2365_4(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_5(void) = ^IndirectReadSideEffect[-1] : &:r2365_1, ~m? +# 2365| mu2365_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_1 +#-----| Goto -> Block 1 + +# 2361| Block 3 +# 2361| r2361_1(glval) = VariableAddress[b] : +# 2361| r2361_2(bool) = Load[b] : &:r2361_1, ~m? +# 2361| v2361_3(void) = ConditionalBranch : r2361_2 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 2362| Block 4 +# 2362| r2362_1(glval) = FunctionAddress[VoidFunc] : +# 2362| v2362_2(void) = Call[VoidFunc] : func:r2362_1 +# 2362| mu2362_3(unknown) = ^CallSideEffect : ~m? +# 2362| v2362_4(void) = NoOp : +# 2365| r2365_7(glval) = VariableAddress[s] : +# 2365| r2365_8(glval) = FunctionAddress[~String] : +# 2365| v2365_9(void) = Call[~String] : func:r2365_8, this:r2365_7 +# 2365| mu2365_10(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_11(void) = ^IndirectReadSideEffect[-1] : &:r2365_7, ~m? +# 2365| mu2365_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_7 +#-----| Goto -> Block 1 + +# 2364| Block 5 +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2365| v2365_13(void) = NoOp : +# 2365| r2365_14(glval) = VariableAddress[s] : +# 2365| r2365_15(glval) = FunctionAddress[~String] : +# 2365| v2365_16(void) = Call[~String] : func:r2365_15, this:r2365_14 +# 2365| mu2365_17(unknown) = ^CallSideEffect : ~m? +# 2365| v2365_18(void) = ^IndirectReadSideEffect[-1] : &:r2365_14, ~m? +# 2365| mu2365_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2365_14 +#-----| Goto -> Block 1 + +# 2367| int IfReturnDestructors3(bool) +# 2367| Block 0 +# 2367| v2367_1(void) = EnterFunction : +# 2367| mu2367_2(unknown) = AliasedDefinition : +# 2367| mu2367_3(unknown) = InitializeNonLocal : +# 2367| r2367_4(glval) = VariableAddress[b] : +# 2367| mu2367_5(bool) = InitializeParameter[b] : &:r2367_4 +# 2368| r2368_1(glval) = VariableAddress[s] : +# 2368| mu2368_2(String) = Uninitialized[s] : &:r2368_1 +# 2368| r2368_3(glval) = FunctionAddress[String] : +# 2368| v2368_4(void) = Call[String] : func:r2368_3, this:r2368_1 +# 2368| mu2368_5(unknown) = ^CallSideEffect : ~m? +# 2368| mu2368_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2368_1 +# 2369| r2369_1(glval) = VariableAddress[b] : +# 2369| r2369_2(bool) = Load[b] : &:r2369_1, ~m? +# 2369| v2369_3(void) = ConditionalBranch : r2369_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2367| Block 1 +# 2367| r2367_6(glval) = VariableAddress[#return] : +# 2367| v2367_7(void) = ReturnValue : &:r2367_6, ~m? +# 2367| v2367_8(void) = AliasedUse : ~m? +# 2367| v2367_9(void) = ExitFunction : + +# 2370| Block 2 +# 2370| r2370_1(glval) = VariableAddress[#return] : +# 2370| r2370_2(int) = Constant[1] : +# 2370| mu2370_3(int) = Store[#return] : &:r2370_1, r2370_2 +# 2373| r2373_1(glval) = VariableAddress[s] : +# 2373| r2373_2(glval) = FunctionAddress[~String] : +# 2373| v2373_3(void) = Call[~String] : func:r2373_2, this:r2373_1 +# 2373| mu2373_4(unknown) = ^CallSideEffect : ~m? +# 2373| v2373_5(void) = ^IndirectReadSideEffect[-1] : &:r2373_1, ~m? +# 2373| mu2373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_1 +#-----| Goto -> Block 1 + +# 2372| Block 3 +# 2372| r2372_1(glval) = VariableAddress[#return] : +# 2372| r2372_2(int) = Constant[0] : +# 2372| mu2372_3(int) = Store[#return] : &:r2372_1, r2372_2 +# 2373| r2373_7(glval) = VariableAddress[s] : +# 2373| r2373_8(glval) = FunctionAddress[~String] : +# 2373| v2373_9(void) = Call[~String] : func:r2373_8, this:r2373_7 +# 2373| mu2373_10(unknown) = ^CallSideEffect : ~m? +# 2373| v2373_11(void) = ^IndirectReadSideEffect[-1] : &:r2373_7, ~m? +# 2373| mu2373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2373_7 +#-----| Goto -> Block 1 + +# 2375| void VoidReturnDestructors() +# 2375| Block 0 +# 2375| v2375_1(void) = EnterFunction : +# 2375| mu2375_2(unknown) = AliasedDefinition : +# 2375| mu2375_3(unknown) = InitializeNonLocal : +# 2376| r2376_1(glval) = VariableAddress[s] : +# 2376| mu2376_2(String) = Uninitialized[s] : &:r2376_1 +# 2376| r2376_3(glval) = FunctionAddress[String] : +# 2376| v2376_4(void) = Call[String] : func:r2376_3, this:r2376_1 +# 2376| mu2376_5(unknown) = ^CallSideEffect : ~m? +# 2376| mu2376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2376_1 +# 2377| r2377_1(glval) = FunctionAddress[VoidFunc] : +# 2377| v2377_2(void) = Call[VoidFunc] : func:r2377_1 +# 2377| mu2377_3(unknown) = ^CallSideEffect : ~m? +# 2377| v2377_4(void) = NoOp : +# 2378| r2378_1(glval) = VariableAddress[s] : +# 2378| r2378_2(glval) = FunctionAddress[~String] : +# 2378| v2378_3(void) = Call[~String] : func:r2378_2, this:r2378_1 +# 2378| mu2378_4(unknown) = ^CallSideEffect : ~m? +# 2378| v2378_5(void) = ^IndirectReadSideEffect[-1] : &:r2378_1, ~m? +# 2378| mu2378_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2378_1 +# 2375| v2375_4(void) = ReturnVoid : +# 2375| v2375_5(void) = AliasedUse : ~m? +# 2375| v2375_6(void) = ExitFunction : + +# 2388| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2388| Block 0 +# 2388| v2388_1(void) = EnterFunction : +# 2388| mu2388_2(unknown) = AliasedDefinition : +# 2388| mu2388_3(unknown) = InitializeNonLocal : +# 2390| r2390_1(glval<..:: *>) = VariableAddress[#return] : +# 2390| r2390_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2390| mu2390_3(..:: *) = Store[#return] : &:r2390_1, r2390_2 +# 2388| r2388_4(glval<..:: *>) = VariableAddress[#return] : +# 2388| v2388_5(void) = ReturnValue : &:r2388_4, ~m? +# 2388| v2388_6(void) = AliasedUse : ~m? +# 2388| v2388_7(void) = ExitFunction : + +# 2395| int small_operation_should_not_be_constant_folded() +# 2395| Block 0 +# 2395| v2395_1(void) = EnterFunction : +# 2395| mu2395_2(unknown) = AliasedDefinition : +# 2395| mu2395_3(unknown) = InitializeNonLocal : +# 2396| r2396_1(glval) = VariableAddress[#return] : +# 2396| r2396_2(int) = Constant[1] : +# 2396| r2396_3(int) = Constant[2] : +# 2396| r2396_4(int) = BitXor : r2396_2, r2396_3 +# 2396| mu2396_5(int) = Store[#return] : &:r2396_1, r2396_4 +# 2395| r2395_4(glval) = VariableAddress[#return] : +# 2395| v2395_5(void) = ReturnValue : &:r2395_4, ~m? +# 2395| v2395_6(void) = AliasedUse : ~m? +# 2395| v2395_7(void) = ExitFunction : + +# 2406| int large_operation_should_be_constant_folded() +# 2406| Block 0 +# 2406| v2406_1(void) = EnterFunction : +# 2406| mu2406_2(unknown) = AliasedDefinition : +# 2406| mu2406_3(unknown) = InitializeNonLocal : +# 2407| r2407_1(glval) = VariableAddress[#return] : +# 2407| r2407_2(int) = Constant[0] : +# 2407| mu2407_3(int) = Store[#return] : &:r2407_1, r2407_2 +# 2406| r2406_4(glval) = VariableAddress[#return] : +# 2406| v2406_5(void) = ReturnValue : &:r2406_4, ~m? +# 2406| v2406_6(void) = AliasedUse : ~m? +# 2406| v2406_7(void) = ExitFunction : + +# 2410| void initialization_with_temp_destructor() +# 2410| Block 0 +# 2410| v2410_1(void) = EnterFunction : +# 2410| mu2410_2(unknown) = AliasedDefinition : +# 2410| mu2410_3(unknown) = InitializeNonLocal : # 2411| r2411_1(glval) = VariableAddress[x] : -# 2411| r2411_2(glval) = VariableAddress[#temp2411:21] : -# 2411| mu2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2 +# 2411| r2411_2(glval) = VariableAddress[#temp2411:18] : +# 2411| mu2411_3(ClassWithDestructor) = Uninitialized[#temp2411:18] : &:r2411_2 # 2411| r2411_4(glval) = FunctionAddress[ClassWithDestructor] : # 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2 # 2411| mu2411_6(unknown) = ^CallSideEffect : ~m? @@ -14210,120 +14128,239 @@ ir.cpp: # 2411| mu2411_13(char) = Store[x] : &:r2411_1, r2411_9 # 2411| r2411_14(glval) = VariableAddress[x] : # 2411| r2411_15(char) = Load[x] : &:r2411_14, ~m? -# 2411| r2411_16(int) = Convert : r2411_15 -# 2411| v2411_17(void) = Switch : r2411_16 +# 2411| r2411_16(char) = Constant[0] : +# 2411| r2411_17(bool) = CompareNE : r2411_15, r2411_16 +# 2411| r2411_18(bool) = CopyValue : r2411_17 +# 2411| v2411_19(void) = ConditionalBranch : r2411_18 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2412| Block 1 +# 2412| r2412_1(glval) = VariableAddress[x] : +# 2412| r2412_2(char) = Load[x] : &:r2412_1, ~m? +# 2412| r2412_3(char) = Constant[1] : +# 2412| r2412_4(char) = Add : r2412_2, r2412_3 +# 2412| mu2412_5(char) = Store[x] : &:r2412_1, r2412_4 +#-----| Goto -> Block 2 + +# 2414| Block 2 +# 2414| r2414_1(glval) = VariableAddress[x] : +# 2414| r2414_2(glval) = VariableAddress[#temp2414:18] : +# 2414| mu2414_3(ClassWithDestructor) = Uninitialized[#temp2414:18] : &:r2414_2 +# 2414| r2414_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2414| v2414_5(void) = Call[ClassWithDestructor] : func:r2414_4, this:r2414_2 +# 2414| mu2414_6(unknown) = ^CallSideEffect : ~m? +# 2414| mu2414_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| r2414_8(glval) = FunctionAddress[get_x] : +# 2414| r2414_9(char) = Call[get_x] : func:r2414_8, this:r2414_2 +# 2414| mu2414_10(unknown) = ^CallSideEffect : ~m? +# 2414| v2414_11(void) = ^IndirectReadSideEffect[-1] : &:r2414_2, ~m? +# 2414| mu2414_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2414_2 +# 2414| mu2414_13(char) = Store[x] : &:r2414_1, r2414_9 +# 2414| r2414_14(glval) = VariableAddress[x] : +# 2414| r2414_15(char) = Load[x] : &:r2414_14, ~m? +# 2414| r2414_16(char) = Constant[0] : +# 2414| r2414_17(bool) = CompareNE : r2414_15, r2414_16 +# 2414| v2414_18(void) = ConditionalBranch : r2414_17 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2415| Block 3 +# 2415| r2415_1(glval) = VariableAddress[x] : +# 2415| r2415_2(char) = Load[x] : &:r2415_1, ~m? +# 2415| r2415_3(char) = Constant[1] : +# 2415| r2415_4(char) = Add : r2415_2, r2415_3 +# 2415| mu2415_5(char) = Store[x] : &:r2415_1, r2415_4 +#-----| Goto -> Block 4 + +# 2417| Block 4 +# 2417| r2417_1(glval) = VariableAddress[x] : +# 2417| r2417_2(glval) = VariableAddress[#temp2417:28] : +# 2417| mu2417_3(ClassWithDestructor) = Uninitialized[#temp2417:28] : &:r2417_2 +# 2417| r2417_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2417| v2417_5(void) = Call[ClassWithDestructor] : func:r2417_4, this:r2417_2 +# 2417| mu2417_6(unknown) = ^CallSideEffect : ~m? +# 2417| mu2417_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| r2417_8(glval) = FunctionAddress[get_x] : +# 2417| r2417_9(char) = Call[get_x] : func:r2417_8, this:r2417_2 +# 2417| mu2417_10(unknown) = ^CallSideEffect : ~m? +# 2417| v2417_11(void) = ^IndirectReadSideEffect[-1] : &:r2417_2, ~m? +# 2417| mu2417_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2417_2 +# 2417| mu2417_13(char) = Store[x] : &:r2417_1, r2417_9 +# 2417| r2417_14(bool) = Constant[1] : +# 2417| v2417_15(void) = ConditionalBranch : r2417_14 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2418| Block 5 +# 2418| r2418_1(glval) = VariableAddress[x] : +# 2418| r2418_2(char) = Load[x] : &:r2418_1, ~m? +# 2418| r2418_3(char) = Constant[1] : +# 2418| r2418_4(char) = Add : r2418_2, r2418_3 +# 2418| mu2418_5(char) = Store[x] : &:r2418_1, r2418_4 +#-----| Goto -> Block 6 + +# 2420| Block 6 +# 2420| r2420_1(glval) = VariableAddress[x] : +# 2420| r2420_2(glval) = VariableAddress[#temp2420:21] : +# 2420| mu2420_3(ClassWithDestructor) = Uninitialized[#temp2420:21] : &:r2420_2 +# 2420| r2420_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2420| v2420_5(void) = Call[ClassWithDestructor] : func:r2420_4, this:r2420_2 +# 2420| mu2420_6(unknown) = ^CallSideEffect : ~m? +# 2420| mu2420_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| r2420_8(glval) = FunctionAddress[get_x] : +# 2420| r2420_9(char) = Call[get_x] : func:r2420_8, this:r2420_2 +# 2420| mu2420_10(unknown) = ^CallSideEffect : ~m? +# 2420| v2420_11(void) = ^IndirectReadSideEffect[-1] : &:r2420_2, ~m? +# 2420| mu2420_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2420_2 +# 2420| mu2420_13(char) = Store[x] : &:r2420_1, r2420_9 +# 2420| r2420_14(glval) = VariableAddress[x] : +# 2420| r2420_15(char) = Load[x] : &:r2420_14, ~m? +# 2420| r2420_16(int) = Convert : r2420_15 +# 2420| r2420_17(int) = CopyValue : r2420_16 +# 2420| v2420_18(void) = Switch : r2420_17 +#-----| Case[97] -> Block 7 +#-----| Default -> Block 8 + +# 2421| Block 7 +# 2421| v2421_1(void) = NoOp : +# 2422| r2422_1(glval) = VariableAddress[x] : +# 2422| r2422_2(char) = Load[x] : &:r2422_1, ~m? +# 2422| r2422_3(char) = Constant[1] : +# 2422| r2422_4(char) = Add : r2422_2, r2422_3 +# 2422| mu2422_5(char) = Store[x] : &:r2422_1, r2422_4 +#-----| Goto -> Block 8 + +# 2425| Block 8 +# 2425| r2425_1(glval) = VariableAddress[x] : +# 2425| r2425_2(glval) = VariableAddress[#temp2425:21] : +# 2425| mu2425_3(ClassWithDestructor) = Uninitialized[#temp2425:21] : &:r2425_2 +# 2425| r2425_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2425| v2425_5(void) = Call[ClassWithDestructor] : func:r2425_4, this:r2425_2 +# 2425| mu2425_6(unknown) = ^CallSideEffect : ~m? +# 2425| mu2425_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| r2425_8(glval) = FunctionAddress[get_x] : +# 2425| r2425_9(char) = Call[get_x] : func:r2425_8, this:r2425_2 +# 2425| mu2425_10(unknown) = ^CallSideEffect : ~m? +# 2425| v2425_11(void) = ^IndirectReadSideEffect[-1] : &:r2425_2, ~m? +# 2425| mu2425_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2425_2 +# 2425| mu2425_13(char) = Store[x] : &:r2425_1, r2425_9 +# 2425| r2425_14(glval) = VariableAddress[x] : +# 2425| r2425_15(char) = Load[x] : &:r2425_14, ~m? +# 2425| r2425_16(int) = Convert : r2425_15 +# 2425| v2425_17(void) = Switch : r2425_16 #-----| Case[97] -> Block 9 #-----| Default -> Block 10 -# 2412| Block 9 -# 2412| v2412_1(void) = NoOp : -# 2413| r2413_1(glval) = VariableAddress[x] : -# 2413| r2413_2(char) = Load[x] : &:r2413_1, ~m? -# 2413| r2413_3(char) = Constant[1] : -# 2413| r2413_4(char) = Add : r2413_2, r2413_3 -# 2413| mu2413_5(char) = Store[x] : &:r2413_1, r2413_4 +# 2426| Block 9 +# 2426| v2426_1(void) = NoOp : +# 2427| r2427_1(glval) = VariableAddress[x] : +# 2427| r2427_2(char) = Load[x] : &:r2427_1, ~m? +# 2427| r2427_3(char) = Constant[1] : +# 2427| r2427_4(char) = Add : r2427_2, r2427_3 +# 2427| mu2427_5(char) = Store[x] : &:r2427_1, r2427_4 #-----| Goto -> Block 10 -# 2416| Block 10 -# 2416| r2416_1(glval) = VariableAddress[x] : -# 2416| r2416_2(glval) = VariableAddress[#temp2416:18] : -# 2416| mu2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2 -# 2416| r2416_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2 -# 2416| mu2416_6(unknown) = ^CallSideEffect : ~m? -# 2416| mu2416_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 -# 2416| r2416_8(glval) = FunctionAddress[get_x] : -# 2416| r2416_9(char) = Call[get_x] : func:r2416_8, this:r2416_2 -# 2416| mu2416_10(unknown) = ^CallSideEffect : ~m? -# 2416| v2416_11(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, ~m? -# 2416| mu2416_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2 -# 2416| mu2416_13(char) = Store[x] : &:r2416_1, r2416_9 -# 2416| r2416_14(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_15(glval>) = VariableAddress[#temp2416:58] : -# 2416| mu2416_16(vector) = Uninitialized[#temp2416:58] : &:r2416_15 -# 2416| r2416_17(glval) = FunctionAddress[vector] : -# 2416| r2416_18(glval) = VariableAddress[x] : -# 2416| r2416_19(char) = Load[x] : &:r2416_18, ~m? -# 2416| v2416_20(void) = Call[vector] : func:r2416_17, this:r2416_15, 0:r2416_19 -# 2416| mu2416_21(unknown) = ^CallSideEffect : ~m? -# 2416| mu2416_22(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2416_15 -# 2416| r2416_23(vector &) = CopyValue : r2416_15 -# 2416| mu2416_24(vector &&) = Store[(__range)] : &:r2416_14, r2416_23 -# 2416| r2416_25(glval>) = VariableAddress[(__begin)] : -# 2416| r2416_26(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_27(vector &&) = Load[(__range)] : &:r2416_26, ~m? -#-----| r0_1(glval>) = CopyValue : r2416_27 +# 2430| Block 10 +# 2430| r2430_1(glval) = VariableAddress[x] : +# 2430| r2430_2(glval) = VariableAddress[#temp2430:18] : +# 2430| mu2430_3(ClassWithDestructor) = Uninitialized[#temp2430:18] : &:r2430_2 +# 2430| r2430_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2430| v2430_5(void) = Call[ClassWithDestructor] : func:r2430_4, this:r2430_2 +# 2430| mu2430_6(unknown) = ^CallSideEffect : ~m? +# 2430| mu2430_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| r2430_8(glval) = FunctionAddress[get_x] : +# 2430| r2430_9(char) = Call[get_x] : func:r2430_8, this:r2430_2 +# 2430| mu2430_10(unknown) = ^CallSideEffect : ~m? +# 2430| v2430_11(void) = ^IndirectReadSideEffect[-1] : &:r2430_2, ~m? +# 2430| mu2430_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2430_2 +# 2430| mu2430_13(char) = Store[x] : &:r2430_1, r2430_9 +# 2430| r2430_14(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_15(glval>) = VariableAddress[#temp2430:58] : +# 2430| mu2430_16(vector) = Uninitialized[#temp2430:58] : &:r2430_15 +# 2430| r2430_17(glval) = FunctionAddress[vector] : +# 2430| r2430_18(glval) = VariableAddress[x] : +# 2430| r2430_19(char) = Load[x] : &:r2430_18, ~m? +# 2430| v2430_20(void) = Call[vector] : func:r2430_17, this:r2430_15, 0:r2430_19 +# 2430| mu2430_21(unknown) = ^CallSideEffect : ~m? +# 2430| mu2430_22(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2430_15 +# 2430| r2430_23(vector &) = CopyValue : r2430_15 +# 2430| mu2430_24(vector &&) = Store[(__range)] : &:r2430_14, r2430_23 +# 2430| r2430_25(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_26(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_27(vector &&) = Load[(__range)] : &:r2430_26, ~m? +#-----| r0_1(glval>) = CopyValue : r2430_27 #-----| r0_2(glval>) = Convert : r0_1 -# 2416| r2416_28(glval) = FunctionAddress[begin] : -# 2416| r2416_29(iterator) = Call[begin] : func:r2416_28, this:r0_2 +# 2430| r2430_28(glval) = FunctionAddress[begin] : +# 2430| r2430_29(iterator) = Call[begin] : func:r2430_28, this:r0_2 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2416| mu2416_30(iterator) = Store[(__begin)] : &:r2416_25, r2416_29 -# 2416| r2416_31(glval>) = VariableAddress[(__end)] : -# 2416| r2416_32(glval &&>) = VariableAddress[(__range)] : -# 2416| r2416_33(vector &&) = Load[(__range)] : &:r2416_32, ~m? -#-----| r0_4(glval>) = CopyValue : r2416_33 +# 2430| mu2430_30(iterator) = Store[(__begin)] : &:r2430_25, r2430_29 +# 2430| r2430_31(glval>) = VariableAddress[(__end)] : +# 2430| r2430_32(glval &&>) = VariableAddress[(__range)] : +# 2430| r2430_33(vector &&) = Load[(__range)] : &:r2430_32, ~m? +#-----| r0_4(glval>) = CopyValue : r2430_33 #-----| r0_5(glval>) = Convert : r0_4 -# 2416| r2416_34(glval) = FunctionAddress[end] : -# 2416| r2416_35(iterator) = Call[end] : func:r2416_34, this:r0_5 +# 2430| r2430_34(glval) = FunctionAddress[end] : +# 2430| r2430_35(iterator) = Call[end] : func:r2430_34, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2416| mu2416_36(iterator) = Store[(__end)] : &:r2416_31, r2416_35 +# 2430| mu2430_36(iterator) = Store[(__end)] : &:r2430_31, r2430_35 #-----| Goto -> Block 11 -# 2416| Block 11 -# 2416| r2416_37(glval>) = VariableAddress[(__begin)] : -#-----| r0_7(glval>) = Convert : r2416_37 -# 2416| r2416_38(glval) = FunctionAddress[operator!=] : +# 2430| Block 11 +# 2430| r2430_37(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2430_37 +# 2430| r2430_38(glval) = FunctionAddress[operator!=] : #-----| r0_8(glval>) = VariableAddress[#temp0:0] : #-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 -# 2416| r2416_39(glval) = FunctionAddress[iterator] : -# 2416| r2416_40(glval>) = VariableAddress[(__end)] : -#-----| r0_10(glval>) = Convert : r2416_40 +# 2430| r2430_39(glval) = FunctionAddress[iterator] : +# 2430| r2430_40(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2430_40 #-----| r0_11(iterator &) = CopyValue : r0_10 -# 2416| v2416_41(void) = Call[iterator] : func:r2416_39, this:r0_8, 0:r0_11 -# 2416| mu2416_42(unknown) = ^CallSideEffect : ~m? +# 2430| v2430_41(void) = Call[iterator] : func:r2430_39, this:r0_8, 0:r0_11 +# 2430| mu2430_42(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? -# 2416| mu2416_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2430| mu2430_43(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? -# 2416| r2416_44(bool) = Call[operator!=] : func:r2416_38, this:r0_7, 0:r0_13 -# 2416| mu2416_45(unknown) = ^CallSideEffect : ~m? +# 2430| r2430_44(bool) = Call[operator!=] : func:r2430_38, this:r0_7, 0:r0_13 +# 2430| mu2430_45(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2416| v2416_46(void) = ConditionalBranch : r2416_44 +# 2430| v2430_46(void) = ConditionalBranch : r2430_44 #-----| False -> Block 13 #-----| True -> Block 12 -# 2416| Block 12 -# 2416| r2416_47(glval) = VariableAddress[y] : -# 2416| r2416_48(glval>) = VariableAddress[(__begin)] : -#-----| r0_15(glval>) = Convert : r2416_48 -# 2416| r2416_49(glval) = FunctionAddress[operator*] : -# 2416| r2416_50(char &) = Call[operator*] : func:r2416_49, this:r0_15 -# 2416| mu2416_51(unknown) = ^CallSideEffect : ~m? +# 2430| Block 12 +# 2430| r2430_47(glval) = VariableAddress[y] : +# 2430| r2430_48(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2430_48 +# 2430| r2430_49(glval) = FunctionAddress[operator*] : +# 2430| r2430_50(char &) = Call[operator*] : func:r2430_49, this:r0_15 +# 2430| mu2430_51(unknown) = ^CallSideEffect : ~m? #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2416| r2416_52(char) = Load[?] : &:r2416_50, ~m? -# 2416| mu2416_53(char) = Store[y] : &:r2416_47, r2416_52 -# 2417| r2417_1(glval) = VariableAddress[x] : -# 2417| r2417_2(char) = Load[x] : &:r2417_1, ~m? -# 2417| r2417_3(int) = Convert : r2417_2 -# 2417| r2417_4(glval) = VariableAddress[y] : -# 2417| r2417_5(char) = Load[y] : &:r2417_4, ~m? -# 2417| r2417_6(int) = Convert : r2417_5 -# 2417| r2417_7(int) = Add : r2417_6, r2417_3 -# 2417| r2417_8(char) = Convert : r2417_7 -# 2417| mu2417_9(char) = Store[y] : &:r2417_4, r2417_8 -# 2416| r2416_54(glval>) = VariableAddress[(__begin)] : -# 2416| r2416_55(glval) = FunctionAddress[operator++] : -# 2416| r2416_56(iterator &) = Call[operator++] : func:r2416_55, this:r2416_54 -# 2416| mu2416_57(unknown) = ^CallSideEffect : ~m? -# 2416| v2416_58(void) = ^IndirectReadSideEffect[-1] : &:r2416_54, ~m? -# 2416| mu2416_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2416_54 -# 2416| r2416_60(glval>) = CopyValue : r2416_56 +# 2430| r2430_52(char) = Load[?] : &:r2430_50, ~m? +# 2430| mu2430_53(char) = Store[y] : &:r2430_47, r2430_52 +# 2431| r2431_1(glval) = VariableAddress[x] : +# 2431| r2431_2(char) = Load[x] : &:r2431_1, ~m? +# 2431| r2431_3(int) = Convert : r2431_2 +# 2431| r2431_4(glval) = VariableAddress[y] : +# 2431| r2431_5(char) = Load[y] : &:r2431_4, ~m? +# 2431| r2431_6(int) = Convert : r2431_5 +# 2431| r2431_7(int) = Add : r2431_6, r2431_3 +# 2431| r2431_8(char) = Convert : r2431_7 +# 2431| mu2431_9(char) = Store[y] : &:r2431_4, r2431_8 +# 2430| r2430_54(glval>) = VariableAddress[(__begin)] : +# 2430| r2430_55(glval) = FunctionAddress[operator++] : +# 2430| r2430_56(iterator &) = Call[operator++] : func:r2430_55, this:r2430_54 +# 2430| mu2430_57(unknown) = ^CallSideEffect : ~m? +# 2430| v2430_58(void) = ^IndirectReadSideEffect[-1] : &:r2430_54, ~m? +# 2430| mu2430_59(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2430_54 +# 2430| r2430_60(glval>) = CopyValue : r2430_56 #-----| Goto (back edge) -> Block 11 -# 2418| Block 13 -# 2418| v2418_1(void) = NoOp : -# 2396| v2396_4(void) = ReturnVoid : -# 2396| v2396_5(void) = AliasedUse : ~m? -# 2396| v2396_6(void) = ExitFunction : +# 2432| Block 13 +# 2432| v2432_1(void) = NoOp : +# 2410| v2410_4(void) = ReturnVoid : +# 2410| v2410_5(void) = AliasedUse : ~m? +# 2410| v2410_6(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() From 720961787bdcd102f25c51dfdb412d13617154ef Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 4 Apr 2024 10:33:36 +0100 Subject: [PATCH 434/497] Improve QLDoc for `CaseClause` --- go/ql/lib/semmle/go/Stmt.qll | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/go/ql/lib/semmle/go/Stmt.qll b/go/ql/lib/semmle/go/Stmt.qll index b4164398b02..e02d6766657 100644 --- a/go/ql/lib/semmle/go/Stmt.qll +++ b/go/ql/lib/semmle/go/Stmt.qll @@ -747,13 +747,25 @@ class IfStmt extends @ifstmt, Stmt, ScopeNode { * ``` */ class CaseClause extends @caseclause, Stmt, ScopeNode { - /** Gets the `i`th expression of this `case` clause (0-based). */ + /** + * Gets the `i`th expression of this `case` clause (0-based). + * + * Note that the default clause does not have any expressions. + */ Expr getExpr(int i) { result = this.getChildExpr(-(i + 1)) } - /** Gets an expression of this `case` clause. */ + /** + * Gets an expression of this `case` clause, if any. + * + * Note that the default clause does not have any expressions. + */ Expr getAnExpr() { result = this.getAChildExpr() } - /** Gets the number of expressions of this `case` clause. */ + /** + * Gets the number of expressions of this `case` clause. + * + * Note that the default clause does not have any expressions. + */ int getNumExpr() { result = this.getNumChildExpr() } /** Gets the `i`th statement of this `case` clause (0-based). */ From d9fe39d5aeca60c574cf9eae2c58766463d01c81 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 3 Apr 2024 14:13:12 +0100 Subject: [PATCH 435/497] Extractor: add comment about `tw.Package.TypesInfo.Defs` --- go/extractor/extractor.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index d9e649401e3..dc4a9ffe7b7 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -870,6 +870,10 @@ func extractExpr(tw *trap.Writer, expr ast.Expr, parent trap.Label, idx int) { kind = dbscheme.IdentExpr.Index() dbscheme.LiteralsTable.Emit(tw, lbl, expr.Name, expr.Name) def := tw.Package.TypesInfo.Defs[expr] + // Note that there are some cases where `expr` is in the map but `def` + // is nil. The docs for `tw.Package.TypesInfo.Defs` give the following + // examples: the package name in package clauses, or symbolic variables + // `t` in `t := x.(type)` of type switch headers. if def != nil { defTyp := extractType(tw, def.Type()) objlbl, exists := tw.Labeler.LookupObjectID(def, defTyp) From 68321dd9ec71f83495e43a90e1b2f419c4cbd421 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 3 Apr 2024 15:58:10 +0100 Subject: [PATCH 436/497] Use nil for optional argument to packages.Visit --- go/extractor/extractor.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index dc4a9ffe7b7..f43950abb32 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -132,9 +132,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { pkgsNotFound := make([]string, 0, len(pkgs)) // Do a post-order traversal and extract the package scope of each package - packages.Visit(pkgs, func(pkg *packages.Package) bool { - return true - }, func(pkg *packages.Package) { + packages.Visit(pkgs, nil, func(pkg *packages.Package) { log.Printf("Processing package %s.", pkg.PkgPath) if _, ok := pkgInfos[pkg.PkgPath]; !ok { @@ -200,9 +198,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { noExtractRe := regexp.MustCompile(`.*(^|` + sep + `)(\.\.|vendor)($|` + sep + `).*`) // extract AST information for all packages - packages.Visit(pkgs, func(pkg *packages.Package) bool { - return true - }, func(pkg *packages.Package) { + packages.Visit(pkgs, nil, func(pkg *packages.Package) { for root, _ := range wantedRoots { pkgInfo := pkgInfos[pkg.PkgPath] relDir, err := filepath.Rel(root, pkgInfo.PkgDir) From 7fc52651686effb76cf6de0c3a758637f22058d0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 3 Apr 2024 16:03:45 +0100 Subject: [PATCH 437/497] Misc small tidy-ups mostly suggested by linter --- go/extractor/extractor.go | 43 +++++++++++++-------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index f43950abb32..d06686954fa 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -199,7 +199,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error { // extract AST information for all packages packages.Visit(pkgs, nil, func(pkg *packages.Package) { - for root, _ := range wantedRoots { + for root := range wantedRoots { pkgInfo := pkgInfos[pkg.PkgPath] relDir, err := filepath.Rel(root, pkgInfo.PkgDir) if err != nil || noExtractRe.MatchString(relDir) { @@ -397,15 +397,15 @@ func extractObjects(tw *trap.Writer, scope *types.Scope, scopeLabel trap.Label) // do not appear as objects in any scope, so they have to be dealt // with separately in extractMethods. if funcObj, ok := obj.(*types.Func); ok { - populateTypeParamParents(tw, funcObj.Type().(*types.Signature).TypeParams(), obj) - populateTypeParamParents(tw, funcObj.Type().(*types.Signature).RecvTypeParams(), obj) + populateTypeParamParents(funcObj.Type().(*types.Signature).TypeParams(), obj) + populateTypeParamParents(funcObj.Type().(*types.Signature).RecvTypeParams(), obj) } // Populate type parameter parents for named types. Note that we // skip type aliases as the original type should be the parent // of any type parameters. if typeNameObj, ok := obj.(*types.TypeName); ok && !typeNameObj.IsAlias() { if tp, ok := typeNameObj.Type().(*types.Named); ok { - populateTypeParamParents(tw, tp.TypeParams(), obj) + populateTypeParamParents(tp.TypeParams(), obj) } } extractObject(tw, obj, lbl) @@ -431,8 +431,8 @@ func extractMethod(tw *trap.Writer, meth *types.Func) trap.Label { if !exists { // Populate type parameter parents for methods. They do not appear as // objects in any scope, so they have to be dealt with separately here. - populateTypeParamParents(tw, meth.Type().(*types.Signature).TypeParams(), meth) - populateTypeParamParents(tw, meth.Type().(*types.Signature).RecvTypeParams(), meth) + populateTypeParamParents(meth.Type().(*types.Signature).TypeParams(), meth) + populateTypeParamParents(meth.Type().(*types.Signature).RecvTypeParams(), meth) extractObject(tw, meth, methlbl) } @@ -490,7 +490,7 @@ func extractObject(tw *trap.Writer, obj types.Object, lbl trap.Label) { func extractObjectTypes(tw *trap.Writer) { // calling `extractType` on a named type will extract all methods defined // on it, which will add new objects. Therefore we need to do this first - // before we loops over all objects and emit them. + // before we loop over all objects and emit them. changed := true for changed { changed = tw.ForEachObject(extractObjectType) @@ -1129,11 +1129,9 @@ func extractExpr(tw *trap.Writer, expr ast.Expr, parent trap.Label, idx int) { // each child over its preceding child (usually either 1 for assigning increasing indices, or // -1 for decreasing indices) func extractExprs(tw *trap.Writer, exprs []ast.Expr, parent trap.Label, idx int, dir int) { - if exprs != nil { - for _, expr := range exprs { - extractExpr(tw, expr, parent, idx) - idx += dir - } + for _, expr := range exprs { + extractExpr(tw, expr, parent, idx) + idx += dir } } @@ -1389,13 +1387,10 @@ func extractStmt(tw *trap.Writer, stmt ast.Stmt, parent trap.Label, idx int) { // each child over its preceding child (usually either 1 for assigning increasing indices, or // -1 for decreasing indices) func extractStmts(tw *trap.Writer, stmts []ast.Stmt, parent trap.Label, idx int, dir int) { - if stmts != nil { - for _, stmt := range stmts { - extractStmt(tw, stmt, parent, idx) - idx += dir - } + for _, stmt := range stmts { + extractStmt(tw, stmt, parent, idx) + idx += dir } - } // extractDecl extracts AST information for the given declaration @@ -1944,7 +1939,7 @@ func extractTypeParamDecls(tw *trap.Writer, fields *ast.FieldList, parent trap.L } // populateTypeParamParents sets `parent` as the parent of the elements of `typeparams` -func populateTypeParamParents(tw *trap.Writer, typeparams *types.TypeParamList, parent types.Object) { +func populateTypeParamParents(typeparams *types.TypeParamList, parent types.Object) { if typeparams != nil { for idx := 0; idx < typeparams.Len(); idx++ { setTypeParamParent(typeparams.At(idx), parent) @@ -1966,16 +1961,6 @@ func getObjectBeingUsed(tw *trap.Writer, ident *ast.Ident) types.Object { } } -// tryGetGenericType returns the generic type of `tp`, and a boolean indicating -// whether it is the same as `tp`. -func tryGetGenericType(tp types.Type) (*types.Named, bool) { - if namedType, ok := tp.(*types.Named); ok { - originType := namedType.Origin() - return originType, namedType == originType - } - return nil, false -} - // trackInstantiatedStructFields tries to give the fields of an instantiated // struct type underlying `tp` the same labels as the corresponding fields of // the generic struct type. This is so that when we come across the From 6d2d9654b53a59db7c45333896c6c0b52e2bce4a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 4 Apr 2024 13:01:00 +0200 Subject: [PATCH 438/497] Ruby: Add CFG test --- .../controlflow/graph/Cfg.expected | 105 +++++++++++++++--- .../controlflow/graph/Nodes.expected | 4 + .../library-tests/controlflow/graph/ifs.rb | 2 +- .../library-tests/controlflow/graph/raise.rb | 12 ++ 4 files changed, 105 insertions(+), 18 deletions(-) diff --git a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected index e3b0e01adfe..2571a9dfeeb 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -2397,18 +2397,9 @@ cfg.rb: # 90| ... #-----| -> $global -# 90| ... = ... -#-----| -> if ... - # 90| ... = ... #-----| -> x -# 90| [false] ! ... -#-----| false -> if ... - -# 90| [true] ! ... -#-----| true -> x - # 90| __synth__0__1 #-----| -> x @@ -2418,10 +2409,6 @@ cfg.rb: # 90| call to each #-----| -> ... -# 90| defined? ... -#-----| false -> [true] ! ... -#-----| true -> [false] ! ... - # 90| enter { ... } #-----| -> __synth__0__1 @@ -2430,6 +2417,22 @@ cfg.rb: # 90| exit { ... } (normal) #-----| -> exit { ... } +# 90| { ... } +#-----| -> call to each + +# 90| ... = ... +#-----| -> if ... + +# 90| [false] ! ... +#-----| false -> if ... + +# 90| [true] ! ... +#-----| true -> x + +# 90| defined? ... +#-----| false -> [true] ! ... +#-----| true -> [false] ! ... + # 90| if ... #-----| -> Array @@ -2442,9 +2445,6 @@ cfg.rb: # 90| x #-----| -> defined? ... -# 90| { ... } -#-----| -> call to each - # 90| x #-----| -> __synth__0__1 @@ -6915,7 +6915,7 @@ raise.rb: #-----| -> exit m # 167| m -#-----| -> exit raise.rb (normal) +#-----| -> m16 # 167| self #-----| -> m @@ -6928,3 +6928,74 @@ raise.rb: # 168| "" #-----| -> call to raise + +# 172| enter m16 +#-----| -> b1 + +# 172| exit m16 + +# 172| exit m16 (abnormal) +#-----| -> exit m16 + +# 172| exit m16 (normal) +#-----| -> exit m16 + +# 172| m16 +#-----| -> exit raise.rb (normal) + +# 172| b1 +#-----| -> b2 + +# 172| b2 +#-----| -> b1 + +# 174| b1 +#-----| true -> [true] ... || ... +#-----| false -> b2 + +# 174| ... || ... +#-----| true -> 1 +#-----| false -> 2 +#-----| raise -> ExceptionA + +# 174| [false] ... || ... +#-----| false -> 2 +#-----| raise -> ExceptionA + +# 174| [true] ... || ... +#-----| true -> 1 +#-----| raise -> ExceptionA + +# 174| b2 +#-----| -> true + +# 174| ... == ... +#-----| false -> [false] ... || ... +#-----| -> ... || ... +#-----| true -> [true] ... || ... +#-----| raise -> ExceptionA + +# 174| true +#-----| -> ... == ... + +# 175| return +#-----| return -> exit m16 (normal) + +# 175| 1 +#-----| -> return + +# 177| return +#-----| return -> exit m16 (normal) + +# 177| 2 +#-----| -> return + +# 179| ExceptionA +#-----| raise -> exit m16 (abnormal) +#-----| match -> 3 + +# 180| return +#-----| return -> exit m16 (normal) + +# 180| 3 +#-----| -> return diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index f7bc8a1b1e7..bc691d673b9 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -367,6 +367,10 @@ positionalArguments | raise.rb:160:5:162:7 | call to bar | raise.rb:160:9:162:7 | -> { ... } | | raise.rb:161:7:161:14 | call to raise | raise.rb:161:13:161:14 | "" | | raise.rb:168:5:168:12 | call to raise | raise.rb:168:11:168:12 | "" | +| raise.rb:174:8:174:23 | ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | +| raise.rb:174:14:174:23 | ... == ... | raise.rb:174:20:174:23 | true | keywordArguments | cfg.html.erb:6:9:6:58 | call to stylesheet_link_tag | media | cfg.html.erb:6:54:6:58 | "all" | | cfg.html.erb:12:11:12:33 | call to link_to | id | cfg.html.erb:12:31:12:33 | "a" | diff --git a/ruby/ql/test/library-tests/controlflow/graph/ifs.rb b/ruby/ql/test/library-tests/controlflow/graph/ifs.rb index 0e66c0da8cb..f081095051f 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/ifs.rb +++ b/ruby/ql/test/library-tests/controlflow/graph/ifs.rb @@ -55,4 +55,4 @@ def disjunct (b1, b2) if (b1 || b2) then puts "b1 or b2" end -end \ No newline at end of file +end diff --git a/ruby/ql/test/library-tests/controlflow/graph/raise.rb b/ruby/ql/test/library-tests/controlflow/graph/raise.rb index e5f0c0e50f5..3caf234ab14 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/raise.rb +++ b/ruby/ql/test/library-tests/controlflow/graph/raise.rb @@ -168,3 +168,15 @@ class C raise "" end end + +def m16(b1, b2) + begin + if b1 || b2 == true + return 1 + else + return 2 + end + rescue ExceptionA + return 3 + end +end From ce3b359813d1cf44b5d6da16cff6704163c7118d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 4 Apr 2024 13:03:08 +0200 Subject: [PATCH 439/497] Ruby: Fix CFG for nodes that may raise --- .../codeql/ruby/controlflow/internal/Completion.qll | 13 +++++++++---- .../library-tests/controlflow/graph/Cfg.expected | 6 ------ .../library-tests/controlflow/graph/Nodes.expected | 1 - 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll index 39fefcbeae1..83ea11e9d23 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll @@ -90,9 +90,7 @@ private predicate mayRaise(Call c) { c = getARescuableBodyChild() } /** A completion of a statement or an expression. */ abstract class Completion extends TCompletion { - private predicate isValidForSpecific(AstNode n) { - exists(AstNode other | n = other.getDesugared() and this.isValidForSpecific(other)) - or + private predicate isValidForSpecific0(AstNode n) { this = n.(NonReturningCall).getACompletion() or completionIsValidForStmt(n, this) @@ -110,12 +108,19 @@ abstract class Completion extends TCompletion { or n = any(RescueModifierExpr parent).getBody() and this = [TSimpleCompletion().(TCompletion), TRaiseCompletion()] + } + + private predicate isValidForSpecific(AstNode n) { + this.isValidForSpecific0(n) + or + exists(AstNode other | n = other.getDesugared() and this.isValidForSpecific(other)) or mayRaise(n) and ( this = TRaiseCompletion() or - this = TSimpleCompletion() and not n instanceof NonReturningCall + not any(Completion c).isValidForSpecific0(n) and + this = TSimpleCompletion() ) } diff --git a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected index 2571a9dfeeb..dfb5c8dfee4 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -6953,11 +6953,6 @@ raise.rb: #-----| true -> [true] ... || ... #-----| false -> b2 -# 174| ... || ... -#-----| true -> 1 -#-----| false -> 2 -#-----| raise -> ExceptionA - # 174| [false] ... || ... #-----| false -> 2 #-----| raise -> ExceptionA @@ -6971,7 +6966,6 @@ raise.rb: # 174| ... == ... #-----| false -> [false] ... || ... -#-----| -> ... || ... #-----| true -> [true] ... || ... #-----| raise -> ExceptionA diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index bc691d673b9..2bc683f894e 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -367,7 +367,6 @@ positionalArguments | raise.rb:160:5:162:7 | call to bar | raise.rb:160:9:162:7 | -> { ... } | | raise.rb:161:7:161:14 | call to raise | raise.rb:161:13:161:14 | "" | | raise.rb:168:5:168:12 | call to raise | raise.rb:168:11:168:12 | "" | -| raise.rb:174:8:174:23 | ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | | raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | | raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:14:174:23 | ... == ... | | raise.rb:174:14:174:23 | ... == ... | raise.rb:174:20:174:23 | true | From e42639852c6b26abef54e52ebd5e74eeecbac8f9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 4 Apr 2024 14:25:05 +0200 Subject: [PATCH 440/497] C#: Move nuget related `DependencyManager` methods to separate file --- .../DependencyManager.Nuget.cs | 364 ++++++++++++++++++ .../DependencyManager.cs | 351 ----------------- 2 files changed, 364 insertions(+), 351 deletions(-) create mode 100644 csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs new file mode 100644 index 00000000000..8e0be8ab141 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -0,0 +1,364 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Semmle.Util; + +namespace Semmle.Extraction.CSharp.DependencyFetching +{ + public sealed partial class DependencyManager + { + private void RestoreNugetPackages(List allNonBinaryFiles, IEnumerable allProjects, IEnumerable allSolutions, HashSet dllPaths) + { + try + { + using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) + { + var count = nuget.InstallPackages(); + + if (nuget.PackageCount > 0) + { + CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); + CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); + } + } + + var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); + var nugetPackageDllPaths = nugetPackageDlls.Select(f => f.FullName).ToHashSet(); + var excludedPaths = nugetPackageDllPaths + .Where(path => IsPathInSubfolder(path, legacyPackageDirectory.DirInfo.FullName, "tools")) + .ToList(); + + if (nugetPackageDllPaths.Count > 0) + { + logger.LogInfo($"Restored {nugetPackageDllPaths.Count} Nuget DLLs."); + } + if (excludedPaths.Count > 0) + { + logger.LogInfo($"Excluding {excludedPaths.Count} Nuget DLLs."); + } + + foreach (var excludedPath in excludedPaths) + { + logger.LogInfo($"Excluded Nuget DLL: {excludedPath}"); + } + + nugetPackageDllPaths.ExceptWith(excludedPaths); + dllPaths.UnionWith(nugetPackageDllPaths); + } + catch (Exception exc) + { + logger.LogError($"Failed to restore Nuget packages with nuget.exe: {exc.Message}"); + } + + var restoredProjects = RestoreSolutions(allSolutions, out var assets1); + var projects = allProjects.Except(restoredProjects); + RestoreProjects(projects, out var assets2); + + var dependencies = Assets.GetCompilationDependencies(logger, assets1.Union(assets2)); + + var paths = dependencies + .Paths + .Select(d => Path.Combine(packageDirectory.DirInfo.FullName, d)) + .ToList(); + dllPaths.UnionWith(paths); + + LogAllUnusedPackages(dependencies); + DownloadMissingPackages(allNonBinaryFiles, dllPaths); + } + + /// + /// Executes `dotnet restore` on all solution files in solutions. + /// As opposed to RestoreProjects this is not run in parallel using PLINQ + /// as `dotnet restore` on a solution already uses multiple threads for restoring + /// the projects (this can be disabled with the `--disable-parallel` flag). + /// Populates assets with the relative paths to the assets files generated by the restore. + /// Returns a list of projects that are up to date with respect to restore. + /// + /// A list of paths to solution files. + private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) + { + var successCount = 0; + var nugetSourceFailures = 0; + var assetFiles = new List(); + var projects = solutions.SelectMany(solution => + { + logger.LogInfo($"Restoring solution {solution}..."); + var res = dotnet.Restore(new(solution, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + if (res.Success) + { + successCount++; + } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } + assetFiles.AddRange(res.AssetsFilePaths); + return res.RestoredProjects; + }).ToList(); + assets = assetFiles; + CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); + CompilationInfos.Add(("Failed solution restore with package source error", nugetSourceFailures.ToString())); + CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); + return projects; + } + + /// + /// Executes `dotnet restore` on all projects in projects. + /// This is done in parallel for performance reasons. + /// Populates assets with the relative paths to the assets files generated by the restore. + /// + /// A list of paths to project files. + private void RestoreProjects(IEnumerable projects, out IEnumerable assets) + { + var successCount = 0; + var nugetSourceFailures = 0; + var assetFiles = new List(); + var sync = new object(); + Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = threads }, project => + { + logger.LogInfo($"Restoring project {project}..."); + var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + lock (sync) + { + if (res.Success) + { + successCount++; + } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } + assetFiles.AddRange(res.AssetsFilePaths); + } + }); + assets = assetFiles; + CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); + CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); + } + + private void DownloadMissingPackages(List allFiles, ISet dllPaths) + { + var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); + var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); + + var notYetDownloadedPackages = new HashSet(fileContent.AllPackages); + foreach (var alreadyDownloadedPackage in alreadyDownloadedPackages) + { + notYetDownloadedPackages.Remove(new(alreadyDownloadedPackage, PackageReferenceSource.SdkCsProj)); + } + foreach (var alreadyDownloadedLegacyPackage in alreadyDownloadedLegacyPackages) + { + notYetDownloadedPackages.Remove(new(alreadyDownloadedLegacyPackage, PackageReferenceSource.PackagesConfig)); + } + + if (notYetDownloadedPackages.Count == 0) + { + return; + } + + var multipleVersions = notYetDownloadedPackages + .GroupBy(p => p.Name) + .Where(g => g.Count() > 1) + .Select(g => g.Key) + .ToList(); + + foreach (var package in multipleVersions) + { + logger.LogWarning($"Found multiple not yet restored packages with name '{package}'."); + notYetDownloadedPackages.Remove(new(package, PackageReferenceSource.PackagesConfig)); + } + + logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); + + var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray(); + string? nugetConfig = null; + if (nugetConfigs.Length > 1) + { + logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); + nugetConfig = allFiles + .SelectRootFiles(sourceDir) + .SelectFileNamesByName("nuget.config") + .FirstOrDefault(); + if (nugetConfig == null) + { + logger.LogInfo("Could not find a top-level nuget.config file."); + } + } + else + { + nugetConfig = nugetConfigs.FirstOrDefault(); + } + + if (nugetConfig != null) + { + logger.LogInfo($"Using nuget.config file {nugetConfig}."); + } + + CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); + + var successCount = 0; + var sync = new object(); + + Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = threads }, package => + { + var success = TryRestorePackageManually(package.Name, nugetConfig, package.PackageReferenceSource); + if (!success) + { + return; + } + + lock (sync) + { + successCount++; + } + }); + + CompilationInfos.Add(("Successfully ran fallback nuget restore", successCount.ToString())); + + dllPaths.Add(missingPackageDirectory.DirInfo.FullName); + } + + private void LogAllUnusedPackages(DependencyContainer dependencies) + { + var allPackageDirectories = GetAllPackageDirectories(); + + logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); + logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); + + allPackageDirectories + .Where(package => !dependencies.Packages.Contains(package)) + .Order() + .ForEach(package => logger.LogInfo($"Unused package: {package}")); + } + + + private ICollection GetAllPackageDirectories() + { + return new DirectoryInfo(packageDirectory.DirInfo.FullName) + .EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) + .Select(d => d.Name) + .ToList(); + } + + private static bool IsPathInSubfolder(string path, string rootFolder, string subFolder) + { + return path.IndexOf( + $"{Path.DirectorySeparatorChar}{subFolder}{Path.DirectorySeparatorChar}", + rootFolder.Length, + StringComparison.InvariantCultureIgnoreCase) >= 0; + } + + private IEnumerable GetRestoredLegacyPackageNames() + { + var oldPackageDirectories = GetRestoredPackageDirectoryNames(legacyPackageDirectory.DirInfo); + foreach (var oldPackageDirectory in oldPackageDirectories) + { + // nuget install restores packages to 'packagename.version' folders (dotnet restore to 'packagename/version' folders) + // typical folder names look like: + // newtonsoft.json.13.0.3 + // there are more complex ones too, such as: + // runtime.tizen.4.0.0-armel.Microsoft.NETCore.DotNetHostResolver.2.0.0-preview2-25407-01 + + var match = LegacyNugetPackage().Match(oldPackageDirectory); + if (!match.Success) + { + logger.LogWarning($"Package directory '{oldPackageDirectory}' doesn't match the expected pattern."); + continue; + } + + yield return match.Groups[1].Value.ToLowerInvariant(); + } + } + + private static IEnumerable GetRestoredPackageDirectoryNames(DirectoryInfo root) + { + return Directory.GetDirectories(root.FullName) + .Select(d => Path.GetFileName(d).ToLowerInvariant()); + } + + [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex TargetFramework(); + + private bool TryRestorePackageManually(string package, string? nugetConfig, PackageReferenceSource packageReferenceSource = PackageReferenceSource.SdkCsProj) + { + logger.LogInfo($"Restoring package {package}..."); + using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); + var success = dotnet.New(tempDir.DirInfo.FullName); + if (!success) + { + return false; + } + + if (packageReferenceSource == PackageReferenceSource.PackagesConfig) + { + TryChangeTargetFrameworkMoniker(tempDir.DirInfo); + } + + success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); + if (!success) + { + return false; + } + + var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); + if (!res.Success) + { + if (res.HasNugetPackageSourceError && nugetConfig is not null) + { + // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: + res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); + } + + // TODO: the restore might fail, we could retry with + // - a prerelease (*-* instead of *) version of the package, + // - a different target framework moniker. + + if (!res.Success) + { + logger.LogInfo($"Failed to restore nuget package {package}"); + return false; + } + } + + return true; + } + + private void TryChangeTargetFrameworkMoniker(DirectoryInfo tempDir) + { + try + { + logger.LogInfo($"Changing the target framework moniker in {tempDir.FullName}..."); + + var csprojs = tempDir.GetFiles("*.csproj", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }); + if (csprojs.Length != 1) + { + logger.LogError($"Could not find the .csproj file in {tempDir.FullName}, count = {csprojs.Length}"); + return; + } + + var csproj = csprojs[0]; + var content = File.ReadAllText(csproj.FullName); + var matches = TargetFramework().Matches(content); + if (matches.Count == 0) + { + logger.LogError($"Could not find target framework in {csproj.FullName}"); + } + else + { + content = TargetFramework().Replace(content, $"{FrameworkPackageNames.LatestNetFrameworkMoniker}", 1); + File.WriteAllText(csproj.FullName, content); + } + } + catch (Exception exc) + { + logger.LogError($"Failed to update target framework in {tempDir.FullName}: {exc}"); + } + } + + [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex LegacyNugetPackage(); + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 713d52d8e3f..04716a64db4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -230,73 +230,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return frameworkLocations; } - private void RestoreNugetPackages(List allNonBinaryFiles, IEnumerable allProjects, IEnumerable allSolutions, HashSet dllPaths) - { - try - { - using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) - { - var count = nuget.InstallPackages(); - - if (nuget.PackageCount > 0) - { - CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); - CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); - } - } - - var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); - var nugetPackageDllPaths = nugetPackageDlls.Select(f => f.FullName).ToHashSet(); - var excludedPaths = nugetPackageDllPaths - .Where(path => IsPathInSubfolder(path, legacyPackageDirectory.DirInfo.FullName, "tools")) - .ToList(); - - if (nugetPackageDllPaths.Count > 0) - { - logger.LogInfo($"Restored {nugetPackageDllPaths.Count} Nuget DLLs."); - } - if (excludedPaths.Count > 0) - { - logger.LogInfo($"Excluding {excludedPaths.Count} Nuget DLLs."); - } - - foreach (var excludedPath in excludedPaths) - { - logger.LogInfo($"Excluded Nuget DLL: {excludedPath}"); - } - - nugetPackageDllPaths.ExceptWith(excludedPaths); - dllPaths.UnionWith(nugetPackageDllPaths); - } - catch (Exception exc) - { - logger.LogError($"Failed to restore Nuget packages with nuget.exe: {exc.Message}"); - } - - var restoredProjects = RestoreSolutions(allSolutions, out var assets1); - var projects = allProjects.Except(restoredProjects); - RestoreProjects(projects, out var assets2); - - var dependencies = Assets.GetCompilationDependencies(logger, assets1.Union(assets2)); - - var paths = dependencies - .Paths - .Select(d => Path.Combine(packageDirectory.DirInfo.FullName, d)) - .ToList(); - dllPaths.UnionWith(paths); - - LogAllUnusedPackages(dependencies); - DownloadMissingPackages(allNonBinaryFiles, dllPaths); - } - - private static bool IsPathInSubfolder(string path, string rootFolder, string subFolder) - { - return path.IndexOf( - $"{Path.DirectorySeparatorChar}{subFolder}{Path.DirectorySeparatorChar}", - rootFolder.Length, - StringComparison.InvariantCultureIgnoreCase) >= 0; - } - private void RemoveNugetAnalyzerReferences() { var packageFolder = packageDirectory.DirInfo.FullName.ToLowerInvariant(); @@ -483,27 +416,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .FullName; } - private ICollection GetAllPackageDirectories() - { - return new DirectoryInfo(packageDirectory.DirInfo.FullName) - .EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) - .Select(d => d.Name) - .ToList(); - } - - private void LogAllUnusedPackages(DependencyContainer dependencies) - { - var allPackageDirectories = GetAllPackageDirectories(); - - logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); - logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); - - allPackageDirectories - .Where(package => !dependencies.Packages.Contains(package)) - .Order() - .ForEach(package => logger.LogInfo($"Unused package: {package}")); - } - private void GenerateSourceFileFromImplicitUsings() { var usings = new HashSet(); @@ -807,269 +719,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } - /// - /// Executes `dotnet restore` on all solution files in solutions. - /// As opposed to RestoreProjects this is not run in parallel using PLINQ - /// as `dotnet restore` on a solution already uses multiple threads for restoring - /// the projects (this can be disabled with the `--disable-parallel` flag). - /// Populates assets with the relative paths to the assets files generated by the restore. - /// Returns a list of projects that are up to date with respect to restore. - /// - /// A list of paths to solution files. - private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) - { - var successCount = 0; - var nugetSourceFailures = 0; - var assetFiles = new List(); - var projects = solutions.SelectMany(solution => - { - logger.LogInfo($"Restoring solution {solution}..."); - var res = dotnet.Restore(new(solution, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); - if (res.Success) - { - successCount++; - } - if (res.HasNugetPackageSourceError) - { - nugetSourceFailures++; - } - assetFiles.AddRange(res.AssetsFilePaths); - return res.RestoredProjects; - }).ToList(); - assets = assetFiles; - CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); - CompilationInfos.Add(("Failed solution restore with package source error", nugetSourceFailures.ToString())); - CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); - return projects; - } - - /// - /// Executes `dotnet restore` on all projects in projects. - /// This is done in parallel for performance reasons. - /// Populates assets with the relative paths to the assets files generated by the restore. - /// - /// A list of paths to project files. - private void RestoreProjects(IEnumerable projects, out IEnumerable assets) - { - var successCount = 0; - var nugetSourceFailures = 0; - var assetFiles = new List(); - var sync = new object(); - Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = threads }, project => - { - logger.LogInfo($"Restoring project {project}..."); - var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); - lock (sync) - { - if (res.Success) - { - successCount++; - } - if (res.HasNugetPackageSourceError) - { - nugetSourceFailures++; - } - assetFiles.AddRange(res.AssetsFilePaths); - } - }); - assets = assetFiles; - CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); - CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); - } - - [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] - private static partial Regex LegacyNugetPackage(); - - - private static IEnumerable GetRestoredPackageDirectoryNames(DirectoryInfo root) - { - return Directory.GetDirectories(root.FullName) - .Select(d => Path.GetFileName(d).ToLowerInvariant()); - } - - private IEnumerable GetRestoredLegacyPackageNames() - { - var oldPackageDirectories = GetRestoredPackageDirectoryNames(legacyPackageDirectory.DirInfo); - foreach (var oldPackageDirectory in oldPackageDirectories) - { - // nuget install restores packages to 'packagename.version' folders (dotnet restore to 'packagename/version' folders) - // typical folder names look like: - // newtonsoft.json.13.0.3 - // there are more complex ones too, such as: - // runtime.tizen.4.0.0-armel.Microsoft.NETCore.DotNetHostResolver.2.0.0-preview2-25407-01 - - var match = LegacyNugetPackage().Match(oldPackageDirectory); - if (!match.Success) - { - logger.LogWarning($"Package directory '{oldPackageDirectory}' doesn't match the expected pattern."); - continue; - } - - yield return match.Groups[1].Value.ToLowerInvariant(); - } - } - - private void DownloadMissingPackages(List allFiles, ISet dllPaths) - { - var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); - var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); - - var notYetDownloadedPackages = new HashSet(fileContent.AllPackages); - foreach (var alreadyDownloadedPackage in alreadyDownloadedPackages) - { - notYetDownloadedPackages.Remove(new(alreadyDownloadedPackage, PackageReferenceSource.SdkCsProj)); - } - foreach (var alreadyDownloadedLegacyPackage in alreadyDownloadedLegacyPackages) - { - notYetDownloadedPackages.Remove(new(alreadyDownloadedLegacyPackage, PackageReferenceSource.PackagesConfig)); - } - - if (notYetDownloadedPackages.Count == 0) - { - return; - } - - var multipleVersions = notYetDownloadedPackages - .GroupBy(p => p.Name) - .Where(g => g.Count() > 1) - .Select(g => g.Key) - .ToList(); - - foreach (var package in multipleVersions) - { - logger.LogWarning($"Found multiple not yet restored packages with name '{package}'."); - notYetDownloadedPackages.Remove(new(package, PackageReferenceSource.PackagesConfig)); - } - - logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); - - var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray(); - string? nugetConfig = null; - if (nugetConfigs.Length > 1) - { - logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); - nugetConfig = allFiles - .SelectRootFiles(sourceDir) - .SelectFileNamesByName("nuget.config") - .FirstOrDefault(); - if (nugetConfig == null) - { - logger.LogInfo("Could not find a top-level nuget.config file."); - } - } - else - { - nugetConfig = nugetConfigs.FirstOrDefault(); - } - - if (nugetConfig != null) - { - logger.LogInfo($"Using nuget.config file {nugetConfig}."); - } - - CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); - - var successCount = 0; - var sync = new object(); - - Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = threads }, package => - { - var success = TryRestorePackageManually(package.Name, nugetConfig, package.PackageReferenceSource); - if (!success) - { - return; - } - - lock (sync) - { - successCount++; - } - }); - - CompilationInfos.Add(("Successfully ran fallback nuget restore", successCount.ToString())); - - dllPaths.Add(missingPackageDirectory.DirInfo.FullName); - } - - [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] - private static partial Regex TargetFramework(); - - private bool TryRestorePackageManually(string package, string? nugetConfig, PackageReferenceSource packageReferenceSource = PackageReferenceSource.SdkCsProj) - { - logger.LogInfo($"Restoring package {package}..."); - using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); - var success = dotnet.New(tempDir.DirInfo.FullName); - if (!success) - { - return false; - } - - if (packageReferenceSource == PackageReferenceSource.PackagesConfig) - { - TryChangeTargetFrameworkMoniker(tempDir.DirInfo); - } - - success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); - if (!success) - { - return false; - } - - var res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: nugetConfig)); - if (!res.Success) - { - if (res.HasNugetPackageSourceError && nugetConfig is not null) - { - // Restore could not be completed because the listed source is unavailable. Try without the nuget.config: - res = dotnet.Restore(new(tempDir.DirInfo.FullName, missingPackageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: false, PathToNugetConfig: null, ForceReevaluation: true)); - } - - // TODO: the restore might fail, we could retry with - // - a prerelease (*-* instead of *) version of the package, - // - a different target framework moniker. - - if (!res.Success) - { - logger.LogInfo($"Failed to restore nuget package {package}"); - return false; - } - } - - return true; - } - - private void TryChangeTargetFrameworkMoniker(DirectoryInfo tempDir) - { - try - { - logger.LogInfo($"Changing the target framework moniker in {tempDir.FullName}..."); - - var csprojs = tempDir.GetFiles("*.csproj", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }); - if (csprojs.Length != 1) - { - logger.LogError($"Could not find the .csproj file in {tempDir.FullName}, count = {csprojs.Length}"); - return; - } - - var csproj = csprojs[0]; - var content = File.ReadAllText(csproj.FullName); - var matches = TargetFramework().Matches(content); - if (matches.Count == 0) - { - logger.LogError($"Could not find target framework in {csproj.FullName}"); - } - else - { - content = TargetFramework().Replace(content, $"{FrameworkPackageNames.LatestNetFrameworkMoniker}", 1); - File.WriteAllText(csproj.FullName, content); - } - } - catch (Exception exc) - { - logger.LogError($"Failed to update target framework in {tempDir.FullName}: {exc}"); - } - } - public void Dispose(TemporaryDirectory? dir, string name) { try From 4faff83aa0311d363598302ab4a5cbc921c7b3a8 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 4 Apr 2024 16:49:55 +0200 Subject: [PATCH 441/497] Python: Extractor: Remove dependency installation fallback --- python/extractor/buildtools/index.py | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/python/extractor/buildtools/index.py b/python/extractor/buildtools/index.py index 10521868313..ec6f45d62c7 100644 --- a/python/extractor/buildtools/index.py +++ b/python/extractor/buildtools/index.py @@ -76,28 +76,11 @@ def get_filter_options(): return [] def get_path_options(version): - # We want to stop extracting libraries, and only extract the code that is in the - # repo. While in the transition period for stopping to install dependencies in the - # codeql-action, we will need to be able to support both old and new behavior. - # - # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the - # flag is enabled. - # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED - if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION"): - return [] + # Before 2.17.1 it was possible to extract installed libraries + # where this function would return ["-p", "/path/to/library"]. + # However, from 2.17.1 onwards, this is no longer supported. - # Not extracting dependencies will be default in CodeQL CLI release 2.16.0. Until - # 2.17.0, we provide an escape hatch to get the old behavior. - force_enable_envvar_name = "CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0" - if os.environ.get(force_enable_envvar_name): - print("WARNING: We plan to remove the availability of the {} option in CodeQL CLI release 2.17.0 and beyond. Please let us know by submitting an issue to https://github.com/github/codeql why you needed to re-enable dependency extraction.".format(force_enable_envvar_name)) - path_option = [ "-p", install.get_library(version)] - if PATH_TAG in os.environ: - path_option = split_into_options(os.environ[PATH_TAG], "-p") + path_option - return path_option - else: - print("INFO: The Python extractor has recently (from 2.16.0 CodeQL CLI release) stopped extracting dependencies by default, and therefore stopped analyzing the source code of dependencies by default. We plan to remove this entirely in CodeQL CLI release 2.17.0. If you encounter problems, please let us know by submitting an issue to https://github.com/github/codeql, so we can consider adjusting our plans. It is possible to re-enable dependency extraction by exporting '{}=1'.".format(force_enable_envvar_name)) - return [] + return [] def get_stdlib(): return os.path.dirname(os.__file__) From 0604b4cc14bdfa515a148995b01c6b1834deccb5 Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 5 Apr 2024 09:33:51 +0200 Subject: [PATCH 442/497] Changelog mergeback for versions prior to 2.17.0 --- .../codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst | 3 +-- .../codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst | 5 ++--- .../codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst | 2 +- .../codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst | 3 +-- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst index b0888bd8bea..a9092f71f18 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst @@ -53,8 +53,7 @@ New Features |link-code-paths-and-code-paths-ignore-configuration-1|_. * In the VS Code extension, recursive calls will be marked with inlay hints. These can be disabled with the global inlay hints setting - (:code:`editor.inlayHints.enabled`). If you just want to disable them for - codeql the settings can be scoped to just codeql files (language id is :code:`ql`). + (:code:`editor.inlayHints.enabled`). If you just want to disable them for codeql the settings can be scoped to just codeql files (language id is :code:`ql`). See `Language Specific Editor Settings `__ in the VS Code documentation for more information. * The CLI now gives a more helpful error message when asked to run queries on a database that has not been finalized. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst index 8b7feb9e683..aa61cc37f8b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst @@ -38,12 +38,11 @@ New Features Known Issues ~~~~~~~~~~~~ -* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. +* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. This issue occurs when uploading certain kinds of diagnostic information and causes the subcommand to fail with "A fatal error occurred: Invalid SARIF.", reporting an :code:`InvalidDefinitionException`. - Customers who wish to use CodeQL 2.12.6 or 2.13.0 can - work around the problem by passing :code:`--no-sarif-include-diagnostics` to any invocations of :code:`codeql database analyze` or :code:`codeql database interpret-results`. + Customers who wish to use CodeQL 2.12.6 or 2.13.0 can work around the problem by passing :code:`--no-sarif-include-diagnostics` to any invocations of :code:`codeql database analyze` or :code:`codeql database interpret-results`. Query Packs ----------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst index 032b7a71014..748e2ff3b64 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst @@ -73,7 +73,7 @@ New Features Known Issues ~~~~~~~~~~~~ -* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. For more information, see the +* We recommend that customers using the CodeQL CLI in a third party CI system do not upgrade to this release, due to an issue with :code:`codeql github upload-results`. Instead, please use CodeQL 2.12.5, or, when available, CodeQL 2.12.7 or 2.13.1. For more information, see the "Known issues" section for CodeQL 2.12.6. Query Packs diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst index b82d2dd5a5a..d51911d3d69 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst @@ -26,8 +26,7 @@ Bug Fixes * Fixed a bug that could have caused the compiler to incorrectly infer that a class matched a type signature. The bug only affected classes with overriding member predicates that had stronger binding sets than their root definitions. -* Fixed a bug where a query could not be run from VS Code when there were packs nested within sibling directories - of the query. +* Fixed a bug where a query could not be run from VS Code when there were packs nested within sibling directories of the query. New Features ~~~~~~~~~~~~ From 9e49c5f1850f15eae4962140976ea0386a83a38e Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 5 Apr 2024 09:34:27 +0200 Subject: [PATCH 443/497] Add changelogs for 2.16.6 (to this branch) and 2.17.0 (new) --- .../codeql-changelog/codeql-cli-2.16.6.rst | 25 ++ .../codeql-changelog/codeql-cli-2.17.0.rst | 220 ++++++++++++++++++ .../codeql-changelog/index.rst | 2 + 3 files changed, 247 insertions(+) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst new file mode 100644 index 00000000000..dba880ceaae --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst @@ -0,0 +1,25 @@ +.. _codeql-cli-2.16.6: + +========================== +CodeQL 2.16.6 (2024-03-26) +========================== + +.. 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.16.6 runs a total of 409 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 132 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* Fixes a bug where extractor logs would be output at a lower than expected verbosity level when using the :code:`codeql database create` command. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst new file mode 100644 index 00000000000..59b331fc154 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst @@ -0,0 +1,220 @@ +.. _codeql-cli-2.17.0: + +========================== +CodeQL 2.17.0 (2024-04-04) +========================== + +.. 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.17.0 runs a total of 410 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 130 queries (covering 34 more CWE). + +CodeQL CLI +---------- + +Deprecations +~~~~~~~~~~~~ + +* The :code:`--[no-]analysis-summary-v2` and :code:`--[no-]new-analysis-summary` options that were used to enable (or disable) improved summary information printed at the end of a :code:`codeql database analyze` invocation are no longer supported. + Improved summary information is now enabled for all invocations. +* Support for overwriting default CodeQL SARIF run properties using the + :code:`--sarif-run-property` command line option has been removed. This removes the ability to overwrite the :code:`semmle.formatSpecifier`, :code:`metricResults`, and + :code:`codeqlConfigSummary` properties in the SARIF run file. + +Improvements +~~~~~~~~~~~~ + +* TRAP import (a part of :code:`codeql database create` and :code:`codeql database finalize`) + now performs better in low-memory situations. (Put another way, it now needs less RAM to achieve the same performance as before.) + +* The worst-case performance of transitive closure computation (using the :code:`+` or :code:`*` postfix operators or the :code:`fastTC` higher-order primitive in QL) has been greatly improved. + +Miscellaneous +~~~~~~~~~~~~~ + +* The build of Eclipse Temurin OpenJDK that is used to run the CodeQL CLI has been updated to version 21.0.2. + +Query Packs +----------- + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The :code:`Stored` variants of some queries (:code:`cs/stored-command-line-injection`, :code:`cs/web/stored-xss`, :code:`cs/stored-ldap-injection`, :code:`cs/xml/stored-xpath-injection`, :code:`cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the :code:`file` and :code:`database` threat models in your threat model configuration. + +Java +"""" + +* The :code:`java/missing-case-in-switch` query now gives only a single alert for each switch statement, giving some examples of the missing cases as well as a count of how many are missing. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "Missing return-value check for a 'scanf'-like function" query (:code:`cpp/missing-check-scanf`) has been converted to a :code:`path-problem` query. +* The "Potentially uninitialized local variable" query (:code:`cpp/uninitialized-local`) has been converted to a :code:`path-problem` query. +* Added models for :code:`GLib` allocation and deallocation functions. + +C# +"" + +* The alert message of :code:`cs/wrong-compareto-signature` has been changed to remove unnecessary element references. +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are :code:`cs/code-injection`, :code:`cs/resource-injection`, :code:`cs/sql-injection`, and :code:`cs/uncontrolled-format-string`. + +Golang +"""""" + +* The query :code:`go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. +* The query :code:`go/sql-injection` now recognizes more sinks in the package :code:`github.com/Masterminds/squirrel`. + +Java +"""" + +* Variables named :code:`tokenImage` are no longer sources for the :code:`java/sensitive-log` query. This is because this variable name is used in parsing code generated by JavaCC, so it causes a large number of false positive alerts. +* Added sanitizers for relative URLs, :code:`List.contains()`, and checking the host of a URI to the :code:`java/ssrf` and :code:`java/unvalidated-url-redirection` queries. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The call graph has been improved, leading to more alerts for data flow based queries. + +New Queries +~~~~~~~~~~~ + +C/C++ +""""" + +* Added a new query, :code:`cpp/type-confusion`, to detect casts to invalid types. + +Golang +"""""" + +* The query "Slice memory allocation with excessive size value" (:code:`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally `submitted as an experimental query by @Malayke `__. + +Java +"""" + +* The query :code:`java/unsafe-url-forward-dispatch-load` has been promoted from experimental to the main query pack as :code:`java/unvalidated-url-forward`. Its results will now appear by default. This query was originally submitted as an experimental query `by @haby0 `__ and `by @luchua-bc `__. + +Query Metadata Changes +~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* :code:`@precision medium` metadata was added to the :code:`cpp/boost/tls-settings-misconfiguration` and :code:`cpp/boost/use-of-deprecated-hardcoded-security-protocol` queries, and these queries are now included in the security-extended suite. The :code:`@name` metadata of these queries were also updated. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The :code:`@precision` of the :code:`js/unsafe-external-link` has been reduced to :code:`low` to reflect the fact that modern browsers do not expose the opening window for such links. This mitigates the potential security risk of having a link with :code:`target="_blank"`. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C# +"" + +* The CIL extractor has been deleted and the corresponding extractor option :code:`cil` has been removed. It is no longer possible to do CIL extraction. +* The QL library C# classes no longer extend their corresponding :code:`DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all :code:`DotNet` and :code:`CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. + +Java +"""" + +* The Java extractor no longer supports the :code:`ODASA_SNAPSHOT` legacy environment variable. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for TypeScript 5.4. + +Swift +""""" + +* Upgraded to Swift 5.10 +* New AST node is extracted: :code:`ThenStmt` + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added destructors for temporary objects with extended lifetimes to the intermediate representation. + +C# +"" + +* Added new source models for the :code:`Dapper` package. These models can be enabled by enabling the :code:`database` threat model. +* Additional models have been added for :code:`System.IO`. These are primarily source models with the :code:`file` threat model, and summaries related to reading from a file or stream. +* Support for C# 12 / .NET8. +* Added the :code:`windows-registry` source kind and threat model to represent values which come from the registry on Windows. +* The models for :code:`System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the :code:`commandargs` and :code:`environment` threat models. +* The :code:`cs/assembly-path-injection` query has been modified so that it's sources rely on :code:`ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the :code:`commandargs` threat model. +* The models for :code:`System.IO.TextReader` have been modified to better model the flow of tainted text from a :code:`TextReader`. + +Golang +"""""" + +* The :code:`CODEQL_EXTRACTOR_GO_FAST_PACKAGE_INFO` option, which speeds up retrieval of dependency information, is now on by default. This was originally an external contribution by @xhd2015. +* Added dataflow sources for the package :code:`gopkg.in/macaron.v1`. + +Java +"""" + +* Increased the precision of some dataflow models of the class :code:`java.net.URL` by distinguishing the parts of a URL. +* The Java extractor and QL libraries now support Java 22, including support for anonymous variables, lambda parameters and patterns. +* Pattern cases with multiple patterns and that fall through to or from other pattern cases are now supported. The :code:`PatternCase` class gains the new :code:`getPatternAtIndex` and :code:`getAPattern` predicates, and deprecates :code:`getPattern`. +* Added a :code:`path-injection` sink for the :code:`open` methods of the :code:`android.os.ParcelFileDescriptor` class. + +Ruby +"""" + +* Data flow is now tracked through :code:`ActiveRecord` scopes. +* Modeled instances of :code:`ActionDispatch::Http::UploadedFile` that can be obtained from element reads of :code:`ActionController::Parameters`, with calls to :code:`original_filename`, :code:`content_type`, and :code:`read` now propagating taint from their receiver. +* The second argument, :code:`subquery_name`, of the :code:`ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. +* Calls to :code:`Typhoeus::Request.new` are now considered as instances of the :code:`Http::Client::Request` concept, with the response body being treated as a remote flow source. +* New command injection sinks have been added, including :code:`Process.spawn`, :code:`Process.exec`, :code:`Terrapin::CommandLine` and the :code:`open4` gem. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added a :code:`TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. +* Added a predicate :code:`GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate :code:`GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. +* Added a predicate :code:`GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate :code:`GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. +* Added a predicate :code:`GuardCondition.valueControls` to query whether a basic block is guarded by a particular :code:`case` of a :code:`switch` statement. + +Shared Libraries +---------------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dataflow Analysis +""""""""""""""""" + +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if :code:`map` is a library function, then in :code:`result = map(xs, x => x + 1)` we will now include the step from :code:`x` to :code:`x + 1` in the path explanation, instead of going directly from :code:`xs` to :code:`result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 5015699e2fa..222e133ed19 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,8 @@ A list of queries for each suite and language `is available here Date: Fri, 5 Apr 2024 11:58:43 +0100 Subject: [PATCH 444/497] Shared/Java: Make the 'isNull' interface slightly prettier. --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 7 ++++--- shared/typeflow/codeql/typeflow/TypeFlow.qll | 6 ++++++ shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 3 +++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index afec2a22ae8..ac781e223f2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -133,11 +133,12 @@ private module Input implements TypeFlowInput { not decl.hasImplicitInit() and not exists(decl.getInit()) ) - or - forex(TypeFlowNode mid | joinStep(mid, n) | Make::isNull(mid)) and + } + + predicate isExcludedFromNullAnalysis(TypeFlowNode n) { // Fields that are never assigned a non-null value are probably set by // reflection and are thus not always null. - not exists(n.asField()) + exists(n.asField()) } predicate exactTypeBase(TypeFlowNode n, RefType t) { diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index d2862b77637..7518805ac56 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -42,6 +42,12 @@ signature module TypeFlowInput { /** Holds if `n` represents a `null` value. */ predicate isNullValue(TypeFlowNode n); + /** + * Holds if `n` should be excluded from the set of null values even if + * the null analysis determines that `n` is always null. + */ + default predicate isExcludedFromNullAnalysis(TypeFlowNode n) { none() } + /** A type. */ class Type { /** Gets a textual representation of this type. */ diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index d640c4b67e1..c06b372afba 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -10,6 +10,9 @@ module TypeFlow I> { isNullValue(n) or exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) + or + forex(TypeFlowNode mid | I::joinStep(mid, n) | isNull(mid)) and + not isExcludedFromNullAnalysis(n) } /** From 3f63d3a8650192f7ba64f42e82f3447a0155ff08 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:49:40 +0100 Subject: [PATCH 445/497] Update java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll Co-authored-by: Anders Schack-Mulligen --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index ac781e223f2..4096b83e5f1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -157,7 +157,7 @@ private module Input implements TypeFlowInput { */ pragma[nomagic] private predicate upcastCand(TypeFlowNode n, RefType t1, RefType t1e, RefType t2, RefType t2e) { - exists(TypeFlowNode next | step(n, next) or Make::joinStep(n, next) | + exists(TypeFlowNode next | step(n, next) or joinStep(n, next) | n.getType() = t1 and next.getType() = t2 and t1.getErasure() = t1e and From 26cf8df8d6b473c72d758a3c61ae382c615fe0fc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:50:26 +0100 Subject: [PATCH 446/497] Update java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll Co-authored-by: Anders Schack-Mulligen --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index 4096b83e5f1..5463faa4c87 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -23,7 +23,7 @@ private module Input implements TypeFlowInput { /** Gets `t` if it is a `RefType` or the boxed type if `t` is a primitive type. */ private RefType boxIfNeeded(J::Type t) { - t.(J::PrimitiveType).getBoxedType() = result or + t.(PrimitiveType).getBoxedType() = result or result = t } From 1775bdee5f20f8c957addfad3d31025ac774546c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:52:04 +0100 Subject: [PATCH 447/497] Java: Remove redundant qualifiers. --- java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index 5463faa4c87..9dfe44ad5b5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -14,7 +14,7 @@ private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.controlflow.Guards private import codeql.typeflow.TypeFlow -private module Input implements TypeFlowInput { +private module Input implements TypeFlowInput { private newtype TTypeFlowNode = TField(Field f) { not f.getType() instanceof PrimitiveType } or TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or @@ -61,7 +61,7 @@ private module Input implements TypeFlowInput { } } - class Type = J::RefType; + class Type = RefType; /** * Holds if `arg` is an argument for the parameter `p` in a private callable. @@ -142,7 +142,7 @@ private module Input implements TypeFlowInput { } predicate exactTypeBase(TypeFlowNode n, RefType t) { - exists(J::ClassInstanceExpr e | + exists(ClassInstanceExpr e | n.asExpr() = e and e.getType() = t and not e instanceof FunctionalExpr and @@ -349,7 +349,7 @@ private module Input implements TypeFlowInput { cached private module TypeFlowBounds { - private module TypeFlow = Make; + private module TypeFlow = Make; /** * Holds if the runtime type of `f` is bounded by `t` and if this bound is From 3f6967829e3b152acc5cae6ac33f32e78b874dbf Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:53:23 +0100 Subject: [PATCH 448/497] Update shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll Co-authored-by: Anders Schack-Mulligen --- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index c06b372afba..9f043f9f7b3 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -19,7 +19,7 @@ module TypeFlow I> { * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily * functionally determined by `n2`, and `n1` might take a non-null value. */ - predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { I::joinStep(n1, n2) and not isNull(n1) } + private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { I::joinStep(n1, n2) and not isNull(n1) } private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } From a2c29fe094190664f6899468c16d846a300d9654 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:57:11 +0100 Subject: [PATCH 449/497] Shared: nomagicify 'getASourceSupertype'. --- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 9f043f9f7b3..3871d9c4159 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -19,7 +19,9 @@ module TypeFlow I> { * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily * functionally determined by `n2`, and `n1` might take a non-null value. */ - private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { I::joinStep(n1, n2) and not isNull(n1) } + private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { + I::joinStep(n1, n2) and not isNull(n1) + } private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } @@ -184,6 +186,7 @@ module TypeFlow I> { /** * Gets the source declaration of a direct supertype of this type, excluding itself. */ + pragma[nomagic] private Type getASourceSupertype(Type t) { result = getSourceDeclaration(t.getASupertype()) and result != t From 96e205a4a6688648fb2858feae1fe5beb5878141 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 12:59:07 +0100 Subject: [PATCH 450/497] Docs: Mark Swift 5.10 as supported. --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 15e1cfa6444..42b2b4f7b69 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -24,7 +24,7 @@ JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [8]_" Python [9]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12",Not applicable,``.py`` Ruby [10]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" - Swift [11]_,"Swift 5.4-5.9.1","Swift compiler","``.swift``" + Swift [11]_,"Swift 5.4-5.10","Swift compiler","``.swift``" TypeScript [12]_,"2.6-5.4",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" .. container:: footnote-group From bffa262a2c0251e5553cf3d87e0dfcf19c0bdad6 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 13:04:26 +0100 Subject: [PATCH 451/497] Shared: Make 'getAStrictAncestor' private. --- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 3871d9c4159..47fe522dba9 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -255,7 +255,7 @@ module TypeFlow I> { * This does not include itself, unless this type is part of a cycle * in the type hierarchy. */ - Type getAStrictAncestor(Type sub) { result = getAnAncestor(sub.getASupertype()) } + private Type getAStrictAncestor(Type sub) { result = getAnAncestor(sub.getASupertype()) } /** * Holds if we have a bound for `n` that is better than `t`. From 9deeb67af4f41a0d74e748f34602644f2d4e4229 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 13:10:08 +0100 Subject: [PATCH 452/497] Update shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll Co-authored-by: Anders Schack-Mulligen --- shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 47fe522dba9..c53d6b714f5 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -301,6 +301,11 @@ module TypeFlow I> { not irrelevantBound(n, t) } + /** + * Holds if the runtime type of `n` is bounded by `t` and if this bound is + * likely to be better than the static type of `n`. The flag `exact` indicates + * whether `t` is an exact bound or merely an upper bound. + */ predicate bestTypeFlow(TypeFlowNode n, Type t, boolean exact) { exactType(n, t) and exact = true or From bae633ad24ae9527d14136e75cd816f7cc9589e7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 13:18:32 +0100 Subject: [PATCH 453/497] Shared: Make 'erasedHaveIntersection' more identical to the Java version. --- .../codeql/typeflow/internal/TypeFlowImpl.qll | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index c53d6b714f5..f0e299f25b4 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -301,7 +301,7 @@ module TypeFlow I> { not irrelevantBound(n, t) } - /** + /** * Holds if the runtime type of `n` is bounded by `t` and if this bound is * likely to be better than the static type of `n`. The flag `exact` indicates * whether `t` is an exact bound or merely an upper bound. @@ -389,14 +389,24 @@ module TypeFlow I> { ) } + /** Holds if this type is the same as its source declaration. */ + private predicate isSourceDeclaration(Type t) { getSourceDeclaration(t) = t } + + final private class FinalType = Type; + + /** A type that is the same as its source declaration. */ + private class SrcType extends FinalType { + SrcType() { isSourceDeclaration(this) } + } + /** * Holds if there is a common (reflexive, transitive) subtype of the erased * types `t1` and `t2`. */ + pragma[nomagic] private predicate erasedHaveIntersection(Type t1, Type t2) { - exists(Type commonSub | commonSub = getSourceDeclaration(commonSub) | - getASourceSupertype*(commonSub) = t1 and - getASourceSupertype*(commonSub) = t2 + exists(SrcType commonSub | + getASourceSupertype*(commonSub) = t1 and getASourceSupertype*(commonSub) = t2 ) and t1 = getErasure(_) and t2 = getErasure(_) From 27688bf1544157373d39b78bdad28d0e69607817 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 13:25:29 +0100 Subject: [PATCH 454/497] Shared: Rename 'joinStep' to 'joinStepNotNull' to prevent name clashes. Rename 'sccJoinStep' to 'sccJoinStepNotNull' to match the new name. --- .../codeql/typeflow/internal/TypeFlowImpl.qll | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index f0e299f25b4..ac7de53f85a 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -11,7 +11,7 @@ module TypeFlow I> { or exists(TypeFlowNode mid | isNull(mid) and step(mid, n)) or - forex(TypeFlowNode mid | I::joinStep(mid, n) | isNull(mid)) and + forex(TypeFlowNode mid | joinStep(mid, n) | isNull(mid)) and not isExcludedFromNullAnalysis(n) } @@ -19,11 +19,13 @@ module TypeFlow I> { * Holds if data can flow from `n1` to `n2` in one step, `n1` is not necessarily * functionally determined by `n2`, and `n1` might take a non-null value. */ - private predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) { - I::joinStep(n1, n2) and not isNull(n1) + private predicate joinStepNotNull(TypeFlowNode n1, TypeFlowNode n2) { + joinStep(n1, n2) and not isNull(n1) } - private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { joinStep(n1, n2) or step(n1, n2) } + private predicate anyStep(TypeFlowNode n1, TypeFlowNode n2) { + joinStepNotNull(n1, n2) or step(n1, n2) + } private predicate sccEdge(TypeFlowNode n1, TypeFlowNode n2) { anyStep(n1, n2) and anyStep+(n2, n1) @@ -36,9 +38,9 @@ module TypeFlow I> { /** Holds if `n` is part of an SCC of size 2 or more represented by `scc`. */ private predicate sccRepr(TypeFlowNode n, TypeFlowScc scc) { scc = Scc::getEquivalenceClass(n) } - private predicate sccJoinStep(TypeFlowNode n, TypeFlowScc scc) { + private predicate sccJoinStepNotNull(TypeFlowNode n, TypeFlowScc scc) { exists(TypeFlowNode mid | - joinStep(n, mid) and + joinStepNotNull(n, mid) and sccRepr(mid, scc) and not sccRepr(n, scc) ) @@ -141,13 +143,13 @@ module TypeFlow I> { private module JoinStep implements Edge { class Node = TypeFlowNode; - predicate edge = joinStep/2; + predicate edge = joinStepNotNull/2; } private module SccJoinStep implements Edge { class Node = TypeFlowScc; - predicate edge = sccJoinStep/2; + predicate edge = sccJoinStepNotNull/2; } private module RankedJoinStep = RankEdge; @@ -172,13 +174,13 @@ module TypeFlow I> { exists(TypeFlowNode mid | exactType(mid, t) and step(mid, n)) or // The following is an optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | exactType(mid, t))` + // `forex(TypeFlowNode mid | joinStepNotNull(mid, n) | exactType(mid, t))` ForAll::flowJoin(n, t) or exists(TypeFlowScc scc | sccRepr(n, scc) and // Optimized version of - // `forex(TypeFlowNode mid | sccJoinStep(mid, scc) | exactType(mid, t))` + // `forex(TypeFlowNode mid | sccJoinStepNotNull(mid, scc) | exactType(mid, t))` ForAll::flowJoin(scc, t) ) } @@ -327,7 +329,7 @@ module TypeFlow I> { */ private predicate unionTypeFlowBaseCand(TypeFlowNode n, Type t, boolean exact) { exists(TypeFlowNode next | - joinStep(n, next) and + joinStepNotNull(n, next) and bestTypeFlowOrTypeFlowBase(n, t, exact) and not bestTypeFlowOrTypeFlowBase(next, t, exact) and not exactType(next, _) @@ -354,7 +356,7 @@ module TypeFlow I> { not exactType(n, _) and ( // Optimized version of - // `forex(TypeFlowNode mid | joinStep(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` + // `forex(TypeFlowNode mid | joinStepNotNull(mid, n) | unionTypeFlowBaseCand(mid, _, _) or hasUnionTypeFlow(mid))` ForAll::flowJoin(n, _) or exists(TypeFlowScc scc | From cd84fa4beeb8503d54ded224e0983b09acd93bf4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 15:01:26 +0200 Subject: [PATCH 455/497] JS: Make getInstance() propagate to subclasses --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 20 +++++++++++++++++++ .../frameworks/data/test.expected | 4 ++++ .../library-tests/frameworks/data/test.js | 14 +++++++++++++ .../library-tests/frameworks/data/test.ql | 1 + 4 files changed, 39 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 0bd79dd2029..0345df3f00e 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -891,6 +891,17 @@ module API { (propDesc = Promises::errorProp() or propDesc = "") } + pragma[nomagic] + private DataFlow::ClassNode getALocalSubclass(DataFlow::SourceNode node) { + result.getASuperClassNode().getALocalSource() = node + } + + bindingset[node] + pragma[inline_late] + private DataFlow::ClassNode getALocalSubclassFwd(DataFlow::SourceNode node) { + result = getALocalSubclass(node) + } + /** * Holds if `ref` is a use of a node that should have an incoming edge from `base` labeled * `lbl` in the API graph. @@ -927,6 +938,15 @@ module API { or lbl = Label::forwardingFunction() and DataFlow::functionForwardingStep(pred.getALocalUse(), ref) + or + exists(DataFlow::ClassNode cls | + lbl = Label::instance() and + cls = getALocalSubclassFwd(pred).getADirectSubClass*() + | + ref = cls.getAReceiverNode() + or + ref = cls.getAClassReference().getAnInstantiation() + ) ) or exists(DataFlow::Node def, DataFlow::FunctionNode fn | diff --git a/javascript/ql/test/library-tests/frameworks/data/test.expected b/javascript/ql/test/library-tests/frameworks/data/test.expected index 28d7229789d..843b1f32d5b 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.expected +++ b/javascript/ql/test/library-tests/frameworks/data/test.expected @@ -74,6 +74,10 @@ taintFlow | test.js:249:28:249:35 | source() | test.js:249:28:249:35 | source() | | test.js:252:15:252:22 | source() | test.js:252:15:252:22 | source() | | test.js:254:32:254:39 | source() | test.js:254:32:254:39 | source() | +| test.js:262:10:262:31 | this.ba ... ource() | test.js:262:10:262:31 | this.ba ... ource() | +| test.js:265:6:265:39 | new MyS ... ource() | test.js:265:6:265:39 | new MyS ... ource() | +| test.js:269:10:269:31 | this.ba ... ource() | test.js:269:10:269:31 | this.ba ... ource() | +| test.js:272:6:272:40 | new MyS ... ource() | test.js:272:6:272:40 | new MyS ... ource() | isSink | test.js:54:18:54:25 | source() | test-sink | | test.js:55:22:55:29 | source() | test-sink | diff --git a/javascript/ql/test/library-tests/frameworks/data/test.js b/javascript/ql/test/library-tests/frameworks/data/test.js index ac702b82a8c..bbcb10418a1 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.js +++ b/javascript/ql/test/library-tests/frameworks/data/test.js @@ -256,3 +256,17 @@ function fuzzy() { fuzzyCall(source()); // OK - does not come from 'testlib' require('blah').fuzzyCall(source()); // OK - does not come from 'testlib' } + +class MySubclass extends testlib.BaseClass { + foo() { + sink(this.baseclassSource()); // NOT OK + } +} +sink(new MySubclass().baseclassSource()); // NOT OK + +class MySubclass2 extends MySubclass { + foo2() { + sink(this.baseclassSource()); // NOT OK + } +} +sink(new MySubclass2().baseclassSource()); // NOT OK diff --git a/javascript/ql/test/library-tests/frameworks/data/test.ql b/javascript/ql/test/library-tests/frameworks/data/test.ql index 039a0aa3920..6af176f4bf3 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.ql +++ b/javascript/ql/test/library-tests/frameworks/data/test.ql @@ -80,6 +80,7 @@ class Sources extends ModelInput::SourceModelCsv { "testlib;Member[ParamDecoratorSource].DecoratedParameter;test-source", "testlib;Member[MethodDecorator].DecoratedMember.Parameter[0];test-source", "testlib;Member[MethodDecoratorWithArgs].ReturnValue.DecoratedMember.Parameter[0];test-source", + "testlib;Member[BaseClass].Instance.Member[baseclassSource].ReturnValue;test-source", ] } } From d114d09d736ee0f2efca5a0ba6d70fa519c85ff2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 14:52:19 +0100 Subject: [PATCH 456/497] Docs: Remove Swift version in footnote. --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 42b2b4f7b69..9d5c19679b7 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -39,5 +39,5 @@ .. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. .. [9] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. .. [10] Requires glibc 2.17. - .. [11] Swift support is currently in beta. Support for the analysis of Swift 5.4-5.8.1 requires macOS or Linux. + .. [11] Swift support is currently in beta. Support for the analysis of Swift requires macOS or Linux. .. [12] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. From 777755a241e78a1d3c44e3b1a523f31810737033 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 19:02:23 +0100 Subject: [PATCH 457/497] C++: Add alias models for 'fopen'. --- cpp/ql/lib/semmle/code/cpp/models/Models.qll | 1 + .../code/cpp/models/implementations/Fopen.qll | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index 32377dbd71f..7794424b3f6 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -41,3 +41,4 @@ private import implementations.SqLite3 private import implementations.PostgreSql private import implementations.System private import implementations.StructuredExceptionHandling +private import implementations.Fopen diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll new file mode 100644 index 00000000000..52f56add609 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -0,0 +1,51 @@ +/** + * Provides implementation classes modeling `fopen` and various similar + * functions. See `semmle.code.cpp.models.Models` for usage information. + */ + +import semmle.code.cpp.Function +import semmle.code.cpp.models.interfaces.Alias +import semmle.code.cpp.models.interfaces.SideEffect + +/** The function `fopen` and friends. */ +private class Fopen extends Function, AliasFunction, SideEffectFunction { + Fopen() { + this.hasGlobalOrStdName(["fopen", "fopen_s", "freopen"]) + or + this.hasGlobalName(["_open", "_wfopen", "_fsopen", "_wfsopen", "_wopen"]) + } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate parameterEscapesOnlyViaReturn(int i) { none() } + + override predicate parameterNeverEscapes(int index) { + // None of the parameters escape + this.getParameter(index).getUnspecifiedType() instanceof PointerType + } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + ( + this.hasGlobalOrStdName(["fopen", "fopen_s"]) + or + this.hasGlobalName(["_wfopen", "_fsopen", "_wfsopen"]) + ) and + i = [0, 1] and + buffer = true + or + this.hasGlobalOrStdName("freopen") and + ( + i = [0, 1] and + buffer = true + or + i = 2 and + buffer = false + ) + or + this.hasGlobalName(["_open", "_wopen"]) and + i = 0 and + buffer = true + } +} From 557555eb7177766d99f15914f51bc0c5c94879f1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 5 Apr 2024 19:03:03 +0100 Subject: [PATCH 458/497] C++: Make Code Scanning happy. --- cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll index 52f56add609..6bc700becf1 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Fopen.qll @@ -3,7 +3,6 @@ * functions. See `semmle.code.cpp.models.Models` for usage information. */ -import semmle.code.cpp.Function import semmle.code.cpp.models.interfaces.Alias import semmle.code.cpp.models.interfaces.SideEffect From 795b767b6effffbc32ec07f9024638780bbb3ad4 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 4 Apr 2024 22:48:12 +0200 Subject: [PATCH 459/497] add link to the source variable in the alert-message for java/implicit-cast-in-compound-assignment --- java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql | 9 +++++---- .../CWE-190/semmle/tests/InformationLoss.expected | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index d2ff4c24060..4d770b462b8 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -27,10 +27,11 @@ class DangerousAssignOpExpr extends AssignOp { predicate problematicCasting(Type t, Expr e) { e.getType().(NumType).widerThan(t) } -from DangerousAssignOpExpr a, Expr e +from DangerousAssignOpExpr a, Expr e, Variable v where e = a.getSource() and - problematicCasting(a.getDest().getType(), e) + problematicCasting(a.getDest().getType(), e) and + v = a.getDest().(VarAccess).getVariable() select a, - "Implicit cast of source type " + e.getType().getName() + " to narrower destination type " + - a.getDest().getType().getName() + "." + "Implicit cast of source $@ to narrower destination type " + a.getDest().getType().getName() + ".", + v, "type " + e.getType().getName() diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected index 1c4ed46e136..03f39286a19 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected @@ -1,2 +1,2 @@ -| Test.java:68:5:68:25 | ...+=... | Implicit cast of source type long to narrower destination type int. | -| Test.java:87:4:87:9 | ...+=... | Implicit cast of source type long to narrower destination type int. | +| Test.java:68:5:68:25 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:64:4:64:13 | int i | type long | +| Test.java:87:4:87:9 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:81:4:81:13 | int i | type long | From 8b220cc1b39775c75c2edaef0f2cbacbdc720ff6 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Fri, 5 Apr 2024 09:21:18 +0200 Subject: [PATCH 460/497] also get the variable for array accesses --- java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql | 8 +++++++- .../CWE-190/semmle/tests/InformationLoss.expected | 1 + .../security/CWE-190/semmle/tests/Test.java | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index 4d770b462b8..8a491c33cc3 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -27,11 +27,17 @@ class DangerousAssignOpExpr extends AssignOp { predicate problematicCasting(Type t, Expr e) { e.getType().(NumType).widerThan(t) } +Variable getVariable(DangerousAssignOpExpr a) { + result = a.getDest().(VarAccess).getVariable() + or + result = a.getDest().(ArrayAccess).getArray().(VarAccess).getVariable() +} + from DangerousAssignOpExpr a, Expr e, Variable v where e = a.getSource() and problematicCasting(a.getDest().getType(), e) and - v = a.getDest().(VarAccess).getVariable() + v = getVariable(a) select a, "Implicit cast of source $@ to narrower destination type " + a.getDest().getType().getName() + ".", v, "type " + e.getType().getName() diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected index 03f39286a19..91bac65629a 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected @@ -1,2 +1,3 @@ | Test.java:68:5:68:25 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:64:4:64:13 | int i | type long | | Test.java:87:4:87:9 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:81:4:81:13 | int i | type long | +| Test.java:289:5:289:30 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:285:4:285:27 | int[] arr | type long | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java index 2935368dccb..6dcfeefd2d1 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java @@ -279,6 +279,16 @@ class Test { // subsequently cast to narrower type int int widenedThenNarrowed = (int) (data2 + 10L); } + + // InformationLoss + { + int[] arr = new int[10]; + while (arr[2] < 1000000) { + // BAD: getLargeNumber is implicitly narrowed to an integer + // which will result in overflows if it is large + arr[2] += getLargeNumber(); + } + } } public static long getLargeNumber() { From ca4f667053399a04eef7f7992ebdb616eda6cf57 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Fri, 5 Apr 2024 16:18:20 +0200 Subject: [PATCH 461/497] add fallback if I can't easily determine the variable --- .../Likely Bugs/Arithmetic/InformationLoss.ql | 20 ++++++++++++------- .../semmle/tests/InformationLoss.expected | 7 ++++--- .../security/CWE-190/semmle/tests/Test.java | 7 +++++++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index 8a491c33cc3..71699fd3a5a 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -27,17 +27,23 @@ class DangerousAssignOpExpr extends AssignOp { predicate problematicCasting(Type t, Expr e) { e.getType().(NumType).widerThan(t) } -Variable getVariable(DangerousAssignOpExpr a) { - result = a.getDest().(VarAccess).getVariable() +Variable getVariable(Expr dest) { + result = dest.(VarAccess).getVariable() or - result = a.getDest().(ArrayAccess).getArray().(VarAccess).getVariable() + result = dest.(ArrayAccess).getArray().(VarAccess).getVariable() } -from DangerousAssignOpExpr a, Expr e, Variable v +from DangerousAssignOpExpr a, Expr e, Top v where e = a.getSource() and problematicCasting(a.getDest().getType(), e) and - v = getVariable(a) + ( + v = getVariable(a.getDest()) + or + // fallback, in case we can't easily determine the variable + not exists(getVariable(a.getDest())) and + v = a.getDest() + ) select a, - "Implicit cast of source $@ to narrower destination type " + a.getDest().getType().getName() + ".", - v, "type " + e.getType().getName() + "Implicit cast of $@ to narrower destination type " + a.getDest().getType().getName() + ".", + v, "source type " + e.getType().getName() diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected index 91bac65629a..dbda11bff08 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected @@ -1,3 +1,4 @@ -| Test.java:68:5:68:25 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:64:4:64:13 | int i | type long | -| Test.java:87:4:87:9 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:81:4:81:13 | int i | type long | -| Test.java:289:5:289:30 | ...+=... | Implicit cast of source $@ to narrower destination type int. | Test.java:285:4:285:27 | int[] arr | type long | +| Test.java:68:5:68:25 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:64:4:64:13 | int i | source type long | +| Test.java:87:4:87:9 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:81:4:81:13 | int i | source type long | +| Test.java:289:5:289:30 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:285:4:285:27 | int[] arr | source type long | +| Test.java:293:7:293:44 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:293:7:293:24 | ...[...] | source type long | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java index 6dcfeefd2d1..f24d16a236c 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/Test.java @@ -288,6 +288,9 @@ class Test { // which will result in overflows if it is large arr[2] += getLargeNumber(); } + + // BAD. + getAnIntArray()[0] += getLargeNumber(); } } @@ -295,6 +298,10 @@ class Test { return Long.MAX_VALUE / 2; } + public static int[] getAnIntArray() { + return new int[10]; + } + public static boolean properlyBounded(int i) { return i < Integer.MAX_VALUE; } From 018b066b9550571d0e4ebdd6d936c6d2a1b4be73 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 8 Apr 2024 07:15:33 +0200 Subject: [PATCH 462/497] autoformat --- java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index 71699fd3a5a..e8893f3bcc7 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -45,5 +45,5 @@ where v = a.getDest() ) select a, - "Implicit cast of $@ to narrower destination type " + a.getDest().getType().getName() + ".", - v, "source type " + e.getType().getName() + "Implicit cast of $@ to narrower destination type " + a.getDest().getType().getName() + ".", v, + "source type " + e.getType().getName() From d829dd435f349cb52d7bfc659b764d00f1b9d8d2 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 8 Apr 2024 10:00:06 +0200 Subject: [PATCH 463/497] JS: Update docs --- .../customizing-library-models-for-javascript.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index 5e3f5d9f74f..b062c66bcca 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -478,7 +478,7 @@ The following components are supported: - **Element** selects an element of an array, iterator, or set object. - **MapValue** selects a value of a map object. - **Awaited** selects the value of a promise. -- **Instance** selects instances of a class. +- **Instance** selects instances of a class, including instances of its subclasses. - **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. For example, this can be used to find all values that appear to originate from a particular package. This can be useful for finding method calls from a known package, but where the receiver type is not known or is difficult to model. From 6e931000c28317a65442f4e90e175829880e9843 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 8 Apr 2024 10:02:22 +0200 Subject: [PATCH 464/497] JS: Rewrite docs for API::Node#getInstance() --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 0345df3f00e..27c1632358e 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -241,15 +241,23 @@ module API { } /** - * Gets a node representing an instance of this API component, that is, an object whose - * constructor is the function represented by this node. + * Gets a node representing an instance of the class represented by this node. + * This includes instances of subclasses. * - * For example, if this node represents a use of some class `A`, then there might be a node - * representing instances of `A`, typically corresponding to expressions `new A()` at the - * source level. + * For example: + * ```js + * import { C } from "foo"; * - * This predicate may have multiple results when there are multiple constructor calls invoking this API component. - * Consider using `getAnInstantiation()` if there is a need to distinguish between individual constructor calls. + * new C(); // API::moduleImport("foo").getMember("C").getInstance() + * + * class D extends C { + * m() { + * this; // API::moduleImport("foo").getMember("C").getInstance() + * } + * } + * + * new D(); // API::moduleImport("foo").getMember("C").getInstance() + * ``` */ cached Node getInstance() { From ad9838d0fe6868dd93b6f7bd8d70c0462d6506cb Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 8 Apr 2024 10:02:28 +0200 Subject: [PATCH 465/497] JS: Add change note --- .../ql/src/change-notes/2024-04-08-instance-to-subclasses.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md diff --git a/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md b/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md new file mode 100644 index 00000000000..cae4bea6ab3 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-04-08-instance-to-subclasses.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* `API::Node#getInstance()` now includes instances of subclasses, include transitive subclasses. + The same changes applies to uses of the `Instance` token in data extensions. From 9aa85f2d132ce8f0f78e5744d6f5430d7e8d9b27 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 4 Apr 2024 14:26:13 +0200 Subject: [PATCH 466/497] C#: Validate all nuget feeds to respond in reasonable time --- .../DependencyManager.Nuget.cs | 191 +++++++++++++++--- .../DependencyManager.cs | 9 +- .../DotNet.cs | 17 +- .../EnvironmentVariableNames.cs | 15 ++ .../IDotNet.cs | 1 + .../Semmle.Extraction.Tests/Runtime.cs | 2 + .../Semmle.Util/EnvironmentVariables.cs | 7 + csharp/extractor/Semmle.Util/FileUtils.cs | 5 +- 8 files changed, 208 insertions(+), 39 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs index 8e0be8ab141..cdf4f5dcf4a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net.Http; using System.Text.RegularExpressions; +using System.Threading; using System.Threading.Tasks; using Semmle.Util; @@ -14,6 +16,13 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { try { + var checkNugetFeedResponsiveness = EnvironmentVariables.GetBoolean(EnvironmentVariableNames.CheckNugetFeedResponsiveness); + if (checkNugetFeedResponsiveness && !CheckFeeds(allNonBinaryFiles)) + { + DownloadMissingPackages(allNonBinaryFiles, dllPaths, withNugetConfig: false); + return; + } + using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) { var count = nuget.InstallPackages(); @@ -139,7 +148,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); } - private void DownloadMissingPackages(List allFiles, ISet dllPaths) + private void DownloadMissingPackages(List allFiles, ISet dllPaths, bool withNugetConfig = true) { var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); @@ -172,30 +181,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); - - var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray(); - string? nugetConfig = null; - if (nugetConfigs.Length > 1) - { - logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); - nugetConfig = allFiles - .SelectRootFiles(sourceDir) - .SelectFileNamesByName("nuget.config") - .FirstOrDefault(); - if (nugetConfig == null) - { - logger.LogInfo("Could not find a top-level nuget.config file."); - } - } - else - { - nugetConfig = nugetConfigs.FirstOrDefault(); - } - - if (nugetConfig != null) - { - logger.LogInfo($"Using nuget.config file {nugetConfig}."); - } + var nugetConfig = withNugetConfig + ? GetNugetConfig(allFiles) + : null; CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); @@ -221,6 +209,37 @@ namespace Semmle.Extraction.CSharp.DependencyFetching dllPaths.Add(missingPackageDirectory.DirInfo.FullName); } + private string[] GetAllNugetConfigs(List allFiles) => allFiles.SelectFileNamesByName("nuget.config").ToArray(); + + private string? GetNugetConfig(List allFiles) + { + var nugetConfigs = GetAllNugetConfigs(allFiles); + string? nugetConfig; + if (nugetConfigs.Length > 1) + { + logger.LogInfo($"Found multiple nuget.config files: {string.Join(", ", nugetConfigs)}."); + nugetConfig = allFiles + .SelectRootFiles(sourceDir) + .SelectFileNamesByName("nuget.config") + .FirstOrDefault(); + if (nugetConfig == null) + { + logger.LogInfo("Could not find a top-level nuget.config file."); + } + } + else + { + nugetConfig = nugetConfigs.FirstOrDefault(); + } + + if (nugetConfig != null) + { + logger.LogInfo($"Using nuget.config file {nugetConfig}."); + } + + return nugetConfig; + } + private void LogAllUnusedPackages(DependencyContainer dependencies) { var allPackageDirectories = GetAllPackageDirectories(); @@ -279,9 +298,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .Select(d => Path.GetFileName(d).ToLowerInvariant()); } - [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] - private static partial Regex TargetFramework(); - private bool TryRestorePackageManually(string package, string? nugetConfig, PackageReferenceSource packageReferenceSource = PackageReferenceSource.SdkCsProj) { logger.LogInfo($"Restoring package {package}..."); @@ -358,7 +374,126 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } + private static async Task ExecuteGetRequest(string address, HttpClient httpClient, CancellationToken cancellationToken) + { + using var stream = await httpClient.GetStreamAsync(address, cancellationToken); + var buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) + { + // do nothing + } + } + + private bool IsFeedReachable(string feed) + { + using HttpClient client = new(); + var timeoutSeconds = 1; + var tryCount = 4; + + for (var i = 0; i < tryCount; i++) + { + using var cts = new CancellationTokenSource(); + cts.CancelAfter(timeoutSeconds * 1000); + try + { + ExecuteGetRequest(feed, client, cts.Token).GetAwaiter().GetResult(); + return true; + } + catch (Exception exc) + { + if (exc is TaskCanceledException tce && + tce.CancellationToken == cts.Token && + cts.Token.IsCancellationRequested) + { + logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}' in {timeoutSeconds} seconds."); + timeoutSeconds *= 2; + continue; + } + + // We're only interested in timeouts. + logger.LogWarning($"Querying Nuget feed '{feed}' failed: {exc}"); + return true; + } + } + + logger.LogError($"Didn't receive answer from Nuget feed '{feed}'. Tried it {tryCount} times."); + return false; + } + + private bool CheckFeeds(List allFiles) + { + logger.LogInfo("Checking Nuget feeds..."); + var feeds = GetAllFeeds(allFiles); + + var excludedFeeds = Environment.GetEnvironmentVariable(EnvironmentVariableNames.ExcludedNugetFeedsFromResponsivenessCheck) + ?.Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries) + .ToHashSet() ?? []; + + if (excludedFeeds.Count > 0) + { + logger.LogInfo($"Excluded feeds from responsiveness check: {string.Join(", ", excludedFeeds)}"); + } + + var allFeedsReachable = feeds.All(feed => excludedFeeds.Contains(feed) || IsFeedReachable(feed)); + if (!allFeedsReachable) + { + diagnosticsWriter.AddEntry(new DiagnosticMessage( + Language.CSharp, + "buildless/unreachable-feed", + "Found unreachable Nuget feed in C# analysis with build-mode 'none'", + visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true), + markdownMessage: "Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.", + severity: DiagnosticMessage.TspSeverity.Warning + )); + } + CompilationInfos.Add(("All Nuget feeds reachable", allFeedsReachable ? "1" : "0")); + return allFeedsReachable; + } + + private IEnumerable GetFeeds(string nugetConfig) + { + logger.LogInfo($"Getting Nuget feeds from '{nugetConfig}'..."); + var results = dotnet.GetNugetFeeds(nugetConfig); + var regex = EnabledNugetFeed(); + foreach (var result in results) + { + var match = regex.Match(result); + if (!match.Success) + { + logger.LogError($"Failed to parse feed from '{result}'"); + continue; + } + + var url = match.Groups[1].Value; + if (!url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase) && + !url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)) + { + logger.LogInfo($"Skipping feed '{url}' as it is not a valid URL."); + continue; + } + + yield return url; + } + } + + private HashSet GetAllFeeds(List allFiles) + { + var nugetConfigs = GetAllNugetConfigs(allFiles); + var feeds = nugetConfigs + .SelectMany(nf => GetFeeds(nf)) + .Where(str => !string.IsNullOrWhiteSpace(str)) + .ToHashSet(); + return feeds; + } + + [GeneratedRegex(@".*", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex TargetFramework(); + [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex LegacyNugetPackage(); + + [GeneratedRegex(@"^E (.*)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex EnabledNugetFeed(); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 04716a64db4..2fc77d004f2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -20,6 +20,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { private readonly AssemblyCache assemblyCache; private readonly ILogger logger; + private readonly IDiagnosticsWriter diagnosticsWriter; // Only used as a set, but ConcurrentDictionary is the only concurrent set in .NET. private readonly IDictionary usedReferences = new ConcurrentDictionary(); @@ -52,6 +53,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var startTime = DateTime.Now; this.logger = logger; + this.diagnosticsWriter = new DiagnosticsStream(Path.Combine( + Environment.GetEnvironmentVariable(EnvironmentVariableNames.DiagnosticDir) ?? "", + $"dependency-manager-{DateTime.UtcNow:yyyyMMddHHmm}-{Environment.ProcessId}.jsonc")); this.sourceDir = new DirectoryInfo(srcDir); packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName, "packages")); @@ -177,8 +181,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var frameworkLocations = new HashSet(); var frameworkReferences = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferences); - var frameworkReferencesUseSubfolders = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DotnetFrameworkReferencesUseSubfolders); - _ = bool.TryParse(frameworkReferencesUseSubfolders, out var useSubfolders); + var useSubfolders = EnvironmentVariables.GetBoolean(EnvironmentVariableNames.DotnetFrameworkReferencesUseSubfolders); if (!string.IsNullOrWhiteSpace(frameworkReferences)) { RemoveFrameworkNugetPackages(dllPaths); @@ -740,6 +743,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { Dispose(tempWorkingDirectory, "temporary working"); } + + diagnosticsWriter?.Dispose(); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index b132d1884f9..c57958845f2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -16,12 +16,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public partial class DotNet : IDotNet { private readonly IDotNetCliInvoker dotnetCliInvoker; + private readonly ILogger logger; private readonly TemporaryDirectory? tempWorkingDirectory; private DotNet(IDotNetCliInvoker dotnetCliInvoker, ILogger logger, TemporaryDirectory? tempWorkingDirectory = null) { this.tempWorkingDirectory = tempWorkingDirectory; this.dotnetCliInvoker = dotnetCliInvoker; + this.logger = logger; Info(); } @@ -89,17 +91,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return dotnetCliInvoker.RunCommand(args); } - public IList GetListedRuntimes() => GetListed("--list-runtimes"); + public IList GetListedRuntimes() => GetResultList("--list-runtimes"); - public IList GetListedSdks() => GetListed("--list-sdks"); + public IList GetListedSdks() => GetResultList("--list-sdks"); - private IList GetListed(string args) + private IList GetResultList(string args) { - if (dotnetCliInvoker.RunCommand(args, out var artifacts)) + if (dotnetCliInvoker.RunCommand(args, out var results)) { - return artifacts; + return results; } - return new List(); + logger.LogWarning($"Running 'dotnet {args}' failed."); + return []; } public bool Exec(string execArgs) @@ -108,6 +111,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return dotnetCliInvoker.RunCommand(args); } + public IList GetNugetFeeds(string nugetConfig) => GetResultList($"nuget list source --format Short --configfile \"{nugetConfig}\""); + // The version number should be kept in sync with the version .NET version used for building the application. public const string LatestDotNetSdkVersion = "8.0.101"; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs index 65a4664e83e..2d36319042a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -16,5 +16,20 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Controls whether to use framework dependencies from subfolders. /// public const string DotnetFrameworkReferencesUseSubfolders = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES_USE_SUBFOLDERS"; + + /// + /// Controls whether to check the responsiveness of NuGet feeds. + /// + public const string CheckNugetFeedResponsiveness = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"; + + /// + /// Specifies the NuGet feeds to exclude from the responsiveness check. + /// + public const string ExcludedNugetFeedsFromResponsivenessCheck = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_EXCLUDED_FROM_CHECK"; + + /// + /// Specifies the location of the diagnostic directory. + /// + public const string DiagnosticDir = "CODEQL_EXTRACTOR_CSHARP_DIAGNOSTIC_DIR"; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs index d66135c1644..d97fc7d6441 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs @@ -13,6 +13,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching IList GetListedRuntimes(); IList GetListedSdks(); bool Exec(string execArgs); + IList GetNugetFeeds(string nugetConfig); } public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false); diff --git a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs index 17bc477bde8..2daf8244d97 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs @@ -26,6 +26,8 @@ namespace Semmle.Extraction.Tests public IList GetListedSdks() => sdks; public bool Exec(string execArgs) => true; + + public IList GetNugetFeeds(string nugetConfig) => []; } public class RuntimeTests diff --git a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs index c96aa16357c..72ba9224669 100644 --- a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs +++ b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs @@ -27,5 +27,12 @@ namespace Semmle.Util } return threads; } + + public static bool GetBoolean(string name) + { + var env = Environment.GetEnvironmentVariable(name); + var _ = bool.TryParse(env, out var value); + return value; + } } } diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 094c4da3338..4a22877e3c1 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -102,8 +102,7 @@ namespace Semmle.Util private static async Task DownloadFileAsync(string address, string filename) { using var httpClient = new HttpClient(); - using var request = new HttpRequestMessage(HttpMethod.Get, address); - using var contentStream = await (await httpClient.SendAsync(request)).Content.ReadAsStreamAsync(); + using var contentStream = await httpClient.GetStreamAsync(address); using var stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true); await contentStream.CopyToAsync(stream); } @@ -112,7 +111,7 @@ namespace Semmle.Util /// Downloads the file at to . /// public static void DownloadFile(string address, string fileName) => - DownloadFileAsync(address, fileName).Wait(); + DownloadFileAsync(address, fileName).GetAwaiter().GetResult(); public static string NestPaths(ILogger logger, string? outerpath, string innerpath) { From 7051db5e1c5df825f50a18f805680a8231a17fbe Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 5 Apr 2024 14:20:42 +0200 Subject: [PATCH 467/497] Fix code review findings --- .../DependencyManager.Nuget.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs index cdf4f5dcf4a..8f8e932279c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -387,6 +387,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private bool IsFeedReachable(string feed) { + logger.LogInfo($"Checking if Nuget feed '{feed}' is reachable..."); using HttpClient client = new(); var timeoutSeconds = 1; var tryCount = 4; @@ -432,7 +433,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching if (excludedFeeds.Count > 0) { - logger.LogInfo($"Excluded feeds from responsiveness check: {string.Join(", ", excludedFeeds)}"); + logger.LogInfo($"Excluded feeds from responsiveness check: {string.Join(", ", excludedFeeds.OrderBy(f => f))}"); } var allFeedsReachable = feeds.All(feed => excludedFeeds.Contains(feed) || IsFeedReachable(feed)); @@ -481,9 +482,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { var nugetConfigs = GetAllNugetConfigs(allFiles); var feeds = nugetConfigs - .SelectMany(nf => GetFeeds(nf)) + .SelectMany(GetFeeds) .Where(str => !string.IsNullOrWhiteSpace(str)) .ToHashSet(); + logger.LogInfo($"Found Nuget feeds in nuget.config files: {string.Join(", ", feeds.OrderBy(f => f))}"); return feeds; } @@ -493,7 +495,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex LegacyNugetPackage(); - [GeneratedRegex(@"^E (.*)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + [GeneratedRegex(@"^E\s(.*)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex EnabledNugetFeed(); } } From 6a5520c85d78bd07486003e7555b725715f64af3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 5 Apr 2024 15:12:15 +0200 Subject: [PATCH 468/497] Add integration test for unreachable nuget feeds --- .../DependencyManager.Nuget.cs | 21 ++++++---- .../EnvironmentVariableNames.cs | 12 +++++- .../Assemblies.expected | 1 + .../Assemblies.ql | 11 +++++ .../CompilationInfo.expected | 13 ++++++ .../CompilationInfo.ql | 15 +++++++ .../diagnostics.expected | 42 +++++++++++++++++++ .../proj/Program.cs | 6 +++ .../proj/nuget.config | 8 ++++ .../proj/proj.csproj | 16 +++++++ .../standalone.sln | 19 +++++++++ .../test.py | 10 +++++ 12 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs index 8f8e932279c..c624c8113f6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -389,13 +389,17 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { logger.LogInfo($"Checking if Nuget feed '{feed}' is reachable..."); using HttpClient client = new(); - var timeoutSeconds = 1; - var tryCount = 4; + int timeoutMilliSeconds = int.TryParse(Environment.GetEnvironmentVariable(EnvironmentVariableNames.NugetFeedResponsivenessInitialTimeout), out timeoutMilliSeconds) + ? timeoutMilliSeconds + : 1000; + int tryCount = int.TryParse(Environment.GetEnvironmentVariable(EnvironmentVariableNames.NugetFeedResponsivenessRequestCount), out tryCount) + ? tryCount + : 4; for (var i = 0; i < tryCount; i++) { using var cts = new CancellationTokenSource(); - cts.CancelAfter(timeoutSeconds * 1000); + cts.CancelAfter(timeoutMilliSeconds); try { ExecuteGetRequest(feed, client, cts.Token).GetAwaiter().GetResult(); @@ -407,8 +411,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching tce.CancellationToken == cts.Token && cts.Token.IsCancellationRequested) { - logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}' in {timeoutSeconds} seconds."); - timeoutSeconds *= 2; + logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}' in {timeoutMilliSeconds}ms."); + timeoutMilliSeconds *= 2; continue; } @@ -418,7 +422,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } - logger.LogError($"Didn't receive answer from Nuget feed '{feed}'. Tried it {tryCount} times."); + logger.LogWarning($"Didn't receive answer from Nuget feed '{feed}'. Tried it {tryCount} times."); return false; } @@ -428,17 +432,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var feeds = GetAllFeeds(allFiles); var excludedFeeds = Environment.GetEnvironmentVariable(EnvironmentVariableNames.ExcludedNugetFeedsFromResponsivenessCheck) - ?.Split(Path.PathSeparator, StringSplitOptions.RemoveEmptyEntries) + ?.Split(" ", StringSplitOptions.RemoveEmptyEntries) .ToHashSet() ?? []; if (excludedFeeds.Count > 0) { - logger.LogInfo($"Excluded feeds from responsiveness check: {string.Join(", ", excludedFeeds.OrderBy(f => f))}"); + logger.LogInfo($"Excluded Nuget feeds from responsiveness check: {string.Join(", ", excludedFeeds.OrderBy(f => f))}"); } var allFeedsReachable = feeds.All(feed => excludedFeeds.Contains(feed) || IsFeedReachable(feed)); if (!allFeedsReachable) { + logger.LogWarning("Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis."); diagnosticsWriter.AddEntry(new DiagnosticMessage( Language.CSharp, "buildless/unreachable-feed", diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs index 2d36319042a..ddec97d3dde 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -25,7 +25,17 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// /// Specifies the NuGet feeds to exclude from the responsiveness check. /// - public const string ExcludedNugetFeedsFromResponsivenessCheck = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_EXCLUDED_FROM_CHECK"; + public const string ExcludedNugetFeedsFromResponsivenessCheck = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_EXCLUDED"; + + /// + /// Specifies the timeout for the initial check of NuGet feeds responsiveness. + /// + public const string NugetFeedResponsivenessInitialTimeout = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"; + + /// + /// Specifies how many requests to make to the NuGet feed to check its responsiveness. + /// + public const string NugetFeedResponsivenessRequestCount = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_LIMIT"; /// /// Specifies the location of the diagnostic directory. diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected new file mode 100644 index 00000000000..2a530060edb --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected @@ -0,0 +1 @@ +| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql new file mode 100644 index 00000000000..79cf92de791 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/Assemblies.ql @@ -0,0 +1,11 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = "[...]/" + s.substring(s.indexOf("newtonsoft.json"), s.length()) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected new file mode 100644 index 00000000000..394fb93a259 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected @@ -0,0 +1,13 @@ +| All Nuget feeds reachable | 0.0 | +| Fallback nuget restore | 1.0 | +| Project files on filesystem | 1.0 | +| Resolved assembly conflicts | 7.0 | +| Restored .NET framework variants | 0.0 | +| Solution files on filesystem | 1.0 | +| Source files generated | 0.0 | +| Source files on filesystem | 1.0 | +| Successfully ran fallback nuget restore | 1.0 | +| Unresolved references | 0.0 | +| UseWPF set | 0.0 | +| UseWindowsForms set | 0.0 | +| WebView extraction enabled | 1.0 | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql new file mode 100644 index 00000000000..073ffe3b224 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.ql @@ -0,0 +1,15 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate compilationInfo(string key, float value) { + key != "Resolved references" and + not key.matches("Compiler diagnostic count for%") and + exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | + key = infoKey and + value = infoValue.toFloat() + or + not exists(infoValue.toFloat()) and + key = infoKey + ": " + infoValue and + value = 1 + ) +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected new file mode 100644 index 00000000000..5f298cd3a11 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected @@ -0,0 +1,42 @@ +{ + "markdownMessage": "C# analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/complete", + "name": "C# analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/mode-active", + "name": "C# with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.", + "severity": "warning", + "source": { + "extractorName": "csharp", + "id": "csharp/autobuilder/buildless/unreachable-feed", + "name": "Found unreachable Nuget feed in C# analysis with build-mode 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config new file mode 100644 index 00000000000..11d134c7289 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/nuget.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj new file mode 100644 index 00000000000..cef71796352 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + + + + + + + + + + + diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln new file mode 100644 index 00000000000..493ab54b59a --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/standalone.sln @@ -0,0 +1,19 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "proj", "proj\proj.csproj", "{6ED00460-7666-4AE9-A405-4B6C8B02279A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4ED55A1C-066C-43DF-B32E-7EAA035985EE} + EndGlobalSection +EndGlobal diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py new file mode 100644 index 00000000000..b48382a66ce --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/test.py @@ -0,0 +1,10 @@ +from create_database_utils import * +from diagnostics_test_utils import * +import os + +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"] = "true" # Enable NuGet feed check +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"] = "1" # 1ms, the GET request should fail with such short timeout +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_LIMIT"] = "1" # Limit the count of checks to 1 +os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_EXCLUDED"] = "https://abc.de:8000/packages/" # Exclude this feed from check +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) +check_diagnostics() \ No newline at end of file From 95896bc95fe23dfdbad68320f9524c832de118a9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 5 Apr 2024 15:57:07 +0200 Subject: [PATCH 469/497] Make sure diagnostic directory exists --- .../DependencyManager.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 2fc77d004f2..8d63d7f42b2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -53,8 +53,24 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var startTime = DateTime.Now; this.logger = logger; + + var diagDirEnv = Environment.GetEnvironmentVariable(EnvironmentVariableNames.DiagnosticDir); + if (!string.IsNullOrWhiteSpace(diagDirEnv) && + !Directory.Exists(diagDirEnv)) + { + try + { + Directory.CreateDirectory(diagDirEnv); + } + catch (Exception e) + { + logger.LogError($"Failed to create diagnostic directory {diagDirEnv}: {e.Message}"); + diagDirEnv = null; + } + } + this.diagnosticsWriter = new DiagnosticsStream(Path.Combine( - Environment.GetEnvironmentVariable(EnvironmentVariableNames.DiagnosticDir) ?? "", + diagDirEnv ?? "", $"dependency-manager-{DateTime.UtcNow:yyyyMMddHHmm}-{Environment.ProcessId}.jsonc")); this.sourceDir = new DirectoryInfo(srcDir); From d7f8b9615857ba68243327e12c9af04a68660efe Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 8 Apr 2024 13:14:51 +0200 Subject: [PATCH 470/497] Improve logging --- .../DependencyManager.Nuget.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs index c624c8113f6..1f3f44425d5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.Nuget.cs @@ -490,7 +490,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching .SelectMany(GetFeeds) .Where(str => !string.IsNullOrWhiteSpace(str)) .ToHashSet(); - logger.LogInfo($"Found Nuget feeds in nuget.config files: {string.Join(", ", feeds.OrderBy(f => f))}"); + + if (feeds.Count > 0) + { + logger.LogInfo($"Found {feeds.Count} Nuget feeds in nuget.config files: {string.Join(", ", feeds.OrderBy(f => f))}"); + } + else + { + logger.LogDebug("No Nuget feeds found in nuget.config files."); + } return feeds; } From 2fb9c2db6fc53c8adf1ce46b3d084bc4a6565b0c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 12 Mar 2024 15:47:15 +0100 Subject: [PATCH 471/497] C#: Remove deprecated qualifiedName predicates. --- csharp/ql/lib/semmle/code/csharp/Element.qll | 29 -------------- csharp/ql/lib/semmle/code/csharp/Member.qll | 38 ------------------- .../ql/lib/semmle/code/csharp/Namespace.qll | 10 ----- 3 files changed, 77 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index 2c69912c993..ccfd1a27925 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -101,25 +101,6 @@ class NamedElement extends Element, @named_element { /** Holds if this element has name 'name'. */ final predicate hasName(string name) { name = this.getName() } - /** - * Gets the fully qualified name of this element, for example the - * fully qualified name of `M` on line 3 is `N.C.M` in - * - * ```csharp - * namespace N { - * class C { - * void M(int i, string s) { } - * } - * } - * ``` - */ - cached - deprecated final string getQualifiedName() { - exists(string qualifier, string name | this.hasQualifiedName(qualifier, name) | - if qualifier = "" then result = name else result = qualifier + "." + name - ) - } - /** * Gets the fully qualified name of this element, for example the * fully qualified name of `M` on line 3 is `N.C.M` in @@ -142,16 +123,6 @@ class NamedElement extends Element, @named_element { ) } - /** - * DEPRECATED: Use `hasFullyQualifiedName` instead. - * - * Holds if this element has the qualified name `qualifier`.`name`. - */ - cached - deprecated predicate hasQualifiedName(string qualifier, string name) { - qualifier = "" and name = this.getName() - } - /** Holds if this element has the fully qualified name `qualifier`.`name`. */ cached predicate hasFullyQualifiedName(string qualifier, string name) { diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 1be091170e3..a2758f03942 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -71,37 +71,10 @@ class Declaration extends NamedElement, @declaration { override string toString() { result = this.getName() } - deprecated override predicate hasQualifiedName(string qualifier, string name) { - QualifiedName::hasQualifiedName(this, qualifier, name) - } - override predicate hasFullyQualifiedName(string qualifier, string name) { QualifiedName::hasQualifiedName(this, qualifier, name) } - /** - * DEPRECATED: Use `getFullyQualifiedNameWithTypes` instead. - * - * Gets the fully qualified name of this declaration, including types, for example - * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in - * - * ```csharp - * namespace N { - * class C { - * void M(int i, string s) { } - * } - * } - * ``` - */ - deprecated string getQualifiedNameWithTypes() { - exists(string qual | - qual = this.getDeclaringType().getQualifiedName() and - if this instanceof NestedType - then result = qual + "+" + this.toStringWithTypes() - else result = qual + "." + this.toStringWithTypes() - ) - } - /** * Gets the fully qualified name of this declaration, including types, for example * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in @@ -263,17 +236,6 @@ class Member extends Modifiable, @member { /** Gets an access to this member. */ MemberAccess getAnAccess() { result.getTarget() = this } - /** - * DEPRECATED: Use `hasFullyQualifiedName` instead. - * - * Holds if this member has name `name` and is defined in type `type` - * with namespace `namespace`. - */ - cached - deprecated final predicate hasQualifiedName(string namespace, string type, string name) { - QualifiedName::hasQualifiedName(this, namespace, type, name) - } - /** * Holds if this member has name `name` and is defined in type `type` * with namespace `namespace`. diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll index 002ce444b3f..383fe8ab2a8 100644 --- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll +++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll @@ -38,16 +38,6 @@ class Namespace extends TypeContainer, Declaration, @namespace { parent_namespace(result, this) } - /** - * Holds if this namespace has the qualified name `qualifier`.`name`. - * - * For example if the qualified name is `System.Collections.Generic`, then - * `qualifier`=`System.Collections` and `name`=`Generic`. - */ - deprecated override predicate hasQualifiedName(string qualifier, string name) { - namespaceHasQualifiedName(this, qualifier, name) - } - /** * Holds if this namespace has the qualified name `qualifier`.`name`. * From 8fa91914349bf21e52fabfde00c68f13b28c8a63 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 13 Mar 2024 10:12:22 +0100 Subject: [PATCH 472/497] C#: Deprecate the getFullyQualifiedName predicate. --- .../diag_recursive_generics/Types.ql | 7 ++++--- csharp/ql/lib/semmle/code/csharp/Element.qll | 4 +++- csharp/ql/lib/semmle/code/csharp/Member.qll | 9 +++++---- csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll | 8 +++++++- .../csharp/dataflow/internal/FlowSummaryImpl.qll | 15 ++++++++++++--- .../security/dataflow/ExternalAPIsQuery.qll | 6 +++--- .../library-tests/constructors/Destructors1.ql | 2 +- 7 files changed, 35 insertions(+), 16 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql index d59c60ec802..fff011dcbd5 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql @@ -1,5 +1,6 @@ import csharp +import semmle.code.csharp.commons.QualifiedName -from Class c -where c.fromSource() -select c, c.getBaseClass().getFullyQualifiedName() +from Class c, string qualifier, string name +where c.fromSource() and c.getBaseClass().hasFullyQualifiedName(qualifier, name) +select c, getQualifiedName(qualifier, name) diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index ccfd1a27925..38176acfd92 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -102,6 +102,8 @@ class NamedElement extends Element, @named_element { final predicate hasName(string name) { name = this.getName() } /** + * DEPRECATED: Use `hasFullyQualifiedName` instead. + * * Gets the fully qualified name of this element, for example the * fully qualified name of `M` on line 3 is `N.C.M` in * @@ -117,7 +119,7 @@ class NamedElement extends Element, @named_element { * ``System.Collections.Generic.IList`1``. */ cached - final string getFullyQualifiedName() { + deprecated final string getFullyQualifiedName() { exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | if qualifier = "" then result = name else result = qualifier + "." + name ) diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index a2758f03942..99bf8eaa4f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -88,11 +88,12 @@ class Declaration extends NamedElement, @declaration { * ``` */ string getFullyQualifiedNameWithTypes() { - exists(string qual | - qual = this.getDeclaringType().getFullyQualifiedName() and + exists(string fullqual, string qual, string name | + this.getDeclaringType().hasFullyQualifiedName(qual, name) and + fullqual = getQualifiedName(qual, name) and if this instanceof NestedType - then result = qual + "+" + this.toStringWithTypes() - else result = qual + "." + this.toStringWithTypes() + then result = fullqual + "+" + this.toStringWithTypes() + else result = fullqual + "." + this.toStringWithTypes() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index 673bd1a5638..9cd33ea260f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -3,6 +3,7 @@ */ import csharp +private import semmle.code.csharp.commons.QualifiedName /** * Provides classes for working with static single assignment (SSA) form. @@ -120,7 +121,12 @@ module Ssa { result = prefix + "." + this.getAssignable() | if f.(Modifiable).isStatic() - then prefix = f.getDeclaringType().getFullyQualifiedName() + then + exists(string qualifier, string name | + f.getDeclaringType().hasFullyQualifiedName(qualifier, name) + | + prefix = getQualifiedName(qualifier, name) + ) else prefix = "this" ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 96f45e77655..82c2a7dcd3d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -3,6 +3,7 @@ */ private import csharp +private import semmle.code.csharp.commons.QualifiedName private import semmle.code.csharp.frameworks.system.linq.Expressions private import codeql.dataflow.internal.FlowSummaryImpl private import codeql.dataflow.internal.AccessPathSyntax as AccessPath @@ -42,10 +43,18 @@ module Input implements InputSig string encodeContent(ContentSet c, string arg) { c = TElementContent() and result = "Element" and arg = "" or - exists(Field f | c = TFieldContent(f) and result = "Field" and arg = f.getFullyQualifiedName()) + exists(Field f, string qualifier, string name | + c = TFieldContent(f) and + f.hasFullyQualifiedName(qualifier, name) and + arg = getQualifiedName(qualifier, name) and + result = "Field" + ) or - exists(Property p | - c = TPropertyContent(p) and result = "Property" and arg = p.getFullyQualifiedName() + exists(Property p, string qualifier, string name | + c = TPropertyContent(p) and + p.hasFullyQualifiedName(qualifier, name) and + arg = getQualifiedName(qualifier, name) and + result = "Property" ) or exists(SyntheticField f | diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll index 3075fe53a87..a0d0ada957a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -139,13 +139,13 @@ class ExternalApiUsedWithUntrustedData extends TExternalApi { /** Gets a textual representation of this element. */ string toString() { - exists(Callable m, int index, string indexString | + exists(Callable m, int index, string indexString, string qualifier, string name | if index = -1 then indexString = "qualifier" else indexString = "param " + index | this = TExternalApiParameter(m, index) and + m.getDeclaringType().hasFullyQualifiedName(qualifier, name) and result = - m.getDeclaringType().getFullyQualifiedName() + "." + m.toStringWithTypes() + " [" + - indexString + "]" + getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() + " [" + indexString + "]" ) } } diff --git a/csharp/ql/test/library-tests/constructors/Destructors1.ql b/csharp/ql/test/library-tests/constructors/Destructors1.ql index 368980a290c..673a0e941f0 100644 --- a/csharp/ql/test/library-tests/constructors/Destructors1.ql +++ b/csharp/ql/test/library-tests/constructors/Destructors1.ql @@ -10,4 +10,4 @@ where c.getDeclaringType().hasFullyQualifiedName(qualifier, name) and qualifier = "Constructors" and name = "Class" -select c, c.getDeclaringType().getFullyQualifiedName() +select c, getQualifiedName(qualifier, name) From b677e89f35fd0f0ae322f0191e342520ab0bc795 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 13 Mar 2024 10:23:24 +0100 Subject: [PATCH 473/497] C#: Deprecate getFullyQualifiedNameWithTypes. --- csharp/ql/lib/semmle/code/csharp/Member.qll | 2 +- .../code/csharp/commons/QualifiedName.qll | 25 +++++++++++++++++++ .../dispatch/GetADynamicTarget.ql | 3 ++- .../frameworks/system/Dispose/Dispose.ql | 3 ++- .../frameworks/system/Equals/Equals.ql | 3 ++- .../test/library-tests/generics/Generics.ql | 12 ++++----- .../library-tests/overrides/Overrides22.ql | 3 ++- .../library-tests/unification/Unification.ql | 5 ++-- 8 files changed, 43 insertions(+), 13 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 99bf8eaa4f0..3427d4ea089 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -87,7 +87,7 @@ class Declaration extends NamedElement, @declaration { * } * ``` */ - string getFullyQualifiedNameWithTypes() { + deprecated string getFullyQualifiedNameWithTypes() { exists(string fullqual, string qual, string name | this.getDeclaringType().hasFullyQualifiedName(qual, name) and fullqual = getQualifiedName(qual, name) and diff --git a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll index eba0fb10c7c..417dc137027 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll @@ -219,3 +219,28 @@ predicate splitQualifiedName(string qualifiedName, string qualifier, string name name = qualifiedName ) } + +/** + * INTERNAL: Do not use. + * + * Gets the fully qualified name of this declaration, including types, for example + * the fully qualified name with types of `M` on line 3 is `N.C.M(int, string)` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + */ +bindingset[d] +string getFullyQualifiedNameWithTypes(Declaration d) { + exists(string fullqual, string qual, string name | + d.getDeclaringType().hasFullyQualifiedName(qual, name) and + fullqual = getQualifiedName(qual, name) and + if d instanceof NestedType + then result = fullqual + "+" + d.toStringWithTypes() + else result = fullqual + "." + d.toStringWithTypes() + ) +} diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql index cbde2d43ab8..b4c94a0b507 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.ql @@ -1,8 +1,9 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.dispatch.Dispatch from DispatchCall call, Callable callable where callable = call.getADynamicTarget() and callable.fromSource() -select call, callable.getFullyQualifiedNameWithTypes() +select call, getFullyQualifiedNameWithTypes(callable) diff --git a/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql b/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql index 943245fa0a2..5fa2f337fcf 100644 --- a/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql +++ b/csharp/ql/test/library-tests/frameworks/system/Dispose/Dispose.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.frameworks.System from ValueOrRefType t, Method m, boolean b @@ -6,4 +7,4 @@ where t.fromSource() and m = getInvokedDisposeMethod(t) and if implementsDispose(t) then b = true else b = false -select t, m.getFullyQualifiedNameWithTypes(), b +select t, getFullyQualifiedNameWithTypes(m), b diff --git a/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql b/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql index 91c04791ef3..e6dc4ae7549 100644 --- a/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql +++ b/csharp/ql/test/library-tests/frameworks/system/Equals/Equals.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.frameworks.System from ValueOrRefType t, Method m, boolean b @@ -6,4 +7,4 @@ where t.fromSource() and m = getInvokedEqualsMethod(t) and if implementsEquals(t) then b = true else b = false -select t, m.getFullyQualifiedNameWithTypes(), b +select t, getFullyQualifiedNameWithTypes(m), b diff --git a/csharp/ql/test/library-tests/generics/Generics.ql b/csharp/ql/test/library-tests/generics/Generics.ql index 2f3aff0fd58..71e21a5815e 100644 --- a/csharp/ql/test/library-tests/generics/Generics.ql +++ b/csharp/ql/test/library-tests/generics/Generics.ql @@ -231,18 +231,18 @@ query predicate test27(ConstructedType ct, UnboundGenericType ugt, UnboundGeneri query predicate test28(UnboundGeneric ug, string s) { ug.fromSource() and - s = ug.getFullyQualifiedNameWithTypes() + s = getFullyQualifiedNameWithTypes(ug) } query predicate test29(ConstructedGeneric cg, string s) { cg.fromSource() and - s = cg.getFullyQualifiedNameWithTypes() + s = getFullyQualifiedNameWithTypes(cg) } query predicate test30(Declaration d, string s) { d.fromSource() and d instanceof @generic and - s = d.getFullyQualifiedNameWithTypes() and + s = getFullyQualifiedNameWithTypes(d) and d != d.getUnboundDeclaration() and not d instanceof Generic } @@ -263,7 +263,7 @@ query predicate test33(ConstructedMethod cm, string s1, string s2) { exists(string namespace, string type, string name | cm.hasFullyQualifiedName(namespace, type, name) and s1 = getQualifiedName(namespace, type, name) ) and - cm.getFullyQualifiedNameWithTypes() = s2 + getFullyQualifiedNameWithTypes(cm) = s2 } query predicate test34(UnboundGeneric ug, string s1, string s2) { @@ -271,7 +271,7 @@ query predicate test34(UnboundGeneric ug, string s1, string s2) { exists(string qualifier, string name | ug.hasFullyQualifiedName(qualifier, name) and s1 = getQualifiedName(qualifier, name) ) and - ug.getFullyQualifiedNameWithTypes() = s2 + getFullyQualifiedNameWithTypes(ug) = s2 } query predicate test35(UnboundGenericMethod gm, string s1, string s2) { @@ -279,5 +279,5 @@ query predicate test35(UnboundGenericMethod gm, string s1, string s2) { exists(string namespace, string type, string name | gm.hasFullyQualifiedName(namespace, type, name) and s1 = getQualifiedName(namespace, type, name) ) and - gm.getFullyQualifiedNameWithTypes() = s2 + getFullyQualifiedNameWithTypes(gm) = s2 } diff --git a/csharp/ql/test/library-tests/overrides/Overrides22.ql b/csharp/ql/test/library-tests/overrides/Overrides22.ql index d2c5a9e4336..d6300d49ecd 100644 --- a/csharp/ql/test/library-tests/overrides/Overrides22.ql +++ b/csharp/ql/test/library-tests/overrides/Overrides22.ql @@ -1,4 +1,5 @@ import csharp +import semmle.code.csharp.commons.QualifiedName from Overridable v1, Overridable v2, string kind where @@ -9,4 +10,4 @@ where ) and v1.fromSource() and v2.fromSource() -select v1.getFullyQualifiedNameWithTypes(), v2.getFullyQualifiedNameWithTypes(), kind +select getFullyQualifiedNameWithTypes(v1), getFullyQualifiedNameWithTypes(v2), kind diff --git a/csharp/ql/test/library-tests/unification/Unification.ql b/csharp/ql/test/library-tests/unification/Unification.ql index 10c5e520921..f8c6c15377d 100644 --- a/csharp/ql/test/library-tests/unification/Unification.ql +++ b/csharp/ql/test/library-tests/unification/Unification.ql @@ -1,3 +1,4 @@ +import semmle.code.csharp.commons.QualifiedName import semmle.code.csharp.Unification class InterestingType extends @type { @@ -7,9 +8,9 @@ class InterestingType extends @type { } string toString() { - result = this.(Type).getFullyQualifiedNameWithTypes() + result = getFullyQualifiedNameWithTypes(this.(Type)) or - not exists(this.(Type).getFullyQualifiedNameWithTypes()) and + not exists(getFullyQualifiedNameWithTypes(this.(Type))) and result = this.(Type).toStringWithTypes() } From 8fbfafc1d7a18356d4577280b813a5bcfec768d0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 13 Mar 2024 16:27:01 +0100 Subject: [PATCH 474/497] C#: Dont cache the deprecated getFullyQualifiedName predicate. --- csharp/ql/lib/semmle/code/csharp/Element.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index 38176acfd92..c44a092bb4f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -118,7 +118,6 @@ class NamedElement extends Element, @named_element { * Unbound generic types, such as `IList`, are represented as * ``System.Collections.Generic.IList`1``. */ - cached deprecated final string getFullyQualifiedName() { exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | if qualifier = "" then result = name else result = qualifier + "." + name From fc689efd1b1459e3da7771e46d364874d2544e97 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 8 Apr 2024 13:47:59 +0200 Subject: [PATCH 475/497] C#: Add debug version of the getFullyQualifiedName predicate. --- csharp/ql/lib/semmle/code/csharp/Element.qll | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index c44a092bb4f..f8cb018be68 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -124,6 +124,33 @@ class NamedElement extends Element, @named_element { ) } + /** + * INTERNAL: Do not use. + * + * This is intended for DEBUG ONLY. + * Constructing the fully qualified name for all elements in a large codebase + * puts severe stress on the string pool. + * + * Gets the fully qualified name of this element, for example the + * fully qualified name of `M` on line 3 is `N.C.M` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + * + * Unbound generic types, such as `IList`, are represented as + * ``System.Collections.Generic.IList`1``. + */ + final string getFullyQualifiedNameDebug() { + exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | + if qualifier = "" then result = name else result = qualifier + "." + name + ) + } + /** Holds if this element has the fully qualified name `qualifier`.`name`. */ cached predicate hasFullyQualifiedName(string qualifier, string name) { From b581a9ba04c76a1a6fbf535e31b10502dbf3b6c7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 8 Apr 2024 13:49:05 +0100 Subject: [PATCH 476/497] C++: Add example with missing destructor calls on parameters passed by value. --- .../library-tests/ir/ir/PrintAST.expected | 24 ++++++++ .../library-tests/ir/ir/aliased_ir.expected | 61 +++++++++++++++++++ cpp/ql/test/library-tests/ir/ir/ir.cpp | 16 +++++ .../ir/ir/operand_locations.expected | 31 ++++++++++ .../test/library-tests/ir/ir/raw_ir.expected | 57 +++++++++++++++++ 5 files changed, 189 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 5f2aebd390f..7761598e90f 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -20163,6 +20163,30 @@ ir.cpp: # 2430| Type = [ClassTemplateInstantiation,Struct] iterator # 2430| ValueCategory = lvalue # 2432| getStmt(6): [ReturnStmt] return ... +# 2434| [TopLevelFunction] void param_with_destructor_by_value(ClassWithDestructor) +# 2434| : +# 2434| getParameter(0): [Parameter] c +# 2434| Type = [Class] ClassWithDestructor +# 2434| getEntryPoint(): [BlockStmt] { ... } +# 2436| getStmt(0): [ReturnStmt] return ... +# 2438| [TopLevelFunction] void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| : +# 2438| getParameter(0): [Parameter] c +# 2438| Type = [PointerType] ClassWithDestructor * +# 2438| getEntryPoint(): [BlockStmt] { ... } +# 2440| getStmt(0): [ReturnStmt] return ... +# 2442| [TopLevelFunction] void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| : +# 2442| getParameter(0): [Parameter] c +# 2442| Type = [LValueReferenceType] ClassWithDestructor & +# 2442| getEntryPoint(): [BlockStmt] { ... } +# 2444| getStmt(0): [ReturnStmt] return ... +# 2446| [TopLevelFunction] void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| : +# 2446| getParameter(0): [Parameter] c +# 2446| Type = [RValueReferenceType] ClassWithDestructor && +# 2446| getEntryPoint(): [BlockStmt] { ... } +# 2448| getStmt(0): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : 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 cbf32f3aab3..39eccf0139f 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -15583,6 +15583,67 @@ ir.cpp: # 2410| Block 13 # 2410| v2410_8(void) = Unreached : +# 2434| void param_with_destructor_by_value(ClassWithDestructor) +# 2434| Block 0 +# 2434| v2434_1(void) = EnterFunction : +# 2434| m2434_2(unknown) = AliasedDefinition : +# 2434| m2434_3(unknown) = InitializeNonLocal : +# 2434| m2434_4(unknown) = Chi : total:m2434_2, partial:m2434_3 +# 2434| r2434_5(glval) = VariableAddress[c] : +# 2434| m2434_6(ClassWithDestructor) = InitializeParameter[c] : &:r2434_5 +# 2436| v2436_1(void) = NoOp : +# 2434| v2434_7(void) = ReturnVoid : +# 2434| v2434_8(void) = AliasedUse : m2434_3 +# 2434| v2434_9(void) = ExitFunction : + +# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| Block 0 +# 2438| v2438_1(void) = EnterFunction : +# 2438| m2438_2(unknown) = AliasedDefinition : +# 2438| m2438_3(unknown) = InitializeNonLocal : +# 2438| m2438_4(unknown) = Chi : total:m2438_2, partial:m2438_3 +# 2438| r2438_5(glval) = VariableAddress[c] : +# 2438| m2438_6(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_5 +# 2438| r2438_7(ClassWithDestructor *) = Load[c] : &:r2438_5, m2438_6 +# 2438| m2438_8(unknown) = InitializeIndirection[c] : &:r2438_7 +# 2440| v2440_1(void) = NoOp : +# 2438| v2438_9(void) = ReturnIndirection[c] : &:r2438_7, m2438_8 +# 2438| v2438_10(void) = ReturnVoid : +# 2438| v2438_11(void) = AliasedUse : m2438_3 +# 2438| v2438_12(void) = ExitFunction : + +# 2442| void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| Block 0 +# 2442| v2442_1(void) = EnterFunction : +# 2442| m2442_2(unknown) = AliasedDefinition : +# 2442| m2442_3(unknown) = InitializeNonLocal : +# 2442| m2442_4(unknown) = Chi : total:m2442_2, partial:m2442_3 +# 2442| r2442_5(glval) = VariableAddress[c] : +# 2442| m2442_6(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_5 +# 2442| r2442_7(ClassWithDestructor &) = Load[c] : &:r2442_5, m2442_6 +# 2442| m2442_8(unknown) = InitializeIndirection[c] : &:r2442_7 +# 2444| v2444_1(void) = NoOp : +# 2442| v2442_9(void) = ReturnIndirection[c] : &:r2442_7, m2442_8 +# 2442| v2442_10(void) = ReturnVoid : +# 2442| v2442_11(void) = AliasedUse : m2442_3 +# 2442| v2442_12(void) = ExitFunction : + +# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| Block 0 +# 2446| v2446_1(void) = EnterFunction : +# 2446| m2446_2(unknown) = AliasedDefinition : +# 2446| m2446_3(unknown) = InitializeNonLocal : +# 2446| m2446_4(unknown) = Chi : total:m2446_2, partial:m2446_3 +# 2446| r2446_5(glval) = VariableAddress[c] : +# 2446| m2446_6(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_5 +# 2446| r2446_7(ClassWithDestructor &&) = Load[c] : &:r2446_5, m2446_6 +# 2446| m2446_8(unknown) = InitializeIndirection[c] : &:r2446_7 +# 2448| v2448_1(void) = NoOp : +# 2446| v2446_9(void) = ReturnIndirection[c] : &:r2446_7, m2446_8 +# 2446| v2446_10(void) = ReturnVoid : +# 2446| v2446_11(void) = AliasedUse : m2446_3 +# 2446| v2446_12(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 2d476b11fd4..7c8d0b1296b 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2431,4 +2431,20 @@ void initialization_with_temp_destructor() { y += x; } +void param_with_destructor_by_value(ClassWithDestructor c) { + // The call to ~ClassWithDestructor::ClassWithDestructor() seems to be missing here. +} + +void param_with_destructor_by_pointer(ClassWithDestructor* c) { + // No destructor call should be here +} + +void param_with_destructor_by_ref(ClassWithDestructor& c) { + // No destructor call should be here +} + +void param_with_destructor_by_rref(ClassWithDestructor&& c) { + // No destructor call should be here +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index a112a769876..2799fc28e94 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -12968,6 +12968,37 @@ | ir.cpp:2431:14:2431:14 | Load | m2430_17 | | ir.cpp:2431:14:2431:14 | Right | r2431_3 | | ir.cpp:2431:14:2431:14 | Unary | r2431_2 | +| ir.cpp:2434:6:2434:35 | ChiPartial | partial:m2434_3 | +| ir.cpp:2434:6:2434:35 | ChiTotal | total:m2434_2 | +| ir.cpp:2434:6:2434:35 | SideEffect | m2434_3 | +| ir.cpp:2434:57:2434:57 | Address | &:r2434_5 | +| ir.cpp:2438:6:2438:37 | ChiPartial | partial:m2438_3 | +| ir.cpp:2438:6:2438:37 | ChiTotal | total:m2438_2 | +| ir.cpp:2438:6:2438:37 | SideEffect | m2438_3 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_5 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 | +| ir.cpp:2438:60:2438:60 | Address | &:r2438_7 | +| ir.cpp:2438:60:2438:60 | Load | m2438_6 | +| ir.cpp:2438:60:2438:60 | SideEffect | m2438_8 | +| ir.cpp:2442:6:2442:33 | ChiPartial | partial:m2442_3 | +| ir.cpp:2442:6:2442:33 | ChiTotal | total:m2442_2 | +| ir.cpp:2442:6:2442:33 | SideEffect | m2442_3 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_5 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 | +| ir.cpp:2442:56:2442:56 | Address | &:r2442_7 | +| ir.cpp:2442:56:2442:56 | Load | m2442_6 | +| ir.cpp:2442:56:2442:56 | SideEffect | m2442_8 | +| ir.cpp:2446:6:2446:34 | ChiPartial | partial:m2446_3 | +| ir.cpp:2446:6:2446:34 | ChiTotal | total:m2446_2 | +| ir.cpp:2446:6:2446:34 | SideEffect | m2446_3 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_5 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 | +| ir.cpp:2446:58:2446:58 | Address | &:r2446_7 | +| ir.cpp:2446:58:2446:58 | Load | m2446_6 | +| ir.cpp:2446:58:2446:58 | SideEffect | m2446_8 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | 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 cf8448c9f5d..5cd8ff2cd4a 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -14362,6 +14362,63 @@ ir.cpp: # 2410| v2410_5(void) = AliasedUse : ~m? # 2410| v2410_6(void) = ExitFunction : +# 2434| void param_with_destructor_by_value(ClassWithDestructor) +# 2434| Block 0 +# 2434| v2434_1(void) = EnterFunction : +# 2434| mu2434_2(unknown) = AliasedDefinition : +# 2434| mu2434_3(unknown) = InitializeNonLocal : +# 2434| r2434_4(glval) = VariableAddress[c] : +# 2434| mu2434_5(ClassWithDestructor) = InitializeParameter[c] : &:r2434_4 +# 2436| v2436_1(void) = NoOp : +# 2434| v2434_6(void) = ReturnVoid : +# 2434| v2434_7(void) = AliasedUse : ~m? +# 2434| v2434_8(void) = ExitFunction : + +# 2438| void param_with_destructor_by_pointer(ClassWithDestructor*) +# 2438| Block 0 +# 2438| v2438_1(void) = EnterFunction : +# 2438| mu2438_2(unknown) = AliasedDefinition : +# 2438| mu2438_3(unknown) = InitializeNonLocal : +# 2438| r2438_4(glval) = VariableAddress[c] : +# 2438| mu2438_5(ClassWithDestructor *) = InitializeParameter[c] : &:r2438_4 +# 2438| r2438_6(ClassWithDestructor *) = Load[c] : &:r2438_4, ~m? +# 2438| mu2438_7(unknown) = InitializeIndirection[c] : &:r2438_6 +# 2440| v2440_1(void) = NoOp : +# 2438| v2438_8(void) = ReturnIndirection[c] : &:r2438_6, ~m? +# 2438| v2438_9(void) = ReturnVoid : +# 2438| v2438_10(void) = AliasedUse : ~m? +# 2438| v2438_11(void) = ExitFunction : + +# 2442| void param_with_destructor_by_ref(ClassWithDestructor&) +# 2442| Block 0 +# 2442| v2442_1(void) = EnterFunction : +# 2442| mu2442_2(unknown) = AliasedDefinition : +# 2442| mu2442_3(unknown) = InitializeNonLocal : +# 2442| r2442_4(glval) = VariableAddress[c] : +# 2442| mu2442_5(ClassWithDestructor &) = InitializeParameter[c] : &:r2442_4 +# 2442| r2442_6(ClassWithDestructor &) = Load[c] : &:r2442_4, ~m? +# 2442| mu2442_7(unknown) = InitializeIndirection[c] : &:r2442_6 +# 2444| v2444_1(void) = NoOp : +# 2442| v2442_8(void) = ReturnIndirection[c] : &:r2442_6, ~m? +# 2442| v2442_9(void) = ReturnVoid : +# 2442| v2442_10(void) = AliasedUse : ~m? +# 2442| v2442_11(void) = ExitFunction : + +# 2446| void param_with_destructor_by_rref(ClassWithDestructor&&) +# 2446| Block 0 +# 2446| v2446_1(void) = EnterFunction : +# 2446| mu2446_2(unknown) = AliasedDefinition : +# 2446| mu2446_3(unknown) = InitializeNonLocal : +# 2446| r2446_4(glval) = VariableAddress[c] : +# 2446| mu2446_5(ClassWithDestructor &&) = InitializeParameter[c] : &:r2446_4 +# 2446| r2446_6(ClassWithDestructor &&) = Load[c] : &:r2446_4, ~m? +# 2446| mu2446_7(unknown) = InitializeIndirection[c] : &:r2446_6 +# 2448| v2448_1(void) = NoOp : +# 2446| v2446_8(void) = ReturnIndirection[c] : &:r2446_6, ~m? +# 2446| v2446_9(void) = ReturnVoid : +# 2446| v2446_10(void) = AliasedUse : ~m? +# 2446| v2446_11(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 From 8cb6598f508a49848027fa1b8a5f583aef10f566 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Mon, 8 Apr 2024 20:51:19 +0200 Subject: [PATCH 477/497] fixing that I put a type on the wrong thing in the alert-message --- java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql | 4 ++-- .../CWE-190/semmle/tests/InformationLoss.expected | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql index e8893f3bcc7..7d97af12b71 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/InformationLoss.ql @@ -45,5 +45,5 @@ where v = a.getDest() ) select a, - "Implicit cast of $@ to narrower destination type " + a.getDest().getType().getName() + ".", v, - "source type " + e.getType().getName() + "Implicit cast of source type " + e.getType().getName() + " to narrower destination type $@.", v, + a.getDest().getType().getName() diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected index dbda11bff08..e317375c199 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/InformationLoss.expected @@ -1,4 +1,4 @@ -| Test.java:68:5:68:25 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:64:4:64:13 | int i | source type long | -| Test.java:87:4:87:9 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:81:4:81:13 | int i | source type long | -| Test.java:289:5:289:30 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:285:4:285:27 | int[] arr | source type long | -| Test.java:293:7:293:44 | ...+=... | Implicit cast of $@ to narrower destination type int. | Test.java:293:7:293:24 | ...[...] | source type long | +| Test.java:68:5:68:25 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:64:4:64:13 | int i | int | +| Test.java:87:4:87:9 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:81:4:81:13 | int i | int | +| Test.java:289:5:289:30 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:285:4:285:27 | int[] arr | int | +| Test.java:293:7:293:44 | ...+=... | Implicit cast of source type long to narrower destination type $@. | Test.java:293:7:293:24 | ...[...] | int | From e3d676f91bdac5130e5bcfc83c90b85c3715749f Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 9 Apr 2024 09:37:21 +0200 Subject: [PATCH 478/497] CI: apply tentative `setup-swift` fix --- swift/actions/run-integration-tests/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/actions/run-integration-tests/action.yml b/swift/actions/run-integration-tests/action.yml index 2c6df4e2b51..fe5a20b02bd 100644 --- a/swift/actions/run-integration-tests/action.yml +++ b/swift/actions/run-integration-tests/action.yml @@ -7,7 +7,7 @@ runs: - uses: actions/setup-python@v4 with: python-version-file: 'swift/.python-version' - - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf + - uses: redsun82/setup-swift@b2b6f77ab14f6a9b136b520dc53ec8eca27d2b99 with: swift-version: "5.8" - uses: ./.github/actions/fetch-codeql From 80995ec1d76b645097159a140e5d44148bb77b25 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 9 Apr 2024 09:51:45 +0200 Subject: [PATCH 479/497] Improve comments on environment variable names --- .../EnvironmentVariableNames.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs index ddec97d3dde..9141dc0bf74 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs @@ -23,12 +23,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public const string CheckNugetFeedResponsiveness = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"; /// - /// Specifies the NuGet feeds to exclude from the responsiveness check. + /// Specifies the NuGet feeds to exclude from the responsiveness check. The value is a space-separated list of feed URLs. /// public const string ExcludedNugetFeedsFromResponsivenessCheck = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_EXCLUDED"; /// - /// Specifies the timeout for the initial check of NuGet feeds responsiveness. + /// Specifies the timeout (as an integer) in milliseconds for the initial check of NuGet feeds responsiveness. The value is then doubled for each subsequent check. /// public const string NugetFeedResponsivenessInitialTimeout = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"; From 10d96ee02f6fa0e84693135ffb830acc35d2cb8e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 9 Apr 2024 10:31:48 +0200 Subject: [PATCH 480/497] C#: Address review comments. --- .../diag_recursive_generics/Types.ql | 7 +++---- csharp/ql/lib/semmle/code/csharp/Element.qll | 2 ++ .../ql/lib/semmle/code/csharp/dataflow/SSA.qll | 8 +------- .../attributes/AttributeElements.ql | 8 +++----- .../library-tests/constructors/Destructors1.ql | 3 +-- .../test/library-tests/csharp11/fileScoped.ql | 6 +----- .../ql/test/library-tests/csharp11/nativeInt.ql | 6 ++---- .../library-tests/csharp9/covariantReturn.ql | 13 ++++--------- csharp/ql/test/library-tests/csharp9/foreach.ql | 17 ++++++----------- csharp/ql/test/library-tests/csharp9/record.ql | 10 +--------- .../ql/test/library-tests/csharp9/withExpr.ql | 14 +++----------- csharp/ql/test/library-tests/enums/Enums3.ql | 8 +++----- .../ql/test/library-tests/generics/Generics.ql | 12 ++++-------- 13 files changed, 34 insertions(+), 80 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql index fff011dcbd5..de95e0fcbe7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/Types.ql @@ -1,6 +1,5 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from Class c, string qualifier, string name -where c.fromSource() and c.getBaseClass().hasFullyQualifiedName(qualifier, name) -select c, getQualifiedName(qualifier, name) +from Class c +where c.fromSource() +select c, c.getBaseClass().getFullyQualifiedNameDebug() diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index f8cb018be68..a48241a1408 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -145,6 +145,8 @@ class NamedElement extends Element, @named_element { * Unbound generic types, such as `IList`, are represented as * ``System.Collections.Generic.IList`1``. */ + bindingset[this] + pragma[inline_late] final string getFullyQualifiedNameDebug() { exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | if qualifier = "" then result = name else result = qualifier + "." + name diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index 9cd33ea260f..0d79eafdf5c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -3,7 +3,6 @@ */ import csharp -private import semmle.code.csharp.commons.QualifiedName /** * Provides classes for working with static single assignment (SSA) form. @@ -121,12 +120,7 @@ module Ssa { result = prefix + "." + this.getAssignable() | if f.(Modifiable).isStatic() - then - exists(string qualifier, string name | - f.getDeclaringType().hasFullyQualifiedName(qualifier, name) - | - prefix = getQualifiedName(qualifier, name) - ) + then prefix = f.getDeclaringType().getName() else prefix = "this" ) } diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.ql b/csharp/ql/test/library-tests/attributes/AttributeElements.ql index 17ce2ea3d93..679d7567ea5 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.ql +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.ql @@ -1,9 +1,7 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from Attributable element, Attribute attribute, string qualifier, string name +from Attributable element, Attribute attribute where attribute = element.getAnAttribute() and - (attribute.fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) and - attribute.getType().hasFullyQualifiedName(qualifier, name) -select element, attribute, getQualifiedName(qualifier, name) + (attribute.fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) +select element, attribute, attribute.getType().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/constructors/Destructors1.ql b/csharp/ql/test/library-tests/constructors/Destructors1.ql index 673a0e941f0..792d50da7bb 100644 --- a/csharp/ql/test/library-tests/constructors/Destructors1.ql +++ b/csharp/ql/test/library-tests/constructors/Destructors1.ql @@ -3,11 +3,10 @@ */ import csharp -import semmle.code.csharp.commons.QualifiedName from Destructor c, string qualifier, string name where c.getDeclaringType().hasFullyQualifiedName(qualifier, name) and qualifier = "Constructors" and name = "Class" -select c, getQualifiedName(qualifier, name) +select c, c.getDeclaringType().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/csharp11/fileScoped.ql b/csharp/ql/test/library-tests/csharp11/fileScoped.ql index 3003fc801bf..33697255896 100644 --- a/csharp/ql/test/library-tests/csharp11/fileScoped.ql +++ b/csharp/ql/test/library-tests/csharp11/fileScoped.ql @@ -1,5 +1,4 @@ import csharp -private import semmle.code.csharp.commons.QualifiedName private predicate isInteresting(Type t) { ( @@ -20,10 +19,7 @@ query predicate typemodifiers(Type t, string modifier) { query predicate qualifiedtypes(Type t, string qualifiedName) { isInteresting(t) and - exists(string qualifier, string name | - t.hasFullyQualifiedName(qualifier, name) and - qualifiedName = getQualifiedName(qualifier, name) - ) + qualifiedName = t.getFullyQualifiedNameDebug() } query predicate filetypes(Type t) { diff --git a/csharp/ql/test/library-tests/csharp11/nativeInt.ql b/csharp/ql/test/library-tests/csharp11/nativeInt.ql index 80d7974de56..adbc062baf6 100644 --- a/csharp/ql/test/library-tests/csharp11/nativeInt.ql +++ b/csharp/ql/test/library-tests/csharp11/nativeInt.ql @@ -1,12 +1,10 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from LocalVariable v1, LocalVariable v2, Type t, string qualifier, string name +from LocalVariable v1, LocalVariable v2, Type t where v1.getFile().getStem() = "NativeInt" and v2.getFile().getStem() = "NativeInt" and t = v1.getType() and t = v2.getType() and - t.hasFullyQualifiedName(qualifier, name) and v1 != v2 -select v1, v2, getQualifiedName(qualifier, name) +select v1, v2, t.getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/csharp9/covariantReturn.ql b/csharp/ql/test/library-tests/csharp9/covariantReturn.ql index 6227ed18d6d..b4bab047322 100644 --- a/csharp/ql/test/library-tests/csharp9/covariantReturn.ql +++ b/csharp/ql/test/library-tests/csharp9/covariantReturn.ql @@ -1,13 +1,8 @@ import csharp -import semmle.code.csharp.commons.QualifiedName -from - Method m, Method overrider, string mnamespace, string mtype, string mname, string onamespace, - string otype, string oname +from Method m, Method overrider where m.getAnOverrider() = overrider and - m.getFile().getStem() = "CovariantReturn" and - m.hasFullyQualifiedName(mnamespace, mtype, mname) and - overrider.hasFullyQualifiedName(onamespace, otype, oname) -select getQualifiedName(mnamespace, mtype, mname), m.getReturnType().toString(), - getQualifiedName(onamespace, otype, oname), overrider.getReturnType().toString() + m.getFile().getStem() = "CovariantReturn" +select m.getFullyQualifiedNameDebug(), m.getReturnType().toString(), + overrider.getFullyQualifiedNameDebug(), overrider.getReturnType().toString() diff --git a/csharp/ql/test/library-tests/csharp9/foreach.ql b/csharp/ql/test/library-tests/csharp9/foreach.ql index cf6fcf2514a..343ecc556ab 100644 --- a/csharp/ql/test/library-tests/csharp9/foreach.ql +++ b/csharp/ql/test/library-tests/csharp9/foreach.ql @@ -1,5 +1,4 @@ import csharp -import semmle.code.csharp.commons.QualifiedName private string getLocation(Member m) { if m.fromSource() then result = m.getALocation().(SourceLocation).toString() else result = "-" @@ -9,13 +8,9 @@ private string getIsAsync(ForeachStmt f) { if f.isAsync() then result = "async" else result = "sync" } -from - ForeachStmt f, string qualifier1, string type1, string qualifier2, string type2, - string qualifier3, string type3 -where - f.getGetEnumerator().getDeclaringType().hasFullyQualifiedName(qualifier1, type1) and - f.getCurrent().getDeclaringType().hasFullyQualifiedName(qualifier2, type2) and - f.getMoveNext().getDeclaringType().hasFullyQualifiedName(qualifier3, type3) -select f, f.getElementType().toString(), getIsAsync(f), getQualifiedName(qualifier1, type1), - getLocation(f.getGetEnumerator()), getQualifiedName(qualifier2, type2), - getLocation(f.getCurrent()), getQualifiedName(qualifier3, type3), getLocation(f.getMoveNext()) +from ForeachStmt f +select f, f.getElementType().toString(), getIsAsync(f), + f.getGetEnumerator().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getGetEnumerator()), f.getCurrent().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getCurrent()), f.getMoveNext().getDeclaringType().getFullyQualifiedNameDebug(), + getLocation(f.getMoveNext()) diff --git a/csharp/ql/test/library-tests/csharp9/record.ql b/csharp/ql/test/library-tests/csharp9/record.ql index a2a9a9c0786..58cf579bac6 100644 --- a/csharp/ql/test/library-tests/csharp9/record.ql +++ b/csharp/ql/test/library-tests/csharp9/record.ql @@ -7,18 +7,10 @@ query predicate records(RecordClass t, string i, RecordCloneMethod clone) { t.fromSource() } -private string getMemberName(Member m) { - exists(string qualifier, string name | - m.getDeclaringType().hasFullyQualifiedName(qualifier, name) - | - result = getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() - ) -} - query predicate members(RecordClass t, string ms, string l) { t.fromSource() and exists(Member m | t.hasMember(m) | - ms = getMemberName(m) and + ms = getFullyQualifiedNameWithTypes(m) and if m.fromSource() then l = m.getLocation().toString() else l = "no location" ) } diff --git a/csharp/ql/test/library-tests/csharp9/withExpr.ql b/csharp/ql/test/library-tests/csharp9/withExpr.ql index 6683d7c54f6..564cbe529aa 100644 --- a/csharp/ql/test/library-tests/csharp9/withExpr.ql +++ b/csharp/ql/test/library-tests/csharp9/withExpr.ql @@ -1,19 +1,11 @@ import csharp import semmle.code.csharp.commons.QualifiedName -private string getSignature(Method m) { - exists(string qualifier, string name | - m.getDeclaringType().hasFullyQualifiedName(qualifier, name) - | - result = getQualifiedName(qualifier, name) + "." + m.toStringWithTypes() - ) -} - query predicate withExpr(WithExpr with, string type, Expr expr, ObjectInitializer init, string clone) { type = with.getType().toStringWithTypes() and expr = with.getExpr() and init = with.getInitializer() and - clone = getSignature(with.getCloneMethod()) + clone = getFullyQualifiedNameWithTypes(with.getCloneMethod()) } query predicate withTarget(WithExpr with, RecordCloneMethod clone, Constructor ctor) { @@ -25,7 +17,7 @@ query predicate cloneOverrides(string b, string o) { exists(RecordCloneMethod base, RecordCloneMethod overrider | base.getDeclaringType().fromSource() and base.getAnOverrider() = overrider and - b = getSignature(base) and - o = getSignature(overrider) + b = getFullyQualifiedNameWithTypes(base) and + o = getFullyQualifiedNameWithTypes(overrider) ) } diff --git a/csharp/ql/test/library-tests/enums/Enums3.ql b/csharp/ql/test/library-tests/enums/Enums3.ql index 5cfbdc56193..b01ffb97e18 100644 --- a/csharp/ql/test/library-tests/enums/Enums3.ql +++ b/csharp/ql/test/library-tests/enums/Enums3.ql @@ -3,13 +3,11 @@ */ import csharp -import semmle.code.csharp.commons.QualifiedName -from EnumConstant c, string namespace, string name +from EnumConstant c where c.getName() = "Green" and c.getDeclaringType().hasFullyQualifiedName("Enums", "LongColor") and c.getType() = c.getDeclaringType() and - c.getValue() = "1" and - c.getDeclaringType().getBaseClass().hasFullyQualifiedName(namespace, name) -select c, getQualifiedName(namespace, name) + c.getValue() = "1" +select c, c.getDeclaringType().getBaseClass().getFullyQualifiedNameDebug() diff --git a/csharp/ql/test/library-tests/generics/Generics.ql b/csharp/ql/test/library-tests/generics/Generics.ql index 71e21a5815e..e75f1fdc908 100644 --- a/csharp/ql/test/library-tests/generics/Generics.ql +++ b/csharp/ql/test/library-tests/generics/Generics.ql @@ -268,16 +268,12 @@ query predicate test33(ConstructedMethod cm, string s1, string s2) { query predicate test34(UnboundGeneric ug, string s1, string s2) { ug.fromSource() and - exists(string qualifier, string name | - ug.hasFullyQualifiedName(qualifier, name) and s1 = getQualifiedName(qualifier, name) - ) and - getFullyQualifiedNameWithTypes(ug) = s2 + s1 = ug.getFullyQualifiedNameDebug() and + s2 = getFullyQualifiedNameWithTypes(ug) } query predicate test35(UnboundGenericMethod gm, string s1, string s2) { gm.fromSource() and - exists(string namespace, string type, string name | - gm.hasFullyQualifiedName(namespace, type, name) and s1 = getQualifiedName(namespace, type, name) - ) and - getFullyQualifiedNameWithTypes(gm) = s2 + s1 = gm.getFullyQualifiedNameDebug() and + s2 = getFullyQualifiedNameWithTypes(gm) } From 8c2455fc113f3d0ee91b5d264c96782e06a6c274 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 9 Apr 2024 10:49:30 +0000 Subject: [PATCH 481/497] Python: Disable failing integration tests These failures were likely caused by https://github.com/github/codeql/pull/16127 My guess is that they can probably be deleted altogether, but as the failures are blocking other development, I have opted to simply disable them for the time being. --- .../force-enable-library-extraction/{test.sh => disabled-test.sh} | 0 .../ignore-venv/{test.sh => disabled-test.sh} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename python/extractor/cli-integration-test/force-enable-library-extraction/{test.sh => disabled-test.sh} (100%) rename python/extractor/cli-integration-test/ignore-venv/{test.sh => disabled-test.sh} (100%) diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh b/python/extractor/cli-integration-test/force-enable-library-extraction/disabled-test.sh similarity index 100% rename from python/extractor/cli-integration-test/force-enable-library-extraction/test.sh rename to python/extractor/cli-integration-test/force-enable-library-extraction/disabled-test.sh diff --git a/python/extractor/cli-integration-test/ignore-venv/test.sh b/python/extractor/cli-integration-test/ignore-venv/disabled-test.sh similarity index 100% rename from python/extractor/cli-integration-test/ignore-venv/test.sh rename to python/extractor/cli-integration-test/ignore-venv/disabled-test.sh From acef9b71114f58f6de3a7787d7e6aecf646e7dbe Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 4 Apr 2024 15:03:00 +0200 Subject: [PATCH 482/497] Dynamic/JS: Add library for exporting models --- .../javascript/endpoints/EndpointNaming.qll | 6 +- .../frameworks/data/ModelsAsData.qll | 96 ++++++++ .../data/internal/ApiGraphModels.qll | 2 +- .../data/internal/ApiGraphModelsSpecific.qll | 20 ++ .../ModelGeneration/ModelGeneration.expected | 3 + .../ModelGeneration/ModelGeneration.ext.yml | 6 + .../ModelGeneration/ModelGeneration.ql | 17 ++ .../ModelGeneration/reexport/package.json | 4 + .../ModelGeneration/reexport/reexport.js | 10 + shared/mad/codeql/mad/dynamic/GraphExport.qll | 230 ++++++++++++++++++ 10 files changed, 392 insertions(+), 2 deletions(-) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected create mode 100644 javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml create mode 100644 javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql create mode 100644 javascript/ql/test/library-tests/ModelGeneration/reexport/package.json create mode 100644 javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js create mode 100644 shared/mad/codeql/mad/dynamic/GraphExport.qll diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index fdb2b7ab966..9e514d4c9f4 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -147,7 +147,11 @@ private predicate isPrivateAssignment(DataFlow::Node node) { ) } -private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSink()) } +/** + * Holds if `node` is the sink node corresponding to the right-hand side of a private declaration, + * like a private field (`#field`) or class member with the `private` modifier. + */ +predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSink()) } bindingset[name] private int getNameBadness(string name) { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 7fb674dfdba..fd01b071948 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -19,6 +19,7 @@ private import javascript private import internal.ApiGraphModels as Shared private import internal.ApiGraphModelsSpecific as Specific +private import semmle.javascript.endpoints.EndpointNaming as EndpointNaming import Shared::ModelInput as ModelInput import Shared::ModelOutput as ModelOutput @@ -55,3 +56,98 @@ private class TaintStepFromSummary extends TaintTracking::SharedTaintStep { summaryStepNodes(pred, succ, "taint") } } + +/** + * Specifies which parts of the API graph to export in `ModelExport`. + */ +signature module ModelExportSig { + /** + * Holds if the exported model should contain `node`, if it is publicly accessible. + * + * This ensures that all ways to access `node` will be exported in type models. + */ + predicate shouldContain(API::Node node); + + /** + * Holds if a named must be generated for `node` if it is to be included in the exported graph. + */ + default predicate mustBeNamed(API::Node node) { none() } +} + +/** + * Module for exporting type models for a given set of nodes in the API graph. + */ +module ModelExport { + private import codeql.mad.dynamic.GraphExport + + private module GraphExportConfig implements GraphExportSig { + predicate edge = Specific::apiGraphHasEdge/3; + + predicate shouldContain = S::shouldContain/1; + + predicate shouldNotContain(API::Node node) { + EndpointNaming::isPrivateLike(node) + or + node instanceof API::Use + } + + predicate mustBeNamed(API::Node node) { + node.getAValueReachingSink() instanceof DataFlow::ClassNode + or + node = API::Internal::getClassInstance(_) + or + S::mustBeNamed(node) + } + + predicate exposedName(API::Node node, string type, string path) { + node = API::moduleExport(type) and path = "" + } + + predicate suggestedName(API::Node node, string type) { + exists(string package, string name | + ( + EndpointNaming::sinkHasPrimaryName(node, package, name) and + not EndpointNaming::aliasDefinition(_, _, _, _, node) + or + EndpointNaming::aliasDefinition(_, _, package, name, node) + ) and + type = EndpointNaming::renderName(package, name) + ) + } + + bindingset[host] + predicate hasTypeSummary(API::Node host, string path) { + exists(string methodName | + functionReturnsReceiver(host.getMember(methodName).getAValueReachingSink()) and + path = "Member[" + methodName + "].ReturnValue" + ) + } + + pragma[nomagic] + private predicate functionReturnsReceiver(DataFlow::FunctionNode func) { + getAReceiverRef(func).flowsTo(func.getReturnNode()) + } + + pragma[nomagic] + private DataFlow::MethodCallNode getAReceiverCall(DataFlow::FunctionNode func) { + result = getAReceiverRef(func).getAMethodCall() + } + + pragma[nomagic] + private predicate callReturnsReceiver(DataFlow::MethodCallNode call) { + functionReturnsReceiver(call.getACallee().flow()) + } + + pragma[nomagic] + private DataFlow::SourceNode getAReceiverRef(DataFlow::FunctionNode func) { + result = func.getReceiver() + or + result = getAReceiverCall(func) and + callReturnsReceiver(result) + } + } + + private module ExportedGraph = GraphExport; + + import ExportedGraph +} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll index dd433152751..fe316217df0 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 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 664c040d57e..5b86fba8d48 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -353,3 +353,23 @@ module ModelOutputSpecific { ) } } + +/** + * Holds if the edge `pred -> succ` labelled with `path` exists in the API graph. + */ +bindingset[pred] +predicate apiGraphHasEdge(API::Node pred, string path, API::Node succ) { + exists(string name | succ = pred.getMember(name) and path = "Member[" + name + "]") + or + succ = pred.getUnknownMember() and path = "AnyMember" + or + succ = pred.getInstance() and path = "Instance" + or + succ = pred.getReturn() and path = "ReturnValue" + or + exists(int n | succ = pred.getParameter(n) | + if pred instanceof API::Use then path = "Argument[" + n + "]" else path = "Parameter[" + n + "]" + ) + or + succ = pred.getPromised() and path = "Awaited" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected new file mode 100644 index 00000000000..05753fb9cc8 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -0,0 +1,3 @@ +typeModel +| (reexport).func | reexport | Member[func] | +summaryModel diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml new file mode 100644 index 00000000000..a608ae5a493 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["upstream-lib.XYZ", "upstream-lib", "Member[x].Member[y].Member[z]"] diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql new file mode 100644 index 00000000000..74caddf1a1f --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql @@ -0,0 +1,17 @@ +private import javascript +private import semmle.javascript.endpoints.EndpointNaming as EndpointNaming +private import semmle.javascript.frameworks.data.internal.ApiGraphModels as Shared + +module ModelExportConfig implements ModelExportSig { + predicate shouldContain(API::Node node) { + node.getAValueReachingSink() instanceof DataFlow::FunctionNode + } + + predicate mustBeNamed(API::Node node) { shouldContain(node) } +} + +module Exported = ModelExport; + +query predicate typeModel = Exported::typeModel/3; + +query predicate summaryModel = Exported::summaryModel/5; diff --git a/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json b/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json new file mode 100644 index 00000000000..85258b89fa9 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/reexport/package.json @@ -0,0 +1,4 @@ +{ + "name": "reexport", + "main": "reexport.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js b/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js new file mode 100644 index 00000000000..86b43f5820a --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/reexport/reexport.js @@ -0,0 +1,10 @@ +import * as lib from "upstream-lib"; + +export { lib }; + +export const x = lib.x; +export const xy = lib.x.y; + +export function func() { + return lib; +} diff --git a/shared/mad/codeql/mad/dynamic/GraphExport.qll b/shared/mad/codeql/mad/dynamic/GraphExport.qll new file mode 100644 index 00000000000..3eeb50d099c --- /dev/null +++ b/shared/mad/codeql/mad/dynamic/GraphExport.qll @@ -0,0 +1,230 @@ +/** + * Contains predicates for converting an arbitrary graph to a set of `typeModel` rows. + */ + +/** + * Concatenates two access paths, separating them by `.` unless one of them is empty. + */ +bindingset[x, y] +string join(string x, string y) { + if x = "" or y = "" then result = x + y else result = x + "." + y +} + +signature class NodeSig { + /** + * Holds if this node is located in file `path` between line `startline`, column `startcol`, + * and line `endline`, column `endcol`. + */ + predicate hasLocationInfo(string path, int startline, int startcol, int endline, int endcol); + + /** Gets a string representation of this node. */ + string toString(); +} + +/** + * Specifies a graph to export in `GraphExport`. + */ +signature module GraphExportSig { + /** + * Holds if an edge `pred -> succ` exist with the access path `path`. + */ + bindingset[pred] + predicate edge(Node pred, string path, Node succ); + + /** + * Holds if `node` is exposed to downstream packages with the given `(type, path)` tuple. + * + * A consumer of the exported graph should be able to interpret the `(type, path)` pair + * without having access to the current codebase. + */ + predicate exposedName(Node node, string type, string path); + + /** + * Holds if `name` is a good name for `node` that should be used in case the node needs + * to be named with a type name. + * + * Should not hold for nodes that are named via `exposedName`. + */ + predicate suggestedName(Node node, string name); + + /** + * Holds if `node` must be named if it part of the exported graph. + */ + predicate mustBeNamed(Node node); + + /** + * Holds if the exported graph should contain `node`, if it is reachable from an exposed node. + * + * This ensures that all paths leading from an exposed node to `node` will be exported. + */ + predicate shouldContain(Node node); + + /** + * Holds if `host` has a method that returns `this`, and `path` is the path from `host` + * to the method followed by the appropriate `ReturnValue` token. + * + * For example, if the method is named `m` then `path` should be `Member[m].ReturnValue` + * or `Method[m].ReturnValue`. + */ + bindingset[host] + predicate hasTypeSummary(Node host, string path); + + /** + * Holds if paths going through `node` should be blocked. + * + * For example, this can be the case for functions that are public at runtime + * but intended to be private. + */ + predicate shouldNotContain(Node node); +} + +/** + * Module for exporting an arbitrary graph as models-as-data rows. + */ +module GraphExport S> { + private import S + + private Node getAnExposedNode() { + not shouldNotContain(result) and + ( + exposedName(result, _, _) + or + edge(getAnExposedNode(), _, result) + ) + } + + pragma[nomagic] + private predicate exposedEdge(Node pred, string path, Node succ) { + // Materialize this relation so we can access 'edge' without binding set on 'pred' + pred = getAnExposedNode() and + edge(pred, path, succ) + } + + private Node getARelevantNode() { + result = getAnExposedNode() and + shouldContain(result) + or + exposedEdge(result, _, getARelevantNode()) + } + + final private class FinalNode = Node; + + private class RelevantNode extends FinalNode { + RelevantNode() { this = getARelevantNode() } + } + + pragma[inline] + private RelevantNode getAPredecessor(RelevantNode node, string path) { + exposedEdge(result, path, node) + } + + private predicate nodeMustBeNamed(RelevantNode node) { + exposedName(node, _, "") + or + S::mustBeNamed(node) + or + strictcount(getAPredecessor(node, _)) > 1 + } + + /** Gets a type-name to use as a prefix, in case we need to synthesize a name. */ + private string getAPrefixTypeName(RelevantNode node) { + result = + min(string prefix | + exists(string type, string path | + exposedName(node, type, path) and + prefix = join(type, path) + ) + or + suggestedName(node, prefix) + | + prefix + ) + or + not exposedName(node, _, _) and + not suggestedName(node, _) and + result = getAPrefixTypeName(getAPredecessor(node, _)) + } + + /** + * Holds if a named type exists or will be generated for `node`. + */ + private predicate isSyntheticallyNamedNode(RelevantNode node, string prefix) { + nodeMustBeNamed(node) and + not exposedName(node, _, "") and + not suggestedName(node, _) and + prefix = min(getAPrefixTypeName(node)) + } + + /** + * Gets a synthetic type name to generate for `node`. + */ + private string getSyntheticName(RelevantNode node) { + exists(int k, string prefixTypeName | + node = + rank[k](RelevantNode n, string path, int startline, int startcol, int endline, int endcol | + isSyntheticallyNamedNode(n, prefixTypeName) and + n.hasLocationInfo(path, startline, startcol, endline, endcol) + | + // Use location information for an arbitrary ordering + n order by path, startline, startcol, endline, endcol + ) and + result = prefixTypeName + "~expr" + k + ) + } + + private string getNodeName(RelevantNode node) { + nodeMustBeNamed(node) and + ( + exposedName(node, result, "") + or + suggestedName(node, result) and + not exposedName(node, _, "") + or + result = getSyntheticName(node) + ) + } + + /** + * Holds if `(type, path)` resolves to `node` in the exported graph. + */ + predicate pathToNode(string type, string path, RelevantNode node) { + type = getNodeName(node) and + path = "" + or + exposedName(node, type, path) + or + not nodeMustBeNamed(node) and + exists(string prevPath, string step | + pathToNode(type, prevPath, getAPredecessor(node, step)) and + path = join(prevPath, step) + ) + } + + /** + * Holds if `type1, type2, path` should be emitted as a type row. + * + * That is, `(type2, path)` leads to an value belonging to `type1`. + */ + predicate typeModel(string type1, string type2, string path) { + exists(string prevPath, string step, RelevantNode node | + type1 = getNodeName(node) and + pathToNode(type2, prevPath, getAPredecessor(node, step)) and + path = join(prevPath, step) + ) and + not (type1 = type2 and path = "") + } + + /** + * Holds if `type, path, input, output, kind` should be emitted as a summary row. + * + * This is only used to emit type propagation summaries, that is, summaries of kind `type`. + */ + predicate summaryModel(string type, string path, string input, string output, string kind) { + exists(RelevantNode host | + pathToNode(type, path, host) and + hasTypeSummary(host, output) and + input = "" and + kind = "type" + ) + } +} From c55e03c588fc80fbaa040d5fc3126e1dc27ef8b1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 4 Apr 2024 15:06:19 +0200 Subject: [PATCH 483/497] Dynamic/JS: Add support for re-exporting type models --- .../frameworks/data/ModelsAsData.qll | 10 +- .../data/internal/ApiGraphModels.qll | 2 +- .../data/internal/ApiGraphModelsExport.qll | 122 ++++++++++++++++++ .../ModelGeneration/ModelGeneration.expected | 4 + .../ModelGeneration/ModelGeneration.ql | 2 + 5 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index fd01b071948..03193d0ee12 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -72,6 +72,13 @@ signature module ModelExportSig { * Holds if a named must be generated for `node` if it is to be included in the exported graph. */ default predicate mustBeNamed(API::Node node) { none() } + + /** + * Holds if the exported model should preserve all paths leading to an instance of `type`, + * including partial ones. It does not need to be closed transitively, `ModelExport` will + * extend this to include type models from which `type` can be derived. + */ + default predicate shouldContainType(string type) { none() } } /** @@ -79,6 +86,7 @@ signature module ModelExportSig { */ module ModelExport { private import codeql.mad.dynamic.GraphExport + private import internal.ApiGraphModelsExport private module GraphExportConfig implements GraphExportSig { predicate edge = Specific::apiGraphHasEdge/3; @@ -147,7 +155,7 @@ module ModelExport { } } - private module ExportedGraph = GraphExport; + private module ExportedGraph = TypeGraphExport; import ExportedGraph } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll index fe316217df0..8dea3d67bd8 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll new file mode 100644 index 00000000000..f6901128c23 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll @@ -0,0 +1,122 @@ +/** + * Contains an extension of `GraphExport` that relies on API graph specific functionality. + */ + +private import ApiGraphModels as Shared +private import codeql.mad.dynamic.GraphExport +private import ApiGraphModelsSpecific as Specific + +private module API = Specific::API; + +private import Shared + +/** + * Holds if some proper prefix of `(type, path)` evaluated to `node`, where `remainingPath` + * is bound to the suffix of `path` that was not evaluated yet. + */ +bindingset[type, path] +predicate partiallyEvaluatedModel(string type, string path, API::Node node, string remainingPath) { + exists(int n, AccessPath accessPath | + accessPath = path and + getNodeFromPath(type, accessPath, n) = node and + n > 0 and + // Note that `n < accessPath.getNumToken()` is implied by the use of strictconcat() + remainingPath = + strictconcat(int k | + k = [n .. accessPath.getNumToken() - 1] + | + accessPath.getToken(k), "." order by k + ) + ) +} + +/** + * Holds if `type` and all types leading to `type` should be re-exported. + */ +signature predicate shouldContainTypeSig(string type); + +/** + * Wrapper around `GraphExport` that also exports information about re-exported types. + * + * ### JavaScript example 1 + * For example, suppose `shouldContainType("foo")` holds, and the following is the entry point for a package `bar`: + * ```js + * // bar.js + * module.exports.xxx = require('foo'); + * ``` + * then this would generate the following type model: + * ``` + * foo; bar; Member[xxx] + * ``` + * + * ### JavaScript example 2 + * For a more complex case, suppose the following type model exists: + * ``` + * foo.XYZ; foo; Member[x].Member[y].Member[z] + * ``` + * And the package exports something that matches a prefix of the access path above: + * ```js + * module.exports.blah = require('foo').x.y; + * ``` + * This would result in the following type model: + * ``` + * foo.XYZ; bar; Member[blah].Member[z] + * ``` + * Notice that the access path `Member[blah].Member[z]` consists of an access path generated from the API + * graph, with pieces of the access path from the original type model appended to it. + */ +module TypeGraphExport S, shouldContainTypeSig/1 shouldContainType> { + /** Like `shouldContainType` but includes types that lead to `type` via type models. */ + private predicate shouldContainTypeEx(string type) { + shouldContainType(type) + or + exists(string prevType | + shouldContainType(prevType) and + Shared::typeModel(prevType, type, _) + ) + } + + private module Config implements GraphExportSig { + import S + + predicate shouldContain(API::Node node) { + S::shouldContain(node) + or + exists(string type1 | shouldContainTypeEx(type1) | + ModelOutput::getATypeNode(type1).getAValueReachableFromSource() = node.asSink() + or + exists(string type2, string path | + Shared::typeModel(type1, type2, path) and + getNodeFromPath(type2, path, _).getAValueReachableFromSource() = node.asSink() + ) + ) + } + } + + private module ExportedGraph = GraphExport; + + import ExportedGraph + + /** + * Holds if `type1, type2, path` should be emitted as a type model, that is `(type2, path)` leads to an instance of `type1`. + */ + predicate typeModel(string type1, string type2, string path) { + ExportedGraph::typeModel(type1, type2, path) + or + shouldContainTypeEx(type1) and + exists(API::Node node | + // A relevant type is exported directly + ModelOutput::getATypeNode(type1).getAValueReachableFromSource() = node.asSink() and + ExportedGraph::pathToNode(type2, path, node) + or + // Something that leads to a relevant type, but didn't finish its access path, is exported + exists(string midType, string midPath, string remainingPath, string prefix, API::Node source | + Shared::typeModel(type1, midType, midPath) and + partiallyEvaluatedModel(midType, midPath, source, remainingPath) and + source.getAValueReachableFromSource() = node.asSink() and + ExportedGraph::pathToNode(type2, prefix, node) and + path = join(prefix, remainingPath) + ) + ) + } +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 05753fb9cc8..e5df99eb34c 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -1,3 +1,7 @@ typeModel | (reexport).func | reexport | Member[func] | +| upstream-lib | (reexport).func | ReturnValue | +| upstream-lib | reexport | Member[lib] | +| upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | +| upstream-lib.XYZ | reexport | Member[xy].Member[z] | summaryModel diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql index 74caddf1a1f..2d5ac3eb423 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ql @@ -8,6 +8,8 @@ module ModelExportConfig implements ModelExportSig { } predicate mustBeNamed(API::Node node) { shouldContain(node) } + + predicate shouldContainType(string type) { Shared::isRelevantType(type) } } module Exported = ModelExport; From 348c95ebe1e03379f7fc862e19d6258e001a8fb4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 11:30:35 +0200 Subject: [PATCH 484/497] JS: Add a test case with fluent flow --- .../ModelGeneration/ModelGeneration.expected | 12 ++++++++++++ .../ModelGeneration/return-this/package.json | 4 ++++ .../ModelGeneration/return-this/return-this.js | 17 +++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/return-this/package.json create mode 100644 javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index e5df99eb34c..53d49d69d90 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -1,7 +1,19 @@ typeModel | (reexport).func | reexport | Member[func] | +| (return-this).FluentInterface | return-this | Member[FluentInterface] | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface | Instance | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface.prototype.bar | ReturnValue | +| (return-this).FluentInterface.prototype | (return-this).FluentInterface.prototype.baz | ReturnValue | +| (return-this).FluentInterface.prototype.bar | (return-this).FluentInterface.prototype | Member[bar] | +| (return-this).FluentInterface.prototype.baz | (return-this).FluentInterface.prototype | Member[baz] | +| (return-this).FluentInterface.prototype.foo | (return-this).FluentInterface.prototype | Member[foo] | +| (return-this).FluentInterface.prototype.notFluent | (return-this).FluentInterface.prototype | Member[notFluent] | +| (return-this).FluentInterface.prototype.notFluent2 | (return-this).FluentInterface.prototype | Member[notFluent2] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | | upstream-lib.XYZ | reexport | Member[xy].Member[z] | summaryModel +| (return-this).FluentInterface.prototype | | | Member[bar].ReturnValue | type | +| (return-this).FluentInterface.prototype | | | Member[baz].ReturnValue | type | +| (return-this).FluentInterface.prototype | | | Member[foo].ReturnValue | type | diff --git a/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json b/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json new file mode 100644 index 00000000000..34b1e65149f --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/return-this/package.json @@ -0,0 +1,4 @@ +{ + "name": "return-this", + "main": "return-this.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js b/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js new file mode 100644 index 00000000000..6ad6004511a --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/return-this/return-this.js @@ -0,0 +1,17 @@ +export class FluentInterface { + foo() { + return this; + } + bar() { + return this.foo(); + } + baz() { + return this.foo().bar().bar().foo(); + } + notFluent() { + this.foo(); + } + notFluent2() { + return this.notFluent2(); + } +} From 946f0b4dc47104dab06cefffa46ab1850d837d8a Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 11:34:39 +0200 Subject: [PATCH 485/497] JS: Add test for class with aliases --- .../ModelGeneration/ModelGeneration.expected | 8 ++++++++ .../library-tests/ModelGeneration/aliases/aliases.js | 9 +++++++++ .../library-tests/ModelGeneration/aliases/package.json | 4 ++++ 3 files changed, 21 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js create mode 100644 javascript/ql/test/library-tests/ModelGeneration/aliases/package.json diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 53d49d69d90..3aa3019fd02 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -1,4 +1,11 @@ typeModel +| (aliases).Alias1 | aliases | Member[Alias1] | +| (aliases).Alias1 | aliases | Member[Alias2] | +| (aliases).Alias1 | aliases | Member[Alias3].Member[x] | +| (aliases).Alias1 | aliases | Member[Alias4].Member[x].Member[x] | +| (aliases).Alias1 | aliases | Member[AliasedClass] | +| (aliases).Alias1.prototype | (aliases).Alias1 | Instance | +| (aliases).Alias1.prototype.foo | (aliases).Alias1.prototype | Member[foo] | | (reexport).func | reexport | Member[func] | | (return-this).FluentInterface | return-this | Member[FluentInterface] | | (return-this).FluentInterface.prototype | (return-this).FluentInterface | Instance | @@ -14,6 +21,7 @@ typeModel | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | | upstream-lib.XYZ | reexport | Member[xy].Member[z] | summaryModel +| (aliases).Alias1.prototype | | | Member[foo].ReturnValue | type | | (return-this).FluentInterface.prototype | | | Member[bar].ReturnValue | type | | (return-this).FluentInterface.prototype | | | Member[baz].ReturnValue | type | | (return-this).FluentInterface.prototype | | | Member[foo].ReturnValue | type | diff --git a/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js b/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js new file mode 100644 index 00000000000..a9874a88744 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/aliases/aliases.js @@ -0,0 +1,9 @@ +export class AliasedClass { + foo() { return this; } +} + +export const Alias1 = AliasedClass; +export const Alias2 = AliasedClass; + +export const Alias3 = { x: AliasedClass }; +export const Alias4 = { x: Alias3 }; diff --git a/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json b/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json new file mode 100644 index 00000000000..2356a50733f --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/aliases/package.json @@ -0,0 +1,4 @@ +{ + "name": "aliases", + "main": "aliases.js" +} From f4e05cc621c28b46740538e8468463db37ced885 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 11:39:38 +0200 Subject: [PATCH 486/497] JS: Add tests with semi-internal class problem --- .../ModelGeneration/ModelGeneration.expected | 11 ++++++++++ .../semi-internal-class/package.json | 4 ++++ .../semi-internal-class.js | 21 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json create mode 100644 javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 3aa3019fd02..394f7e10600 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -16,6 +16,17 @@ typeModel | (return-this).FluentInterface.prototype.foo | (return-this).FluentInterface.prototype | Member[foo] | | (return-this).FluentInterface.prototype.notFluent | (return-this).FluentInterface.prototype | Member[notFluent] | | (return-this).FluentInterface.prototype.notFluent2 | (return-this).FluentInterface.prototype | Member[notFluent2] | +| (semi-internal-class).PublicClass | semi-internal-class | Member[PublicClass] | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).PublicClass | Instance | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).SemiInternalClass.prototype.method | ReturnValue | +| (semi-internal-class).PublicClass.prototype | (semi-internal-class).getAnonymous~expr2 | ReturnValue | +| (semi-internal-class).PublicClass.prototype.publicMethod | (semi-internal-class).PublicClass.prototype | Member[publicMethod] | +| (semi-internal-class).SemiInternalClass.prototype | (semi-internal-class).get | ReturnValue | +| (semi-internal-class).SemiInternalClass.prototype.method | (semi-internal-class).SemiInternalClass.prototype | Member[method] | +| (semi-internal-class).get | semi-internal-class | Member[get] | +| (semi-internal-class).getAnonymous | semi-internal-class | Member[getAnonymous] | +| (semi-internal-class).getAnonymous~expr1 | (semi-internal-class).getAnonymous | ReturnValue | +| (semi-internal-class).getAnonymous~expr2 | (semi-internal-class).getAnonymous~expr1 | Member[method] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | diff --git a/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json new file mode 100644 index 00000000000..18a689163b5 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/package.json @@ -0,0 +1,4 @@ +{ + "name": "semi-internal-class", + "main": "semi-internal-class.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js new file mode 100644 index 00000000000..962f1933032 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/semi-internal-class/semi-internal-class.js @@ -0,0 +1,21 @@ +export class PublicClass { + publicMethod() {} +} + +class SemiInternalClass { + method() { + return new PublicClass(); + } +} + +export function get() { + return new SemiInternalClass(); +} + +export function getAnonymous() { + return new (class { + method() { + return new PublicClass(); + } + }); +} From ab3c03d2d6458721bd93f378c81df58bef485204 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 11:48:18 +0200 Subject: [PATCH 487/497] JS: Add test where root export object is a function --- .../ModelGeneration/ModelGeneration.expected | 4 ++++ .../ModelGeneration/root-function/package.json | 4 ++++ .../ModelGeneration/root-function/root-function.js | 9 +++++++++ 3 files changed, 17 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/root-function/package.json create mode 100644 javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 394f7e10600..182f3f608b7 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -16,6 +16,10 @@ typeModel | (return-this).FluentInterface.prototype.foo | (return-this).FluentInterface.prototype | Member[foo] | | (return-this).FluentInterface.prototype.notFluent | (return-this).FluentInterface.prototype | Member[notFluent] | | (return-this).FluentInterface.prototype.notFluent2 | (return-this).FluentInterface.prototype | Member[notFluent2] | +| (root-function).PublicClass | root-function | Member[PublicClass] | +| (root-function).PublicClass.prototype | (root-function).PublicClass | Instance | +| (root-function).PublicClass.prototype | root-function | ReturnValue | +| (root-function).PublicClass.prototype.method | (root-function).PublicClass.prototype | Member[method] | | (semi-internal-class).PublicClass | semi-internal-class | Member[PublicClass] | | (semi-internal-class).PublicClass.prototype | (semi-internal-class).PublicClass | Instance | | (semi-internal-class).PublicClass.prototype | (semi-internal-class).SemiInternalClass.prototype.method | ReturnValue | diff --git a/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json b/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json new file mode 100644 index 00000000000..46b6d4e2bda --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/root-function/package.json @@ -0,0 +1,4 @@ +{ + "name": "root-function", + "main": "root-function.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js b/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js new file mode 100644 index 00000000000..0d33f553681 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/root-function/root-function.js @@ -0,0 +1,9 @@ +class C { + method() {} +} + +module.exports = function() { + return new C(); +} + +module.exports.PublicClass = C; From 3022c59654ca457ac887b3e92a7d7dd5739b8762 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 14:26:14 +0200 Subject: [PATCH 488/497] JS: Add access path alias test --- .../ModelGeneration/ModelGeneration.expected | 3 +++ .../long-access-path/long-access-path.js | 11 +++++++++++ .../ModelGeneration/long-access-path/package.json | 4 ++++ 3 files changed, 18 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js create mode 100644 javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 182f3f608b7..74712e39c34 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -6,6 +6,9 @@ typeModel | (aliases).Alias1 | aliases | Member[AliasedClass] | | (aliases).Alias1.prototype | (aliases).Alias1 | Instance | | (aliases).Alias1.prototype.foo | (aliases).Alias1.prototype | Member[foo] | +| (long-access-path).a.shortcut.d | long-access-path | Member[a].Member[b].Member[c].Member[d] | +| (long-access-path).a.shortcut.d | long-access-path | Member[a].Member[shortcut].Member[d] | +| (long-access-path).a.shortcut.d.e | (long-access-path).a.shortcut.d | Member[e] | | (reexport).func | reexport | Member[func] | | (return-this).FluentInterface | return-this | Member[FluentInterface] | | (return-this).FluentInterface.prototype | (return-this).FluentInterface | Instance | diff --git a/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js new file mode 100644 index 00000000000..e596ca26ea3 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/long-access-path.js @@ -0,0 +1,11 @@ +export const a = { + b: { + c: { + d: { + e: function() {} + } + } + } +}; + +a.shortcut = a.b.c; diff --git a/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json new file mode 100644 index 00000000000..7b45f4d3899 --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/long-access-path/package.json @@ -0,0 +1,4 @@ +{ + "name": "long-access-path", + "main": "long-access-path.js" +} From ef7767b6cd698f08e46af862706b89984fb938e6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 14:26:27 +0200 Subject: [PATCH 489/497] JS: Add partial test for subclassing --- .../ModelGeneration/ModelGeneration.expected | 9 +++++++++ .../ModelGeneration/subclass/package.json | 4 ++++ .../ModelGeneration/subclass/subclass.js | 11 +++++++++++ 3 files changed, 24 insertions(+) create mode 100644 javascript/ql/test/library-tests/ModelGeneration/subclass/package.json create mode 100644 javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 74712e39c34..b39ed545436 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -34,6 +34,15 @@ typeModel | (semi-internal-class).getAnonymous | semi-internal-class | Member[getAnonymous] | | (semi-internal-class).getAnonymous~expr1 | (semi-internal-class).getAnonymous | ReturnValue | | (semi-internal-class).getAnonymous~expr2 | (semi-internal-class).getAnonymous~expr1 | Member[method] | +| (subclass).A | subclass | Member[A] | +| (subclass).A.prototype | (subclass).A | Instance | +| (subclass).A.prototype.a | (subclass).A.prototype | Member[a] | +| (subclass).B | subclass | Member[B] | +| (subclass).B.prototype | (subclass).B | Instance | +| (subclass).B.prototype.b | (subclass).B.prototype | Member[b] | +| (subclass).C | subclass | Member[C] | +| (subclass).C.prototype | (subclass).C | Instance | +| (subclass).C.prototype.c | (subclass).C.prototype | Member[c] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json b/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json new file mode 100644 index 00000000000..0764886a0db --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/package.json @@ -0,0 +1,4 @@ +{ + "name": "subclass", + "main": "subclass.js" +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js new file mode 100644 index 00000000000..c48e21798fb --- /dev/null +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -0,0 +1,11 @@ +export class A { + a() {} +} + +export class B { + b() {} +} + +export class C { + c() {} +} From 9313564e64d57220870c01eb29c62a7ffa9f34a1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 15:05:10 +0200 Subject: [PATCH 490/497] JS: Add subclassing test and fix lack of subclassing handling --- .../frameworks/data/internal/ApiGraphModelsSpecific.qll | 6 ++++++ .../library-tests/ModelGeneration/ModelGeneration.expected | 2 ++ .../test/library-tests/ModelGeneration/subclass/subclass.js | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) 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 5b86fba8d48..3c3c3673e2b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -372,4 +372,10 @@ predicate apiGraphHasEdge(API::Node pred, string path, API::Node succ) { ) or succ = pred.getPromised() and path = "Awaited" + or + exists(DataFlow::ClassNode cls | + pred = API::Internal::getClassInstance(cls.getADirectSubClass()) and + succ = API::Internal::getClassInstance(cls) and + path = "" + ) } diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index b39ed545436..e383335372e 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -36,9 +36,11 @@ typeModel | (semi-internal-class).getAnonymous~expr2 | (semi-internal-class).getAnonymous~expr1 | Member[method] | | (subclass).A | subclass | Member[A] | | (subclass).A.prototype | (subclass).A | Instance | +| (subclass).A.prototype | (subclass).B.prototype | | | (subclass).A.prototype.a | (subclass).A.prototype | Member[a] | | (subclass).B | subclass | Member[B] | | (subclass).B.prototype | (subclass).B | Instance | +| (subclass).B.prototype | (subclass).C.prototype | | | (subclass).B.prototype.b | (subclass).B.prototype | Member[b] | | (subclass).C | subclass | Member[C] | | (subclass).C.prototype | (subclass).C | Instance | diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js index c48e21798fb..a219be46ea0 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -2,10 +2,10 @@ export class A { a() {} } -export class B { +export class B extends A { b() {} } -export class C { +export class C extends B { c() {} } From f2ea88aa4ce25dbe073b908621601455aae716b3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 15:11:37 +0200 Subject: [PATCH 491/497] JS: Add test showing missing re-export of base class relationship --- .../ModelGeneration/ModelGeneration.expected | 3 +++ .../library-tests/ModelGeneration/ModelGeneration.ext.yml | 1 + .../library-tests/ModelGeneration/subclass/subclass.js | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index e383335372e..3613cce6acc 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -45,6 +45,9 @@ typeModel | (subclass).C | subclass | Member[C] | | (subclass).C.prototype | (subclass).C | Instance | | (subclass).C.prototype.c | (subclass).C.prototype | Member[c] | +| (subclass).D | subclass | Member[D] | +| (subclass).D.prototype | (subclass).D | Instance | +| (subclass).D.prototype.d | (subclass).D.prototype | Member[d] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml index a608ae5a493..22113126a9c 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.ext.yml @@ -4,3 +4,4 @@ extensions: extensible: typeModel data: - ["upstream-lib.XYZ", "upstream-lib", "Member[x].Member[y].Member[z]"] + - ["upstream-lib.Type", "upstream-lib", "Member[Type].Instance"] diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js index a219be46ea0..c119a5c71ad 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -9,3 +9,11 @@ export class B extends A { export class C extends B { c() {} } + +import * as upstream from "upstream-lib"; + +// TODO: needs to emit type model: [upstream.Type; (subclass).D.prototype; ""] +// The getAValueReachableFromSource() logic does not handle the base class -> instance step +export class D extends upstream.Type { + d() {} +} From 56ebe6c7273facd69a229dae9d4ca686ad9f70f3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 16:01:03 +0200 Subject: [PATCH 492/497] JS: More re-export logic to handle subclass export --- .../data/internal/ApiGraphModelsExport.qll | 4 +-- .../data/internal/ApiGraphModelsSpecific.qll | 25 +++++++++++++++++++ .../ModelGeneration/ModelGeneration.expected | 1 + .../ModelGeneration/subclass/subclass.js | 2 -- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll index f6901128c23..ca4e470fddb 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll @@ -106,14 +106,14 @@ module TypeGraphExport S, shouldContainTypeSig/1 shoul shouldContainTypeEx(type1) and exists(API::Node node | // A relevant type is exported directly - ModelOutput::getATypeNode(type1).getAValueReachableFromSource() = node.asSink() and + Specific::sourceFlowsToSink(ModelOutput::getATypeNode(type1), node) and ExportedGraph::pathToNode(type2, path, node) or // Something that leads to a relevant type, but didn't finish its access path, is exported exists(string midType, string midPath, string remainingPath, string prefix, API::Node source | Shared::typeModel(type1, midType, midPath) and partiallyEvaluatedModel(midType, midPath, source, remainingPath) and - source.getAValueReachableFromSource() = node.asSink() and + Specific::sourceFlowsToSink(source, node) and ExportedGraph::pathToNode(type2, prefix, node) and path = join(prefix, remainingPath) ) 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 3c3c3673e2b..a599af743ae 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -379,3 +379,28 @@ predicate apiGraphHasEdge(API::Node pred, string path, API::Node succ) { path = "" ) } + +/** + * Holds if the value of `source` is exposed at `sink`. + */ +bindingset[source] +predicate sourceFlowsToSink(API::Node source, API::Node sink) { + source.getAValueReachableFromSource() = sink.asSink() + or + // Handle the case of an upstream class being the base class of an exposed own class + // + // class Foo extends external.BaseClass {} + // + // Here we want to ensure that `Instance(Foo)` is seen as subtype of `Instance(external.BaseClass)`. + // + // Although we have a dedicated sink node for `Instance(Foo)` we don't have dedicate source node for `Instance(external.BaseClass)`. + // + // However, there is always an `Instance` edge from the base class expression (`external.BaseClass`) + // to the receiver node in subclass constructor (the implicit constructor of `Foo`), which always exists. + // So we use the constructor receiver as the representative for `Instance(external.BaseClass)`. + // (This will get simplified when migrating to Ruby-style API graphs, as both sides will have explicit API nodes). + exists(DataFlow::ClassNode cls | + source.asSource() = cls.getConstructor().getReceiver() and + sink = API::Internal::getClassInstance(cls) + ) +} diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index 3613cce6acc..c9ce52281ac 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -50,6 +50,7 @@ typeModel | (subclass).D.prototype.d | (subclass).D.prototype | Member[d] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | +| upstream-lib.Type | (subclass).D.prototype | | | upstream-lib.XYZ | reexport | Member[x].Member[y].Member[z] | | upstream-lib.XYZ | reexport | Member[xy].Member[z] | summaryModel diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js index c119a5c71ad..17c975a3d2a 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -12,8 +12,6 @@ export class C extends B { import * as upstream from "upstream-lib"; -// TODO: needs to emit type model: [upstream.Type; (subclass).D.prototype; ""] -// The getAValueReachableFromSource() logic does not handle the base class -> instance step export class D extends upstream.Type { d() {} } From 29a61458e00cb85910179ea433f90c253710baf7 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 16:08:57 +0200 Subject: [PATCH 493/497] JS: Add test case showing problem with chains going through internal classes --- .../ModelGeneration/ModelGeneration.expected | 3 +++ .../library-tests/ModelGeneration/subclass/subclass.js | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index c9ce52281ac..e3883154c34 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -48,6 +48,9 @@ typeModel | (subclass).D | subclass | Member[D] | | (subclass).D.prototype | (subclass).D | Instance | | (subclass).D.prototype.d | (subclass).D.prototype | Member[d] | +| (subclass).ExposedMidSubClass | subclass | Member[ExposedMidSubClass] | +| (subclass).ExposedMidSubClass.prototype | (subclass).ExposedMidSubClass | Instance | +| (subclass).ExposedMidSubClass.prototype.m | (subclass).ExposedMidSubClass.prototype | Member[m] | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.Type | (subclass).D.prototype | | diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js index 17c975a3d2a..5ebab4f5fb2 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -15,3 +15,11 @@ import * as upstream from "upstream-lib"; export class D extends upstream.Type { d() {} } + +// Test case where subclass chain goes through an internal class +// TODO: we miss the subclass chain between ExposedMidSubClass and A +class InternalMidClass extends A {} + +export class ExposedMidSubClass extends InternalMidClass { + m() {} +} From 81b96a804173627fda8b1315d60a5973f69dce34 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 5 Apr 2024 16:18:47 +0200 Subject: [PATCH 494/497] JS: Ensure MkClassInstance exists for base classes --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 20 +++++++++++-------- .../ModelGeneration/ModelGeneration.expected | 2 ++ .../ModelGeneration/subclass/subclass.js | 1 - 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 27c1632358e..252e5a4d9f8 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -696,14 +696,7 @@ module API { or any(Type t).hasUnderlyingType(m, _) } or - MkClassInstance(DataFlow::ClassNode cls) { - hasSemantics(cls) and - ( - cls = trackDefNode(_) - or - cls.getAnInstanceReference() = trackDefNode(_) - ) - } 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. */ @@ -716,6 +709,17 @@ module API { trackUseNode(src, true, bound, "").flowsTo(nd.getCalleeNode()) } + private predicate needsDefNode(DataFlow::ClassNode cls) { + hasSemantics(cls) and + ( + cls = trackDefNode(_) + or + cls.getAnInstanceReference() = trackDefNode(_) + or + needsDefNode(cls.getADirectSubClass()) + ) + } + class TDef = MkModuleDef or TNonModuleDef; class TNonModuleDef = MkModuleExport or MkClassInstance or MkDef or MkSyntheticCallbackArg; diff --git a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected index e3883154c34..e6c93a1a0e8 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected +++ b/javascript/ql/test/library-tests/ModelGeneration/ModelGeneration.expected @@ -37,6 +37,7 @@ typeModel | (subclass).A | subclass | Member[A] | | (subclass).A.prototype | (subclass).A | Instance | | (subclass).A.prototype | (subclass).B.prototype | | +| (subclass).A.prototype | (subclass).ExposedMidSubClass.prototype~expr1 | | | (subclass).A.prototype.a | (subclass).A.prototype | Member[a] | | (subclass).B | subclass | Member[B] | | (subclass).B.prototype | (subclass).B | Instance | @@ -51,6 +52,7 @@ typeModel | (subclass).ExposedMidSubClass | subclass | Member[ExposedMidSubClass] | | (subclass).ExposedMidSubClass.prototype | (subclass).ExposedMidSubClass | Instance | | (subclass).ExposedMidSubClass.prototype.m | (subclass).ExposedMidSubClass.prototype | Member[m] | +| (subclass).ExposedMidSubClass.prototype~expr1 | (subclass).ExposedMidSubClass.prototype | | | upstream-lib | (reexport).func | ReturnValue | | upstream-lib | reexport | Member[lib] | | upstream-lib.Type | (subclass).D.prototype | | diff --git a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js index 5ebab4f5fb2..6cbfbabad0e 100644 --- a/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js +++ b/javascript/ql/test/library-tests/ModelGeneration/subclass/subclass.js @@ -17,7 +17,6 @@ export class D extends upstream.Type { } // Test case where subclass chain goes through an internal class -// TODO: we miss the subclass chain between ExposedMidSubClass and A class InternalMidClass extends A {} export class ExposedMidSubClass extends InternalMidClass { From 8cb80d60141932302c51fa3d0e835e031b1251e8 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 8 Apr 2024 11:36:49 +0200 Subject: [PATCH 495/497] JS: Switch from hasLocationInfo to Location --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 15 ++++++++--- .../frameworks/data/ModelsAsData.qll | 2 +- .../data/internal/ApiGraphModelsExport.qll | 8 +++--- .../data/internal/ApiGraphModelsSpecific.qll | 2 ++ shared/mad/codeql/mad/dynamic/GraphExport.qll | 26 +++++++++++-------- shared/mad/qlpack.yml | 3 ++- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 252e5a4d9f8..ded107e7b19 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -501,16 +501,25 @@ module API { } /** + * Gets the location of this API node, if it corresponds to a program element with a source location. + */ + final Location getLocation() { result = this.getInducingNode().getLocation() } + + /** + * DEPRECATED: Use `getLocation().hasLocationInfo()` instead. + * * Holds if this node is located in file `path` between line `startline`, column `startcol`, * and line `endline`, column `endcol`. * * For nodes that do not have a meaningful location, `path` is the empty string and all other * parameters are zero. */ - predicate hasLocationInfo(string path, int startline, int startcol, int endline, int endcol) { - this.getInducingNode().hasLocationInfo(path, startline, startcol, endline, endcol) + deprecated predicate hasLocationInfo( + string path, int startline, int startcol, int endline, int endcol + ) { + this.getLocation().hasLocationInfo(path, startline, startcol, endline, endcol) or - not exists(this.getInducingNode()) and + not exists(this.getLocation()) and path = "" and startline = 0 and startcol = 0 and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 03193d0ee12..a109d2b4ead 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -88,7 +88,7 @@ module ModelExport { private import codeql.mad.dynamic.GraphExport private import internal.ApiGraphModelsExport - private module GraphExportConfig implements GraphExportSig { + private module GraphExportConfig implements GraphExportSig { predicate edge = Specific::apiGraphHasEdge/3; predicate shouldContain = S::shouldContain/1; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll index ca4e470fddb..477c0a5d267 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExport.qll @@ -65,7 +65,9 @@ signature predicate shouldContainTypeSig(string type); * Notice that the access path `Member[blah].Member[z]` consists of an access path generated from the API * graph, with pieces of the access path from the original type model appended to it. */ -module TypeGraphExport S, shouldContainTypeSig/1 shouldContainType> { +module TypeGraphExport< + GraphExportSig S, shouldContainTypeSig/1 shouldContainType> +{ /** Like `shouldContainType` but includes types that lead to `type` via type models. */ private predicate shouldContainTypeEx(string type) { shouldContainType(type) @@ -76,7 +78,7 @@ module TypeGraphExport S, shouldContainTypeSig/1 shoul ) } - private module Config implements GraphExportSig { + private module Config implements GraphExportSig { import S predicate shouldContain(API::Node node) { @@ -93,7 +95,7 @@ module TypeGraphExport S, shouldContainTypeSig/1 shoul } } - private module ExportedGraph = GraphExport; + private module ExportedGraph = GraphExport; import ExportedGraph 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 a599af743ae..8f8f06225ea 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -27,6 +27,8 @@ module API = JS::API; import JS::DataFlow as DataFlow +class Location = JS::Location; + /** * Holds if `rawType` represents the JavaScript type `qualifiedName` from the given NPM `package`. * diff --git a/shared/mad/codeql/mad/dynamic/GraphExport.qll b/shared/mad/codeql/mad/dynamic/GraphExport.qll index 3eeb50d099c..87f78278d51 100644 --- a/shared/mad/codeql/mad/dynamic/GraphExport.qll +++ b/shared/mad/codeql/mad/dynamic/GraphExport.qll @@ -2,6 +2,8 @@ * Contains predicates for converting an arbitrary graph to a set of `typeModel` rows. */ +private import codeql.util.Location + /** * Concatenates two access paths, separating them by `.` unless one of them is empty. */ @@ -10,21 +12,20 @@ string join(string x, string y) { if x = "" or y = "" then result = x + y else result = x + "." + y } -signature class NodeSig { - /** - * Holds if this node is located in file `path` between line `startline`, column `startcol`, - * and line `endline`, column `endcol`. - */ - predicate hasLocationInfo(string path, int startline, int startcol, int endline, int endcol); +private module WithLocation { + signature class NodeSig { + /** Gets the location of this node if it has one. */ + Location getLocation(); - /** Gets a string representation of this node. */ - string toString(); + /** Gets a string representation of this node. */ + string toString(); + } } /** * Specifies a graph to export in `GraphExport`. */ -signature module GraphExportSig { +signature module GraphExportSig::NodeSig Node> { /** * Holds if an edge `pred -> succ` exist with the access path `path`. */ @@ -81,7 +82,9 @@ signature module GraphExportSig { /** * Module for exporting an arbitrary graph as models-as-data rows. */ -module GraphExport S> { +module GraphExport< + LocationSig Location, WithLocation::NodeSig Node, GraphExportSig S> +{ private import S private Node getAnExposedNode() { @@ -163,9 +166,10 @@ module GraphExport S> { node = rank[k](RelevantNode n, string path, int startline, int startcol, int endline, int endcol | isSyntheticallyNamedNode(n, prefixTypeName) and - n.hasLocationInfo(path, startline, startcol, endline, endcol) + n.getLocation().hasLocationInfo(path, startline, startcol, endline, endcol) | // Use location information for an arbitrary ordering + // TODO: improve support for nodes without a location, currently they can cause FNs n order by path, startline, startcol, endline, endcol ) and result = prefixTypeName + "~expr" + k diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 97c5f74aead..1bdf6602e3d 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -2,5 +2,6 @@ name: codeql/mad version: 0.2.14-dev groups: shared library: true -dependencies: null +dependencies: + codeql/util: ${workspace} warnOnImplicitThis: true From 82101434fd5fd78e171a11099e90ce767ab97797 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 8 Apr 2024 15:02:24 +0200 Subject: [PATCH 496/497] Dynamic: Add hasPrettyName() --- shared/mad/codeql/mad/dynamic/GraphExport.qll | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/shared/mad/codeql/mad/dynamic/GraphExport.qll b/shared/mad/codeql/mad/dynamic/GraphExport.qll index 87f78278d51..adcfcd747ed 100644 --- a/shared/mad/codeql/mad/dynamic/GraphExport.qll +++ b/shared/mad/codeql/mad/dynamic/GraphExport.qll @@ -121,6 +121,12 @@ module GraphExport< exposedEdge(result, path, node) } + private predicate hasPrettyName(RelevantNode node) { + exposedName(node, _, "") + or + suggestedName(node, _) + } + private predicate nodeMustBeNamed(RelevantNode node) { exposedName(node, _, "") or @@ -143,8 +149,7 @@ module GraphExport< prefix ) or - not exposedName(node, _, _) and - not suggestedName(node, _) and + not hasPrettyName(node) and result = getAPrefixTypeName(getAPredecessor(node, _)) } @@ -153,8 +158,7 @@ module GraphExport< */ private predicate isSyntheticallyNamedNode(RelevantNode node, string prefix) { nodeMustBeNamed(node) and - not exposedName(node, _, "") and - not suggestedName(node, _) and + not hasPrettyName(node) and prefix = min(getAPrefixTypeName(node)) } From f5355cfa98cae4e7401d3de03377b1101dba224f Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 9 Apr 2024 14:37:20 +0200 Subject: [PATCH 497/497] Dynamic: Sync ApiGraphModels.qll --- .../semmle/python/frameworks/data/internal/ApiGraphModels.qll | 4 ++-- .../codeql/ruby/frameworks/data/internal/ApiGraphModels.qll | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll index dd433152751..8dea3d67bd8 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 and diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll index dd433152751..8dea3d67bd8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll @@ -267,7 +267,7 @@ private predicate summaryModel(string type, string path, string input, string ou } /** Holds if a type model exists for the given parameters. */ -private predicate typeModel(string type1, string type2, string path) { +predicate typeModel(string type1, string type2, string path) { exists(string row | typeModel(row) and row.splitAt(";", 0) = type1 and @@ -435,7 +435,7 @@ private API::Node getNodeFromType(string type) { * Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple. */ pragma[nomagic] -private API::Node getNodeFromPath(string type, AccessPath path, int n) { +API::Node getNodeFromPath(string type, AccessPath path, int n) { isRelevantFullPath(type, path) and ( n = 0 and